@fest-lib/style-lib 0.1.4 → 0.1.5

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 (2) hide show
  1. package/dist/style-lib.js +849 -894
  2. package/package.json +1 -1
package/dist/style-lib.js CHANGED
@@ -1,7 +1,6 @@
1
- import { $avoidTrigger as or, $getValue as te, $set as Oe, camelToKebab as le, deref as $, getOrInsertComputed as ir, handleListeners as Xe, hasValue as qe, isNotEqual as Je, isVal as sr, isValueUnit as ar, toRef as N, tryStringAsNumber as kt } from "@fest-lib/core";
2
- import { DoubleWeakMap as Ct, addToCallChain as lr, affected as cr } from "@fest-lib/object";
3
- import { handleAttribute as ur, handleProperty as fr, observeAttribute as dr } from "@fest-lib/dom";
4
- var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap", () => /* @__PURE__ */ new WeakMap()), _ = b("dom.ts@cacheMap", () => /* @__PURE__ */ new Map()), H = b("dom.ts@cacheContentMap", () => /* @__PURE__ */ new Map()), de = b("dom.ts@cacheBlobContentMap", () => /* @__PURE__ */ new WeakMap()), et = b("dom.ts@adoptedSelectorMap", () => /* @__PURE__ */ new Map()), tt = b("dom.ts@adoptedShadowSelectorMap", () => /* @__PURE__ */ new WeakMap()), rt = b("dom.ts@adoptedLayerMap", () => /* @__PURE__ */ new Map()), pe = b("dom.ts@adoptedShadowLayerMap", () => /* @__PURE__ */ new WeakMap()), A = b("dom.ts@adoptedMap", () => /* @__PURE__ */ new Map()), B = b("dom.ts@adoptedBlobMap", () => /* @__PURE__ */ new WeakMap()), F = b("dom.ts@adoptedAppliedText", () => /* @__PURE__ */ new WeakMap()), xt = b("dom.ts@adoptedFilled", () => /* @__PURE__ */ new WeakSet()), eo = b("dom.ts@layerCounter", () => 0), Et = b("dom.ts@styleTreeHooks", () => /* @__PURE__ */ new Set()), ge = b("dom.ts@styleTreeObserved", () => /* @__PURE__ */ new WeakSet()), pr = b("dom.ts@styleTreeRoots", () => /* @__PURE__ */ new Set()), T = b("style-lib@bakedStyle", () => /* @__PURE__ */ new WeakMap()), U = b("style-lib@bakedLive", () => /* @__PURE__ */ new Set()), L = b("style-lib@bakedCache", () => /* @__PURE__ */ new Map()), $e = b("style-lib@rebakeBatch", () => /* @__PURE__ */ new Set()), Z = b("style-lib@bakedFollowers", () => /* @__PURE__ */ new WeakMap()), Ie = b("lur.e@adoptedStyleSheetsCache", () => /* @__PURE__ */ new WeakMap()), hr = b("lur.e@styleCache", () => /* @__PURE__ */ new Map()), yr = b("lur.e@styleElementCache", () => /* @__PURE__ */ new WeakMap()), we = b("style-lib@styleFlushPending", () => /* @__PURE__ */ new WeakSet()), nt = b("style-lib@registeredProperties", () => /* @__PURE__ */ new Set()), mr = [
1
+ import { $avoidTrigger as Qt, $getValue as Ye, camelToKebab as pe, deref as Ze, getOrInsertComputed as Xt, hasValue as Ve, isVal as Jt, isValueUnit as er, toRef as Ge, tryStringAsNumber as vt } from "@fest-lib/core";
2
+ import { addToCallChain as tr, affected as rr } from "@fest-lib/object";
3
+ var g = (e, t) => globalThis[Symbol.for(e)] ??= t(), q = g("dom.ts@blobURLMap", () => /* @__PURE__ */ new WeakMap()), I = g("dom.ts@cacheMap", () => /* @__PURE__ */ new Map()), z = g("dom.ts@cacheContentMap", () => /* @__PURE__ */ new Map()), le = g("dom.ts@cacheBlobContentMap", () => /* @__PURE__ */ new WeakMap()), Qe = g("dom.ts@adoptedSelectorMap", () => /* @__PURE__ */ new Map()), Xe = g("dom.ts@adoptedShadowSelectorMap", () => /* @__PURE__ */ new WeakMap()), Je = g("dom.ts@adoptedLayerMap", () => /* @__PURE__ */ new Map()), ce = g("dom.ts@adoptedShadowLayerMap", () => /* @__PURE__ */ new WeakMap()), A = g("dom.ts@adoptedMap", () => /* @__PURE__ */ new Map()), B = g("dom.ts@adoptedBlobMap", () => /* @__PURE__ */ new WeakMap()), V = g("dom.ts@adoptedAppliedText", () => /* @__PURE__ */ new WeakMap()), gt = g("dom.ts@adoptedFilled", () => /* @__PURE__ */ new WeakSet()), Un = g("dom.ts@layerCounter", () => 0), wt = g("dom.ts@styleTreeHooks", () => /* @__PURE__ */ new Set()), me = g("dom.ts@styleTreeObserved", () => /* @__PURE__ */ new WeakSet()), nr = g("dom.ts@styleTreeRoots", () => /* @__PURE__ */ new Set()), T = g("style-lib@bakedStyle", () => /* @__PURE__ */ new WeakMap()), U = g("style-lib@bakedLive", () => /* @__PURE__ */ new Set()), L = g("style-lib@bakedCache", () => /* @__PURE__ */ new Map()), Ae = g("style-lib@rebakeBatch", () => /* @__PURE__ */ new Set()), K = g("style-lib@bakedFollowers", () => /* @__PURE__ */ new WeakMap()), Le = g("lur.e@adoptedStyleSheetsCache", () => /* @__PURE__ */ new WeakMap()), or = g("lur.e@styleCache", () => /* @__PURE__ */ new Map()), sr = g("lur.e@styleElementCache", () => /* @__PURE__ */ new WeakMap()), Se = g("style-lib@styleFlushPending", () => /* @__PURE__ */ new WeakSet()), et = g("style-lib@registeredProperties", () => /* @__PURE__ */ new Set()), ir = [
5
4
  "%",
6
5
  "px",
7
6
  "cm",
@@ -65,13 +64,13 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
65
64
  "dppx",
66
65
  "x",
67
66
  "fr"
68
- ], Sr = new Set(mr), vr = {
67
+ ], ar = new Set(ir), lr = {
69
68
  "%": "percent",
70
69
  q: "Q",
71
70
  hz: "Hz",
72
71
  khz: "kHz",
73
72
  fr: "flex"
74
- }, Mt = /^(%|[a-zA-Z]+)/, Rt = [
73
+ }, bt = /^(%|[a-zA-Z]+)/, xt = [
75
74
  "color",
76
75
  "background-color",
77
76
  "border-color",
@@ -89,7 +88,7 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
89
88
  "flood-color",
90
89
  "lighting-color",
91
90
  "stop-color"
92
- ], gr = [
91
+ ], cr = [
93
92
  "font-family",
94
93
  "font-size",
95
94
  "font-weight",
@@ -98,27 +97,27 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
98
97
  "line-height",
99
98
  "letter-spacing",
100
99
  "word-spacing"
101
- ], wr = [
100
+ ], ur = [
102
101
  "transition-duration",
103
102
  "transition-timing-function",
104
103
  "animation-duration",
105
104
  "animation-timing-function"
106
- ], Tt = [
105
+ ], Ct = [
107
106
  "data-theme",
108
107
  "data-explorer-color-scheme",
109
108
  "data-color-scheme",
110
109
  "theme",
111
110
  "color-scheme"
112
- ], br = [
113
- ...Tt,
111
+ ], fr = [
112
+ ...Ct,
114
113
  "style",
115
114
  "class"
116
- ], to = [
115
+ ], In = [
117
116
  "tokens",
118
117
  "colors",
119
118
  "typography",
120
119
  "motion"
121
- ], kr = [
120
+ ], dr = [
122
121
  "tokens",
123
122
  "base",
124
123
  "layout",
@@ -127,31 +126,31 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
127
126
  "theme",
128
127
  "overrides",
129
128
  "print"
130
- ], Cr = ["ux-preload", "ux-layer"], xr = [
129
+ ], pr = ["ux-preload", "ux-layer"], hr = [
131
130
  "rs-md-base",
132
131
  "rs-md-system",
133
132
  "rs-md-modules",
134
133
  "rs-md-user",
135
134
  "rs-md-print",
136
135
  "rs-md-user-print"
137
- ], ro = xr, Er = /^[a-zA-Z0-9_.-]+$/, Mr = /^@layer\s+([a-zA-Z0-9_.-]+)\s*\{/, no = "DOM", ot = "data-glit-host-css", At = "ux-baked", Rr = ["colors", "tokens"], ze = 3e4, ce = "screen", Tr = [
136
+ ], Bn = hr, yr = /^[a-zA-Z0-9_.-]+$/, mr = /^@layer\s+([a-zA-Z0-9_.-]+)\s*\{/, _n = "DOM", tt = "data-glit-host-css", Et = "ux-baked", Sr = ["colors", "tokens"], Fe = 3e4, se = "screen", vr = [
138
137
  "ui-window-frame",
139
138
  "ui-modal",
140
139
  "app-box",
141
140
  ".ui-modal-dialog",
142
141
  ".ui-modal-panel"
143
- ], Lt = [
142
+ ], kt = [
144
143
  ".row.c2-surface",
145
144
  ".row.c2-surface[data-kind=directory]",
146
145
  ".row.c2-surface[data-kind=file]",
147
146
  ".row.c2-surface .c.name",
148
147
  ".fm-grid-header"
149
- ], Pt = [
148
+ ], Mt = [
150
149
  ".field",
151
150
  ".form-input",
152
151
  ".form-select",
153
152
  ".field-control"
154
- ], Ar = [...Lt, ...Pt], Ot = /* @__PURE__ */ Symbol.for("fest.animatable"), Se = typeof CSSStyleValue < "u" && typeof CSSUnitValue < "u", Lr = (e) => vr[e.toLowerCase()] ?? e.toLowerCase(), Pr = (e) => e.toLowerCase() === "%" ? "percent" : e.toLowerCase(), oo = (e) => Er.test(e), Or = (e) => `@layer ${e} {}`, $r = (e) => {
153
+ ], gr = [...kt, ...Mt], Rt = /* @__PURE__ */ Symbol.for("fest.animatable"), he = typeof CSSStyleValue < "u" && typeof CSSUnitValue < "u", wr = (e) => lr[e.toLowerCase()] ?? e.toLowerCase(), br = (e) => e.toLowerCase() === "%" ? "percent" : e.toLowerCase(), Vn = (e) => yr.test(e), xr = (e) => `@layer ${e} {}`, Cr = (e) => {
155
154
  let t = String(e || "").trim();
156
155
  t = t.replace(/^(@charset\s+[^;]+;\s*)+/i, "");
157
156
  for (let r = 0; r < 8; r++) {
@@ -160,34 +159,34 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
160
159
  t = n.trim();
161
160
  }
162
161
  return t;
163
- }, it = (e) => typeof CSSLayerBlockRule < "u" && e instanceof CSSLayerBlockRule, z = () => typeof globalThis < "u" && typeof globalThis.CSSStyleSheet == "function", st = (e) => typeof e == "string" && /@import\b/i.test(e), $t = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), G = (e) => typeof ShadowRoot < "u" && e instanceof ShadowRoot, at = (e) => typeof Document < "u" && e instanceof Document, Ir = (e) => typeof Element < "u" && e instanceof Element, lt = (e) => typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : Array.from(e).map((t) => `\\${t.codePointAt(0).toString(16)} `).join(""), Ur = 0, _r = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `ux-${Date.now().toString(36)}-${(++Ur).toString(36)}`, Br = (e) => {
162
+ }, rt = (e) => typeof CSSLayerBlockRule < "u" && e instanceof CSSLayerBlockRule, D = () => typeof globalThis < "u" && typeof globalThis.CSSStyleSheet == "function", nt = (e) => typeof e == "string" && /@import\b/i.test(e), Tt = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), Y = (e) => typeof ShadowRoot < "u" && e instanceof ShadowRoot, ot = (e) => typeof Document < "u" && e instanceof Document, Er = (e) => typeof Element < "u" && e instanceof Element, st = (e) => typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : Array.from(e).map((t) => `\\${t.codePointAt(0).toString(16)} `).join(""), kr = 0, Mr = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `ux-${Date.now().toString(36)}-${(++kr).toString(36)}`, Rr = (e) => {
164
163
  try {
165
164
  return typeof URL < "u" && typeof URL.canParse == "function" && URL.canParse(e);
166
165
  } catch {
167
166
  return !1;
168
167
  }
169
- }, io = async (e) => {
168
+ }, Fn = async (e) => {
170
169
  const t = await crypto?.subtle?.digest("SHA-256", typeof e == "string" ? new TextEncoder().encode(e) : e instanceof ArrayBuffer ? e : await e?.arrayBuffer?.());
171
170
  return "sha256-" + btoa(String.fromCharCode.apply(null, new Uint8Array(t)));
172
- }, ct = (e, t) => e.endsWith("%") ? parseFloat(e) / 100 * t() : parseFloat(e), Vr = (e, t) => {
171
+ }, it = (e, t) => e.endsWith("%") ? parseFloat(e) / 100 * t() : parseFloat(e), Tr = (e, t) => {
173
172
  const r = e.split(" ");
174
- return new DOMPoint(ct(r[0], () => t.clientWidth), ct(r[1], () => t.clientHeight));
175
- }, re = (e, t = 0) => {
173
+ return new DOMPoint(it(r[0], () => t.clientWidth), it(r[1], () => t.clientHeight));
174
+ }, J = (e, t = 0) => {
176
175
  if (typeof e == "number") return e;
177
176
  if (!e) return t;
178
177
  const r = String(e).trim();
179
178
  return r.endsWith("ms") ? parseFloat(r) : r.endsWith("s") ? parseFloat(r) * 1e3 : parseFloat(r) || t;
180
- }, Nr = (e) => e === void 0 ? 1 : e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, Math.floor(e)), Fr = (e) => e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, e ?? 1), be = (e) => e != null && typeof e == "object" && e.kind === "scroll", ut = (e) => e != null && typeof e == "object" && e.kind === "view", ne = (e) => !e || e.nodeType !== 1 ? !1 : !!(String(e.localName || "").includes("-") || e.shadowRoot || e.styles != null), It = (e) => {
179
+ }, Ar = (e) => e === void 0 ? 1 : e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, Math.floor(e)), Lr = (e) => e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, e ?? 1), ve = (e) => e != null && typeof e == "object" && e.kind === "scroll", at = (e) => e != null && typeof e == "object" && e.kind === "view", ee = (e) => !e || e.nodeType !== 1 ? !1 : !!(String(e.localName || "").includes("-") || e.shadowRoot || e.styles != null), At = (e) => {
181
180
  try {
182
181
  return e.cssRules.length;
183
182
  } catch {
184
183
  return null;
185
184
  }
186
- }, so = (e) => {
185
+ }, Nn = (e) => {
187
186
  if (!e) return !0;
188
- const t = It(e);
187
+ const t = At(e);
189
188
  return t === null ? !1 : t === 0;
190
- }, Dr = (e) => e === "--base-color" || e.startsWith("--color-") || e.endsWith("-color") || e.endsWith("-fg") || e.endsWith("-bg"), qr = (e) => {
189
+ }, Pr = (e) => e === "--base-color" || e.startsWith("--color-") || e.endsWith("-color") || e.endsWith("-fg") || e.endsWith("-bg"), Or = (e) => {
191
190
  if (!e.isConnected) return !1;
192
191
  if (typeof e.getClientRects != "function") return !0;
193
192
  try {
@@ -195,7 +194,7 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
195
194
  } catch {
196
195
  return !0;
197
196
  }
198
- }, zr = (e) => Array.isArray(e) && typeof e[0] == "function", Ut = (e) => {
197
+ }, $r = (e) => Array.isArray(e) && typeof e[0] == "function", Lt = (e) => {
199
198
  const t = typeof e == "string" ? e.trim() : "";
200
199
  if (!t) return !0;
201
200
  for (const r of t.split(";")) {
@@ -205,12 +204,12 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
205
204
  if (o < 0 || n.slice(o + 1).trim().length > 0) return !1;
206
205
  }
207
206
  return !0;
208
- }, Wr = (e) => {
207
+ }, Ur = (e) => {
209
208
  if (e == null) return;
210
209
  const t = e.getAttribute("style");
211
- t != null && Ut(t) && (e.style.cssText = "", e.removeAttribute("style"));
212
- }, Hr = (e, t) => {
213
- if (Ut(t)) {
210
+ t != null && Lt(t) && (e.style.cssText = "", e.removeAttribute("style"));
211
+ }, Ir = (e, t) => {
212
+ if (Lt(t)) {
214
213
  e.style.cssText = "", e.removeAttribute("style");
215
214
  return;
216
215
  }
@@ -224,95 +223,95 @@ var b = (e, t) => globalThis[Symbol.for(e)] ??= t(), W = b("dom.ts@blobURLMap",
224
223
  } catch {
225
224
  }
226
225
  return !1;
227
- }, ue = (e) => {
226
+ }, ie = (e) => {
228
227
  if (e == null || typeof e != "object" || P(e)) return !1;
229
228
  try {
230
229
  return "value" in e;
231
230
  } catch {
232
231
  return !1;
233
232
  }
234
- }, ft = (e) => e == null || typeof e != "object" && typeof e != "function", oe = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), dt = (e, t) => new RegExp(`var\\(\\s*${oe(t)}\\s*\\)`).test(e), jr = (e) => {
235
- const t = Mt.exec(e);
233
+ }, lt = (e) => e == null || typeof e != "object" && typeof e != "function", te = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), ct = (e, t) => new RegExp(`var\\(\\s*${te(t)}\\s*\\)`).test(e), Br = (e) => {
234
+ const t = bt.exec(e);
236
235
  if (!t) return null;
237
236
  const r = t[0], n = r.toLowerCase();
238
- return Sr.has(n) ? {
237
+ return ar.has(n) ? {
239
238
  authored: r,
240
239
  normalized: n,
241
240
  length: r.length
242
241
  } : null;
243
- }, D = (e, t) => e?.[t] ?? globalThis?.[t], M = (e, t, r) => {
244
- const n = e?.CSS, o = Lr(t), s = n?.[o];
245
- if (typeof s == "function") return s.call(n, r);
246
- const i = D(e, "CSSUnitValue");
247
- if (typeof i != "function") throw new TypeError(`Typed OM does not support CSS unit "${t}"`);
248
- return new i(r, Pr(t));
249
- }, ao = (e) => Se && e instanceof CSSStyleValue, he = (e) => Se && e instanceof CSSUnitValue, me = (e, t) => {
242
+ }, F = (e, t) => e?.[t] ?? globalThis?.[t], M = (e, t, r) => {
243
+ const n = e?.CSS, o = wr(t), i = n?.[o];
244
+ if (typeof i == "function") return i.call(n, r);
245
+ const s = F(e, "CSSUnitValue");
246
+ if (typeof s != "function") throw new TypeError(`Typed OM does not support CSS unit "${t}"`);
247
+ return new s(r, br(t));
248
+ }, Dn = (e) => he && e instanceof CSSStyleValue, ue = (e) => he && e instanceof CSSUnitValue, de = (e, t) => {
250
249
  if (!e || !t) return null;
251
250
  const n = ((o) => {
252
251
  try {
253
- const s = o.querySelector?.(t);
254
- return s instanceof HTMLElement ? s : null;
252
+ const i = o.querySelector?.(t);
253
+ return i instanceof HTMLElement ? i : null;
255
254
  } catch {
256
255
  return null;
257
256
  }
258
257
  })(e);
259
258
  if (n) return n;
260
259
  if (e instanceof Element && e.shadowRoot) {
261
- const o = me(e.shadowRoot, t);
260
+ const o = de(e.shadowRoot, t);
262
261
  if (o) return o;
263
262
  }
264
263
  if (typeof e.querySelectorAll != "function") return null;
265
264
  for (const o of e.querySelectorAll("*")) {
266
265
  if (!o.shadowRoot) continue;
267
- const s = me(o.shadowRoot, t);
268
- if (s) return s;
266
+ const i = de(o.shadowRoot, t);
267
+ if (i) return i;
269
268
  }
270
269
  return null;
271
- }, We = (...e) => {
270
+ }, Ne = (...e) => {
272
271
  const t = /* @__PURE__ */ new Set(), r = [];
273
272
  for (const n of e) {
274
273
  if (n == null) continue;
275
274
  const o = typeof n == "string" ? [n] : n;
276
- for (const s of o) {
277
- const i = String(s || "").trim();
278
- !i || t.has(i) || (t.add(i), r.push(i));
275
+ for (const i of o) {
276
+ const s = String(i || "").trim();
277
+ !s || t.has(s) || (t.add(s), r.push(s));
279
278
  }
280
279
  }
281
280
  return r.length ? `@layer ${r.join(", ")};` : "";
282
- }, lo = () => We(kr), co = (e) => We(Cr, e), He = (e, t) => {
281
+ }, qn = () => Ne(dr), zn = (e) => Ne(pr, e), De = (e, t) => {
283
282
  const r = (t || "").trim();
284
283
  return !e || !r ? "" : `@layer ${e} {
285
284
  ${r}
286
285
  }`;
287
- }, ke = (e, t) => t ? `@layer ${t} { ${e} }` : e, uo = (e, t) => {
286
+ }, ge = (e, t) => t ? `@layer ${t} { ${e} }` : e, Wn = (e, t) => {
288
287
  const r = (t || "").trim();
289
- return r ? /^@layer\b/.test(r) ? r : He(e, r) : "";
290
- }, Kr = (e, t) => {
291
- const r = e.match(Mr);
288
+ return r ? /^@layer\b/.test(r) ? r : De(e, r) : "";
289
+ }, _r = (e, t) => {
290
+ const r = e.match(mr);
292
291
  if (!r || t && r[1] !== t) return null;
293
292
  const n = r[0].lastIndexOf("{");
294
293
  let o = 0;
295
- for (let s = n; s < e.length; s++) {
296
- const i = e[s];
297
- if (i === "{") o++;
298
- else if (i === "}" && (o--, o === 0))
299
- return e.slice(s + 1).trim() ? null : e.slice(n + 1, s).trim();
294
+ for (let i = n; i < e.length; i++) {
295
+ const s = e[i];
296
+ if (s === "{") o++;
297
+ else if (s === "}" && (o--, o === 0))
298
+ return e.slice(i + 1).trim() ? null : e.slice(n + 1, i).trim();
300
299
  }
301
300
  return null;
302
- }, fo = (e, t) => {
303
- const r = $r(e);
304
- return Kr(r, t) ?? r;
305
- }, Yr = (e, t = "") => `@import url("${e}") ${t && typeof t == "string" ? `layer(${t})` : ""};`, po = He("ux-preload", ":host { box-sizing: border-box; }"), _t = (e, t) => {
301
+ }, Hn = (e, t) => {
302
+ const r = Cr(e);
303
+ return _r(r, t) ?? r;
304
+ }, Vr = (e, t = "") => `@import url("${e}") ${t && typeof t == "string" ? `layer(${t})` : ""};`, jn = De("ux-preload", ":host { box-sizing: border-box; }"), Pt = (e, t) => {
306
305
  if (!e || !t) return;
307
- const r = Array.from(e.cssRules || []), n = r.find((o) => it(o) && o.name === t);
306
+ const r = Array.from(e.cssRules || []), n = r.find((o) => rt(o) && o.name === t);
308
307
  if (n) return n;
309
308
  try {
310
- const o = e.insertRule(Or(t), r.length), s = e.cssRules?.[o];
311
- return it(s) ? s : void 0;
309
+ const o = e.insertRule(xr(t), r.length), i = e.cssRules?.[o];
310
+ return rt(i) ? i : void 0;
312
311
  } catch {
313
312
  return;
314
313
  }
315
- }, Zr = (e) => {
314
+ }, Fr = (e) => {
316
315
  const t = [];
317
316
  let r = 0;
318
317
  for (; r < e.length; ) {
@@ -321,23 +320,23 @@ ${r}
321
320
  r += o[0].length;
322
321
  continue;
323
322
  }
324
- const s = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
325
- if (s) {
326
- r += s[0].length;
327
- const l = Mt.exec(e.slice(r)), c = l?.[0] ?? null;
323
+ const i = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
324
+ if (i) {
325
+ r += i[0].length;
326
+ const l = bt.exec(e.slice(r)), c = l?.[0] ?? null;
328
327
  l && (r += l[0].length), t.push({
329
328
  kind: "number",
330
- value: Number(s[0]),
329
+ value: Number(i[0]),
331
330
  unit: c == null ? null : c.toLowerCase()
332
331
  });
333
332
  continue;
334
333
  }
335
- const i = /^[a-zA-Z_][a-zA-Z0-9_-]*/.exec(n);
336
- if (i) {
334
+ const s = /^[a-zA-Z_][a-zA-Z0-9_-]*/.exec(n);
335
+ if (s) {
337
336
  t.push({
338
337
  kind: "identifier",
339
- value: i[0].toLowerCase()
340
- }), r += i[0].length;
338
+ value: s[0].toLowerCase()
339
+ }), r += s[0].length;
341
340
  continue;
342
341
  }
343
342
  const a = n[0];
@@ -359,7 +358,7 @@ ${r}
359
358
  throw new SyntaxError(`Unsupported token near "${n}"`);
360
359
  }
361
360
  return t;
362
- }, Gr = class {
361
+ }, Nr = class {
363
362
  tokens;
364
363
  win;
365
364
  index = 0;
@@ -388,7 +387,7 @@ ${r}
388
387
  return t?.kind === "symbol" && t.value === e;
389
388
  }
390
389
  createMath(e, ...t) {
391
- const r = D(this.win, e);
390
+ const r = F(this.win, e);
392
391
  if (typeof r != "function") throw new TypeError(`${e} is not supported`);
393
392
  return new r(...t);
394
393
  }
@@ -446,14 +445,14 @@ ${r}
446
445
  }
447
446
  throw new SyntaxError(`Unsupported function "${e}"`);
448
447
  }
449
- }, Qr = (e, t) => {
448
+ }, Dr = (e, t) => {
450
449
  try {
451
- const r = Zr(e);
452
- return new Gr(r, t).parse();
450
+ const r = Fr(e);
451
+ return new Nr(r, t).parse();
453
452
  } catch {
454
453
  return null;
455
454
  }
456
- }, I = (e, t, r, n = "") => {
455
+ }, $ = (e, t, r, n = "") => {
457
456
  if (!(!e || !t)) {
458
457
  if (r == null) {
459
458
  e.getPropertyValue(t) !== "" && e.removeProperty(t);
@@ -461,84 +460,89 @@ ${r}
461
460
  }
462
461
  e.getPropertyValue(t) !== r && e.setProperty(t, r, n);
463
462
  }
464
- }, Xr = (e, t, r, n = "") => {
463
+ }, qr = (e, t, r, n = "") => {
465
464
  if (!e || !t) return e;
466
- const o = le(t), s = e.style, i = e.attributeStyleMap ?? e.styleMap;
467
- if (!Se || !i) return Bt(e, t, r, n);
465
+ const o = pe(t), i = e.style, s = e.attributeStyleMap ?? e.styleMap;
466
+ if (!he || !s) return Ot(e, t, r, n);
468
467
  const a = e.ownerDocument?.defaultView ?? globalThis;
469
- let l = qe(r) && ue(r) ? r.value : r;
468
+ let l = Ve(r) && ie(r) ? r.value : r;
470
469
  if (l == null)
471
- return i.delete?.(o), s && I(s, o, null, n), e;
470
+ return s.delete?.(o), i && $(i, o, null, n), e;
472
471
  if (P(l)) {
473
- const c = i.get(o);
474
- if (he(l) && he(c)) {
472
+ const c = s.get(o);
473
+ if (ue(l) && ue(c)) {
475
474
  if (c.value === l.value && c.unit === l.unit) return e;
476
475
  } else if (c === l) return e;
477
- return i.set(o, l), e;
476
+ return s.set(o, l), e;
478
477
  }
479
478
  if (typeof l == "number")
480
479
  if (CSS?.number && !o.startsWith("--")) {
481
- const c = CSS.number(l), u = i.get(o);
482
- return he(u) && u.value === c.value && u.unit === c.unit || i.set(o, c), e;
480
+ const c = CSS.number(l), u = s.get(o);
481
+ return ue(u) && u.value === c.value && u.unit === c.unit || s.set(o, c), e;
483
482
  } else
484
- return I(s, o, String(l), n), e;
483
+ return $(i, o, String(l), n), e;
485
484
  if (typeof l == "string") {
486
485
  if (/\b(calc|min|max|clamp)\s*\(/.test(l)) {
487
- const u = Qr(l, a);
486
+ const u = Dr(l, a);
488
487
  if (u) try {
489
- return i.set(o, u), e;
488
+ return s.set(o, u), e;
490
489
  } catch {
491
490
  }
492
491
  }
493
- const c = kt(l);
492
+ const c = vt(l);
494
493
  if (typeof c == "number" && CSS?.number && !o.startsWith("--")) {
495
- const u = CSS.number(c), d = i.get(o);
496
- return he(d) && d.value === u.value && d.unit === u.unit || i.set(o, u), e;
494
+ const u = CSS.number(c), d = s.get(o);
495
+ return ue(d) && d.value === u.value && d.unit === u.unit || s.set(o, u), e;
497
496
  }
498
- return I(s, o, l, n), e;
497
+ return $(i, o, l, n), e;
499
498
  }
500
- return I(s, o, String(l), n), e;
501
- }, Bt = (e, t, r, n = "") => {
499
+ return $(i, o, String(l), n), e;
500
+ }, Ot = (e, t, r, n = "") => {
502
501
  if (!e || !t) return e;
503
- const o = le(t), s = e.style;
504
- if (!s) return e;
505
- let i = qe(r) && ue(r) ? r.value : r;
506
- return typeof i == "string" && !P(i) && (i = kt(i) ?? i), i == null ? (I(s, o, null, n), e) : (P(i) || typeof i == "number", I(s, o, String(i), n), e);
507
- }, ve = (e, t, r, n = "") => Se ? Xr(e, t, r, n) : Bt(e, t, r, n), ho = (e, t, r) => ve(Ke(e), t, r), Jr = (e, t) => {
508
- const r = Ke(e);
509
- return Object.entries(t).forEach(([n, o]) => ve(r, n, o)), r;
510
- }, Vt = (e, t, r = "", n) => {
511
- const o = cn(e), s = typeof e == "string" && URL.canParse(e) ? e : o;
512
- return t?.[0] && (t[0].fetchPriority = "high"), t && s && typeof s == "string" && pt(t, s, r), t?.[0] && (!URL.canParse(e) || n) && t?.[0] instanceof HTMLLinkElement, $t(o, (i) => {
513
- t?.[0] && i && (pt(t, i, r), t?.[0].setAttribute("loaded", ""));
514
- })?.catch?.((i) => {
515
- console.warn("Failed to load style sheet:", i);
502
+ const o = pe(t), i = e.style;
503
+ if (!i) return e;
504
+ let s = Ve(r) && ie(r) ? r.value : r;
505
+ return typeof s == "string" && !P(s) && (s = vt(s) ?? s), s == null ? ($(i, o, null, n), e) : (P(s) || typeof s == "number", $(i, o, String(s), n), e);
506
+ }, ye = (e, t, r, n = "") => he ? qr(e, t, r, n) : Ot(e, t, r, n), ut = (e, t, r) => {
507
+ const n = e?.style;
508
+ return !t || typeof t != "string" || !e || !n || Qt(r, () => {
509
+ Jt(r) || Ve(r) || er(r) ? ye(e, t, r) : r == null && e.style.removeProperty(pe(t));
510
+ }), e;
511
+ }, Kn = (e, t, r) => ye(ze(e), t, r), zr = (e, t) => {
512
+ const r = ze(e);
513
+ return Object.entries(t).forEach(([n, o]) => ye(r, n, o)), r;
514
+ }, $t = (e, t, r = "", n) => {
515
+ const o = Xr(e), i = typeof e == "string" && URL.canParse(e) ? e : o;
516
+ return t?.[0] && (t[0].fetchPriority = "high"), t && i && typeof i == "string" && ft(t, i, r), t?.[0] && (!URL.canParse(e) || n) && t?.[0] instanceof HTMLLinkElement, Tt(o, (s) => {
517
+ t?.[0] && s && (ft(t, s, r), t?.[0].setAttribute("loaded", ""));
518
+ })?.catch?.((s) => {
519
+ console.warn("Failed to load style sheet:", s);
516
520
  });
517
- }, en = (e) => {
521
+ }, Wr = (e) => {
518
522
  const t = typeof document < "u" ? document.createElement("link") : null;
519
523
  return t && (t.fetchPriority = "high"), t ? (Object.assign(t, {
520
524
  rel: "stylesheet",
521
525
  type: "text/css",
522
526
  crossOrigin: "same-origin"
523
- }), t.dataset.owner = "DOM", Vt(e, [t, "href"]), typeof document < "u" && document.head.append(t), t) : null;
527
+ }), t.dataset.owner = "DOM", $t(e, [t, "href"]), typeof document < "u" && document.head.append(t), t) : null;
524
528
  }, O = (e, t = typeof document < "u" ? document?.head : null, r = "") => {
525
529
  const n = t?.querySelector?.("head") ?? t;
526
- if (typeof HTMLHeadElement < "u" && n instanceof HTMLHeadElement) return en(e);
530
+ if (typeof HTMLHeadElement < "u" && n instanceof HTMLHeadElement) return Wr(e);
527
531
  const o = typeof document < "u" ? document.createElement("style") : null;
528
- return o ? (o.dataset.owner = "DOM", Vt(e, [o, "innerHTML"], r), n?.prepend?.(o), o) : null;
529
- }, yo = (e, t, r, n = "") => ve(e, t, r, n), mo = (e) => Nt(e, ""), Ue = (e, t) => {
530
- F.set(e, t), xt.add(e);
531
- }, V = (e) => {
532
+ return o ? (o.dataset.owner = "DOM", $t(e, [o, "innerHTML"], r), n?.prepend?.(o), o) : null;
533
+ }, Yn = (e, t, r, n = "") => ye(e, t, r, n), Zn = (e) => Ut(e, ""), Pe = (e, t) => {
534
+ V.set(e, t), gt.add(e);
535
+ }, _ = (e) => {
532
536
  if (!e) return null;
533
- const t = F.get(e);
537
+ const t = V.get(e);
534
538
  if (t) return t;
535
539
  for (const [r, n] of A) if (n === e && typeof r == "string") return r;
536
540
  return null;
537
- }, ie = (e, t) => {
541
+ }, re = (e, t) => {
538
542
  if (!e) return !1;
539
- const r = t || V(e), n = It(e);
540
- return n === null ? !1 : n > 0 ? (xt.add(e), r && !F.has(e) && F.set(e, r), !0) : r && _e(e, r) ? (Ue(e, r), !0) : !1;
541
- }, _e = (e, t) => {
543
+ const r = t || _(e), n = At(e);
544
+ return n === null ? !1 : n > 0 ? (gt.add(e), r && !V.has(e) && V.set(e, r), !0) : r && Oe(e, r) ? (Pe(e, r), !0) : !1;
545
+ }, Oe = (e, t) => {
542
546
  if (!e || !t) return !1;
543
547
  try {
544
548
  return e.replaceSync(t), !0;
@@ -546,101 +550,101 @@ ${r}
546
550
  const n = String(r?.message || "").toLowerCase();
547
551
  return n.includes("@import rules are not allowed") || n.includes("@import") && n.includes("not allowed") || console.warn("[DOM] Failed to apply adopted stylesheet:", r), !1;
548
552
  }
549
- }, tn = (e) => {
553
+ }, Hr = (e) => {
550
554
  let t = B.get(e);
551
555
  return t || (t = new CSSStyleSheet(), B.set(e, t)), t;
552
- }, Nt = (e, t = null) => {
556
+ }, Ut = (e, t = null) => {
553
557
  try {
554
- return rn(e, t);
558
+ return jr(e, t);
555
559
  } catch (r) {
556
560
  return console.warn("[DOM] loadAsAdopted failed", r), typeof e == "string" && O(e, void 0, t || ""), null;
557
561
  }
558
- }, rn = (e, t = null) => {
559
- if (!z())
562
+ }, jr = (e, t = null) => {
563
+ if (!D())
560
564
  return typeof e == "string" && O(e, void 0, t || ""), null;
561
- if (typeof e == "string" && st(e))
565
+ if (typeof e == "string" && nt(e))
562
566
  return O(e, void 0, t || ""), null;
563
567
  if (typeof e == "string" && A?.has?.(e)) {
564
- const n = A.get(e), o = F.get(n) || ke(e, t);
565
- return ie(n, o), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
568
+ const n = A.get(e), o = V.get(n) || ge(e, t);
569
+ return re(n, o), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
566
570
  }
567
571
  if ((e instanceof Blob || e instanceof File) && B?.has?.(e)) {
568
572
  const n = B.get(e);
569
- return ie(n), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
573
+ return re(n), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
570
574
  }
571
575
  if (!e) return null;
572
- const r = typeof e == "string" ? ir(A, e, () => new CSSStyleSheet()) : tn(e);
573
- if (typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r), typeof e == "string" && !Br(e)) {
574
- const n = ke(e, t);
575
- return A.set(e, r), _e(r, n) ? Ue(r, n) : (Ce(r), A.delete(e), O(e)), r;
576
- } else $t(un(e), (n) => {
576
+ const r = typeof e == "string" ? Xt(A, e, () => new CSSStyleSheet()) : Hr(e);
577
+ if (typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r), typeof e == "string" && !Rr(e)) {
578
+ const n = ge(e, t);
579
+ return A.set(e, r), Oe(r, n) ? Pe(r, n) : (we(r), A.delete(e), O(e)), r;
580
+ } else Tt(Jr(e), (n) => {
577
581
  if (A.set(n, r), n) {
578
- if (st(n))
579
- return Ce(r), A.delete(n), B.delete(e), O(n, void 0, t || ""), r;
580
- const o = ke(n, t);
581
- return _e(r, o) ? Ue(r, o) : (Ce(r), A.delete(n), B.delete(e), O(n, void 0, t || "")), r;
582
+ if (nt(n))
583
+ return we(r), A.delete(n), B.delete(e), O(n, void 0, t || ""), r;
584
+ const o = ge(n, t);
585
+ return Oe(r, o) ? Pe(r, o) : (we(r), A.delete(n), B.delete(e), O(n, void 0, t || "")), r;
582
586
  }
583
587
  });
584
588
  return r;
585
- }, Ft = (e, t) => {
589
+ }, It = (e, t) => {
586
590
  if (!(!e || e.nodeType === 3)) {
587
591
  if (e.nodeType === 11) {
588
- for (const r of e.childNodes || []) Ft(r, t);
592
+ for (const r of e.childNodes || []) It(r, t);
589
593
  return;
590
594
  }
591
- if (ne(e) && t.add(e), typeof e.querySelectorAll == "function")
595
+ if (ee(e) && t.add(e), typeof e.querySelectorAll == "function")
592
596
  try {
593
- for (const r of e.querySelectorAll("*")) ne(r) && t.add(r);
597
+ for (const r of e.querySelectorAll("*")) ee(r) && t.add(r);
594
598
  } catch {
595
599
  }
596
600
  }
597
- }, nn = (e, t = "tree") => {
601
+ }, Kr = (e, t = "tree") => {
598
602
  for (const r of e)
599
- if (ne(r))
600
- for (const n of Et) n(r, t);
601
- }, Dt = (e) => {
602
- typeof e == "function" && Et.add(e);
603
- }, So = (e) => {
604
- if (!e || typeof MutationObserver > "u" || ge.has(e)) return e;
605
- ge.add(e), pr.add(e);
603
+ if (ee(r))
604
+ for (const n of wt) n(r, t);
605
+ }, Bt = (e) => {
606
+ typeof e == "function" && wt.add(e);
607
+ }, Gn = (e) => {
608
+ if (!e || typeof MutationObserver > "u" || me.has(e)) return e;
609
+ me.add(e), nr.add(e);
606
610
  const t = new MutationObserver((r) => {
607
611
  const n = /* @__PURE__ */ new Set();
608
612
  for (const o of r) if (o.type === "childList") {
609
- for (const i of o.addedNodes) Ft(i, n);
610
- const s = o.target?.getRootNode?.();
611
- if (s instanceof ShadowRoot && ne(s.host)) {
612
- const i = s.adoptedStyleSheets;
613
- (!i || i.length === 0) && n.add(s.host);
613
+ for (const s of o.addedNodes) It(s, n);
614
+ const i = o.target?.getRootNode?.();
615
+ if (i instanceof ShadowRoot && ee(i.host)) {
616
+ const s = i.adoptedStyleSheets;
617
+ (!s || s.length === 0) && n.add(i.host);
614
618
  }
615
- } else o.type === "attributes" && o.target && ne(o.target) && n.add(o.target);
616
- nn(n, "mutation");
619
+ } else o.type === "attributes" && o.target && ee(o.target) && n.add(o.target);
620
+ Kr(n, "mutation");
617
621
  });
618
622
  try {
619
623
  t.observe(e, {
620
624
  childList: !0,
621
625
  subtree: !0,
622
626
  attributes: !0,
623
- attributeFilter: [...Tt]
627
+ attributeFilter: [...Ct]
624
628
  });
625
629
  } catch {
626
- return ge.delete(e), e;
630
+ return me.delete(e), e;
627
631
  }
628
632
  return e;
629
- }, vo = () => {
633
+ }, Qn = () => {
630
634
  if (typeof document > "u") return;
631
635
  const e = typeof URL < "u" && typeof URL.canParse == "function";
632
636
  for (const [t, r] of A) {
633
637
  if (!r || typeof t != "string" || e && URL.canParse(t)) continue;
634
- const n = F.get(r) || t;
635
- ie(r, n), document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r);
638
+ const n = V.get(r) || t;
639
+ re(r, n), document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r);
636
640
  }
637
- }, Ce = (e) => {
641
+ }, we = (e) => {
638
642
  if (!e) return !1;
639
643
  const t = typeof e == "string" ? A.get(e) : e;
640
644
  if (!t || typeof document > "u") return !1;
641
645
  const r = document.adoptedStyleSheets, n = r.indexOf(t);
642
646
  return n !== -1 ? (r.splice(n, 1), !0) : !1;
643
- }, go = (e) => {
647
+ }, Xn = (e) => {
644
648
  if (e?.computedStyleMap) {
645
649
  const t = e.computedStyleMap().get("transform")?.toMatrix?.();
646
650
  if (t) return t;
@@ -649,10 +653,10 @@ ${r}
649
653
  return new DOMMatrix(t?.getPropertyValue?.("transform"));
650
654
  }
651
655
  return new DOMMatrix();
652
- }, wo = (e) => {
656
+ }, Jn = (e) => {
653
657
  const t = getComputedStyle(e)?.getPropertyValue?.("transform-origin") || "50% 50%";
654
- return Vr(t, e);
655
- }, K = (e, t) => {
658
+ return Tr(t, e);
659
+ }, H = (e, t) => {
656
660
  if ("computedStyleMap" in e) {
657
661
  const r = e?.computedStyleMap?.()?.get(t);
658
662
  return r instanceof CSSUnitValue ? r?.value || 0 : r?.toString?.();
@@ -662,7 +666,7 @@ ${r}
662
666
  return parseFloat(r?.getPropertyValue?.(t)?.replace?.("px", "")) || 0;
663
667
  }
664
668
  return parseFloat((e?.style ?? e).getPropertyValue?.(t)?.replace?.("px", "")) || 0;
665
- }, bo = (e) => {
669
+ }, eo = (e) => {
666
670
  let t = 1, r = e;
667
671
  for (; r; ) {
668
672
  if ("currentCSSZoom" in r) {
@@ -675,42 +679,42 @@ ${r}
675
679
  r = r?.offsetParent ?? r?.parentElement;
676
680
  }
677
681
  return t;
678
- }, ko = (e, t) => K?.(e, t), Co = (e, t) => t == "inline" ? K(e, "padding-inline-start") + K(e, "padding-inline-end") : K(e, "padding-block-start") + K(e, "padding-block-end"), Q = typeof document < "u" ? document.createElement("style") : null;
679
- Q && (document.querySelector("head")?.appendChild?.(Q), Q.dataset.owner = "DOM");
680
- var pt = (e, t, r = "") => {
681
- e[0][e[1]] = e[1] == "innerHTML" ? Yr(t, r) : t;
682
- }, xo = (e) => e?.map?.((t) => Jr(...t)), on = (e, t) => (t ||= Q?.sheet, _t(t, e)), je = (e) => {
683
- if (e.id) return `#${lt(e.id)}`;
682
+ }, to = (e, t) => H?.(e, t), ro = (e, t) => t == "inline" ? H(e, "padding-inline-start") + H(e, "padding-inline-end") : H(e, "padding-block-start") + H(e, "padding-block-end"), Z = typeof document < "u" ? document.createElement("style") : null;
683
+ Z && (document.querySelector("head")?.appendChild?.(Z), Z.dataset.owner = "DOM");
684
+ var ft = (e, t, r = "") => {
685
+ e[0][e[1]] = e[1] == "innerHTML" ? Vr(t, r) : t;
686
+ }, no = (e) => e?.map?.((t) => zr(...t)), Yr = (e, t) => (t ||= Z?.sheet, Pt(t, e)), qe = (e) => {
687
+ if (e.id) return `#${st(e.id)}`;
684
688
  let t = e.getAttribute("data-style-id");
685
- return t || (t = _r(), e.setAttribute("data-style-id", t)), `[data-style-id="${lt(t)}"]`;
686
- }, sn = (e, t) => (t = t.trim(), e ? t ? t.startsWith("::") ? `${e}${t}` : `${e} ${t}` : e : t), an = (e, t, r, n) => {
687
- const o = Array.from(e?.cssRules || []), s = t.trim(), i = n.trim();
689
+ return t || (t = Mr(), e.setAttribute("data-style-id", t)), `[data-style-id="${st(t)}"]`;
690
+ }, Zr = (e, t) => (t = t.trim(), e ? t ? t.startsWith("::") ? `${e}${t}` : `${e} ${t}` : e : t), Gr = (e, t, r, n) => {
691
+ const o = Array.from(e?.cssRules || []), i = t.trim(), s = n.trim();
688
692
  return o.findIndex((a) => {
689
693
  if (!(a instanceof CSSStyleRule)) return !1;
690
694
  const l = a.selectorText?.trim?.() ?? "";
691
- return l === s ? !0 : i && l.endsWith(i) ? l.slice(0, l.length - i.length).trim() === r : !1;
695
+ return l === i ? !0 : s && l.endsWith(s) ? l.slice(0, l.length - s.length).trim() === r : !1;
692
696
  });
693
- }, Ke = (e, t, r = "ux-query", n = null) => {
694
- const o = G(n) || at(n) ? n : n?.getRootNode?.() ?? (typeof document < "u" ? document : null), s = Ir(n) ? n : null;
695
- let i = "";
696
- s ? i = je(s) : G(o) ? i = ":host" : at(o) && (i = ":root");
697
+ }, ze = (e, t, r = "ux-query", n = null) => {
698
+ const o = Y(n) || ot(n) ? n : n?.getRootNode?.() ?? (typeof document < "u" ? document : null), i = Er(n) ? n : null;
699
+ let s = "";
700
+ i ? s = qe(i) : Y(o) ? s = ":host" : ot(o) && (s = ":root");
697
701
  let a = null;
698
- if (G(o) ? (a = o.querySelector("style[data-ux-query]"), !a && typeof document < "u" && (a = document.createElement("style"), a.setAttribute("data-ux-query", ""), o.appendChild(a))) : a = ln(), t ||= a?.sheet, !t) return;
699
- if (r) return Ke(e, on(r, t), null, n);
700
- const l = sn(i, e);
701
- let c = an(t, l, i, e);
702
+ if (Y(o) ? (a = o.querySelector("style[data-ux-query]"), !a && typeof document < "u" && (a = document.createElement("style"), a.setAttribute("data-ux-query", ""), o.appendChild(a))) : a = Qr(), t ||= a?.sheet, !t) return;
703
+ if (r) return ze(e, Yr(r, t), null, n);
704
+ const l = Zr(s, e);
705
+ let c = Gr(t, l, s, e);
702
706
  return c === -1 && (c = t.insertRule(`${l} {}`)), t.cssRules?.[c];
703
707
  };
704
- function ln() {
705
- return Q ?? null;
708
+ function Qr() {
709
+ return Z ?? null;
706
710
  }
707
- var cn = (e) => {
711
+ var Xr = (e) => {
708
712
  if (!e) return null;
709
- if (_.has(e)) return _.get(e);
713
+ if (I.has(e)) return I.get(e);
710
714
  if (e instanceof Blob || e instanceof File) {
711
- if (W.has(e)) return W.get(e);
715
+ if (q.has(e)) return q.get(e);
712
716
  const t = URL.createObjectURL(e);
713
- return W.set(e, t), _.set(t, t), t;
717
+ return q.set(e, t), I.set(t, t), t;
714
718
  }
715
719
  if (URL.canParse(e) || e?.trim?.()?.startsWith?.("./")) {
716
720
  const t = fetch(e?.replace?.("?url", "?raw"), {
@@ -719,22 +723,22 @@ var cn = (e) => {
719
723
  priority: "high"
720
724
  })?.then?.(async (r) => {
721
725
  const n = await r.blob(), o = URL.createObjectURL(n);
722
- return W.set(n, o), _.set(e, o), _.set(o, o), o;
726
+ return q.set(n, o), I.set(e, o), I.set(o, o), o;
723
727
  });
724
- return _.set(e, t), t;
728
+ return I.set(e, t), t;
725
729
  }
726
730
  if (typeof e == "string") {
727
731
  const t = new Blob([e], { type: "text/css" }), r = URL.createObjectURL(t);
728
- return W.set(t, r), _.set(r, r), r;
732
+ return q.set(t, r), I.set(r, r), r;
729
733
  }
730
734
  return e;
731
- }, un = (e) => {
735
+ }, Jr = (e) => {
732
736
  if (!e) return "";
733
- if (H.has(e)) return H.get(e) ?? "";
737
+ if (z.has(e)) return z.get(e) ?? "";
734
738
  if (e instanceof Blob || e instanceof File) {
735
- if (de.has(e)) return de.get(e) ?? "";
736
- const t = e?.text?.()?.then?.((r) => (de.set(e, r), r));
737
- return de.set(e, t), t;
739
+ if (le.has(e)) return le.get(e) ?? "";
740
+ const t = e?.text?.()?.then?.((r) => (le.set(e, r), r));
741
+ return le.set(e, t), t;
738
742
  }
739
743
  if (URL.canParse(e) || e?.trim?.()?.startsWith?.("./")) {
740
744
  const t = fetch(e?.replace?.("?url", "?raw"), {
@@ -743,35 +747,35 @@ var cn = (e) => {
743
747
  priority: "high"
744
748
  })?.then?.(async (r) => {
745
749
  const n = await r.text();
746
- return H.set(e, n), n;
750
+ return z.set(e, n), n;
747
751
  });
748
- return H.set(e, t), t;
749
- }
750
- return typeof e == "string" && H.set(e, e), e;
751
- }, Eo = (e, t = "ux-query", r = null) => {
752
- if (!e || !z()) return null;
753
- const n = G(r) ? r : r?.getRootNode ? r.getRootNode({ composed: !0 }) : null, o = G(n), s = o ? n.adoptedStyleSheets : typeof document < "u" ? document.adoptedStyleSheets : null;
754
- if (!s) return null;
755
- const i = `${t || ""}:${e}`;
752
+ return z.set(e, t), t;
753
+ }
754
+ return typeof e == "string" && z.set(e, e), e;
755
+ }, oo = (e, t = "ux-query", r = null) => {
756
+ if (!e || !D()) return null;
757
+ const n = Y(r) ? r : r?.getRootNode ? r.getRootNode({ composed: !0 }) : null, o = Y(n), i = o ? n.adoptedStyleSheets : typeof document < "u" ? document.adoptedStyleSheets : null;
758
+ if (!i) return null;
759
+ const s = `${t || ""}:${e}`;
756
760
  let a;
757
761
  if (o) {
758
- let u = tt.get(n);
759
- u || (u = /* @__PURE__ */ new Map(), tt.set(n, u)), a = u.get(i), a || (a = new CSSStyleSheet(), u.set(i, a), s.includes(a) || s.push(a));
762
+ let u = Xe.get(n);
763
+ u || (u = /* @__PURE__ */ new Map(), Xe.set(n, u)), a = u.get(s), a || (a = new CSSStyleSheet(), u.set(s, a), i.includes(a) || i.push(a));
760
764
  } else
761
- a = et.get(i), a || (a = new CSSStyleSheet(), et.set(i, a), s.includes(a) || s.push(a));
765
+ a = Qe.get(s), a || (a = new CSSStyleSheet(), Qe.set(s, a), i.includes(a) || i.push(a));
762
766
  if (t) {
763
767
  let u;
764
768
  if (o) {
765
- let d = pe.get(n);
766
- d || (d = /* @__PURE__ */ new Map(), pe.set(n, d)), u = d.get(t);
767
- } else u = rt.get(t);
768
- if (!u && (u = _t(a, t), u))
769
+ let d = ce.get(n);
770
+ d || (d = /* @__PURE__ */ new Map(), ce.set(n, d)), u = d.get(t);
771
+ } else u = Je.get(t);
772
+ if (!u && (u = Pt(a, t), u))
769
773
  if (o) {
770
- let d = pe.get(n);
771
- d || (d = /* @__PURE__ */ new Map(), pe.set(n, d)), d.set(t, u);
772
- } else rt.set(t, u);
774
+ let d = ce.get(n);
775
+ d || (d = /* @__PURE__ */ new Map(), ce.set(n, d)), d.set(t, u);
776
+ } else Je.set(t, u);
773
777
  if (u) {
774
- let d = Array.from(u.cssRules || []).findIndex((m) => m instanceof CSSStyleRule && m.selectorText?.trim?.() === e?.trim?.());
778
+ let d = Array.from(u.cssRules || []).findIndex((y) => y instanceof CSSStyleRule && y.selectorText?.trim?.() === e?.trim?.());
775
779
  if (d === -1) try {
776
780
  d = u.insertRule(`${e} {}`, u.cssRules.length);
777
781
  } catch {
@@ -788,10 +792,10 @@ var cn = (e) => {
788
792
  }
789
793
  const c = a.cssRules[l];
790
794
  return c instanceof CSSStyleRule ? c : null;
791
- }, ht = !1, X = "", Be = !1, fn = (e) => {
792
- const t = [...e?.length ? e : Rr];
795
+ }, dt = !1, G = "", $e = !1, en = (e) => {
796
+ const t = [...e?.length ? e : Sr];
793
797
  return [...new Set(t.filter(Boolean))];
794
- }, yt = (e, t, r = ce) => `${e}\0${[...t].sort().join(",")}\0${r === !1 ? "" : r}`, se = (e = typeof document < "u" ? document.documentElement : null, t) => {
798
+ }, pt = (e, t, r = se) => `${e}\0${[...t].sort().join(",")}\0${r === !1 ? "" : r}`, ne = (e = typeof document < "u" ? document.documentElement : null, t) => {
795
799
  if (!e || typeof getComputedStyle != "function") return "";
796
800
  const r = getComputedStyle(e), n = [
797
801
  e.getAttribute?.("data-theme") || e.getAttribute?.("theme") || "",
@@ -804,64 +808,64 @@ var cn = (e) => {
804
808
  n.push(t.getAttribute?.("data-theme") || "", o.getPropertyValue("--base-color").trim());
805
809
  }
806
810
  return n.join("|");
807
- }, ye = (e, t, r) => {
811
+ }, fe = (e, t, r) => {
808
812
  const n = t.getPropertyValue(r)?.trim();
809
813
  n && e.set(r, n);
810
- }, dn = new Set(Rt), mt = (e) => e.startsWith("--") ? 2 : dn.has(e) ? 0 : 1, pn = (e, t) => {
814
+ }, tn = new Set(xt), ht = (e) => e.startsWith("--") ? 2 : tn.has(e) ? 0 : 1, rn = (e, t) => {
811
815
  const r = /* @__PURE__ */ new Map(), n = new Set(t);
812
- if (n.has("colors")) for (const o of Rt) ye(r, e, o);
813
- if (n.has("typography")) for (const o of gr) ye(r, e, o);
814
- if (n.has("motion")) for (const o of wr) ye(r, e, o);
816
+ if (n.has("colors")) for (const o of xt) fe(r, e, o);
817
+ if (n.has("typography")) for (const o of cr) fe(r, e, o);
818
+ if (n.has("motion")) for (const o of ur) fe(r, e, o);
815
819
  if (n.has("tokens") || n.has("colors")) for (let o = 0; o < e.length; o++) {
816
- const s = e.item(o);
817
- s.startsWith("--") && (n.has("tokens") || Dr(s)) && ye(r, e, s);
820
+ const i = e.item(o);
821
+ i.startsWith("--") && (n.has("tokens") || Pr(i)) && fe(r, e, i);
818
822
  }
819
823
  return r;
820
- }, hn = (e, t, r = At, n = ce) => {
821
- const o = [], s = [...t].sort((l, c) => mt(l[0]) - mt(c[0]));
822
- for (const [l, c] of s) {
824
+ }, nn = (e, t, r = Et, n = se) => {
825
+ const o = [], i = [...t].sort((l, c) => ht(l[0]) - ht(c[0]));
826
+ for (const [l, c] of i) {
823
827
  if (!l || !c) continue;
824
828
  const u = c.replace(/\s*!important\s*$/i, "").trim();
825
829
  u && o.push(`${l}: ${u} !important;`);
826
830
  }
827
831
  if (!o.length) return "";
828
- const i = `${e} {
832
+ const s = `${e} {
829
833
  ${o.join(`
830
834
  `)}
831
835
  }`, a = n ? `@media ${n} {
832
- ${i}
833
- }` : i;
834
- return [We(r), He(r, a)].filter(Boolean).join("");
835
- }, qt = (e) => {
836
+ ${s}
837
+ }` : s;
838
+ return [Ne(r), De(r, a)].filter(Boolean).join("");
839
+ }, _t = (e) => {
836
840
  if (!e || e.nodeType !== 1) return [];
837
- const t = /* @__PURE__ */ new Set([e]), r = e.closest?.(Tr.join(", "));
841
+ const t = /* @__PURE__ */ new Set([e]), r = e.closest?.(vr.join(", "));
838
842
  return r instanceof HTMLElement && t.add(r), [...t];
839
- }, zt = (e) => e ? e.classList?.contains("view-settings") || e.closest?.(".view-settings") ? Pt : e.classList?.contains("view-explorer") || e.closest?.(".view-explorer") || e.querySelector?.("ui-file-manager") ? Lt : [] : [], yn = (e, t = Ar, r = !0) => {
843
+ }, Vt = (e) => e ? e.classList?.contains("view-settings") || e.closest?.(".view-settings") ? Mt : e.classList?.contains("view-explorer") || e.closest?.(".view-explorer") || e.querySelector?.("ui-file-manager") ? kt : [] : [], on = (e, t = gr, r = !0) => {
840
844
  if (!e || !t.length) return [];
841
- const n = je(e), o = r ? me : (i, a) => {
845
+ const n = qe(e), o = r ? de : (s, a) => {
842
846
  try {
843
- const l = i.querySelector(a);
847
+ const l = s.querySelector(a);
844
848
  return l instanceof HTMLElement ? l : null;
845
849
  } catch {
846
850
  return null;
847
851
  }
848
- }, s = /* @__PURE__ */ new Map();
849
- for (const i of t) {
850
- const a = String(i || "").trim();
852
+ }, i = /* @__PURE__ */ new Map();
853
+ for (const s of t) {
854
+ const a = String(s || "").trim();
851
855
  if (!a) continue;
852
856
  const l = o(e, a);
853
857
  if (!l || l === e) continue;
854
- const c = l.getRootNode() === e.getRootNode() ? `${n} ${a}` : a, u = s.get(l);
855
- u ? u.includes(c) || u.push(c) : s.set(l, [c]);
858
+ const c = l.getRootNode() === e.getRootNode() ? `${n} ${a}` : a, u = i.get(l);
859
+ u ? u.includes(c) || u.push(c) : i.set(l, [c]);
856
860
  }
857
- return [...s].map(([i, a]) => ({
858
- el: i,
861
+ return [...i].map(([s, a]) => ({
862
+ el: s,
859
863
  selector: a.join(", ")
860
864
  }));
861
- }, Wt = (e) => {
865
+ }, Ft = (e) => {
862
866
  const t = e.getRootNode?.();
863
867
  return typeof ShadowRoot < "u" && t instanceof ShadowRoot ? t.adoptedStyleSheets ?? null : typeof document < "u" ? document.adoptedStyleSheets ?? null : null;
864
- }, Ht = (e, t) => {
868
+ }, Nt = (e, t) => {
865
869
  const r = e.getRootNode?.();
866
870
  try {
867
871
  if (typeof ShadowRoot < "u" && r instanceof ShadowRoot) {
@@ -871,9 +875,9 @@ ${i}
871
875
  typeof document < "u" && (document.adoptedStyleSheets = t);
872
876
  } catch {
873
877
  }
874
- }, jt = (e, t) => {
875
- if (t.sheet && z()) {
876
- const r = Wt(e);
878
+ }, Dt = (e, t) => {
879
+ if (t.sheet && D()) {
880
+ const r = Ft(e);
877
881
  if (!r) return;
878
882
  if (r.includes(t.sheet)) {
879
883
  t.adopted = !0;
@@ -883,33 +887,33 @@ ${i}
883
887
  r.push(t.sheet), t.adopted = !0;
884
888
  return;
885
889
  } catch {
886
- Ht(e, [...r, t.sheet]), t.adopted = !0;
890
+ Nt(e, [...r, t.sheet]), t.adopted = !0;
887
891
  return;
888
892
  }
889
893
  }
890
894
  t.styleEl && typeof document < "u" && (t.styleEl.isConnected || document.head?.append(t.styleEl), t.adopted = !0);
891
- }, q = (e, t) => {
892
- if (t.sheet && z()) {
893
- const r = Wt(e);
895
+ }, N = (e, t) => {
896
+ if (t.sheet && D()) {
897
+ const r = Ft(e);
894
898
  if (r) {
895
899
  const n = r.indexOf(t.sheet);
896
900
  if (n !== -1) try {
897
901
  r.splice(n, 1);
898
902
  } catch {
899
- Ht(e, r.filter((o) => o !== t.sheet));
903
+ Nt(e, r.filter((o) => o !== t.sheet));
900
904
  }
901
905
  }
902
906
  }
903
907
  t.styleEl?.remove(), t.adopted = !1;
904
- }, Kt = (e, t) => {
908
+ }, qt = (e, t) => {
905
909
  if (e.cssText = t, !t) return !1;
906
- if (e.sheet && z()) try {
910
+ if (e.sheet && D()) try {
907
911
  return e.sheet.replaceSync(t), !0;
908
912
  } catch (r) {
909
913
  return console.warn("[style-lib] bake replaceSync failed", r), !1;
910
914
  }
911
915
  return e.styleEl ? (e.styleEl.textContent = t, !0) : !1;
912
- }, Ye = (e, t) => {
916
+ }, We = (e, t) => {
913
917
  const r = L.get(e.cacheKey);
914
918
  r?.timer && clearTimeout(r.timer);
915
919
  const n = {
@@ -922,187 +926,187 @@ ${i}
922
926
  t > 0 && typeof setTimeout == "function" && (n.timer = setTimeout(() => {
923
927
  L.get(e.cacheKey) === n && L.delete(e.cacheKey);
924
928
  }, t)), L.set(e.cacheKey, n);
925
- }, Yt = (e) => {
929
+ }, zt = (e) => {
926
930
  const t = L.get(e);
927
931
  t?.timer && clearTimeout(t.timer), L.delete(e);
928
- }, mn = () => {
932
+ }, sn = () => {
929
933
  for (const e of L.values()) e.timer && clearTimeout(e.timer);
930
934
  L.clear();
931
- }, Sn = (e, t = ze) => {
935
+ }, an = (e, t = Fe) => {
932
936
  const r = T.get(e);
933
- r && (r.adopted && q(e, r), U.delete(e), r.cssText && Ye(r, t));
934
- }, vn = (e, t = ze) => {
937
+ r && (r.adopted && N(e, r), U.delete(e), r.cssText && We(r, t));
938
+ }, ln = (e, t = Fe) => {
935
939
  const r = T.get(e);
936
940
  if (!r || !e.isConnected) return;
937
- const n = se(void 0, e), o = L.get(r.cacheKey);
938
- if (!r.cssText && o && o.fingerprint === n && (Kt(r, o.cssText), r.fingerprint = o.fingerprint), !r.cssText || r.fingerprint !== n) {
939
- ae(e, {
941
+ const n = ne(void 0, e), o = L.get(r.cacheKey);
942
+ if (!r.cssText && o && o.fingerprint === n && (qt(r, o.cssText), r.fingerprint = o.fingerprint), !r.cssText || r.fingerprint !== n) {
943
+ oe(e, {
940
944
  categories: r.categories,
941
945
  cacheMs: t,
942
- layer: At
946
+ layer: Et
943
947
  });
944
948
  return;
945
949
  }
946
- jt(e, r), U.add(e);
947
- }, Y = null, gn = () => (Y || typeof IntersectionObserver > "u" || (Y = new IntersectionObserver((e) => {
950
+ Dt(e, r), U.add(e);
951
+ }, j = null, cn = () => (j || typeof IntersectionObserver > "u" || (j = new IntersectionObserver((e) => {
948
952
  for (const t of e) {
949
953
  const r = t.target;
950
- T.has(r) && (t.isIntersecting && r.isConnected ? vn(r) : Sn(r));
954
+ T.has(r) && (t.isIntersecting && r.isConnected ? ln(r) : an(r));
951
955
  }
952
- }, { threshold: 0 })), Y), wn = (e, t, r, n = ce) => {
956
+ }, { threshold: 0 })), j), un = (e, t, r, n = se) => {
953
957
  let o = T.get(e);
954
958
  if (o)
955
- return o.selector = t, o.categories = r, o.media = n, o.cacheKey = yt(t, r, n), o;
956
- const s = z();
959
+ return o.selector = t, o.categories = r, o.media = n, o.cacheKey = pt(t, r, n), o;
960
+ const i = D();
957
961
  return o = {
958
- sheet: s ? new CSSStyleSheet() : null,
959
- styleEl: s || typeof document > "u" ? null : document.createElement("style"),
962
+ sheet: i ? new CSSStyleSheet() : null,
963
+ styleEl: i || typeof document > "u" ? null : document.createElement("style"),
960
964
  selector: t,
961
965
  categories: r,
962
966
  cssText: "",
963
967
  fingerprint: "",
964
968
  adopted: !1,
965
- cacheKey: yt(t, r, n),
969
+ cacheKey: pt(t, r, n),
966
970
  media: n
967
- }, o.styleEl && (o.styleEl.dataset.uxBaked = "", o.styleEl.dataset.owner = "style-lib"), T.set(e, o), gn()?.observe(e), o;
968
- }, bn = () => {
969
- Be = !1;
970
- const e = [...$e];
971
- $e.clear();
971
+ }, o.styleEl && (o.styleEl.dataset.uxBaked = "", o.styleEl.dataset.owner = "style-lib"), T.set(e, o), cn()?.observe(e), o;
972
+ }, fn = () => {
973
+ $e = !1;
974
+ const e = [...Ae];
975
+ Ae.clear();
972
976
  for (const t of e) {
973
977
  if (!t.isConnected || !T.has(t)) continue;
974
978
  const r = T.get(t);
975
- ae(t, r ? {
979
+ oe(t, r ? {
976
980
  categories: r.categories,
977
981
  selector: r.selector,
978
982
  media: r.media
979
983
  } : {});
980
984
  }
981
- }, Zt = (e) => {
982
- $e.add(e), !Be && (Be = !0, queueMicrotask(bn));
983
- }, xe = (e = "theme") => {
984
- const t = se();
985
- if (!(e !== "force" && t === X && X)) {
986
- X = t, mn();
985
+ }, Wt = (e) => {
986
+ Ae.add(e), !$e && ($e = !0, queueMicrotask(fn));
987
+ }, be = (e = "theme") => {
988
+ const t = ne();
989
+ if (!(e !== "force" && t === G && G)) {
990
+ G = t, sn();
987
991
  for (const r of [...U]) {
988
992
  const n = T.get(r);
989
993
  if (!n) {
990
994
  U.delete(r);
991
995
  continue;
992
996
  }
993
- q(r, n), n.cssText = "", n.fingerprint = "", Zt(r);
997
+ N(r, n), n.cssText = "", n.fingerprint = "", Wt(r);
994
998
  }
995
999
  }
996
- }, kn = () => {
997
- if (!(ht || typeof document > "u")) {
998
- ht = !0, X = se(), Dt((e) => {
999
- if (se() !== X) {
1000
- xe("style-tree");
1000
+ }, dn = () => {
1001
+ if (!(dt || typeof document > "u")) {
1002
+ dt = !0, G = ne(), Bt((e) => {
1003
+ if (ne() !== G) {
1004
+ be("style-tree");
1001
1005
  return;
1002
1006
  }
1003
- e instanceof HTMLElement && T.has(e) && Zt(e);
1007
+ e instanceof HTMLElement && T.has(e) && Wt(e);
1004
1008
  });
1005
1009
  try {
1006
- new MutationObserver(() => xe("theme-attr")).observe(document.documentElement, {
1010
+ new MutationObserver(() => be("theme-attr")).observe(document.documentElement, {
1007
1011
  attributes: !0,
1008
- attributeFilter: [...br]
1012
+ attributeFilter: [...fr]
1009
1013
  });
1010
1014
  } catch {
1011
1015
  }
1012
1016
  try {
1013
- matchMedia?.("(prefers-color-scheme: dark)")?.addEventListener?.("change", () => xe("color-scheme"));
1017
+ matchMedia?.("(prefers-color-scheme: dark)")?.addEventListener?.("change", () => be("color-scheme"));
1014
1018
  } catch {
1015
1019
  }
1016
1020
  }
1017
- }, ae = (e, t = {}) => {
1021
+ }, oe = (e, t = {}) => {
1018
1022
  if (!e || e.nodeType !== 1 || typeof getComputedStyle != "function") return null;
1019
- kn();
1020
- const r = fn(t.categories), n = t.layer || "ux-baked", o = t.cacheMs ?? 3e4, s = t.media === void 0 ? ce : t.media, i = t.selector?.trim() || je(e), a = se(void 0, e), l = wn(e, i, r, s);
1023
+ dn();
1024
+ const r = en(t.categories), n = t.layer || "ux-baked", o = t.cacheMs ?? 3e4, i = t.media === void 0 ? se : t.media, s = t.selector?.trim() || qe(e), a = ne(void 0, e), l = un(e, s, r, i);
1021
1025
  l.fingerprint = a;
1022
1026
  const c = L.get(l.cacheKey);
1023
1027
  let u = "";
1024
1028
  if (c && c.fingerprint === a && c.cssText) u = c.cssText;
1025
1029
  else {
1026
1030
  const d = getComputedStyle(e);
1027
- u = hn(i, pn(d, r), n, s);
1031
+ u = nn(s, rn(d, r), n, i);
1028
1032
  }
1029
- return u ? (Kt(l, u), Ye(l, o), qr(e) ? (jt(e, l), U.add(e)) : (q(e, l), U.delete(e)), l) : (q(e, l), U.delete(e), l);
1030
- }, Ve = (e, t = !0) => {
1033
+ return u ? (qt(l, u), We(l, o), Or(e) ? (Dt(e, l), U.add(e)) : (N(e, l), U.delete(e)), l) : (N(e, l), U.delete(e), l);
1034
+ }, Ue = (e, t = !0) => {
1031
1035
  if (!e) return;
1032
1036
  const r = T.get(e);
1033
- r && (q(e, r), U.delete(e), Y?.unobserve(e), t && r.cssText ? Ye(r, ze) : Yt(r.cacheKey), T.delete(e));
1034
- }, Mo = (e, t) => {
1037
+ r && (N(e, r), U.delete(e), j?.unobserve(e), t && r.cssText ? We(r, Fe) : zt(r.cacheKey), T.delete(e));
1038
+ }, so = (e, t) => {
1035
1039
  if (!e) return null;
1036
1040
  const r = T.get(e);
1037
- return r && (q(e, r), r.cssText = "", Yt(r.cacheKey)), ae(e, t ?? (r ? {
1041
+ return r && (N(e, r), r.cssText = "", zt(r.cacheKey)), oe(e, t ?? (r ? {
1038
1042
  categories: r.categories,
1039
1043
  selector: r.selector,
1040
1044
  media: r.media
1041
1045
  } : {}));
1042
- }, Ro = (e) => e ? T.get(e) : void 0, Cn = (e, t = {}) => {
1046
+ }, io = (e) => e ? T.get(e) : void 0, pn = (e, t = {}) => {
1043
1047
  const r = {
1044
- media: ce,
1048
+ media: se,
1045
1049
  pierceShadow: t.pierceShadow !== !1,
1046
1050
  ...t
1047
- }, n = qt(e), o = yn(e, r.also ?? zt(e), r.pierceShadow !== !1), s = [], i = /* @__PURE__ */ new Set();
1051
+ }, n = _t(e), o = on(e, r.also ?? Vt(e), r.pierceShadow !== !1), i = [], s = /* @__PURE__ */ new Set();
1048
1052
  for (const a of n) {
1049
- const l = ae(a, r);
1050
- l && s.push(l);
1053
+ const l = oe(a, r);
1054
+ l && i.push(l);
1051
1055
  }
1052
1056
  for (const { el: a, selector: l } of o) {
1053
1057
  if (n.includes(a)) continue;
1054
- const c = ae(a, {
1058
+ const c = oe(a, {
1055
1059
  ...r,
1056
1060
  selector: l
1057
1061
  });
1058
- c && s.push(c), i.add(a);
1062
+ c && i.push(c), s.add(a);
1059
1063
  }
1060
1064
  if (e) {
1061
- const a = Z.get(e);
1065
+ const a = K.get(e);
1062
1066
  if (a)
1063
- for (const l of a) !i.has(l) && !n.includes(l) && Ve(l, !0);
1064
- i.size ? Z.set(e, i) : Z.delete(e);
1067
+ for (const l of a) !s.has(l) && !n.includes(l) && Ue(l, !0);
1068
+ s.size ? K.set(e, s) : K.delete(e);
1065
1069
  }
1066
- return s;
1067
- }, To = (e, t = !0) => {
1070
+ return i;
1071
+ }, ao = (e, t = !0) => {
1068
1072
  if (!e) return;
1069
- const r = Z.get(e);
1070
- Z.delete(e);
1071
- for (const n of qt(e)) Ve(n, t);
1072
- if (r) for (const n of r) Ve(n, t);
1073
- }, Ao = (e, t) => {
1073
+ const r = K.get(e);
1074
+ K.delete(e);
1075
+ for (const n of _t(e)) Ue(n, t);
1076
+ if (r) for (const n of r) Ue(n, t);
1077
+ }, lo = (e, t) => {
1074
1078
  const r = (n = !0) => {
1075
- if (Cn(e, t), !n || !e) return;
1076
- const o = t?.also ?? zt(e), s = t?.pierceShadow !== !1;
1077
- o.length && o.some((i) => !(s ? me(e, i) : e.querySelector(i))) && typeof requestAnimationFrame == "function" && requestAnimationFrame(() => r(!1));
1079
+ if (pn(e, t), !n || !e) return;
1080
+ const o = t?.also ?? Vt(e), i = t?.pierceShadow !== !1;
1081
+ o.length && o.some((s) => !(i ? de(e, s) : e.querySelector(s))) && typeof requestAnimationFrame == "function" && requestAnimationFrame(() => r(!1));
1078
1082
  };
1079
1083
  if (!e || typeof requestAnimationFrame != "function") {
1080
1084
  r(!1);
1081
1085
  return;
1082
1086
  }
1083
1087
  requestAnimationFrame(() => r(!0));
1084
- }, Ze = (e) => {
1088
+ }, He = (e) => {
1085
1089
  const t = e?.shadowRoot;
1086
1090
  if (!t) return;
1087
- const r = Ie.get(e) || [];
1088
- for (const n of r) ie(n);
1091
+ const r = Le.get(e) || [];
1092
+ for (const n of r) re(n);
1089
1093
  try {
1090
1094
  const n = t.adoptedStyleSheets || [];
1091
1095
  t.adoptedStyleSheets = [...r.filter((o) => !n.includes(o)), .../* @__PURE__ */ new Set([...n])];
1092
1096
  } catch {
1093
1097
  }
1094
- }, Ee = (e, t) => {
1095
- let r = Ie.get(e);
1096
- r || Ie.set(e, r = []), t && r.indexOf(t) < 0 && r.push(t), ie(t), Ze(e);
1097
- }, J = (e, t) => {
1098
+ }, xe = (e, t) => {
1099
+ let r = Le.get(e);
1100
+ r || Le.set(e, r = []), t && r.indexOf(t) < 0 && r.push(t), re(t), He(e);
1101
+ }, Q = (e, t) => {
1098
1102
  const r = e?.shadowRoot;
1099
1103
  if (!r || !t) return null;
1100
- let n = r.querySelector?.(`style[${ot}]`);
1101
- return n ? n.textContent !== t && (n.textContent = t) : (n = O(t, r, ""), n && n.setAttribute(ot, "")), n;
1102
- }, Lo = (e = typeof document < "u" ? document : null) => {
1104
+ let n = r.querySelector?.(`style[${tt}]`);
1105
+ return n ? n.textContent !== t && (n.textContent = t) : (n = O(t, r, ""), n && n.setAttribute(tt, "")), n;
1106
+ }, co = (e = typeof document < "u" ? document : null) => {
1103
1107
  if (!e) return;
1104
1108
  const t = (n) => {
1105
- n?.shadowRoot && (J(n, Gt(n)), Ze(n));
1109
+ n?.shadowRoot && (Q(n, Ht(n)), He(n));
1106
1110
  };
1107
1111
  e.nodeType === 1 && t(e);
1108
1112
  const r = (n) => {
@@ -1112,35 +1116,35 @@ ${i}
1112
1116
  } catch {
1113
1117
  return;
1114
1118
  }
1115
- for (let s = 0; s < o.length; s++) {
1116
- const i = o[s];
1117
- i.shadowRoot && (t(i), r(i.shadowRoot));
1119
+ for (let i = 0; i < o.length; i++) {
1120
+ const s = o[i];
1121
+ s.shadowRoot && (t(s), r(s.shadowRoot));
1118
1122
  }
1119
1123
  };
1120
1124
  r(e);
1121
- }, Gt = (e) => {
1125
+ }, Ht = (e) => {
1122
1126
  const t = e?.styles;
1123
1127
  if (typeof t == "string") return t;
1124
1128
  if (typeof t == "function") try {
1125
1129
  const r = t.call(e);
1126
- return typeof r == "string" ? r : V(r);
1130
+ return typeof r == "string" ? r : _(r);
1127
1131
  } catch {
1128
1132
  return null;
1129
1133
  }
1130
- return V(t);
1131
- }, xn = (e) => {
1132
- e && (e.styles != null && Qt(e, e.styles), Ze(e), J(e, Gt(e)));
1133
- }, Me = [], Re = !1, En = (e) => {
1134
- !e || !(e instanceof Element) || we.has(e) || (we.add(e), Me.push(e), !Re && (Re = !0, queueMicrotask(() => {
1135
- Re = !1;
1136
- const t = Me;
1137
- Me = [];
1134
+ return _(t);
1135
+ }, hn = (e) => {
1136
+ e && (e.styles != null && jt(e, e.styles), He(e), Q(e, Ht(e)));
1137
+ }, Ce = [], Ee = !1, yn = (e) => {
1138
+ !e || !(e instanceof Element) || Se.has(e) || (Se.add(e), Ce.push(e), !Ee && (Ee = !0, queueMicrotask(() => {
1139
+ Ee = !1;
1140
+ const t = Ce;
1141
+ Ce = [];
1138
1142
  for (const r of t)
1139
- we.delete(r), r.isConnected && xn(r);
1143
+ Se.delete(r), r.isConnected && hn(r);
1140
1144
  })));
1141
1145
  };
1142
- Dt((e) => En(e));
1143
- var Qt = (e, t) => {
1146
+ Bt((e) => yn(e));
1147
+ var jt = (e, t) => {
1144
1148
  if (!t) return null;
1145
1149
  let r = t;
1146
1150
  if (typeof t == "function") try {
@@ -1150,112 +1154,63 @@ var Qt = (e, t) => {
1150
1154
  return console.warn("Error calling styles function:", a), null;
1151
1155
  }
1152
1156
  if (r && typeof CSSStyleSheet < "u" && r instanceof CSSStyleSheet)
1153
- return Ee(e, r), J(e, V(r));
1157
+ return xe(e, r), Q(e, _(r));
1154
1158
  if (r instanceof Promise)
1155
1159
  return r.then((a) => {
1156
- a instanceof CSSStyleSheet ? Ee(e, a) : a != null && Qt(e, a);
1160
+ a instanceof CSSStyleSheet ? xe(e, a) : a != null && jt(e, a);
1157
1161
  }).catch((a) => {
1158
1162
  console.warn("Error loading adopted stylesheet:", a);
1159
1163
  }), null;
1160
1164
  if (typeof r == "string" || r instanceof Blob || r instanceof File) {
1161
- const a = Nt(r, "");
1165
+ const a = Ut(r, "");
1162
1166
  if (a) {
1163
1167
  const l = (c) => {
1164
- Ee(e, c);
1168
+ xe(e, c);
1165
1169
  };
1166
1170
  return a instanceof Promise ? (a.then((c) => {
1167
- l(c), J(e, typeof r == "string" ? r : V(c));
1171
+ l(c), Q(e, typeof r == "string" ? r : _(c));
1168
1172
  }).catch((c) => {
1169
1173
  console.warn("Error loading adopted stylesheet:", c);
1170
- }), null) : (l(a), J(e, typeof r == "string" ? r : V(a)));
1174
+ }), null) : (l(a), Q(e, typeof r == "string" ? r : _(a)));
1171
1175
  }
1172
1176
  }
1173
- const n = typeof t == "function" || typeof t == "object" ? yr : hr, o = n.get(t);
1174
- let s = o?.styleElement, i = o?.vars;
1177
+ const n = typeof t == "function" || typeof t == "object" ? sr : or, o = n.get(t);
1178
+ let i = o?.styleElement, s = o?.vars;
1175
1179
  if (!o) {
1176
1180
  let a = "", l = [];
1177
- typeof r == "string" ? a = r || "" : typeof r == "object" && r != null && (r instanceof HTMLStyleElement ? s = r : (a = typeof r.css == "string" ? r.css : typeof r == "string" ? r : String(r), l = r?.props ?? l, i = r?.vars ?? i)), !s && a && (s = O(a, e, "ux-layer")), n.set(t, {
1181
+ typeof r == "string" ? a = r || "" : typeof r == "object" && r != null && (r instanceof HTMLStyleElement ? i = r : (a = typeof r.css == "string" ? r.css : typeof r == "string" ? r : String(r), l = r?.props ?? l, s = r?.vars ?? s)), !i && a && (i = O(a, e, "ux-layer")), n.set(t, {
1178
1182
  css: a,
1179
1183
  props: l,
1180
- vars: i,
1181
- styleElement: s
1184
+ vars: s,
1185
+ styleElement: i
1182
1186
  });
1183
1187
  }
1184
- return s;
1185
- }, Mn = /* @__PURE__ */ Symbol.for("lur.e@bank"), Po = globalThis[Mn] ??= new Ct(), Rn = /* @__PURE__ */ Symbol.for("lur.e@elMap"), Xt = globalThis[Rn] ??= new Ct(), Tn = /* @__PURE__ */ Symbol.for("lur.e@alives"), An = globalThis[Tn] ??= new FinalizationRegistry((e) => e?.()), St = /* @__PURE__ */ Symbol.for("@behavior"), Jt = (e) => !!e && typeof e == "object" && "ref" in e && typeof e?.unbind == "function", Ln = (e, t, r = "value") => {
1186
- const n = N(e), o = N(t), s = (a) => {
1187
- Oe(o, "value", $(n)?.[r ?? "value"] ?? te($(o)));
1188
- }, i = {
1189
- click: s,
1190
- input: s,
1191
- change: s
1192
- };
1193
- return s?.({ target: e }), Xe?.(e, "addEventListener", i), Oe(o, "value", e?.[r ?? "value"] ?? te($(t))), () => Xe?.(e, "removeEventListener", i);
1194
- }, Pn = (e, t, r = "") => {
1195
- N(e);
1196
- const n = N(t), o = le(r);
1197
- return dr(e, o, (i) => {
1198
- if (i.type == "attributes" && i.attributeName == o) {
1199
- const a = i?.target?.getAttribute?.(i.attributeName), l = $(n), c = te(l);
1200
- Je(i.oldValue, a) && l != null && (typeof l == "object" || typeof l == "function") && (Je(c, a) || c == null) && Oe(l, "value", a);
1201
- }
1202
- });
1203
- }, On = (e, t, r) => {
1204
- const n = Xt.get([e, t]);
1205
- if (n) {
1206
- const o = n[r]?.[1];
1207
- delete n[r], o?.();
1208
- }
1209
- }, $n = (e, t, r, n) => {
1210
- const o = Xt.getOrInsertComputed([e, t], () => ({}));
1211
- return o?.[r]?.[1]?.(), o[r] = n, !0;
1212
- }, In = (e, t, r, n, o, s) => {
1213
- const i = Jt(t) ? t : null;
1214
- i && (i.bind?.(), t = i.ref);
1215
- const a = N(e);
1216
- if (e = $(a), !e || !(e instanceof Node || e?.element instanceof Node)) return;
1217
- let l;
1218
- l && l?.abort?.(), l = new AbortController();
1219
- const c = N(t);
1220
- n?.(e, r, t);
1221
- const u = cr?.([t, "value"], (C, w, p) => {
1222
- const y = $(c), v = $(o), x = $(a), h = te(y) ?? te(C);
1223
- (!v || v?.[r] == y) && (typeof y?.[St] == "function" ? y?.[St]?.((f = C) => n(x, r, h), [
1224
- C,
1225
- r,
1226
- p
1227
- ], [
1228
- l?.signal,
1229
- r,
1230
- a
1231
- ]) : n(x, r, h));
1232
- });
1233
- let d = null;
1234
- typeof s == "boolean" && s && (n == ur && (d = Pn(e, t, r)), n == fr && (d = Ln(e, t, r))), typeof s == "function" && (d = s(e, r, t));
1235
- const m = () => {
1236
- d?.disconnect?.(), d != null && typeof d == "function" && d?.(), i?.unbind?.(), u?.(), l?.abort?.(), On?.(e, n, r);
1188
+ return i;
1189
+ }, mn = (e) => !!e && typeof e == "object" && "ref" in e && typeof e?.unbind == "function", Ie = (e, t, r, n) => {
1190
+ const o = mn(r) ? r : null;
1191
+ o && (o.bind?.(), r = o.ref), n?.(e, t, r);
1192
+ const i = Ge(e), s = Ge(r), a = rr?.([r, "value"], (c) => {
1193
+ const u = Ze(i), d = Ze(s), y = Ye(d) ?? Ye(c);
1194
+ n?.(u, t, y);
1195
+ }), l = () => {
1196
+ o?.unbind?.(), a?.();
1237
1197
  };
1238
- if (lr(t, Symbol.dispose, m), An.register(e, m), !$n(e, n, r, [t, m])) return m;
1239
- }, Ne = (e, t, r, n, o, s) => (n(e, t, Jt(r) ? r.ref : r), In(e, r, t, n, o, s)), Un = (e, t) => e.style.removeProperty(le(t)), vt = (e, t, r) => {
1240
- const n = e?.style;
1241
- return !t || typeof t != "string" || !e || !n || or(r, () => {
1242
- sr(r) || qe(r) || ar(r) ? ve(e, t, r) : r == null && Un(e, t);
1243
- }), e;
1244
- }, _n = 0, Oo = (e = {}) => ({
1198
+ return tr(r, Symbol.dispose, l), l;
1199
+ }, Sn = 0, uo = (e = {}) => ({
1245
1200
  kind: "scroll",
1246
1201
  ...e
1247
- }), $o = (e = {}) => ({
1202
+ }), fo = (e = {}) => ({
1248
1203
  kind: "view",
1249
1204
  ...e
1250
- }), Bn = class {
1251
- [Ot] = !0;
1252
- id = _n++;
1205
+ }), vn = class {
1206
+ [Rt] = !0;
1207
+ id = Sn++;
1253
1208
  #n;
1254
1209
  #e;
1255
1210
  #r;
1256
1211
  #o = /* @__PURE__ */ new Set();
1257
- #i = /* @__PURE__ */ new Set();
1258
- #s(e, t) {
1212
+ #s = /* @__PURE__ */ new Set();
1213
+ #i(e, t) {
1259
1214
  return e == null || e === "self" ? t : e === "root" ? t.ownerDocument.scrollingElement ?? t.ownerDocument.documentElement : typeof e == "object" && "value" in e && !(e instanceof Element) ? e.value ?? t : e;
1260
1215
  }
1261
1216
  #a(e) {
@@ -1267,16 +1222,16 @@ var Qt = (e, t) => {
1267
1222
  }
1268
1223
  #f(e, t) {
1269
1224
  const r = e.ownerDocument.defaultView ?? globalThis;
1270
- if (be(t)) {
1225
+ if (ve(t)) {
1271
1226
  const o = r.ScrollTimeline;
1272
1227
  return typeof o != "function" ? null : new o({
1273
- source: t.source === "nearest" || t.source == null ? this.#a(e) : this.#s(t.source, e),
1228
+ source: t.source === "nearest" || t.source == null ? this.#a(e) : this.#i(t.source, e),
1274
1229
  axis: t.axis ?? "block"
1275
1230
  });
1276
1231
  }
1277
1232
  const n = r.ViewTimeline;
1278
1233
  return typeof n != "function" ? null : new n({
1279
- subject: t.subject ? this.#s(t.subject, e) : e,
1234
+ subject: t.subject ? this.#i(t.subject, e) : e,
1280
1235
  axis: t.axis ?? "block",
1281
1236
  inset: t.inset
1282
1237
  });
@@ -1284,8 +1239,8 @@ var Qt = (e, t) => {
1284
1239
  #d(e, t, r, n) {
1285
1240
  const o = this.#f(e, n);
1286
1241
  if (!o) return this.#p(e, t, r, n);
1287
- const s = this.#u(), i = e.animate(this.#c(r), {
1288
- ...s,
1242
+ const i = this.#u(), s = e.animate(this.#c(r), {
1243
+ ...i,
1289
1244
  duration: "auto",
1290
1245
  delay: 0,
1291
1246
  endDelay: 0,
@@ -1293,40 +1248,40 @@ var Qt = (e, t) => {
1293
1248
  fill: this.#e.fill ?? "both",
1294
1249
  timeline: o
1295
1250
  });
1296
- return n.rangeStart && (i.rangeStart = n.rangeStart), n.rangeEnd && (i.rangeEnd = n.rangeEnd), t.animation = i, () => i.cancel();
1251
+ return n.rangeStart && (s.rangeStart = n.rangeStart), n.rangeEnd && (s.rangeEnd = n.rangeEnd), t.animation = s, () => s.cancel();
1297
1252
  }
1298
1253
  constructor(e, t = {}) {
1299
1254
  if (!Array.isArray(e) || e.length < 2) throw new TypeError("animatable() expects at least 2 steps");
1300
1255
  this.#n = e, this.#e = t, this.#r = this.#l(e[0]);
1301
1256
  }
1302
1257
  #p(e, t, r, n) {
1303
- const s = e.animate(this.#c(r), {
1258
+ const i = e.animate(this.#c(r), {
1304
1259
  ...this.#u(),
1305
1260
  duration: 1e4,
1306
1261
  delay: 0,
1307
1262
  iterations: 1,
1308
1263
  fill: "both"
1309
1264
  });
1310
- s.pause(), t.animation = s;
1311
- const i = be(n) ? n.source === "nearest" || n.source == null ? this.#a(e) : this.#s(n.source, e) : this.#a(e);
1265
+ i.pause(), t.animation = i;
1266
+ const s = ve(n) ? n.source === "nearest" || n.source == null ? this.#a(e) : this.#i(n.source, e) : this.#a(e);
1312
1267
  let a = 0;
1313
1268
  const l = () => {
1314
- if (ut(n)) {
1315
- const C = i === document.scrollingElement ? {
1269
+ if (at(n)) {
1270
+ const E = s === document.scrollingElement ? {
1316
1271
  top: 0,
1317
1272
  height: innerHeight
1318
- } : i.getBoundingClientRect(), w = e.getBoundingClientRect(), p = C.height + w.height;
1319
- return Math.min(1, Math.max(0, (C.top + C.height - w.top) / p));
1273
+ } : s.getBoundingClientRect(), w = e.getBoundingClientRect(), p = E.height + w.height;
1274
+ return Math.min(1, Math.max(0, (E.top + E.height - w.top) / p));
1320
1275
  }
1321
- const d = i, m = d.scrollHeight - d.clientHeight;
1322
- return m > 0 ? d.scrollTop / m : 0;
1276
+ const d = s, y = d.scrollHeight - d.clientHeight;
1277
+ return y > 0 ? d.scrollTop / y : 0;
1323
1278
  }, c = () => {
1324
1279
  cancelAnimationFrame(a), a = requestAnimationFrame(() => {
1325
- s.currentTime = l() * 1e4;
1280
+ i.currentTime = l() * 1e4;
1326
1281
  });
1327
- }, u = i === document.scrollingElement ? window : i;
1282
+ }, u = s === document.scrollingElement ? window : s;
1328
1283
  return u.addEventListener("scroll", c, { passive: !0 }), c(), () => {
1329
- cancelAnimationFrame(a), u.removeEventListener("scroll", c), s.cancel();
1284
+ cancelAnimationFrame(a), u.removeEventListener("scroll", c), i.cancel();
1330
1285
  };
1331
1286
  }
1332
1287
  get value() {
@@ -1363,21 +1318,21 @@ var Qt = (e, t) => {
1363
1318
  return e != null && typeof e == "object" && "value" in e ? e.value : e;
1364
1319
  }
1365
1320
  #c(e) {
1366
- const t = this.#n.map((s) => this.#l(s)), r = t.length, n = this.#e.offsets, o = this.#e.easing;
1367
- return t.map((s, i) => {
1368
- const a = { offset: n?.[i] ?? (r > 1 ? i / (r - 1) : 0) };
1369
- Array.isArray(o) && o[i] && (a.easing = o[i]);
1370
- let l = s;
1371
- return e.mode === "property" && e.unit != null && typeof s == "number" && (l = `${s}${e.unit}`), e.mode === "custom-property" && typeof s != "string" && (l = String(s)), a[e.target] = l, a;
1321
+ const t = this.#n.map((i) => this.#l(i)), r = t.length, n = this.#e.offsets, o = this.#e.easing;
1322
+ return t.map((i, s) => {
1323
+ const a = { offset: n?.[s] ?? (r > 1 ? s / (r - 1) : 0) };
1324
+ Array.isArray(o) && o[s] && (a.easing = o[s]);
1325
+ let l = i;
1326
+ return e.mode === "property" && e.unit != null && typeof i == "number" && (l = `${i}${e.unit}`), e.mode === "custom-property" && typeof i != "string" && (l = String(i)), a[e.target] = l, a;
1372
1327
  });
1373
1328
  }
1374
1329
  #u() {
1375
1330
  const e = this.#e;
1376
1331
  return {
1377
- duration: re(e.duration, 300),
1378
- delay: re(e.delay, 0),
1332
+ duration: J(e.duration, 300),
1333
+ delay: J(e.delay, 0),
1379
1334
  endDelay: e.endDelay ?? 0,
1380
- iterations: Fr(e.iterations),
1335
+ iterations: Lr(e.iterations),
1381
1336
  direction: e.direction ?? "normal",
1382
1337
  fill: e.fill ?? "both",
1383
1338
  composite: e.composite,
@@ -1392,17 +1347,17 @@ var Qt = (e, t) => {
1392
1347
  }
1393
1348
  }, n = this.#e.trigger ?? "mount";
1394
1349
  let o;
1395
- if (be(n) || ut(n)) o = this.#d(e, r, t, n);
1350
+ if (ve(n) || at(n)) o = this.#d(e, r, t, n);
1396
1351
  else {
1397
- const s = () => {
1352
+ const i = () => {
1398
1353
  r.animation?.cancel();
1399
- const i = e.animate(this.#c(t), this.#u());
1400
- return r.animation = i, this.#h(i, t), i;
1354
+ const s = e.animate(this.#c(t), this.#u());
1355
+ return r.animation = s, this.#h(s, t), s;
1401
1356
  };
1402
- o = this.#y(e, r, s);
1357
+ o = this.#y(e, r, i);
1403
1358
  }
1404
- return this.#i.add(r), r.cleanup = () => {
1405
- o(), this.#i.delete(r);
1359
+ return this.#s.add(r), r.cleanup = () => {
1360
+ o(), this.#s.delete(r);
1406
1361
  }, r.cleanup;
1407
1362
  }
1408
1363
  #h(e, t) {
@@ -1413,9 +1368,9 @@ var Qt = (e, t) => {
1413
1368
  });
1414
1369
  }
1415
1370
  #y(e, t, r) {
1416
- const n = this.#e.trigger ?? "mount", o = this.#e.reverseOnExit ?? !0, s = () => {
1371
+ const n = this.#e.trigger ?? "mount", o = this.#e.reverseOnExit ?? !0, i = () => {
1417
1372
  !t.animation || t.animation.playState === "idle" ? r() : (t.animation.playbackRate = Math.abs(t.animation.playbackRate || 1), t.animation.play());
1418
- }, i = () => {
1373
+ }, s = () => {
1419
1374
  t.animation && t.animation.reverse();
1420
1375
  };
1421
1376
  if (n === "mount")
@@ -1424,8 +1379,8 @@ var Qt = (e, t) => {
1424
1379
  if (n === "manual") return () => {
1425
1380
  };
1426
1381
  if (n === "hover" || n === "focus") {
1427
- const a = n === "hover" ? "pointerenter" : "focusin", l = n === "hover" ? "pointerleave" : "focusout", c = () => s(), u = () => {
1428
- o && i();
1382
+ const a = n === "hover" ? "pointerenter" : "focusin", l = n === "hover" ? "pointerleave" : "focusout", c = () => i(), u = () => {
1383
+ o && s();
1429
1384
  };
1430
1385
  return e.addEventListener(a, c), e.addEventListener(l, u), () => {
1431
1386
  e.removeEventListener(a, c), e.removeEventListener(l, u);
@@ -1434,7 +1389,7 @@ var Qt = (e, t) => {
1434
1389
  if (n === "click") {
1435
1390
  let a = !0;
1436
1391
  const l = () => {
1437
- a ? s() : i(), a = !a;
1392
+ a ? i() : s(), a = !a;
1438
1393
  };
1439
1394
  return e.addEventListener("click", l), () => e.removeEventListener("click", l);
1440
1395
  }
@@ -1443,12 +1398,12 @@ var Qt = (e, t) => {
1443
1398
  return r(), () => {
1444
1399
  };
1445
1400
  const a = new IntersectionObserver((l) => {
1446
- for (const c of l) c.isIntersecting ? s() : o && t.animation && i();
1401
+ for (const c of l) c.isIntersecting ? i() : o && t.animation && s();
1447
1402
  }, this.#e.intersection);
1448
1403
  return a.observe(e), () => a.disconnect();
1449
1404
  }
1450
1405
  if (n != null && typeof n == "object" && "value" in n) {
1451
- const a = (c) => c ? s() : i();
1406
+ const a = (c) => c ? i() : s();
1452
1407
  a(n.value);
1453
1408
  const l = typeof n.subscribe == "function" ? n.subscribe(a) : null;
1454
1409
  return () => l?.();
@@ -1457,7 +1412,7 @@ var Qt = (e, t) => {
1457
1412
  };
1458
1413
  }
1459
1414
  #t(e) {
1460
- for (const t of this.#i) t.animation && e(t.animation);
1415
+ for (const t of this.#s) t.animation && e(t.animation);
1461
1416
  return this;
1462
1417
  }
1463
1418
  play() {
@@ -1486,28 +1441,28 @@ var Qt = (e, t) => {
1486
1441
  }))), Promise.all(e).then(() => {
1487
1442
  });
1488
1443
  }
1489
- }, Io = (e, t) => new Bn(e, t), Vn = (e) => e != null && typeof e == "object" && e[Ot] === !0, Nn = 0, ee = (e) => {
1444
+ }, po = (e, t) => new vn(e, t), gn = (e) => e != null && typeof e == "object" && e[Rt] === !0, wn = 0, X = (e) => {
1490
1445
  const t = e.value?.value, r = typeof t == "number" ? t : Number(t);
1491
1446
  if (!Number.isFinite(r)) throw new TypeError(`Reactive CSS value "${String(t)}" is not finite`);
1492
1447
  return r;
1493
- }, Fn = (e) => {
1448
+ }, bn = (e) => {
1494
1449
  const t = Number(e?.value);
1495
1450
  return Number.isFinite(t) ? t : 0;
1496
- }, gt = (e, t) => {
1451
+ }, yt = (e, t) => {
1497
1452
  let r = e;
1498
- for (const n of t) r = r.replace(new RegExp(`var\\(\\s*${oe(n.marker)}\\s*\\)`, "g"), String(n.value));
1453
+ for (const n of t) r = r.replace(new RegExp(`var\\(\\s*${te(n.marker)}\\s*\\)`, "g"), String(n.value));
1499
1454
  return r;
1500
- }, Te = (e, t) => {
1501
- const r = oe(t);
1455
+ }, ke = (e, t) => {
1456
+ const r = te(t);
1502
1457
  return new RegExp(`^var\\(\\s*${r}\\s*\\)$`).test(e.trim());
1503
- }, wt = (e, t) => {
1458
+ }, mt = (e, t) => {
1504
1459
  let r = e;
1505
1460
  return r != null && typeof r == "object" && "value" in r && !(r instanceof Element) && (r = r.value), r == null || r === "" ? t ? `0${t}` : "0" : t != null && typeof r == "number" ? `${r}${t}` : String(r);
1506
- }, Ae = (e, t, r) => {
1461
+ }, Me = (e, t, r) => {
1507
1462
  if (!r) return !1;
1508
- const n = oe(t), o = oe(r);
1463
+ const n = te(t), o = te(r);
1509
1464
  return new RegExp(`^calc\\(\\s*var\\(\\s*${n}\\s*\\)\\s*\\*\\s*1${o}\\s*\\)$`, "i").test(e.trim());
1510
- }, Dn = (e, t, r, n) => {
1465
+ }, xn = (e, t, r, n) => {
1511
1466
  if (typeof t?.parseAll == "function") {
1512
1467
  const o = t.parseAll(r, n);
1513
1468
  e.set(r, ...o);
@@ -1518,7 +1473,7 @@ var Qt = (e, t) => {
1518
1473
  return;
1519
1474
  }
1520
1475
  e.set(r, n);
1521
- }, er = (e) => {
1476
+ }, Kt = (e) => {
1522
1477
  const t = [];
1523
1478
  let r = 0;
1524
1479
  for (; r < e.length; ) {
@@ -1527,21 +1482,21 @@ var Qt = (e, t) => {
1527
1482
  r += o[0].length;
1528
1483
  continue;
1529
1484
  }
1530
- const s = /^var\(\s*(--[a-zA-Z0-9_-]+)\s*\)/.exec(n);
1531
- if (s) {
1485
+ const i = /^var\(\s*(--[a-zA-Z0-9_-]+)\s*\)/.exec(n);
1486
+ if (i) {
1532
1487
  t.push({
1533
1488
  kind: "variable",
1534
- marker: s[1]
1535
- }), r += s[0].length;
1489
+ marker: i[1]
1490
+ }), r += i[0].length;
1536
1491
  continue;
1537
1492
  }
1538
- const i = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
1539
- if (i) {
1540
- r += i[0].length;
1493
+ const s = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
1494
+ if (s) {
1495
+ r += s[0].length;
1541
1496
  const c = /^(%|[a-zA-Z]+)/.exec(e.slice(r)), u = c?.[0] ?? null;
1542
1497
  c && (r += c[0].length), t.push({
1543
1498
  kind: "number",
1544
- value: Number(i[0]),
1499
+ value: Number(s[0]),
1545
1500
  unit: u == null ? null : u.toLowerCase()
1546
1501
  });
1547
1502
  continue;
@@ -1565,7 +1520,7 @@ var Qt = (e, t) => {
1565
1520
  throw new SyntaxError(`Unsupported Typed OM numeric token near "${n}"`);
1566
1521
  }
1567
1522
  return t;
1568
- }, tr = class {
1523
+ }, Yt = class {
1569
1524
  tokens;
1570
1525
  win;
1571
1526
  reactiveByMarker;
@@ -1600,7 +1555,7 @@ var Qt = (e, t) => {
1600
1555
  return t?.kind === "symbol" && t.value === e;
1601
1556
  }
1602
1557
  createMath(e, ...t) {
1603
- const r = D(this.win, e);
1558
+ const r = F(this.win, e);
1604
1559
  if (typeof r != "function") throw new TypeError(`${e} is not supported`);
1605
1560
  return new r(...t);
1606
1561
  }
@@ -1634,18 +1589,18 @@ var Qt = (e, t) => {
1634
1589
  if (this.matchesSymbol("*")) {
1635
1590
  const o = this.index;
1636
1591
  this.consume();
1637
- const s = this.current();
1638
- if (s?.kind === "number" && s.value === 1 && typeof s.unit == "string" && (!t.multipliedByUnit || t.multipliedByUnit === s.unit.toLowerCase())) {
1592
+ const i = this.current();
1593
+ if (i?.kind === "number" && i.value === 1 && typeof i.unit == "string" && (!t.multipliedByUnit || t.multipliedByUnit === i.unit.toLowerCase())) {
1639
1594
  this.consume();
1640
- const i = M(this.win, s.unit.toLowerCase(), ee(t));
1595
+ const s = M(this.win, i.unit.toLowerCase(), X(t));
1641
1596
  return this.leaves.push({
1642
1597
  slot: t,
1643
- value: i
1644
- }), i;
1598
+ value: s
1599
+ }), s;
1645
1600
  }
1646
1601
  this.index = o;
1647
1602
  }
1648
- const n = M(this.win, "number", ee(t));
1603
+ const n = M(this.win, "number", X(t));
1649
1604
  return this.leaves.push({
1650
1605
  slot: t,
1651
1606
  value: n
@@ -1685,23 +1640,23 @@ var Qt = (e, t) => {
1685
1640
  }
1686
1641
  throw new SyntaxError(`Unsupported Typed OM function "${e}"`);
1687
1642
  }
1688
- }, qn = (e, t, r, n) => {
1689
- const o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
1690
- for (const i of r) o.set(i.marker, i);
1691
- for (const i of n) s.set(i.marker, i);
1692
- return new tr(er(e), t, o, s).parse();
1693
- }, zn = (e) => e.trim().toLowerCase() === "transform", Wn = (e, t, r, n) => {
1694
- const o = er(e), s = [], i = [], a = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
1643
+ }, Cn = (e, t, r, n) => {
1644
+ const o = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
1645
+ for (const s of r) o.set(s.marker, s);
1646
+ for (const s of n) i.set(s.marker, s);
1647
+ return new Yt(Kt(e), t, o, i).parse();
1648
+ }, En = (e) => e.trim().toLowerCase() === "transform", kn = (e, t, r, n) => {
1649
+ const o = Kt(e), i = [], s = [], a = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
1695
1650
  for (const h of r) a.set(h.marker, h);
1696
1651
  for (const h of n) l.set(h.marker, h);
1697
1652
  const c = () => M(t, "px", 0), u = () => M(t, "number", 1);
1698
1653
  let d = 0;
1699
- const m = () => o[d], C = () => {
1654
+ const y = () => o[d], E = () => {
1700
1655
  const h = o[d];
1701
1656
  if (!h) throw new SyntaxError("Unexpected end of transform expression");
1702
1657
  return d++, h;
1703
1658
  }, w = (h) => {
1704
- const f = C();
1659
+ const f = E();
1705
1660
  if (f.kind !== "symbol" || f.value !== h) throw new SyntaxError(`Expected "${h}"`);
1706
1661
  }, p = () => {
1707
1662
  const h = d;
@@ -1720,315 +1675,315 @@ var Qt = (e, t) => {
1720
1675
  if (R.kind === "symbol" && R.value === "," && f === 0) break;
1721
1676
  d++;
1722
1677
  }
1723
- const g = o.slice(h, d);
1724
- if (g.length === 0) throw new SyntaxError("Empty transform function argument");
1725
- const S = new tr(g, t, a, l).parse();
1726
- return s.push(...S.leaves), S.root;
1727
- }, y = () => {
1678
+ const v = o.slice(h, d);
1679
+ if (v.length === 0) throw new SyntaxError("Empty transform function argument");
1680
+ const S = new Yt(v, t, a, l).parse();
1681
+ return i.push(...S.leaves), S.root;
1682
+ }, m = () => {
1728
1683
  const h = [];
1729
- if (w("("), !(m()?.kind === "symbol" && m()?.value === ")"))
1730
- for (h.push(p()); m()?.kind === "symbol" && m()?.value === ","; )
1731
- C(), h.push(p());
1684
+ if (w("("), !(y()?.kind === "symbol" && y()?.value === ")"))
1685
+ for (h.push(p()); y()?.kind === "symbol" && y()?.value === ","; )
1686
+ E(), h.push(p());
1732
1687
  return w(")"), h;
1733
- }, v = (h, f) => {
1734
- const g = (S) => {
1735
- const R = D(t, S);
1688
+ }, b = (h, f) => {
1689
+ const v = (S) => {
1690
+ const R = F(t, S);
1736
1691
  if (typeof R != "function") throw new TypeError(`${S} is not supported`);
1737
1692
  return R;
1738
1693
  };
1739
1694
  switch (h) {
1740
1695
  case "translate": {
1741
- const S = g("CSSTranslate");
1696
+ const S = v("CSSTranslate");
1742
1697
  if (f.length === 1) return new S(f[0], c());
1743
1698
  if (f.length === 2) return new S(f[0], f[1]);
1744
1699
  if (f.length === 3) return new S(f[0], f[1], f[2]);
1745
1700
  throw new SyntaxError("translate() expects 1..3 args");
1746
1701
  }
1747
1702
  case "translatex":
1748
- return new (g("CSSTranslate"))(f[0], c());
1703
+ return new (v("CSSTranslate"))(f[0], c());
1749
1704
  case "translatey":
1750
- return new (g("CSSTranslate"))(c(), f[0]);
1705
+ return new (v("CSSTranslate"))(c(), f[0]);
1751
1706
  case "translatez":
1752
- return new (g("CSSTranslate"))(c(), c(), f[0]);
1707
+ return new (v("CSSTranslate"))(c(), c(), f[0]);
1753
1708
  case "translate3d":
1754
1709
  if (f.length !== 3) throw new SyntaxError("translate3d() expects 3 args");
1755
- return new (g("CSSTranslate"))(f[0], f[1], f[2]);
1710
+ return new (v("CSSTranslate"))(f[0], f[1], f[2]);
1756
1711
  case "scale": {
1757
- const S = g("CSSScale");
1712
+ const S = v("CSSScale");
1758
1713
  if (f.length === 1) return new S(f[0], f[0]);
1759
1714
  if (f.length === 2) return new S(f[0], f[1]);
1760
1715
  if (f.length === 3) return new S(f[0], f[1], f[2]);
1761
1716
  throw new SyntaxError("scale() expects 1..3 args");
1762
1717
  }
1763
1718
  case "scalex":
1764
- return new (g("CSSScale"))(f[0], u());
1719
+ return new (v("CSSScale"))(f[0], u());
1765
1720
  case "scaley":
1766
- return new (g("CSSScale"))(u(), f[0]);
1721
+ return new (v("CSSScale"))(u(), f[0]);
1767
1722
  case "scalez":
1768
- return new (g("CSSScale"))(u(), u(), f[0]);
1723
+ return new (v("CSSScale"))(u(), u(), f[0]);
1769
1724
  case "scale3d":
1770
1725
  if (f.length !== 3) throw new SyntaxError("scale3d() expects 3 args");
1771
- return new (g("CSSScale"))(f[0], f[1], f[2]);
1726
+ return new (v("CSSScale"))(f[0], f[1], f[2]);
1772
1727
  case "rotate": {
1773
- const S = g("CSSRotate");
1728
+ const S = v("CSSRotate");
1774
1729
  if (f.length === 1) return new S(f[0]);
1775
1730
  if (f.length === 4) return new S(f[0], f[1], f[2], f[3]);
1776
1731
  throw new SyntaxError("rotate() expects 1 or 4 args");
1777
1732
  }
1778
1733
  case "rotatex":
1779
- return new (g("CSSRotate"))(u(), M(t, "number", 0), M(t, "number", 0), f[0]);
1734
+ return new (v("CSSRotate"))(u(), M(t, "number", 0), M(t, "number", 0), f[0]);
1780
1735
  case "rotatey":
1781
- return new (g("CSSRotate"))(M(t, "number", 0), u(), M(t, "number", 0), f[0]);
1736
+ return new (v("CSSRotate"))(M(t, "number", 0), u(), M(t, "number", 0), f[0]);
1782
1737
  case "rotatez":
1783
- return new (g("CSSRotate"))(M(t, "number", 0), M(t, "number", 0), u(), f[0]);
1738
+ return new (v("CSSRotate"))(M(t, "number", 0), M(t, "number", 0), u(), f[0]);
1784
1739
  case "rotate3d":
1785
1740
  if (f.length !== 4) throw new SyntaxError("rotate3d() expects 4 args");
1786
- return new (g("CSSRotate"))(f[0], f[1], f[2], f[3]);
1741
+ return new (v("CSSRotate"))(f[0], f[1], f[2], f[3]);
1787
1742
  case "skew": {
1788
- const S = g("CSSSkew");
1743
+ const S = v("CSSSkew");
1789
1744
  if (f.length === 1) return new S(f[0], M(t, "deg", 0));
1790
1745
  if (f.length === 2) return new S(f[0], f[1]);
1791
1746
  throw new SyntaxError("skew() expects 1..2 args");
1792
1747
  }
1793
1748
  case "skewx":
1794
- return new (g("CSSSkewX"))(f[0]);
1749
+ return new (v("CSSSkewX"))(f[0]);
1795
1750
  case "skewy":
1796
- return new (g("CSSSkewY"))(f[0]);
1751
+ return new (v("CSSSkewY"))(f[0]);
1797
1752
  case "perspective":
1798
- return new (g("CSSPerspective"))(f[0]);
1753
+ return new (v("CSSPerspective"))(f[0]);
1799
1754
  default:
1800
1755
  throw new SyntaxError(`Unsupported transform function "${h}"`);
1801
1756
  }
1802
1757
  };
1803
1758
  for (; d < o.length; ) {
1804
- const h = C();
1759
+ const h = E();
1805
1760
  if (h.kind !== "identifier") throw new SyntaxError("Expected a transform function name");
1806
- const f = y();
1807
- i.push(v(h.value, f));
1761
+ const f = m();
1762
+ s.push(b(h.value, f));
1808
1763
  }
1809
- if (i.length === 0) throw new SyntaxError("Empty transform list");
1810
- const x = D(t, "CSSTransformValue");
1811
- if (typeof x != "function") throw new TypeError("CSSTransformValue is not supported");
1764
+ if (s.length === 0) throw new SyntaxError("Empty transform list");
1765
+ const k = F(t, "CSSTransformValue");
1766
+ if (typeof k != "function") throw new TypeError("CSSTransformValue is not supported");
1812
1767
  return {
1813
- root: new x(i),
1814
- leaves: s
1768
+ root: new k(s),
1769
+ leaves: i
1815
1770
  };
1816
- }, bt = (e, t, r, n, o) => zn(e) ? Wn(t, r, n, o) : qn(t, r, n, o), Le = (e, t) => {
1771
+ }, St = (e, t, r, n, o) => En(e) ? kn(t, r, n, o) : Cn(t, r, n, o), Re = (e, t) => {
1817
1772
  for (const r of t) {
1818
1773
  const n = e.get(r.slot.marker);
1819
1774
  n ? n.push(r) : e.set(r.slot.marker, [r]);
1820
1775
  }
1821
- }, Pe = (e, t, r) => e.map((n) => ({
1776
+ }, Te = (e, t, r) => e.map((n) => ({
1822
1777
  slot: n.slot,
1823
1778
  value: n.value,
1824
1779
  property: t,
1825
1780
  root: r
1826
- })), Hn = (e, t, r, n, o, s) => {
1827
- const i = e.ownerDocument.createElement("span");
1828
- i.style.cssText = t, Hr(e, "");
1829
- const a = e, l = a.attributeStyleMap ?? a.styleMap, c = e.ownerDocument.defaultView ?? globalThis, u = c?.CSSStyleValue ?? globalThis.CSSStyleValue, d = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Set(), C = [], w = /* @__PURE__ */ new Set();
1830
- for (const p of s) {
1831
- let y = null;
1832
- for (let v = 0; v < i.style.length; v++) {
1833
- const x = i.style.item(v), h = i.style.getPropertyValue(x);
1834
- if (Te(h, p.marker)) {
1835
- y = {
1781
+ })), Mn = (e, t, r, n, o, i) => {
1782
+ const s = e.ownerDocument.createElement("span");
1783
+ s.style.cssText = t, Ir(e, "");
1784
+ const a = e, l = a.attributeStyleMap ?? a.styleMap, c = e.ownerDocument.defaultView ?? globalThis, u = c?.CSSStyleValue ?? globalThis.CSSStyleValue, d = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Set(), E = [], w = /* @__PURE__ */ new Set();
1785
+ for (const p of i) {
1786
+ let m = null;
1787
+ for (let b = 0; b < s.style.length; b++) {
1788
+ const k = s.style.item(b), h = s.style.getPropertyValue(k);
1789
+ if (ke(h, p.marker)) {
1790
+ m = {
1836
1791
  mode: "property",
1837
- target: x
1838
- }, e.style.setProperty(x, wt(p.value.value)), w.add(x);
1792
+ target: k
1793
+ }, e.style.setProperty(k, mt(p.value.value)), w.add(k);
1839
1794
  break;
1840
1795
  }
1841
- if (Ae(h, p.marker, p.multipliedByUnit)) {
1842
- y = {
1796
+ if (Me(h, p.marker, p.multipliedByUnit)) {
1797
+ m = {
1843
1798
  mode: "property",
1844
- target: x,
1799
+ target: k,
1845
1800
  unit: p.multipliedByUnit
1846
- }, e.style.setProperty(x, wt(p.value.value, p.multipliedByUnit)), w.add(x);
1801
+ }, e.style.setProperty(k, mt(p.value.value, p.multipliedByUnit)), w.add(k);
1847
1802
  break;
1848
1803
  }
1849
1804
  }
1850
- if (!y) {
1851
- const v = Number(p.value.value) || 0;
1852
- Yn(c, p.marker, v), e.style.setProperty(p.marker, String(v)), y = {
1805
+ if (!m) {
1806
+ const b = Number(p.value.value) || 0;
1807
+ An(c, p.marker, b), e.style.setProperty(p.marker, String(b)), m = {
1853
1808
  mode: "custom-property",
1854
1809
  target: p.marker
1855
1810
  };
1856
1811
  }
1857
- C.push(p.value.attach(e, y));
1812
+ E.push(p.value.attach(e, m));
1858
1813
  }
1859
- for (let p = 0; p < i.style.length; p++) {
1860
- const y = i.style.item(p);
1861
- if (w.has(y)) continue;
1862
- const v = i.style.getPropertyValue(y), x = i.style.getPropertyPriority(y), h = r.filter((k) => dt(v, k.marker)), f = n.filter((k) => dt(v, k.marker));
1814
+ for (let p = 0; p < s.style.length; p++) {
1815
+ const m = s.style.item(p);
1816
+ if (w.has(m)) continue;
1817
+ const b = s.style.getPropertyValue(m), k = s.style.getPropertyPriority(m), h = r.filter((x) => ct(b, x.marker)), f = n.filter((x) => ct(b, x.marker));
1863
1818
  if (h.length === 0 && f.length === 0) {
1864
- e.style.setProperty(y, v, x);
1819
+ e.style.setProperty(m, b, k);
1865
1820
  continue;
1866
1821
  }
1867
- const g = l?.set && !x && !y.startsWith("--");
1822
+ const v = l?.set && !k && !m.startsWith("--");
1868
1823
  let S = !1;
1869
- if (g && f.length > 0) try {
1870
- const k = f.length === 1 && h.length === 0 ? f[0] : null;
1871
- if (k && Ae(v, k.marker, k.multipliedByUnit)) {
1872
- const E = M(c, k.multipliedByUnit, ee(k));
1873
- l.set(y, E), Le(d, Pe([{
1874
- slot: k,
1875
- value: E
1876
- }], y, E)), S = !0;
1877
- } else if (k && Te(v, k.marker)) {
1878
- const E = M(c, "number", ee(k));
1879
- l.set(y, E), Le(d, Pe([{
1880
- slot: k,
1881
- value: E
1882
- }], y, E)), S = !0;
1824
+ if (v && f.length > 0) try {
1825
+ const x = f.length === 1 && h.length === 0 ? f[0] : null;
1826
+ if (x && Me(b, x.marker, x.multipliedByUnit)) {
1827
+ const C = M(c, x.multipliedByUnit, X(x));
1828
+ l.set(m, C), Re(d, Te([{
1829
+ slot: x,
1830
+ value: C
1831
+ }], m, C)), S = !0;
1832
+ } else if (x && ke(b, x.marker)) {
1833
+ const C = M(c, "number", X(x));
1834
+ l.set(m, C), Re(d, Te([{
1835
+ slot: x,
1836
+ value: C
1837
+ }], m, C)), S = !0;
1883
1838
  } else {
1884
- const E = bt(y, v, c, f, h);
1885
- l.set(y, E.root), Le(d, Pe(E.leaves, y, E.root)), S = !0;
1839
+ const C = St(m, b, c, f, h);
1840
+ l.set(m, C.root), Re(d, Te(C.leaves, m, C.root)), S = !0;
1886
1841
  }
1887
1842
  } catch {
1888
1843
  }
1889
1844
  if (S) continue;
1890
- if (g && f.length === 0 && h.length > 0) try {
1891
- const k = h.length === 1 ? h[0] : null;
1892
- if (k && Te(v, k.marker))
1893
- l.set(y, k.value), S = !0;
1894
- else if (k && Ae(v, k.marker, k.multipliedByUnit)) {
1895
- const E = D(c, "CSSMathProduct");
1896
- if (typeof E != "function") throw new TypeError("CSSMathProduct is not supported");
1897
- const nr = new E(k.value, M(c, k.multipliedByUnit, 1));
1898
- l.set(y, nr), S = !0;
1845
+ if (v && f.length === 0 && h.length > 0) try {
1846
+ const x = h.length === 1 ? h[0] : null;
1847
+ if (x && ke(b, x.marker))
1848
+ l.set(m, x.value), S = !0;
1849
+ else if (x && Me(b, x.marker, x.multipliedByUnit)) {
1850
+ const C = F(c, "CSSMathProduct");
1851
+ if (typeof C != "function") throw new TypeError("CSSMathProduct is not supported");
1852
+ const Gt = new C(x.value, M(c, x.multipliedByUnit, 1));
1853
+ l.set(m, Gt), S = !0;
1899
1854
  } else {
1900
1855
  try {
1901
- const E = bt(y, v, c, [], h);
1902
- l.set(y, E.root);
1856
+ const C = St(m, b, c, [], h);
1857
+ l.set(m, C.root);
1903
1858
  } catch {
1904
- const E = gt(v, h);
1905
- Dn(l, u, y, E);
1859
+ const C = yt(b, h);
1860
+ xn(l, u, m, C);
1906
1861
  }
1907
1862
  S = !0;
1908
1863
  }
1909
1864
  } catch {
1910
1865
  }
1911
1866
  if (S) continue;
1912
- const R = gt(v, h);
1913
- e.style.setProperty(y, R, x);
1914
- for (const k of f) m.add(k.marker);
1867
+ const R = yt(b, h);
1868
+ e.style.setProperty(m, R, k);
1869
+ for (const x of f) y.add(x.marker);
1915
1870
  }
1916
1871
  for (const p of n) {
1917
- const y = d.get(p.marker) ?? [], v = m.has(p.marker);
1918
- if (y.length === 0 && !v) continue;
1919
- const x = Ne(e, p.marker, p.value, function(...h) {
1920
- if (y.length > 0) try {
1921
- const f = ee(p), g = /* @__PURE__ */ new Map();
1922
- for (const S of y)
1923
- S.value.value = f, g.set(S.property, S.root);
1924
- if (l?.set) for (const [S, R] of g) l.set(S, R);
1872
+ const m = d.get(p.marker) ?? [], b = y.has(p.marker);
1873
+ if (m.length === 0 && !b) continue;
1874
+ const k = Ie(e, p.marker, p.value, function(...h) {
1875
+ if (m.length > 0) try {
1876
+ const f = X(p), v = /* @__PURE__ */ new Map();
1877
+ for (const S of m)
1878
+ S.value.value = f, v.set(S.property, S.root);
1879
+ if (l?.set) for (const [S, R] of v) l.set(S, R);
1925
1880
  } catch {
1926
1881
  }
1927
- v && vt.apply(this, h);
1882
+ b && ut.apply(this, h);
1928
1883
  });
1929
- C.push(x);
1884
+ E.push(k);
1930
1885
  }
1931
- for (const p of m) {
1932
- if (n.some((v) => v.marker === p)) continue;
1933
- const y = o.get(p);
1934
- y != null && C.push(Ne(e, p, y, vt));
1886
+ for (const p of y) {
1887
+ if (n.some((b) => b.marker === p)) continue;
1888
+ const m = o.get(p);
1889
+ m != null && E.push(Ie(e, p, m, ut));
1935
1890
  }
1936
- return Wr(e), () => {
1937
- for (const p of C) p?.();
1891
+ return Ur(e), () => {
1892
+ for (const p of E) p?.();
1938
1893
  };
1939
- }, j = (e) => {
1894
+ }, W = (e) => {
1940
1895
  const [t, r, n] = e, o = document.createElement("div");
1941
1896
  return t(o), o.style.cssText;
1942
- }, Fe = (e, ...t) => {
1943
- const r = Nn++, n = [], o = /* @__PURE__ */ new Map(), s = [], i = [], a = [], l = [], c = new Array(e.length).fill(0);
1897
+ }, Be = (e, ...t) => {
1898
+ const r = wn++, n = [], o = /* @__PURE__ */ new Map(), i = [], s = [], a = [], l = [], c = new Array(e.length).fill(0);
1944
1899
  for (let d = 0; d < e.length; d++) {
1945
1900
  if (a.push(e[d].slice(c[d])), d >= t.length) continue;
1946
- const m = t[d], C = e[d + 1] ?? "", w = jr(C);
1947
- if (P(m)) {
1948
- const p = `--fest-typed-${r}-${s.length}`;
1949
- s.push({
1901
+ const y = t[d], E = e[d + 1] ?? "", w = Br(E);
1902
+ if (P(y)) {
1903
+ const p = `--fest-typed-${r}-${i.length}`;
1904
+ i.push({
1950
1905
  marker: p,
1951
- value: m,
1906
+ value: y,
1952
1907
  multipliedByUnit: w?.normalized
1953
1908
  }), w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`);
1954
1909
  continue;
1955
1910
  }
1956
- if (Vn(m)) {
1911
+ if (gn(y)) {
1957
1912
  const p = `--fest-anim-${r}-${l.length}`;
1958
- w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`), n.push(`@property ${p} { syntax: "<number>"; initial-value: ${Number(m.value) || 0}; inherits: false; };`), l.push({
1913
+ w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`), n.push(`@property ${p} { syntax: "<number>"; initial-value: ${Number(y.value) || 0}; inherits: false; };`), l.push({
1959
1914
  marker: p,
1960
- value: m,
1915
+ value: y,
1961
1916
  multipliedByUnit: w?.normalized
1962
1917
  });
1963
1918
  continue;
1964
1919
  }
1965
- if (ue(m)) {
1966
- const p = `--fest-ref-${r}-${i.length}`;
1967
- i.push({
1920
+ if (ie(y)) {
1921
+ const p = `--fest-ref-${r}-${s.length}`;
1922
+ s.push({
1968
1923
  marker: p,
1969
- value: m,
1924
+ value: y,
1970
1925
  multipliedByUnit: w?.normalized
1971
1926
  }), w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`);
1972
- const y = Fn(m);
1973
- n.push(`@property ${p} { syntax: "<number>"; initial-value: ${y}; inherits: true; };`), o.set(p, m);
1927
+ const m = bn(y);
1928
+ n.push(`@property ${p} { syntax: "<number>"; initial-value: ${m}; inherits: true; };`), o.set(p, y);
1974
1929
  continue;
1975
1930
  }
1976
- typeof m != "object" && typeof m != "function" && m != null && String(m).trim() !== "" && a.push(String(m));
1931
+ typeof y != "object" && typeof y != "function" && y != null && String(y).trim() !== "" && a.push(String(y));
1977
1932
  }
1978
1933
  const u = [
1979
- (d) => Hn(d, a.join(""), s, i, o, l),
1934
+ (d) => Mn(d, a.join(""), i, s, o, l),
1980
1935
  n,
1981
1936
  o
1982
1937
  ];
1983
- return u[Symbol.toStringTag] = () => j(u), u[Symbol.toPrimitive] = (d) => d === "string" ? j(u) : u[0], u.toString = () => j(u), u.valueOf = () => j(u), Object.defineProperty(u, "cssText", {
1984
- get: () => j(u),
1938
+ return u[Symbol.toStringTag] = () => W(u), u[Symbol.toPrimitive] = (d) => d === "string" ? W(u) : u[0], u.toString = () => W(u), u.valueOf = () => W(u), Object.defineProperty(u, "cssText", {
1939
+ get: () => W(u),
1985
1940
  set: (d) => {
1986
1941
  console.log("set cssText", d);
1987
- const [m, C, w] = u, p = document.createElement("div");
1988
- m(p), p.style.cssText = d;
1942
+ const [y, E, w] = u, p = document.createElement("div");
1943
+ y(p), p.style.cssText = d;
1989
1944
  },
1990
1945
  configurable: !0,
1991
1946
  enumerable: !0
1992
1947
  }), u;
1993
- }, Uo = (e, ...t) => Fe(e, ...t), jn = (e, t) => {
1948
+ }, ho = (e, ...t) => Be(e, ...t), Rn = (e, t) => {
1994
1949
  const r = [], n = [], o = /#\{(\d+)\}/g;
1995
- let s = 0, i;
1996
- for (; (i = o.exec(e)) != null; ) {
1997
- const a = Number.parseInt(i[1], 10);
1998
- !Number.isSafeInteger(a) || a < 0 || (r.push(e.slice(s, i.index)), n.push(t[a]), s = i.index + i[0].length);
1950
+ let i = 0, s;
1951
+ for (; (s = o.exec(e)) != null; ) {
1952
+ const a = Number.parseInt(s[1], 10);
1953
+ !Number.isSafeInteger(a) || a < 0 || (r.push(e.slice(i, s.index)), n.push(t[a]), i = s.index + s[0].length);
1999
1954
  }
2000
- return n.length === 0 ? null : (r.push(e.slice(s)), {
1955
+ return n.length === 0 ? null : (r.push(e.slice(i)), {
2001
1956
  strings: r,
2002
1957
  values: n
2003
1958
  });
2004
- }, Kn = (e, t) => {
1959
+ }, Tn = (e, t) => {
2005
1960
  let r = e[0] ?? "";
2006
1961
  for (let n = 0; n < t.length; n++) {
2007
1962
  const o = t[n];
2008
1963
  o != null && (r += String(o)), r += e[n + 1] ?? "";
2009
1964
  }
2010
1965
  return r;
2011
- }, _o = (e, t) => {
2012
- const r = jn(e, t);
1966
+ }, yo = (e, t) => {
1967
+ const r = Rn(e, t);
2013
1968
  if (!r) return null;
2014
1969
  const { strings: n, values: o } = r;
2015
- return o.length === 1 && (n[0] ?? "").trim() === "" && (n[1] ?? "").trim() === "" && !ft(o[0]) && !P(o[0]) ? zr(o[0]) ? {
1970
+ return o.length === 1 && (n[0] ?? "").trim() === "" && (n[1] ?? "").trim() === "" && !lt(o[0]) && !P(o[0]) ? $r(o[0]) ? {
2016
1971
  kind: "template",
2017
1972
  binding: o[0]
2018
1973
  } : {
2019
1974
  kind: "direct",
2020
1975
  value: o[0]
2021
- } : o.some((s) => ue(s) || P(s)) ? {
1976
+ } : o.some((i) => ie(i) || P(i)) ? {
2022
1977
  kind: "template",
2023
- binding: Fe(n, ...o)
2024
- } : o.every(ft) ? {
1978
+ binding: Be(n, ...o)
1979
+ } : o.every(lt) ? {
2025
1980
  kind: "static",
2026
- cssText: Kn(n, o)
1981
+ cssText: Tn(n, o)
2027
1982
  } : {
2028
1983
  kind: "template",
2029
- binding: Fe(n, ...o)
1984
+ binding: Be(n, ...o)
2030
1985
  };
2031
- }, Bo = (e, t) => {
1986
+ }, mo = (e, t) => {
2032
1987
  const r = Array.isArray(t) ? t[0] : t;
2033
1988
  if (typeof r != "function") return () => {
2034
1989
  };
@@ -2040,9 +1995,9 @@ var Qt = (e, t) => {
2040
1995
  }
2041
1996
  n?.unbind?.();
2042
1997
  };
2043
- }, Yn = (e, t, r) => {
2044
- if (!nt.has(t)) {
2045
- nt.add(t);
1998
+ }, An = (e, t, r) => {
1999
+ if (!et.has(t)) {
2000
+ et.add(t);
2046
2001
  try {
2047
2002
  (e?.CSS ?? CSS)?.registerProperty?.({
2048
2003
  name: t,
@@ -2053,7 +2008,7 @@ var Qt = (e, t) => {
2053
2008
  } catch {
2054
2009
  }
2055
2010
  }
2056
- }, Ge = (e) => {
2011
+ }, je = (e) => {
2057
2012
  const t = [];
2058
2013
  if (typeof e.properties == "string") {
2059
2014
  const r = e.properties?.trim?.()?.split?.(";");
@@ -2066,16 +2021,16 @@ var Qt = (e, t) => {
2066
2021
  })?.filter?.((n) => n != null) || []);
2067
2022
  }
2068
2023
  return Array.from(Array.isArray(e.properties) ? e.properties : t);
2069
- }, Zn = (e, t) => {
2024
+ }, Ln = (e, t) => {
2070
2025
  const r = /* @__PURE__ */ new Map();
2071
2026
  let n = "";
2072
- for (let s = 0; s < e.length; s++)
2073
- n += e[s], s < t.length && (n += `__SLOT_${s}__`);
2074
- const o = n.split(";").map((s) => s.trim()).filter(Boolean);
2075
- for (const s of o) {
2076
- const i = s.indexOf(":");
2077
- if (i === -1) continue;
2078
- const a = s.slice(0, i).trim(), l = s.slice(i + 1).trim(), c = /__SLOT_(\d+)__/.exec(l);
2027
+ for (let i = 0; i < e.length; i++)
2028
+ n += e[i], i < t.length && (n += `__SLOT_${i}__`);
2029
+ const o = n.split(";").map((i) => i.trim()).filter(Boolean);
2030
+ for (const i of o) {
2031
+ const s = i.indexOf(":");
2032
+ if (s === -1) continue;
2033
+ const a = i.slice(0, s).trim(), l = i.slice(s + 1).trim(), c = /__SLOT_(\d+)__/.exec(l);
2079
2034
  if (!c) continue;
2080
2035
  const u = t[parseInt(c[1], 10)];
2081
2036
  if (!Array.isArray(u)) throw new TypeError(`A\`${a}\` expects an array of values, got ${typeof u}`);
@@ -2085,34 +2040,34 @@ var Qt = (e, t) => {
2085
2040
  });
2086
2041
  }
2087
2042
  return { properties: r };
2088
- }, Qe = (e) => {
2043
+ }, Ke = (e) => {
2089
2044
  const t = [], r = [];
2090
2045
  let n = !1;
2091
2046
  for (let o = 0; o < e.length; o++) {
2092
- const s = e[o];
2093
- ue(s) ? (n = !0, r.push(o), t.push(s.value)) : (P(s), t.push(s));
2047
+ const i = e[o];
2048
+ ie(i) ? (n = !0, r.push(o), t.push(i.value)) : (P(i), t.push(i));
2094
2049
  }
2095
2050
  return {
2096
2051
  resolved: t,
2097
2052
  hasReactive: n,
2098
2053
  reactiveIndices: r
2099
2054
  };
2100
- }, De = (e) => {
2101
- const t = e?.offsets, r = Ge(e);
2055
+ }, _e = (e) => {
2056
+ const t = e?.offsets, r = je(e);
2102
2057
  if (r.length === 0) throw new Error("No animatable properties found in A template");
2103
- const n = Math.max(...r.map((i) => i.values.length)), o = (t?.length > 1 ? t : null) || Array.from({ length: n }, (i, a) => a / (n - 1)), s = [];
2104
- for (let i = 0; i < n; i++) {
2105
- const a = { offset: o[i] ?? i / (n - 1) };
2058
+ const n = Math.max(...r.map((s) => s.values.length)), o = (t?.length > 1 ? t : null) || Array.from({ length: n }, (s, a) => a / (n - 1)), i = [];
2059
+ for (let s = 0; s < n; s++) {
2060
+ const a = { offset: o[s] ?? s / (n - 1) };
2106
2061
  for (const l of r) {
2107
- const { resolved: c } = Qe(l.values), u = le(l.property);
2108
- let d = c[Math.min(i, c.length - 1)];
2062
+ const { resolved: c } = Ke(l.values), u = pe(l.property);
2063
+ let d = c[Math.min(s, c.length - 1)];
2109
2064
  P(d) && (d = String(d)), a[u] = d;
2110
2065
  }
2111
- s.push(a);
2066
+ i.push(a);
2112
2067
  }
2113
- return s;
2114
- }, rr = (e) => {
2115
- const t = re(e.duration ?? 300), r = re(e.delay ?? 0), n = Nr(e.iterationCount);
2068
+ return i;
2069
+ }, Zt = (e) => {
2070
+ const t = J(e.duration ?? 300), r = J(e.delay ?? 0), n = Ar(e.iterationCount);
2116
2071
  return {
2117
2072
  duration: t,
2118
2073
  delay: r,
@@ -2123,38 +2078,38 @@ var Qt = (e, t) => {
2123
2078
  easing: typeof e.easing == "string" ? e.easing : "linear",
2124
2079
  timeline: e.timeline
2125
2080
  };
2126
- }, Gn = (e, t) => {
2127
- const r = Ge(t), n = [], o = De(t), s = rr(t), i = e.animate(o, s);
2081
+ }, Pn = (e, t) => {
2082
+ const r = je(t), n = [], o = _e(t), i = Zt(t), s = e.animate(o, i);
2128
2083
  for (const l of r) {
2129
- const { hasReactive: c, reactiveIndices: u } = Qe(l.values);
2084
+ const { hasReactive: c, reactiveIndices: u } = Ke(l.values);
2130
2085
  if (c)
2131
2086
  for (const d of u) {
2132
- const m = l.values[d], C = Ne(e, `--anim-${l.property}-${d}`, m, () => {
2133
- const w = De(t), p = i.currentTime;
2134
- i.effect = new KeyframeEffect(e, w, s), p !== null && (i.currentTime = p);
2087
+ const y = l.values[d], E = Ie(e, `--anim-${l.property}-${d}`, y, () => {
2088
+ const w = _e(t), p = s.currentTime;
2089
+ s.effect = new KeyframeEffect(e, w, i), p !== null && (s.currentTime = p);
2135
2090
  });
2136
- n.push(C);
2091
+ n.push(E);
2137
2092
  }
2138
2093
  }
2139
2094
  return {
2140
- animation: i,
2095
+ animation: s,
2141
2096
  cleanup: () => {
2142
- i.cancel(), n.forEach((l) => l());
2097
+ s.cancel(), n.forEach((l) => l());
2143
2098
  }
2144
2099
  };
2145
- }, Vo = (e, ...t) => Zn(e, t), fe = (e, t, r) => {
2146
- if (Ge(t).some((a) => {
2147
- const { hasReactive: l } = Qe(a.values);
2100
+ }, So = (e, ...t) => Ln(e, t), ae = (e, t, r) => {
2101
+ if (je(t).some((a) => {
2102
+ const { hasReactive: l } = Ke(a.values);
2148
2103
  return l;
2149
- })) return Gn(e, t);
2150
- const n = De(t), o = rr(t), s = e.animate(n, o);
2104
+ })) return Pn(e, t);
2105
+ const n = _e(t), o = Zt(t), i = e.animate(n, o);
2151
2106
  return {
2152
- animation: s,
2107
+ animation: i,
2153
2108
  cleanup: () => {
2154
- s.cancel();
2109
+ i.cancel();
2155
2110
  }
2156
2111
  };
2157
- }, No = (e, t) => {
2112
+ }, vo = (e, t) => {
2158
2113
  const r = /* @__PURE__ */ new Map();
2159
2114
  for (const [n, o] of Object.entries(t.properties)) {
2160
2115
  if (!Array.isArray(o)) throw new TypeError(`animate() expects arrays of values, got ${typeof o} for ${n}`);
@@ -2163,201 +2118,201 @@ var Qt = (e, t) => {
2163
2118
  values: o
2164
2119
  });
2165
2120
  }
2166
- return fe(e, { ...t }, r);
2167
- }, Fo = (e) => (t) => fe(t, e), Do = async (e, t) => {
2121
+ return ae(e, { ...t }, r);
2122
+ }, go = (e) => (t) => ae(t, e), wo = async (e, t) => {
2168
2123
  for (const r of t) {
2169
- const { animation: n } = fe(e, r);
2124
+ const { animation: n } = ae(e, r);
2170
2125
  await n.finished;
2171
2126
  }
2172
- }, qo = (e, t) => {
2173
- const r = t.map((o) => fe(e, o)), n = () => {
2127
+ }, bo = (e, t) => {
2128
+ const r = t.map((o) => ae(e, o)), n = () => {
2174
2129
  r.forEach((o) => o.cleanup());
2175
2130
  };
2176
2131
  return {
2177
2132
  animations: r.map((o) => o.animation),
2178
2133
  cleanup: n
2179
2134
  };
2180
- }, zo = (e, t, r = 100) => e.map((n, o) => {
2181
- const s = re(t?.delay ?? 0) + o * r;
2182
- return fe(n, {
2135
+ }, xo = (e, t, r = 100) => e.map((n, o) => {
2136
+ const i = J(t?.delay ?? 0) + o * r;
2137
+ return ae(n, {
2183
2138
  ...t,
2184
- delay: s
2139
+ delay: i
2185
2140
  });
2186
2141
  });
2187
2142
  export {
2188
- Vo as A,
2189
- Ot as ANIMATABLE_BRAND,
2190
- Bn as AnimatableValue,
2191
- to as BAKE_CATEGORIES,
2192
- At as BAKE_LAYER,
2193
- Ar as BAKE_SCREEN_ALSO,
2194
- Lt as BAKE_SCREEN_ALSO_EXPLORER,
2195
- Pt as BAKE_SCREEN_ALSO_SETTINGS,
2196
- Tr as BAKE_SCREEN_CHROME,
2197
- ce as BAKE_SCREEN_MEDIA,
2198
- Rt as CSS_COLOR_PROPERTIES,
2199
- Sr as CSS_DIMENSION_UNITS,
2200
- mr as CSS_DIMENSION_UNITS_LIST,
2201
- wr as CSS_MOTION_PROPERTIES,
2202
- gr as CSS_TYPOGRAPHY_PROPERTIES,
2203
- vr as CSS_UNIT_FACTORY_ALIASES,
2204
- Mt as CSS_UNIT_TOKEN_RE,
2205
- ze as DEFAULT_CACHE_MS,
2206
- Rr as DEFAULT_CATEGORIES,
2207
- ot as HOST_CSS_FALLBACK,
2208
- Er as LAYER_NAME,
2209
- Mr as LAYER_OPEN,
2210
- no as OWNER,
2211
- Fe as S,
2212
- Tt as STYLE_THEME_ATTRS,
2213
- br as STYLE_THEME_OBSERVE_ATTRS,
2214
- Cr as UX_HOST_LAYERS,
2215
- po as UX_PRELOAD_HOST_CSS,
2216
- kr as VEELA_CASCADE_LAYERS,
2217
- ro as VIEWER_CSS_LAYER_ORDER,
2218
- xr as VIEWER_RUNTIME_LAYERS,
2219
- Ee as addAdoptedSheetToElement,
2220
- F as adoptedAppliedText,
2143
+ So as A,
2144
+ Rt as ANIMATABLE_BRAND,
2145
+ vn as AnimatableValue,
2146
+ In as BAKE_CATEGORIES,
2147
+ Et as BAKE_LAYER,
2148
+ gr as BAKE_SCREEN_ALSO,
2149
+ kt as BAKE_SCREEN_ALSO_EXPLORER,
2150
+ Mt as BAKE_SCREEN_ALSO_SETTINGS,
2151
+ vr as BAKE_SCREEN_CHROME,
2152
+ se as BAKE_SCREEN_MEDIA,
2153
+ xt as CSS_COLOR_PROPERTIES,
2154
+ ar as CSS_DIMENSION_UNITS,
2155
+ ir as CSS_DIMENSION_UNITS_LIST,
2156
+ ur as CSS_MOTION_PROPERTIES,
2157
+ cr as CSS_TYPOGRAPHY_PROPERTIES,
2158
+ lr as CSS_UNIT_FACTORY_ALIASES,
2159
+ bt as CSS_UNIT_TOKEN_RE,
2160
+ Fe as DEFAULT_CACHE_MS,
2161
+ Sr as DEFAULT_CATEGORIES,
2162
+ tt as HOST_CSS_FALLBACK,
2163
+ yr as LAYER_NAME,
2164
+ mr as LAYER_OPEN,
2165
+ _n as OWNER,
2166
+ Be as S,
2167
+ Ct as STYLE_THEME_ATTRS,
2168
+ fr as STYLE_THEME_OBSERVE_ATTRS,
2169
+ pr as UX_HOST_LAYERS,
2170
+ jn as UX_PRELOAD_HOST_CSS,
2171
+ dr as VEELA_CASCADE_LAYERS,
2172
+ Bn as VIEWER_CSS_LAYER_ORDER,
2173
+ hr as VIEWER_RUNTIME_LAYERS,
2174
+ xe as addAdoptedSheetToElement,
2175
+ V as adoptedAppliedText,
2221
2176
  B as adoptedBlobMap,
2222
- xt as adoptedFilled,
2223
- rt as adoptedLayerMap,
2177
+ gt as adoptedFilled,
2178
+ Je as adoptedLayerMap,
2224
2179
  A as adoptedMap,
2225
- et as adoptedSelectorMap,
2226
- pe as adoptedShadowLayerMap,
2227
- tt as adoptedShadowSelectorMap,
2228
- Ie as adoptedStyleSheetsCache,
2229
- Io as animatable,
2230
- No as animate,
2231
- Hr as applyNormalizedInlineStyle,
2232
- zt as bakeAlsoQueriesFor,
2233
- ae as bakeComputedStyle,
2234
- Cn as bakeScreenColors,
2235
- se as bakeThemeFingerprint,
2180
+ Qe as adoptedSelectorMap,
2181
+ ce as adoptedShadowLayerMap,
2182
+ Xe as adoptedShadowSelectorMap,
2183
+ Le as adoptedStyleSheetsCache,
2184
+ po as animatable,
2185
+ vo as animate,
2186
+ Ir as applyNormalizedInlineStyle,
2187
+ Vt as bakeAlsoQueriesFor,
2188
+ oe as bakeComputedStyle,
2189
+ pn as bakeScreenColors,
2190
+ ne as bakeThemeFingerprint,
2236
2191
  L as bakedCache,
2237
- Z as bakedFollowers,
2192
+ K as bakedFollowers,
2238
2193
  U as bakedLive,
2239
2194
  T as bakedStyles,
2240
- Bo as bindStyle,
2241
- W as blobURLMap,
2242
- hn as buildBakedCssText,
2243
- de as cacheBlobContentMap,
2244
- H as cacheContentMap,
2245
- _ as cacheMap,
2246
- yn as collectBakeAlsoHosts,
2247
- qt as collectBakeScreenHosts,
2248
- pn as collectBakedDeclarations,
2249
- _o as compileInlineStyleAttribute,
2250
- dt as containsMarker,
2251
- _r as createStyleId,
2195
+ mo as bindStyle,
2196
+ q as blobURLMap,
2197
+ nn as buildBakedCssText,
2198
+ le as cacheBlobContentMap,
2199
+ z as cacheContentMap,
2200
+ I as cacheMap,
2201
+ on as collectBakeAlsoHosts,
2202
+ _t as collectBakeScreenHosts,
2203
+ rn as collectBakedDeclarations,
2204
+ yo as compileInlineStyleAttribute,
2205
+ ct as containsMarker,
2206
+ Mr as createStyleId,
2252
2207
  M as createTypedUnitValue,
2253
- Uo as css,
2254
- Or as cssEmptyLayerRule,
2255
- Yr as cssImportWithLayer,
2256
- He as cssLayerBlock,
2257
- We as cssLayerOrder,
2258
- V as cssTextForAdoptedSheet,
2259
- st as cssTextRequiresInlineStyleElement,
2260
- Pr as cssUnitConstructorName,
2261
- Lr as cssUnitFactoryName,
2262
- Fo as defineAnimation,
2263
- fe as doAnimation,
2264
- ie as ensureAdoptedSheetContent,
2265
- xn as ensureHostStyles,
2266
- je as ensureStyleScopeSelector,
2267
- lt as escapeCSSIdentifier,
2268
- oe as escapeRegExp,
2269
- cn as fetchAndCache,
2270
- un as fetchAsInline,
2271
- Eo as getAdoptedStyleRule,
2272
- Ro as getBakedStyle,
2273
- bo as getElementZoom,
2274
- _t as getOrCreateLayerRule,
2275
- Co as getPadding,
2276
- K as getPropertyValue,
2277
- ko as getPxValue,
2278
- on as getStyleLayer,
2279
- Ke as getStyleRule,
2280
- go as getTransform,
2281
- wo as getTransformOrigin,
2282
- D as getWindowConstructor,
2283
- Se as hasTypedOM,
2284
- io as hash,
2285
- xe as invalidateBakedStyles,
2286
- so as isAdoptedSheetEmpty,
2287
- Vn as isAnimatableValue,
2288
- Dr as isColorToken,
2289
- Ir as isCssElement,
2290
- oo as isCssLayerName,
2291
- at as isDocument,
2292
- Ut as isEffectivelyEmptyStyleText,
2293
- qr as isElementVisible,
2294
- it as isLayerBlockRule,
2208
+ ho as css,
2209
+ xr as cssEmptyLayerRule,
2210
+ Vr as cssImportWithLayer,
2211
+ De as cssLayerBlock,
2212
+ Ne as cssLayerOrder,
2213
+ _ as cssTextForAdoptedSheet,
2214
+ nt as cssTextRequiresInlineStyleElement,
2215
+ br as cssUnitConstructorName,
2216
+ wr as cssUnitFactoryName,
2217
+ go as defineAnimation,
2218
+ ae as doAnimation,
2219
+ re as ensureAdoptedSheetContent,
2220
+ hn as ensureHostStyles,
2221
+ qe as ensureStyleScopeSelector,
2222
+ st as escapeCSSIdentifier,
2223
+ te as escapeRegExp,
2224
+ Xr as fetchAndCache,
2225
+ Jr as fetchAsInline,
2226
+ oo as getAdoptedStyleRule,
2227
+ io as getBakedStyle,
2228
+ eo as getElementZoom,
2229
+ Pt as getOrCreateLayerRule,
2230
+ ro as getPadding,
2231
+ H as getPropertyValue,
2232
+ to as getPxValue,
2233
+ Yr as getStyleLayer,
2234
+ ze as getStyleRule,
2235
+ Xn as getTransform,
2236
+ Jn as getTransformOrigin,
2237
+ F as getWindowConstructor,
2238
+ he as hasTypedOM,
2239
+ Fn as hash,
2240
+ be as invalidateBakedStyles,
2241
+ Nn as isAdoptedSheetEmpty,
2242
+ gn as isAnimatableValue,
2243
+ Pr as isColorToken,
2244
+ Er as isCssElement,
2245
+ Vn as isCssLayerName,
2246
+ ot as isDocument,
2247
+ Lt as isEffectivelyEmptyStyleText,
2248
+ Or as isElementVisible,
2249
+ rt as isLayerBlockRule,
2295
2250
  P as isNativeCSSStyleValue,
2296
- ue as isReactiveStyleValue,
2297
- be as isScrollDriven,
2298
- G as isShadowRoot,
2299
- ft as isStaticStyleInterpolation,
2300
- zr as isStyleBinding,
2301
- ne as isStyleHost,
2302
- ao as isStyleValue,
2303
- he as isUnitValue,
2304
- ut as isViewDriven,
2305
- eo as layerCounter,
2306
- Nt as loadAsAdopted,
2307
- en as loadBlobStyle,
2308
- Qt as loadCachedStyles,
2251
+ ie as isReactiveStyleValue,
2252
+ ve as isScrollDriven,
2253
+ Y as isShadowRoot,
2254
+ lt as isStaticStyleInterpolation,
2255
+ $r as isStyleBinding,
2256
+ ee as isStyleHost,
2257
+ Dn as isStyleValue,
2258
+ ue as isUnitValue,
2259
+ at as isViewDriven,
2260
+ Un as layerCounter,
2261
+ Ut as loadAsAdopted,
2262
+ Wr as loadBlobStyle,
2263
+ jt as loadCachedStyles,
2309
2264
  O as loadInlineStyle,
2310
- Vt as loadStyleSheet,
2311
- co as makeHostLayerOrder,
2312
- uo as normalizeCssForLayer,
2313
- Nr as normalizeIterationCount,
2314
- Fr as normalizeIterations,
2315
- nn as notifyStyleTreeHosts,
2316
- So as observeStyleTree,
2317
- Oo as onScroll,
2318
- $o as onView,
2319
- qo as parallelAnimations,
2320
- ct as parseLength,
2321
- Vr as parseOrigin,
2322
- re as parseTime,
2323
- mo as preloadStyle,
2324
- $t as promiseOrDirect,
2325
- Wr as pruneEmptyStyleAttribute,
2326
- me as queryFirstDeep,
2327
- jr as readAttachedCSSUnit,
2328
- It as readSheetRuleCount,
2329
- $e as rebakeBatch,
2330
- Mo as rebakeComputedStyle,
2331
- Dt as registerStyleTreeHook,
2332
- nt as registeredProperties,
2333
- Lo as rehydrateAdoptedStyleSheets,
2334
- vo as rehydrateConstructableSheets,
2335
- Ce as removeAdopted,
2336
- Ao as scheduleBakeScreenColors,
2337
- En as scheduleEnsureHostStyles,
2338
- Do as sequenceAnimations,
2339
- yo as setProperty,
2340
- ho as setStyleInRule,
2341
- ve as setStyleProperty,
2342
- Bt as setStylePropertyFallback,
2343
- Xr as setStylePropertyTyped,
2344
- Jr as setStyleRule,
2345
- xo as setStyleRules,
2346
- pt as setStyleURL,
2347
- zo as staggerAnimation,
2348
- $r as stripCssPreamble,
2349
- hr as styleCache,
2350
- yr as styleElementCache,
2351
- we as styleFlushPending,
2352
- Et as styleTreeHooks,
2353
- ge as styleTreeObserved,
2354
- pr as styleTreeRoots,
2355
- z as supportsConstructableStylesheet,
2356
- Ve as unbakeComputedStyle,
2357
- To as unbakeScreenColors,
2358
- fo as unwrapCssLayer,
2359
- Br as urlCanParse,
2360
- lo as veelaCascadeOrder,
2361
- ke as wrapCssLayer
2265
+ $t as loadStyleSheet,
2266
+ zn as makeHostLayerOrder,
2267
+ Wn as normalizeCssForLayer,
2268
+ Ar as normalizeIterationCount,
2269
+ Lr as normalizeIterations,
2270
+ Kr as notifyStyleTreeHosts,
2271
+ Gn as observeStyleTree,
2272
+ uo as onScroll,
2273
+ fo as onView,
2274
+ bo as parallelAnimations,
2275
+ it as parseLength,
2276
+ Tr as parseOrigin,
2277
+ J as parseTime,
2278
+ Zn as preloadStyle,
2279
+ Tt as promiseOrDirect,
2280
+ Ur as pruneEmptyStyleAttribute,
2281
+ de as queryFirstDeep,
2282
+ Br as readAttachedCSSUnit,
2283
+ At as readSheetRuleCount,
2284
+ Ae as rebakeBatch,
2285
+ so as rebakeComputedStyle,
2286
+ Bt as registerStyleTreeHook,
2287
+ et as registeredProperties,
2288
+ co as rehydrateAdoptedStyleSheets,
2289
+ Qn as rehydrateConstructableSheets,
2290
+ we as removeAdopted,
2291
+ lo as scheduleBakeScreenColors,
2292
+ yn as scheduleEnsureHostStyles,
2293
+ wo as sequenceAnimations,
2294
+ Yn as setProperty,
2295
+ Kn as setStyleInRule,
2296
+ ye as setStyleProperty,
2297
+ Ot as setStylePropertyFallback,
2298
+ qr as setStylePropertyTyped,
2299
+ zr as setStyleRule,
2300
+ no as setStyleRules,
2301
+ ft as setStyleURL,
2302
+ xo as staggerAnimation,
2303
+ Cr as stripCssPreamble,
2304
+ or as styleCache,
2305
+ sr as styleElementCache,
2306
+ Se as styleFlushPending,
2307
+ wt as styleTreeHooks,
2308
+ me as styleTreeObserved,
2309
+ nr as styleTreeRoots,
2310
+ D as supportsConstructableStylesheet,
2311
+ Ue as unbakeComputedStyle,
2312
+ ao as unbakeScreenColors,
2313
+ Hn as unwrapCssLayer,
2314
+ Rr as urlCanParse,
2315
+ qn as veelaCascadeOrder,
2316
+ ge as wrapCssLayer
2362
2317
  };
2363
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGUtbGliLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyAkYXZvaWRUcmlnZ2VyLCAkZ2V0VmFsdWUsICRzZXQsIGNhbWVsVG9LZWJhYiwgZGVyZWYsIGdldE9ySW5zZXJ0Q29tcHV0ZWQsIGhhbmRsZUxpc3RlbmVycywgaGFzVmFsdWUsIGlzTm90RXF1YWwsIGlzVmFsLCBpc1ZhbHVlVW5pdCwgdG9SZWYsIHRyeVN0cmluZ0FzTnVtYmVyIH0gZnJvbSBcIkBmZXN0LWxpYi9jb3JlXCI7XG5pbXBvcnQgeyBEb3VibGVXZWFrTWFwLCBhZGRUb0NhbGxDaGFpbiwgYWZmZWN0ZWQgfSBmcm9tIFwiQGZlc3QtbGliL29iamVjdFwiO1xuaW1wb3J0IHsgaGFuZGxlQXR0cmlidXRlLCBoYW5kbGVQcm9wZXJ0eSwgb2JzZXJ2ZUF0dHJpYnV0ZSB9IGZyb20gXCJAZmVzdC1saWIvZG9tXCI7XG5cbi8vI3JlZ2lvbiBzcmMvbWFwcy50c1xudmFyIHNoYXJlZCA9IChrZXksIGNyZWF0ZSkgPT4gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKGtleSldID8/PSBjcmVhdGUoKTtcbnZhciBibG9iVVJMTWFwID0gc2hhcmVkKFwiZG9tLnRzQGJsb2JVUkxNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGNhY2hlTWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIGNhY2hlQ29udGVudE1hcCA9IHNoYXJlZChcImRvbS50c0BjYWNoZUNvbnRlbnRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgY2FjaGVCbG9iQ29udGVudE1hcCA9IHNoYXJlZChcImRvbS50c0BjYWNoZUJsb2JDb250ZW50TWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkU2VsZWN0b3JNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZFNlbGVjdG9yTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRMYXllck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkTGF5ZXJNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZFNoYWRvd0xheWVyTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRTaGFkb3dMYXllck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYWRvcHRlZE1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIGFkb3B0ZWRCbG9iTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRCbG9iTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkQXBwbGllZFRleHQgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEFwcGxpZWRUZXh0XCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkRmlsbGVkID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRGaWxsZWRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xudmFyIGxheWVyQ291bnRlciA9IHNoYXJlZChcImRvbS50c0BsYXllckNvdW50ZXJcIiwgKCkgPT4gMCk7XG52YXIgc3R5bGVUcmVlSG9va3MgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlSG9va3NcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgc3R5bGVUcmVlT2JzZXJ2ZWQgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlT2JzZXJ2ZWRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xudmFyIHN0eWxlVHJlZVJvb3RzID0gc2hhcmVkKFwiZG9tLnRzQHN0eWxlVHJlZVJvb3RzXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xudmFyIGJha2VkU3R5bGVzID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkU3R5bGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGJha2VkTGl2ZSA9IHNoYXJlZChcInN0eWxlLWxpYkBiYWtlZExpdmVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRDYWNoZSA9IHNoYXJlZChcInN0eWxlLWxpYkBiYWtlZENhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIHJlYmFrZUJhdGNoID0gc2hhcmVkKFwic3R5bGUtbGliQHJlYmFrZUJhdGNoXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xudmFyIGJha2VkRm9sbG93ZXJzID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkRm9sbG93ZXJzXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSA9IHNoYXJlZChcImx1ci5lQGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBzdHlsZUNhY2hlID0gc2hhcmVkKFwibHVyLmVAc3R5bGVDYWNoZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBzdHlsZUVsZW1lbnRDYWNoZSA9IHNoYXJlZChcImx1ci5lQHN0eWxlRWxlbWVudENhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBzdHlsZUZsdXNoUGVuZGluZyA9IHNoYXJlZChcInN0eWxlLWxpYkBzdHlsZUZsdXNoUGVuZGluZ1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgcmVnaXN0ZXJlZFByb3BlcnRpZXMgPSBzaGFyZWQoXCJzdHlsZS1saWJAcmVnaXN0ZXJlZFByb3BlcnRpZXNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb25zdGFudHMudHNcbnZhciBDU1NfRElNRU5TSU9OX1VOSVRTX0xJU1QgPSBbXG5cdFwiJVwiLFxuXHRcInB4XCIsXG5cdFwiY21cIixcblx0XCJtbVwiLFxuXHRcInFcIixcblx0XCJpblwiLFxuXHRcInBjXCIsXG5cdFwicHRcIixcblx0XCJlbVwiLFxuXHRcImV4XCIsXG5cdFwiY2hcIixcblx0XCJjYXBcIixcblx0XCJpY1wiLFxuXHRcImxoXCIsXG5cdFwicmVtXCIsXG5cdFwicmV4XCIsXG5cdFwicmNoXCIsXG5cdFwicmNhcFwiLFxuXHRcInJpY1wiLFxuXHRcInJsaFwiLFxuXHRcInZ3XCIsXG5cdFwidmhcIixcblx0XCJ2aVwiLFxuXHRcInZiXCIsXG5cdFwidm1pblwiLFxuXHRcInZtYXhcIixcblx0XCJzdndcIixcblx0XCJzdmhcIixcblx0XCJzdmlcIixcblx0XCJzdmJcIixcblx0XCJzdm1pblwiLFxuXHRcInN2bWF4XCIsXG5cdFwibHZ3XCIsXG5cdFwibHZoXCIsXG5cdFwibHZpXCIsXG5cdFwibHZiXCIsXG5cdFwibHZtaW5cIixcblx0XCJsdm1heFwiLFxuXHRcImR2d1wiLFxuXHRcImR2aFwiLFxuXHRcImR2aVwiLFxuXHRcImR2YlwiLFxuXHRcImR2bWluXCIsXG5cdFwiZHZtYXhcIixcblx0XCJjcXdcIixcblx0XCJjcWhcIixcblx0XCJjcWlcIixcblx0XCJjcWJcIixcblx0XCJjcW1pblwiLFxuXHRcImNxbWF4XCIsXG5cdFwiZGVnXCIsXG5cdFwiZ3JhZFwiLFxuXHRcInJhZFwiLFxuXHRcInR1cm5cIixcblx0XCJzXCIsXG5cdFwibXNcIixcblx0XCJoelwiLFxuXHRcImtoelwiLFxuXHRcImRwaVwiLFxuXHRcImRwY21cIixcblx0XCJkcHB4XCIsXG5cdFwieFwiLFxuXHRcImZyXCJcbl07XG52YXIgQ1NTX0RJTUVOU0lPTl9VTklUUyA9IG5ldyBTZXQoQ1NTX0RJTUVOU0lPTl9VTklUU19MSVNUKTtcbnZhciBDU1NfVU5JVF9GQUNUT1JZX0FMSUFTRVMgPSB7XG5cdFwiJVwiOiBcInBlcmNlbnRcIixcblx0cTogXCJRXCIsXG5cdGh6OiBcIkh6XCIsXG5cdGtoejogXCJrSHpcIixcblx0ZnI6IFwiZmxleFwiXG59O1xudmFyIENTU19VTklUX1RPS0VOX1JFID0gL14oJXxbYS16QS1aXSspLztcbnZhciBDU1NfQ09MT1JfUFJPUEVSVElFUyA9IFtcblx0XCJjb2xvclwiLFxuXHRcImJhY2tncm91bmQtY29sb3JcIixcblx0XCJib3JkZXItY29sb3JcIixcblx0XCJib3JkZXItdG9wLWNvbG9yXCIsXG5cdFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCIsXG5cdFwiYm9yZGVyLWJvdHRvbS1jb2xvclwiLFxuXHRcImJvcmRlci1sZWZ0LWNvbG9yXCIsXG5cdFwib3V0bGluZS1jb2xvclwiLFxuXHRcImFjY2VudC1jb2xvclwiLFxuXHRcImNhcmV0LWNvbG9yXCIsXG5cdFwidGV4dC1kZWNvcmF0aW9uLWNvbG9yXCIsXG5cdFwiY29sdW1uLXJ1bGUtY29sb3JcIixcblx0XCJmaWxsXCIsXG5cdFwic3Ryb2tlXCIsXG5cdFwiZmxvb2QtY29sb3JcIixcblx0XCJsaWdodGluZy1jb2xvclwiLFxuXHRcInN0b3AtY29sb3JcIlxuXTtcbnZhciBDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTID0gW1xuXHRcImZvbnQtZmFtaWx5XCIsXG5cdFwiZm9udC1zaXplXCIsXG5cdFwiZm9udC13ZWlnaHRcIixcblx0XCJmb250LXN0eWxlXCIsXG5cdFwiZm9udC1zdHJldGNoXCIsXG5cdFwibGluZS1oZWlnaHRcIixcblx0XCJsZXR0ZXItc3BhY2luZ1wiLFxuXHRcIndvcmQtc3BhY2luZ1wiXG5dO1xudmFyIENTU19NT1RJT05fUFJPUEVSVElFUyA9IFtcblx0XCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIsXG5cdFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIixcblx0XCJhbmltYXRpb24tZHVyYXRpb25cIixcblx0XCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uXCJcbl07XG52YXIgU1RZTEVfVEhFTUVfQVRUUlMgPSBbXG5cdFwiZGF0YS10aGVtZVwiLFxuXHRcImRhdGEtZXhwbG9yZXItY29sb3Itc2NoZW1lXCIsXG5cdFwiZGF0YS1jb2xvci1zY2hlbWVcIixcblx0XCJ0aGVtZVwiLFxuXHRcImNvbG9yLXNjaGVtZVwiXG5dO1xudmFyIFNUWUxFX1RIRU1FX09CU0VSVkVfQVRUUlMgPSBbXG5cdC4uLlNUWUxFX1RIRU1FX0FUVFJTLFxuXHRcInN0eWxlXCIsXG5cdFwiY2xhc3NcIlxuXTtcbnZhciBCQUtFX0NBVEVHT1JJRVMgPSBbXG5cdFwidG9rZW5zXCIsXG5cdFwiY29sb3JzXCIsXG5cdFwidHlwb2dyYXBoeVwiLFxuXHRcIm1vdGlvblwiXG5dO1xudmFyIFZFRUxBX0NBU0NBREVfTEFZRVJTID0gW1xuXHRcInRva2Vuc1wiLFxuXHRcImJhc2VcIixcblx0XCJsYXlvdXRcIixcblx0XCJjb21wb25lbnRzXCIsXG5cdFwidXRpbGl0aWVzXCIsXG5cdFwidGhlbWVcIixcblx0XCJvdmVycmlkZXNcIixcblx0XCJwcmludFwiXG5dO1xudmFyIFVYX0hPU1RfTEFZRVJTID0gW1widXgtcHJlbG9hZFwiLCBcInV4LWxheWVyXCJdO1xudmFyIFZJRVdFUl9SVU5USU1FX0xBWUVSUyA9IFtcblx0XCJycy1tZC1iYXNlXCIsXG5cdFwicnMtbWQtc3lzdGVtXCIsXG5cdFwicnMtbWQtbW9kdWxlc1wiLFxuXHRcInJzLW1kLXVzZXJcIixcblx0XCJycy1tZC1wcmludFwiLFxuXHRcInJzLW1kLXVzZXItcHJpbnRcIlxuXTtcbnZhciBWSUVXRVJfQ1NTX0xBWUVSX09SREVSID0gVklFV0VSX1JVTlRJTUVfTEFZRVJTO1xudmFyIExBWUVSX05BTUUgPSAvXlthLXpBLVowLTlfLi1dKyQvO1xudmFyIExBWUVSX09QRU4gPSAvXkBsYXllclxccysoW2EtekEtWjAtOV8uLV0rKVxccypcXHsvO1xudmFyIE9XTkVSID0gXCJET01cIjtcbnZhciBIT1NUX0NTU19GQUxMQkFDSyA9IFwiZGF0YS1nbGl0LWhvc3QtY3NzXCI7XG52YXIgQkFLRV9MQVlFUiA9IFwidXgtYmFrZWRcIjtcbnZhciBERUZBVUxUX0NBVEVHT1JJRVMgPSBbXCJjb2xvcnNcIiwgXCJ0b2tlbnNcIl07XG52YXIgREVGQVVMVF9DQUNIRV9NUyA9IDNlNDtcbnZhciBCQUtFX1NDUkVFTl9NRURJQSA9IFwic2NyZWVuXCI7XG52YXIgQkFLRV9TQ1JFRU5fQ0hST01FID0gW1xuXHRcInVpLXdpbmRvdy1mcmFtZVwiLFxuXHRcInVpLW1vZGFsXCIsXG5cdFwiYXBwLWJveFwiLFxuXHRcIi51aS1tb2RhbC1kaWFsb2dcIixcblx0XCIudWktbW9kYWwtcGFuZWxcIlxuXTtcbnZhciBCQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSID0gW1xuXHRcIi5yb3cuYzItc3VyZmFjZVwiLFxuXHRcIi5yb3cuYzItc3VyZmFjZVtkYXRhLWtpbmQ9ZGlyZWN0b3J5XVwiLFxuXHRcIi5yb3cuYzItc3VyZmFjZVtkYXRhLWtpbmQ9ZmlsZV1cIixcblx0XCIucm93LmMyLXN1cmZhY2UgLmMubmFtZVwiLFxuXHRcIi5mbS1ncmlkLWhlYWRlclwiXG5dO1xudmFyIEJBS0VfU0NSRUVOX0FMU09fU0VUVElOR1MgPSBbXG5cdFwiLmZpZWxkXCIsXG5cdFwiLmZvcm0taW5wdXRcIixcblx0XCIuZm9ybS1zZWxlY3RcIixcblx0XCIuZmllbGQtY29udHJvbFwiXG5dO1xudmFyIEJBS0VfU0NSRUVOX0FMU08gPSBbLi4uQkFLRV9TQ1JFRU5fQUxTT19FWFBMT1JFUiwgLi4uQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HU107XG52YXIgQU5JTUFUQUJMRV9CUkFORCA9IFN5bWJvbC5mb3IoXCJmZXN0LmFuaW1hdGFibGVcIik7XG52YXIgaGFzVHlwZWRPTSA9IHR5cGVvZiBDU1NTdHlsZVZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBDU1NVbml0VmFsdWUgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy91dGlscy50c1xudmFyIGNzc1VuaXRGYWN0b3J5TmFtZSA9ICh1bml0KSA9PiBDU1NfVU5JVF9GQUNUT1JZX0FMSUFTRVNbdW5pdC50b0xvd2VyQ2FzZSgpXSA/PyB1bml0LnRvTG93ZXJDYXNlKCk7XG52YXIgY3NzVW5pdENvbnN0cnVjdG9yTmFtZSA9ICh1bml0KSA9PiB1bml0LnRvTG93ZXJDYXNlKCkgPT09IFwiJVwiID8gXCJwZXJjZW50XCIgOiB1bml0LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNDc3NMYXllck5hbWUgPSAobmFtZSkgPT4gTEFZRVJfTkFNRS50ZXN0KG5hbWUpO1xudmFyIGNzc0VtcHR5TGF5ZXJSdWxlID0gKGxheWVyTmFtZSkgPT4gYEBsYXllciAke2xheWVyTmFtZX0ge31gO1xudmFyIHN0cmlwQ3NzUHJlYW1ibGUgPSAoY3NzKSA9PiB7XG5cdGxldCBvdXQgPSBTdHJpbmcoY3NzIHx8IFwiXCIpLnRyaW0oKTtcblx0b3V0ID0gb3V0LnJlcGxhY2UoL14oQGNoYXJzZXRcXHMrW147XSs7XFxzKikrL2ksIFwiXCIpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuXHRcdGNvbnN0IG5leHQgPSBvdXQucmVwbGFjZSgvXlxcL1xcKltcXHNcXFNdKj9cXCpcXC9cXHMqLywgXCJcIik7XG5cdFx0aWYgKG5leHQgPT09IG91dCkgYnJlYWs7XG5cdFx0b3V0ID0gbmV4dC50cmltKCk7XG5cdH1cblx0cmV0dXJuIG91dDtcbn07XG52YXIgaXNMYXllckJsb2NrUnVsZSA9IChydWxlKSA9PiB0eXBlb2YgQ1NTTGF5ZXJCbG9ja1J1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgcnVsZSBpbnN0YW5jZW9mIENTU0xheWVyQmxvY2tSdWxlO1xudmFyIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQgPSAoKSA9PiB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5DU1NTdHlsZVNoZWV0ID09PSBcImZ1bmN0aW9uXCI7XG52YXIgY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50ID0gKGNzcykgPT4gdHlwZW9mIGNzcyA9PT0gXCJzdHJpbmdcIiAmJiAvQGltcG9ydFxcYi9pLnRlc3QoY3NzKTtcbnZhciBwcm9taXNlT3JEaXJlY3QgPSAocHJvbWlzZSwgY2IpID0+IHtcblx0aWYgKHR5cGVvZiBwcm9taXNlPy50aGVuID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHByb21pc2U/LnRoZW4/LihjYik7XG5cdHJldHVybiBjYihwcm9taXNlKTtcbn07XG52YXIgaXNTaGFkb3dSb290ID0gKHZhbHVlKSA9PiB0eXBlb2YgU2hhZG93Um9vdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG52YXIgaXNEb2N1bWVudCA9ICh2YWx1ZSkgPT4gdHlwZW9mIERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRG9jdW1lbnQ7XG52YXIgaXNDc3NFbGVtZW50ID0gKHZhbHVlKSA9PiB0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG52YXIgZXNjYXBlQ1NTSWRlbnRpZmllciA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodHlwZW9mIENTUyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgQ1NTLmVzY2FwZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gQ1NTLmVzY2FwZSh2YWx1ZSk7XG5cdHJldHVybiBBcnJheS5mcm9tKHZhbHVlKS5tYXAoKGNoYXIpID0+IGBcXFxcJHtjaGFyLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KX0gYCkuam9pbihcIlwiKTtcbn07XG52YXIgc3R5bGVJZENvdW50ZXIgPSAwO1xudmFyIGNyZWF0ZVN0eWxlSWQgPSAoKSA9PiB7XG5cdGlmICh0eXBlb2YgY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcblx0cmV0dXJuIGB1eC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0keygrK3N0eWxlSWRDb3VudGVyKS50b1N0cmluZygzNil9YDtcbn07XG52YXIgdXJsQ2FuUGFyc2UgPSAodmFsdWUpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIFVSTCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgVVJMLmNhblBhcnNlID09PSBcImZ1bmN0aW9uXCIgJiYgVVJMLmNhblBhcnNlKHZhbHVlKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGhhc2ggPSBhc3luYyAoc3RyaW5nKSA9PiB7XG5cdGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8/LnN1YnRsZT8uZGlnZXN0KFwiU0hBLTI1NlwiLCB0eXBlb2Ygc3RyaW5nID09IFwic3RyaW5nXCIgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nKSA6IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gc3RyaW5nIDogYXdhaXQgc3RyaW5nPy5hcnJheUJ1ZmZlcj8uKCkpO1xuXHRyZXR1cm4gXCJzaGEyNTYtXCIgKyBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpKTtcbn07XG52YXIgcGFyc2VMZW5ndGggPSAodmFsdWUsIHNpemUpID0+IHtcblx0aWYgKHZhbHVlLmVuZHNXaXRoKFwiJVwiKSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwICogc2l6ZSgpO1xuXHRyZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59O1xudmFyIHBhcnNlT3JpZ2luID0gKG9yaWdpbiwgZWxlbWVudCkgPT4ge1xuXHRjb25zdCB2YWx1ZXMgPSBvcmlnaW4uc3BsaXQoXCIgXCIpO1xuXHRyZXR1cm4gbmV3IERPTVBvaW50KHBhcnNlTGVuZ3RoKHZhbHVlc1swXSwgKCkgPT4gZWxlbWVudC5jbGllbnRXaWR0aCksIHBhcnNlTGVuZ3RoKHZhbHVlc1sxXSwgKCkgPT4gZWxlbWVudC5jbGllbnRIZWlnaHQpKTtcbn07XG52YXIgcGFyc2VUaW1lID0gKHYsIGZhbGxiYWNrID0gMCkgPT4ge1xuXHRpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHJldHVybiB2O1xuXHRpZiAoIXYpIHJldHVybiBmYWxsYmFjaztcblx0Y29uc3QgdCA9IFN0cmluZyh2KS50cmltKCk7XG5cdGlmICh0LmVuZHNXaXRoKFwibXNcIikpIHJldHVybiBwYXJzZUZsb2F0KHQpO1xuXHRpZiAodC5lbmRzV2l0aChcInNcIikpIHJldHVybiBwYXJzZUZsb2F0KHQpICogMWUzO1xuXHRyZXR1cm4gcGFyc2VGbG9hdCh0KSB8fCBmYWxsYmFjaztcbn07XG52YXIgbm9ybWFsaXplSXRlcmF0aW9uQ291bnQgPSAoY291bnQpID0+IHtcblx0aWYgKGNvdW50ID09PSB2b2lkIDApIHJldHVybiAxO1xuXHRpZiAoY291bnQgPT09IC0xIHx8IGNvdW50ID09PSBJbmZpbml0eSkgcmV0dXJuIEluZmluaXR5O1xuXHRyZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihjb3VudCkpO1xufTtcbnZhciBub3JtYWxpemVJdGVyYXRpb25zID0gKG4pID0+IG4gPT09IC0xIHx8IG4gPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBNYXRoLm1heCgxLCBuID8/IDEpO1xudmFyIGlzU2Nyb2xsRHJpdmVuID0gKHQpID0+IHQgIT0gbnVsbCAmJiB0eXBlb2YgdCA9PT0gXCJvYmplY3RcIiAmJiB0LmtpbmQgPT09IFwic2Nyb2xsXCI7XG52YXIgaXNWaWV3RHJpdmVuID0gKHQpID0+IHQgIT0gbnVsbCAmJiB0eXBlb2YgdCA9PT0gXCJvYmplY3RcIiAmJiB0LmtpbmQgPT09IFwidmlld1wiO1xudmFyIGlzU3R5bGVIb3N0ID0gKG5vZGUpID0+IHtcblx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgIT09IDEpIHJldHVybiBmYWxzZTtcblx0aWYgKFN0cmluZyhub2RlLmxvY2FsTmFtZSB8fCBcIlwiKS5pbmNsdWRlcyhcIi1cIikpIHJldHVybiB0cnVlO1xuXHRpZiAobm9kZS5zaGFkb3dSb290KSByZXR1cm4gdHJ1ZTtcblx0aWYgKG5vZGUuc3R5bGVzICE9IG51bGwpIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIHJlYWRTaGVldFJ1bGVDb3VudCA9IChzaGVldCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBzaGVldC5jc3NSdWxlcy5sZW5ndGg7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xudmFyIGlzQWRvcHRlZFNoZWV0RW1wdHkgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIHRydWU7XG5cdGNvbnN0IGNvdW50ID0gcmVhZFNoZWV0UnVsZUNvdW50KHNoZWV0KTtcblx0aWYgKGNvdW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiBjb3VudCA9PT0gMDtcbn07XG52YXIgaXNDb2xvclRva2VuID0gKG5hbWUpID0+IG5hbWUgPT09IFwiLS1iYXNlLWNvbG9yXCIgfHwgbmFtZS5zdGFydHNXaXRoKFwiLS1jb2xvci1cIikgfHwgbmFtZS5lbmRzV2l0aChcIi1jb2xvclwiKSB8fCBuYW1lLmVuZHNXaXRoKFwiLWZnXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCItYmdcIik7XG52YXIgaXNFbGVtZW50VmlzaWJsZSA9IChlbCkgPT4ge1xuXHRpZiAoIWVsLmlzQ29ubmVjdGVkKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2YgZWwuZ2V0Q2xpZW50UmVjdHMgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG52YXIgaXNTdHlsZUJpbmRpbmcgPSAoc3R5bGVzKSA9PiB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHN0eWxlcykgJiYgdHlwZW9mIHN0eWxlc1swXSA9PT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciBpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQgPSAoY3NzVGV4dCkgPT4ge1xuXHRjb25zdCBzb3VyY2UgPSB0eXBlb2YgY3NzVGV4dCA9PT0gXCJzdHJpbmdcIiA/IGNzc1RleHQudHJpbSgpIDogXCJcIjtcblx0aWYgKCFzb3VyY2UpIHJldHVybiB0cnVlO1xuXHRmb3IgKGNvbnN0IGNodW5rIG9mIHNvdXJjZS5zcGxpdChcIjtcIikpIHtcblx0XHRjb25zdCBkZWNsYXJhdGlvbiA9IGNodW5rLnRyaW0oKTtcblx0XHRpZiAoIWRlY2xhcmF0aW9uKSBjb250aW51ZTtcblx0XHRjb25zdCBjb2xvbkluZGV4ID0gZGVjbGFyYXRpb24uaW5kZXhPZihcIjpcIik7XG5cdFx0aWYgKGNvbG9uSW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKGRlY2xhcmF0aW9uLnNsaWNlKGNvbG9uSW5kZXggKyAxKS50cmltKCkubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcbnZhciBwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUgPSAoZWxlbWVudCkgPT4ge1xuXHRpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47XG5cdGNvbnN0IHJhdyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG5cdGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuO1xuXHRpZiAoaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0KHJhdykpIHtcblx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuXHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG5cdH1cbn07XG52YXIgYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUgPSAoZWxlbWVudCwgY3NzVGV4dCkgPT4ge1xuXHRpZiAoaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0KGNzc1RleHQpKSB7XG5cdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcblx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xufTtcbnZhciBpc05hdGl2ZUNTU1N0eWxlVmFsdWUgPSAodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0Y29uc3QgQ1NTU3R5bGVWYWx1ZUN0b3IgPSBnbG9iYWxUaGlzLkNTU1N0eWxlVmFsdWU7XG5cdFx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgQ1NTU3R5bGVWYWx1ZUN0b3IpIHJldHVybiB0cnVlO1xuXHRcdGZvciAobGV0IHByb3RvdHlwZSA9IHZhbHVlOyBwcm90b3R5cGU7IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpKSBpZiAocHJvdG90eXBlPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gXCJDU1NTdHlsZVZhbHVlXCIpIHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHt9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgaXNSZWFjdGl2ZVN0eWxlVmFsdWUgPSAodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gXCJ2YWx1ZVwiIGluIHZhbHVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24gPSAodmFsdWUpID0+IHtcblx0cmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciBlc2NhcGVSZWdFeHAgPSAodmFsdWUpID0+IHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn07XG52YXIgY29udGFpbnNNYXJrZXIgPSAoY3NzVmFsdWUsIG1hcmtlcikgPT4ge1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgdmFyXFxcXChcXFxccyoke2VzY2FwZVJlZ0V4cChtYXJrZXIpfVxcXFxzKlxcXFwpYCkudGVzdChjc3NWYWx1ZSk7XG59O1xudmFyIHJlYWRBdHRhY2hlZENTU1VuaXQgPSAodGV4dCkgPT4ge1xuXHRjb25zdCBtYXRjaCA9IENTU19VTklUX1RPS0VOX1JFLmV4ZWModGV4dCk7XG5cdGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXHRjb25zdCBhdXRob3JlZCA9IG1hdGNoWzBdO1xuXHRjb25zdCBub3JtYWxpemVkID0gYXV0aG9yZWQudG9Mb3dlckNhc2UoKTtcblx0aWYgKCFDU1NfRElNRU5TSU9OX1VOSVRTLmhhcyhub3JtYWxpemVkKSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB7XG5cdFx0YXV0aG9yZWQsXG5cdFx0bm9ybWFsaXplZCxcblx0XHRsZW5ndGg6IGF1dGhvcmVkLmxlbmd0aFxuXHR9O1xufTtcbnZhciBnZXRXaW5kb3dDb25zdHJ1Y3RvciA9ICh3aW4sIG5hbWUpID0+IHtcblx0cmV0dXJuIHdpbj8uW25hbWVdID8/IGdsb2JhbFRoaXM/LltuYW1lXTtcbn07XG52YXIgY3JlYXRlVHlwZWRVbml0VmFsdWUgPSAod2luLCB1bml0LCB2YWx1ZSkgPT4ge1xuXHRjb25zdCBDU1NOYW1lc3BhY2UgPSB3aW4/LkNTUztcblx0Y29uc3QgZmFjdG9yeU5hbWUgPSBjc3NVbml0RmFjdG9yeU5hbWUodW5pdCk7XG5cdGNvbnN0IGZhY3RvcnkgPSBDU1NOYW1lc3BhY2U/LltmYWN0b3J5TmFtZV07XG5cdGlmICh0eXBlb2YgZmFjdG9yeSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFjdG9yeS5jYWxsKENTU05hbWVzcGFjZSwgdmFsdWUpO1xuXHRjb25zdCBDU1NVbml0VmFsdWVDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU1VuaXRWYWx1ZVwiKTtcblx0aWYgKHR5cGVvZiBDU1NVbml0VmFsdWVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYFR5cGVkIE9NIGRvZXMgbm90IHN1cHBvcnQgQ1NTIHVuaXQgXCIke3VuaXR9XCJgKTtcblx0cmV0dXJuIG5ldyBDU1NVbml0VmFsdWVDdG9yKHZhbHVlLCBjc3NVbml0Q29uc3RydWN0b3JOYW1lKHVuaXQpKTtcbn07XG52YXIgaXNTdHlsZVZhbHVlID0gKHZhbCkgPT4gaGFzVHlwZWRPTSAmJiB2YWwgaW5zdGFuY2VvZiBDU1NTdHlsZVZhbHVlO1xudmFyIGlzVW5pdFZhbHVlID0gKHZhbCkgPT4gaGFzVHlwZWRPTSAmJiB2YWwgaW5zdGFuY2VvZiBDU1NVbml0VmFsdWU7XG52YXIgcXVlcnlGaXJzdERlZXAgPSAocm9vdCwgc2VsZWN0b3IpID0+IHtcblx0aWYgKCFyb290IHx8ICFzZWxlY3RvcikgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHRyeVF1ZXJ5ID0gKHNjb3BlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGhpdCA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3I/LihzZWxlY3Rvcik7XG5cdFx0XHRyZXR1cm4gaGl0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBoaXQgOiBudWxsO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBkaXJlY3QgPSB0cnlRdWVyeShyb290KTtcblx0aWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdDtcblx0aWYgKHJvb3QgaW5zdGFuY2VvZiBFbGVtZW50ICYmIHJvb3Quc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IGlubmVyID0gcXVlcnlGaXJzdERlZXAocm9vdC5zaGFkb3dSb290LCBzZWxlY3Rvcik7XG5cdFx0aWYgKGlubmVyKSByZXR1cm4gaW5uZXI7XG5cdH1cblx0aWYgKHR5cGVvZiByb290LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdGZvciAoY29uc3QgZWwgb2Ygcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkge1xuXHRcdGlmICghZWwuc2hhZG93Um9vdCkgY29udGludWU7XG5cdFx0Y29uc3QgaGl0ID0gcXVlcnlGaXJzdERlZXAoZWwuc2hhZG93Um9vdCwgc2VsZWN0b3IpO1xuXHRcdGlmIChoaXQpIHJldHVybiBoaXQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGF5ZXJzLnRzXG52YXIgY3NzTGF5ZXJPcmRlciA9ICguLi5ncm91cHMpID0+IHtcblx0Y29uc3Qgc2VlbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0IG5hbWVzID0gW107XG5cdGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG5cdFx0aWYgKGdyb3VwID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGxpc3QgPSB0eXBlb2YgZ3JvdXAgPT09IFwic3RyaW5nXCIgPyBbZ3JvdXBdIDogZ3JvdXA7XG5cdFx0Zm9yIChjb25zdCByYXcgb2YgbGlzdCkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IFN0cmluZyhyYXcgfHwgXCJcIikudHJpbSgpO1xuXHRcdFx0aWYgKCFuYW1lIHx8IHNlZW4uaGFzKG5hbWUpKSBjb250aW51ZTtcblx0XHRcdHNlZW4uYWRkKG5hbWUpO1xuXHRcdFx0bmFtZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG5hbWVzLmxlbmd0aCA/IGBAbGF5ZXIgJHtuYW1lcy5qb2luKFwiLCBcIil9O2AgOiBcIlwiO1xufTtcbnZhciB2ZWVsYUNhc2NhZGVPcmRlciA9ICgpID0+IGNzc0xheWVyT3JkZXIoVkVFTEFfQ0FTQ0FERV9MQVlFUlMpO1xudmFyIG1ha2VIb3N0TGF5ZXJPcmRlciA9IChleHRyYSkgPT4gY3NzTGF5ZXJPcmRlcihVWF9IT1NUX0xBWUVSUywgZXh0cmEpO1xudmFyIGNzc0xheWVyQmxvY2sgPSAobGF5ZXJOYW1lLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSAoY3NzVGV4dCB8fCBcIlwiKS50cmltKCk7XG5cdGlmICghbGF5ZXJOYW1lIHx8ICFib2R5KSByZXR1cm4gXCJcIjtcblx0cmV0dXJuIGBAbGF5ZXIgJHtsYXllck5hbWV9IHtcXG4ke2JvZHl9XFxufWA7XG59O1xudmFyIHdyYXBDc3NMYXllciA9IChjc3NUZXh0LCBsYXllck5hbWUpID0+IGxheWVyTmFtZSA/IGBAbGF5ZXIgJHtsYXllck5hbWV9IHsgJHtjc3NUZXh0fSB9YCA6IGNzc1RleHQ7XG52YXIgbm9ybWFsaXplQ3NzRm9yTGF5ZXIgPSAobGF5ZXJOYW1lLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IHRyaW1tZWQgPSAoY3NzVGV4dCB8fCBcIlwiKS50cmltKCk7XG5cdGlmICghdHJpbW1lZCkgcmV0dXJuIFwiXCI7XG5cdGlmICgvXkBsYXllclxcYi8udGVzdCh0cmltbWVkKSkgcmV0dXJuIHRyaW1tZWQ7XG5cdHJldHVybiBjc3NMYXllckJsb2NrKGxheWVyTmFtZSwgdHJpbW1lZCk7XG59O1xudmFyIHVud3JhcE91dGVyTGF5ZXJCbG9jayA9IChjc3MsIGV4cGVjdGVkTmFtZSkgPT4ge1xuXHRjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChMQVlFUl9PUEVOKTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHBlY3RlZE5hbWUgJiYgbWF0Y2hbMV0gIT09IGV4cGVjdGVkTmFtZSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IG9wZW4gPSBtYXRjaFswXS5sYXN0SW5kZXhPZihcIntcIik7XG5cdGxldCBkZXB0aCA9IDA7XG5cdGZvciAobGV0IGkgPSBvcGVuOyBpIDwgY3NzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY2ggPSBjc3NbaV07XG5cdFx0aWYgKGNoID09PSBcIntcIikgZGVwdGgrKztcblx0XHRlbHNlIGlmIChjaCA9PT0gXCJ9XCIpIHtcblx0XHRcdGRlcHRoLS07XG5cdFx0XHRpZiAoZGVwdGggPT09IDApIHtcblx0XHRcdFx0aWYgKGNzcy5zbGljZShpICsgMSkudHJpbSgpKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0cmV0dXJuIGNzcy5zbGljZShvcGVuICsgMSwgaSkudHJpbSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgdW53cmFwQ3NzTGF5ZXIgPSAoY3NzVGV4dCwgbGF5ZXJOYW1lKSA9PiB7XG5cdGNvbnN0IHN0cmlwcGVkID0gc3RyaXBDc3NQcmVhbWJsZShjc3NUZXh0KTtcblx0cmV0dXJuIHVud3JhcE91dGVyTGF5ZXJCbG9jayhzdHJpcHBlZCwgbGF5ZXJOYW1lKSA/PyBzdHJpcHBlZDtcbn07XG52YXIgY3NzSW1wb3J0V2l0aExheWVyID0gKHVybCwgbGF5ZXIgPSBcIlwiKSA9PiBgQGltcG9ydCB1cmwoXCIke3VybH1cIikgJHtsYXllciAmJiB0eXBlb2YgbGF5ZXIgPT09IFwic3RyaW5nXCIgPyBgbGF5ZXIoJHtsYXllcn0pYCA6IFwiXCJ9O2A7XG52YXIgVVhfUFJFTE9BRF9IT1NUX0NTUyA9IGNzc0xheWVyQmxvY2soXCJ1eC1wcmVsb2FkXCIsIFwiOmhvc3QgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XCIpO1xudmFyIGdldE9yQ3JlYXRlTGF5ZXJSdWxlID0gKHNoZWV0LCBsYXllck5hbWUpID0+IHtcblx0aWYgKCFzaGVldCB8fCAhbGF5ZXJOYW1lKSByZXR1cm4gdm9pZCAwO1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMgfHwgW10pO1xuXHRjb25zdCBleGlzdGluZyA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IGlzTGF5ZXJCbG9ja1J1bGUocnVsZSkgJiYgcnVsZS5uYW1lID09PSBsYXllck5hbWUpO1xuXHRpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblx0dHJ5IHtcblx0XHRjb25zdCBydWxlSW5kZXggPSBzaGVldC5pbnNlcnRSdWxlKGNzc0VtcHR5TGF5ZXJSdWxlKGxheWVyTmFtZSksIHJ1bGVzLmxlbmd0aCk7XG5cdFx0Y29uc3QgY3JlYXRlZCA9IHNoZWV0LmNzc1J1bGVzPy5bcnVsZUluZGV4XTtcblx0XHRyZXR1cm4gaXNMYXllckJsb2NrUnVsZShjcmVhdGVkKSA/IGNyZWF0ZWQgOiB2b2lkIDA7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybjtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb3BlcnR5LnRzXG52YXIgdG9rZW5pemVOdW1lcmljQ1NTJDEgPSAoc291cmNlKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IFtdO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0d2hpbGUgKGN1cnNvciA8IHNvdXJjZS5sZW5ndGgpIHtcblx0XHRjb25zdCByZXN0ID0gc291cmNlLnNsaWNlKGN1cnNvcik7XG5cdFx0Y29uc3Qgd2hpdGVzcGFjZSA9IC9eXFxzKy8uZXhlYyhyZXN0KTtcblx0XHRpZiAod2hpdGVzcGFjZSkge1xuXHRcdFx0Y3Vyc29yICs9IHdoaXRlc3BhY2VbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IG51bWJlciA9IC9eKD86XFxkKlxcLlxcZCt8XFxkK1xcLj9cXGQqKSg/OltlRV1bKy1dP1xcZCspPy8uZXhlYyhyZXN0KTtcblx0XHRpZiAobnVtYmVyKSB7XG5cdFx0XHRjdXJzb3IgKz0gbnVtYmVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnN0IHVuaXRNYXRjaCA9IENTU19VTklUX1RPS0VOX1JFLmV4ZWMoc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRNYXRjaD8uWzBdID8/IG51bGw7XG5cdFx0XHRpZiAodW5pdE1hdGNoKSBjdXJzb3IgKz0gdW5pdE1hdGNoWzBdLmxlbmd0aDtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJudW1iZXJcIixcblx0XHRcdFx0dmFsdWU6IE51bWJlcihudW1iZXJbMF0pLFxuXHRcdFx0XHR1bml0OiB1bml0ID09IG51bGwgPyBudWxsIDogdW5pdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBpZGVudGlmaWVyID0gL15bYS16QS1aX11bYS16QS1aMC05Xy1dKi8uZXhlYyhyZXN0KTtcblx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcImlkZW50aWZpZXJcIixcblx0XHRcdFx0dmFsdWU6IGlkZW50aWZpZXJbMF0udG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gaWRlbnRpZmllclswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltYm9sID0gcmVzdFswXTtcblx0XHRpZiAoW1xuXHRcdFx0XCIrXCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCIvXCIsXG5cdFx0XHRcIihcIixcblx0XHRcdFwiKVwiLFxuXHRcdFx0XCIsXCJcblx0XHRdLmluY2x1ZGVzKHN5bWJvbCkpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJzeW1ib2xcIixcblx0XHRcdFx0dmFsdWU6IHN5bWJvbFxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IrKztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIHRva2VuIG5lYXIgXCIke3Jlc3R9XCJgKTtcblx0fVxuXHRyZXR1cm4gdG9rZW5zO1xufTtcbnZhciBOdW1lcmljVHlwZWRPTVBhcnNlciQxID0gY2xhc3Mge1xuXHR0b2tlbnM7XG5cdHdpbjtcblx0aW5kZXggPSAwO1xuXHRjb25zdHJ1Y3Rvcih0b2tlbnMsIHdpbikge1xuXHRcdHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMud2luID0gd2luO1xuXHR9XG5cdHBhcnNlKCkge1xuXHRcdGNvbnN0IHJvb3QgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0aWYgKHRoaXMuaW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCB0cmFpbGluZyBleHByZXNzaW9uXCIpO1xuXHRcdHJldHVybiByb290O1xuXHR9XG5cdGN1cnJlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHR9XG5cdGNvbnN1bWUoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uXCIpO1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH1cblx0Y29uc3VtZVN5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9XG5cdG1hdGNoZXNTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRyZXR1cm4gdG9rZW4/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHN5bWJvbDtcblx0fVxuXHRjcmVhdGVNYXRoKG5hbWUsIC4uLnZhbHVlcykge1xuXHRcdGNvbnN0IENvbnN0cnVjdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3IodGhpcy53aW4sIG5hbWUpO1xuXHRcdGlmICh0eXBlb2YgQ29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvciguLi52YWx1ZXMpO1xuXHR9XG5cdHBhcnNlU3VtKCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBzdW0gb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiK1wiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVByb2R1Y3QoKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiL1wiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgcHJvZHVjdCBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIqXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aEludmVydFwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VVbmFyeSgpIHtcblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHRoaXMucGFyc2VVbmFyeSgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cdH1cblx0cGFyc2VQcmltYXJ5KCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwibnVtYmVyXCIpIHJldHVybiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgdG9rZW4udW5pdCA/PyBcIm51bWJlclwiLCB0b2tlbi52YWx1ZSk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0b2tlbi52YWx1ZSk7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlXCIpO1xuXHR9XG5cdHBhcnNlRnVuY3Rpb24obmFtZSkge1xuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwiY2FsY1wiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdGlmICghdGhpcy5tYXRjaGVzU3ltYm9sKFwiKVwiKSkge1xuXHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIsXCIpKSB7XG5cdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdGlmIChuYW1lID09PSBcIm1pblwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWluKCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWluXCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcIm1heFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWF4KCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWF4XCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcImNsYW1wXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJjbGFtcCgpIHJlcXVpcmVzIHRocmVlIHZhbHVlc1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoQ2xhbXBcIiwgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0fVxufTtcbnZhciBwYXJzZVRvVHlwZWRPTSA9IChjc3NWYWx1ZSwgd2luKSA9PiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdG9rZW5zID0gdG9rZW5pemVOdW1lcmljQ1NTJDEoY3NzVmFsdWUpO1xuXHRcdHJldHVybiBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIkMSh0b2tlbnMsIHdpbikucGFyc2UoKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG52YXIgc2V0UHJvcGVydHlJZk5vdEVxdWFsID0gKHN0eWxlUmVmLCBrZWJhYiwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdGlmICghc3R5bGVSZWYgfHwgIWtlYmFiKSByZXR1cm47XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0aWYgKHN0eWxlUmVmLmdldFByb3BlcnR5VmFsdWUoa2ViYWIpICE9PSBcIlwiKSBzdHlsZVJlZi5yZW1vdmVQcm9wZXJ0eShrZWJhYik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdHlsZVJlZi5nZXRQcm9wZXJ0eVZhbHVlKGtlYmFiKSAhPT0gdmFsdWUpIHN0eWxlUmVmLnNldFByb3BlcnR5KGtlYmFiLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHlUeXBlZCA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFlbGVtZW50IHx8ICFuYW1lKSByZXR1cm4gZWxlbWVudDtcblx0Y29uc3Qga2ViYWIgPSBjYW1lbFRvS2ViYWIobmFtZSk7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWxlbWVudC5zdHlsZTtcblx0Y29uc3Qgc3R5bGVNYXBSZWYgPSBlbGVtZW50LmF0dHJpYnV0ZVN0eWxlTWFwID8/IGVsZW1lbnQuc3R5bGVNYXA7XG5cdGlmICghaGFzVHlwZWRPTSB8fCAhc3R5bGVNYXBSZWYpIHJldHVybiBzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2soZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UpO1xuXHRjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdGxldCB2YWwgPSBoYXNWYWx1ZSh2YWx1ZSkgJiYgaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c3R5bGVNYXBSZWYuZGVsZXRlPy4oa2ViYWIpO1xuXHRcdGlmIChzdHlsZVJlZikgc2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB7XG5cdFx0Y29uc3Qgb2xkID0gc3R5bGVNYXBSZWYuZ2V0KGtlYmFiKTtcblx0XHRpZiAoaXNVbml0VmFsdWUodmFsKSAmJiBpc1VuaXRWYWx1ZShvbGQpKSB7XG5cdFx0XHRpZiAob2xkLnZhbHVlID09PSB2YWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IHZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHR9IGVsc2UgaWYgKG9sZCA9PT0gdmFsKSByZXR1cm4gZWxlbWVudDtcblx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIHZhbCk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcblx0XHRpZiAoQ1NTPy5udW1iZXIgJiYgIWtlYmFiLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuXHRcdFx0Y29uc3QgbmV3VmFsID0gQ1NTLm51bWJlcih2YWwpO1xuXHRcdFx0Y29uc3Qgb2xkID0gc3R5bGVNYXBSZWYuZ2V0KGtlYmFiKTtcblx0XHRcdGlmIChpc1VuaXRWYWx1ZShvbGQpICYmIG9sZC52YWx1ZSA9PT0gbmV3VmFsLnZhbHVlICYmIG9sZC51bml0ID09PSBuZXdWYWwudW5pdCkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIG5ld1ZhbCk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKC9cXGIoY2FsY3xtaW58bWF4fGNsYW1wKVxccypcXCgvLnRlc3QodmFsKSkge1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VUb1R5cGVkT00odmFsLCB3aW4pO1xuXHRcdFx0aWYgKHBhcnNlZCkgdHJ5IHtcblx0XHRcdFx0c3R5bGVNYXBSZWYuc2V0KGtlYmFiLCBwYXJzZWQpO1xuXHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdH0gY2F0Y2gge31cblx0XHR9XG5cdFx0Y29uc3QgbWF5YmVOdW0gPSB0cnlTdHJpbmdBc051bWJlcih2YWwpO1xuXHRcdGlmICh0eXBlb2YgbWF5YmVOdW0gPT09IFwibnVtYmVyXCIgJiYgQ1NTPy5udW1iZXIgJiYgIWtlYmFiLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuXHRcdFx0Y29uc3QgbmV3VmFsID0gQ1NTLm51bWJlcihtYXliZU51bSk7XG5cdFx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdFx0aWYgKGlzVW5pdFZhbHVlKG9sZCkgJiYgb2xkLnZhbHVlID09PSBuZXdWYWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IG5ld1ZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgbmV3VmFsKTtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCB2YWwsIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIFN0cmluZyh2YWwpLCBpbXBvcnRhbmNlKTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFlbGVtZW50IHx8ICFuYW1lKSByZXR1cm4gZWxlbWVudDtcblx0Y29uc3Qga2ViYWIgPSBjYW1lbFRvS2ViYWIobmFtZSk7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWxlbWVudC5zdHlsZTtcblx0aWYgKCFzdHlsZVJlZikgcmV0dXJuIGVsZW1lbnQ7XG5cdGxldCB2YWwgPSBoYXNWYWx1ZSh2YWx1ZSkgJiYgaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgIWlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB2YWwgPSB0cnlTdHJpbmdBc051bWJlcih2YWwpID8/IHZhbDtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsID09PSBcIm51bWJlclwiKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIFN0cmluZyh2YWwpLCBpbXBvcnRhbmNlKTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHkgPSAoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdHJldHVybiBoYXNUeXBlZE9NID8gc2V0U3R5bGVQcm9wZXJ0eVR5cGVkKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKSA6IHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayhlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hlZXRzLnRzXG52YXIgc2V0U3R5bGVJblJ1bGUgPSAoc2VsZWN0b3IsIG5hbWUsIHZhbHVlKSA9PiB7XG5cdHJldHVybiBzZXRTdHlsZVByb3BlcnR5KGdldFN0eWxlUnVsZShzZWxlY3RvciksIG5hbWUsIHZhbHVlKTtcbn07XG52YXIgc2V0U3R5bGVSdWxlID0gKHNlbGVjdG9yLCBzaGVldCkgPT4ge1xuXHRjb25zdCBydWxlID0gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yKTtcblx0T2JqZWN0LmVudHJpZXMoc2hlZXQpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFZhbHVlXSkgPT4gc2V0U3R5bGVQcm9wZXJ0eShydWxlLCBwcm9wTmFtZSwgcHJvcFZhbHVlKSk7XG5cdHJldHVybiBydWxlO1xufTtcbnZhciBsb2FkU3R5bGVTaGVldCA9IChpbmxpbmUsIGJhc2UsIGxheWVyID0gXCJcIiwgaW50ZWdyaXR5KSA9PiB7XG5cdGNvbnN0IGxvYWQgPSBmZXRjaEFuZENhY2hlKGlubGluZSk7XG5cdGNvbnN0IHVybCA9IHR5cGVvZiBpbmxpbmUgPT0gXCJzdHJpbmdcIiA/IFVSTC5jYW5QYXJzZShpbmxpbmUpID8gaW5saW5lIDogbG9hZCA6IGxvYWQ7XG5cdGlmIChiYXNlPy5bMF0pIGJhc2VbMF0uZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoYmFzZSAmJiB1cmwgJiYgdHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSBzZXRTdHlsZVVSTChiYXNlLCB1cmwsIGxheWVyKTtcblx0aWYgKGJhc2U/LlswXSAmJiAoIVVSTC5jYW5QYXJzZShpbmxpbmUpIHx8IGludGVncml0eSkgJiYgYmFzZT8uWzBdIGluc3RhbmNlb2YgSFRNTExpbmtFbGVtZW50KSB7fVxuXHRyZXR1cm4gcHJvbWlzZU9yRGlyZWN0KGxvYWQsIChyZXMpID0+IHtcblx0XHRpZiAoYmFzZT8uWzBdICYmIHJlcykge1xuXHRcdFx0c2V0U3R5bGVVUkwoYmFzZSwgcmVzLCBsYXllcik7XG5cdFx0XHRiYXNlPy5bMF0uc2V0QXR0cmlidXRlKFwibG9hZGVkXCIsIFwiXCIpO1xuXHRcdH1cblx0fSk/LmNhdGNoPy4oKGVycm9yKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgc3R5bGUgc2hlZXQ6XCIsIGVycm9yKTtcblx0fSk7XG59O1xudmFyIGxvYWRCbG9iU3R5bGUgPSAoaW5saW5lKSA9PiB7XG5cdGNvbnN0IHN0eWxlID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSA6IG51bGw7XG5cdGlmIChzdHlsZSkgc3R5bGUuZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoc3R5bGUpIHtcblx0XHRPYmplY3QuYXNzaWduKHN0eWxlLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdFx0dHlwZTogXCJ0ZXh0L2Nzc1wiLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwic2FtZS1vcmlnaW5cIlxuXHRcdH0pO1xuXHRcdHN0eWxlLmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xuXHRcdGxvYWRTdHlsZVNoZWV0KGlubGluZSwgW3N0eWxlLCBcImhyZWZcIl0pO1xuXHRcdHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlKTtcblx0XHRyZXR1cm4gc3R5bGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGxvYWRJbmxpbmVTdHlsZSA9IChpbmxpbmUsIHJvb3RFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudD8uaGVhZCA6IG51bGwsIGxheWVyID0gXCJcIikgPT4ge1xuXHRjb25zdCBQTEFDRSA9IHJvb3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPy4oXCJoZWFkXCIpID8/IHJvb3RFbGVtZW50O1xuXHRpZiAodHlwZW9mIEhUTUxIZWFkRWxlbWVudCAhPSBcInVuZGVmaW5lZFwiICYmIFBMQUNFIGluc3RhbmNlb2YgSFRNTEhlYWRFbGVtZW50KSByZXR1cm4gbG9hZEJsb2JTdHlsZShpbmxpbmUpO1xuXHRjb25zdCBzdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpIDogbnVsbDtcblx0aWYgKHN0eWxlKSB7XG5cdFx0c3R5bGUuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG5cdFx0bG9hZFN0eWxlU2hlZXQoaW5saW5lLCBbc3R5bGUsIFwiaW5uZXJIVE1MXCJdLCBsYXllcik7XG5cdFx0UExBQ0U/LnByZXBlbmQ/LihzdHlsZSk7XG5cdFx0cmV0dXJuIHN0eWxlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBzZXRQcm9wZXJ0eSA9ICh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRyZXR1cm4gc2V0U3R5bGVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgcHJlbG9hZFN0eWxlID0gKHN0eWxlcykgPT4ge1xuXHRyZXR1cm4gbG9hZEFzQWRvcHRlZChzdHlsZXMsIFwiXCIpO1xufTtcbnZhciByZW1lbWJlckFkb3B0ZWRUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIGNzc1RleHQpO1xuXHRhZG9wdGVkRmlsbGVkLmFkZChzaGVldCk7XG59O1xudmFyIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHN0b3JlZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpO1xuXHRpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuXHRmb3IgKGNvbnN0IFtrZXksIG1hcHBlZF0gb2YgYWRvcHRlZE1hcCkgaWYgKG1hcHBlZCA9PT0gc2hlZXQgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGtleTtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQgPSAoc2hlZXQsIGNzc1RleHQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCB0ZXh0ID0gY3NzVGV4dCB8fCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHNoZWV0KTtcblx0Y29uc3QgY291bnQgPSByZWFkU2hlZXRSdWxlQ291bnQoc2hlZXQpO1xuXHRpZiAoY291bnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0aWYgKGNvdW50ID4gMCkge1xuXHRcdGFkb3B0ZWRGaWxsZWQuYWRkKHNoZWV0KTtcblx0XHRpZiAodGV4dCAmJiAhYWRvcHRlZEFwcGxpZWRUZXh0LmhhcyhzaGVldCkpIGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghdGV4dCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCB0ZXh0KSkge1xuXHRcdHJlbWVtYmVyQWRvcHRlZFRleHQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgYXBwbHlBZG9wdGVkU3R5bGVUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGlmICghc2hlZXQgfHwgIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRzaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycm9yPy5tZXNzYWdlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKCEobWVzc2FnZS5pbmNsdWRlcyhcIkBpbXBvcnQgcnVsZXMgYXJlIG5vdCBhbGxvd2VkXCIpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoXCJAaW1wb3J0XCIpICYmIG1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgYWxsb3dlZFwiKSkpIGNvbnNvbGUud2FybihcIltET01dIEZhaWxlZCB0byBhcHBseSBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGVycm9yKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgc2hlZXRGb3JCbG9iID0gKGJsb2IpID0+IHtcblx0bGV0IHNoZWV0ID0gYWRvcHRlZEJsb2JNYXAuZ2V0KGJsb2IpO1xuXHRpZiAoIXNoZWV0KSB7XG5cdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGFkb3B0ZWRCbG9iTWFwLnNldChibG9iLCBzaGVldCk7XG5cdH1cblx0cmV0dXJuIHNoZWV0O1xufTtcbnZhciBsb2FkQXNBZG9wdGVkID0gKHN0eWxlcywgbGF5ZXJOYW1lID0gbnVsbCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBsb2FkQXNBZG9wdGVkVW5zYWZlKHN0eWxlcywgbGF5ZXJOYW1lKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbRE9NXSBsb2FkQXNBZG9wdGVkIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xudmFyIGxvYWRBc0Fkb3B0ZWRVbnNhZmUgPSAoc3R5bGVzLCBsYXllck5hbWUgPSBudWxsKSA9PiB7XG5cdGlmICghc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiICYmIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudChzdHlsZXMpKSB7XG5cdFx0bG9hZElubGluZVN0eWxlKHN0eWxlcywgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiBhZG9wdGVkTWFwPy5oYXM/LihzdHlsZXMpKSB7XG5cdFx0Y29uc3QgY2FjaGVkID0gYWRvcHRlZE1hcC5nZXQoc3R5bGVzKTtcblx0XHRjb25zdCBhcHBsaWVkID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChjYWNoZWQpIHx8IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0ZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChjYWNoZWQsIGFwcGxpZWQpO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoY2FjaGVkKSkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goY2FjaGVkKTtcblx0XHRyZXR1cm4gY2FjaGVkO1xuXHR9XG5cdGlmICgoc3R5bGVzIGluc3RhbmNlb2YgQmxvYiB8fCBzdHlsZXMgaW5zdGFuY2VvZiBGaWxlKSAmJiBhZG9wdGVkQmxvYk1hcD8uaGFzPy4oc3R5bGVzKSkge1xuXHRcdGNvbnN0IGNhY2hlZCA9IGFkb3B0ZWRCbG9iTWFwLmdldChzdHlsZXMpO1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoY2FjaGVkKTtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiAhZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLmluY2x1ZGVzKGNhY2hlZCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKGNhY2hlZCk7XG5cdFx0cmV0dXJuIGNhY2hlZDtcblx0fVxuXHRpZiAoIXN0eWxlcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHNoZWV0ID0gdHlwZW9mIHN0eWxlcyA9PSBcInN0cmluZ1wiID8gZ2V0T3JJbnNlcnRDb21wdXRlZChhZG9wdGVkTWFwLCBzdHlsZXMsICgpID0+IG5ldyBDU1NTdHlsZVNoZWV0KCkpIDogc2hlZXRGb3JCbG9iKHN0eWxlcyk7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiAhdXJsQ2FuUGFyc2Uoc3R5bGVzKSkge1xuXHRcdGNvbnN0IGxheWVyV3JhcHBlZCA9IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0YWRvcHRlZE1hcC5zZXQoc3R5bGVzLCBzaGVldCk7XG5cdFx0aWYgKCFhcHBseUFkb3B0ZWRTdHlsZVRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCkpIHtcblx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMpO1xuXHRcdH0gZWxzZSByZW1lbWJlckFkb3B0ZWRUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpO1xuXHRcdHJldHVybiBzaGVldDtcblx0fSBlbHNlIHByb21pc2VPckRpcmVjdChmZXRjaEFzSW5saW5lKHN0eWxlcyksIChjYWNoZWQpID0+IHtcblx0XHRhZG9wdGVkTWFwLnNldChjYWNoZWQsIHNoZWV0KTtcblx0XHRpZiAoY2FjaGVkKSB7XG5cdFx0XHRpZiAoY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50KGNhY2hlZCkpIHtcblx0XHRcdFx0cmVtb3ZlQWRvcHRlZChzaGVldCk7XG5cdFx0XHRcdGFkb3B0ZWRNYXAuZGVsZXRlKGNhY2hlZCk7XG5cdFx0XHRcdGFkb3B0ZWRCbG9iTWFwLmRlbGV0ZShzdHlsZXMpO1xuXHRcdFx0XHRsb2FkSW5saW5lU3R5bGUoY2FjaGVkLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNoZWV0O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbGF5ZXJXcmFwcGVkID0gd3JhcENzc0xheWVyKGNhY2hlZCwgbGF5ZXJOYW1lKTtcblx0XHRcdGlmICghYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpKSB7XG5cdFx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0XHRhZG9wdGVkTWFwLmRlbGV0ZShjYWNoZWQpO1xuXHRcdFx0XHRhZG9wdGVkQmxvYk1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdFx0bG9hZElubGluZVN0eWxlKGNhY2hlZCwgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0XHR9IGVsc2UgcmVtZW1iZXJBZG9wdGVkVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKTtcblx0XHRcdHJldHVybiBzaGVldDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2hlZXQ7XG59O1xudmFyIGNvbGxlY3RTdHlsZUhvc3RzID0gKG5vZGUsIGludG8pID0+IHtcblx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgPT09IDMpIHJldHVybjtcblx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDExKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkTm9kZXMgfHwgW10pIGNvbGxlY3RTdHlsZUhvc3RzKGNoaWxkLCBpbnRvKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGlzU3R5bGVIb3N0KG5vZGUpKSBpbnRvLmFkZChub2RlKTtcblx0aWYgKHR5cGVvZiBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuO1xuXHR0cnkge1xuXHRcdGZvciAoY29uc3QgZWwgb2Ygbm9kZS5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkgaWYgKGlzU3R5bGVIb3N0KGVsKSkgaW50by5hZGQoZWwpO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIG5vdGlmeVN0eWxlVHJlZUhvc3RzID0gKGhvc3RzLCByZWFzb24gPSBcInRyZWVcIikgPT4ge1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0aWYgKCFpc1N0eWxlSG9zdChlbCkpIGNvbnRpbnVlO1xuXHRcdGZvciAoY29uc3QgZm4gb2Ygc3R5bGVUcmVlSG9va3MpIGZuKGVsLCByZWFzb24pO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyU3R5bGVUcmVlSG9vayA9IChmbikgPT4ge1xuXHRpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybjtcblx0c3R5bGVUcmVlSG9va3MuYWRkKGZuKTtcbn07XG52YXIgb2JzZXJ2ZVN0eWxlVHJlZSA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHJvb3Q7XG5cdGlmIChzdHlsZVRyZWVPYnNlcnZlZC5oYXMocm9vdCkpIHJldHVybiByb290O1xuXHRzdHlsZVRyZWVPYnNlcnZlZC5hZGQocm9vdCk7XG5cdHN0eWxlVHJlZVJvb3RzLmFkZChyb290KTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuXHRcdGNvbnN0IGhvc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IHJlYyBvZiByZWNvcmRzKSBpZiAocmVjLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiByZWMuYWRkZWROb2RlcykgY29sbGVjdFN0eWxlSG9zdHMobm9kZSwgaG9zdHMpO1xuXHRcdFx0Y29uc3Qgc2NvcGUgPSByZWMudGFyZ2V0Py5nZXRSb290Tm9kZT8uKCk7XG5cdFx0XHRpZiAoc2NvcGUgaW5zdGFuY2VvZiBTaGFkb3dSb290ICYmIGlzU3R5bGVIb3N0KHNjb3BlLmhvc3QpKSB7XG5cdFx0XHRcdGNvbnN0IHNoZWV0cyA9IHNjb3BlLmFkb3B0ZWRTdHlsZVNoZWV0cztcblx0XHRcdFx0aWYgKCFzaGVldHMgfHwgc2hlZXRzLmxlbmd0aCA9PT0gMCkgaG9zdHMuYWRkKHNjb3BlLmhvc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVjLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIHJlYy50YXJnZXQpIHtcblx0XHRcdGlmIChpc1N0eWxlSG9zdChyZWMudGFyZ2V0KSkgaG9zdHMuYWRkKHJlYy50YXJnZXQpO1xuXHRcdH1cblx0XHRub3RpZnlTdHlsZVRyZWVIb3N0cyhob3N0cywgXCJtdXRhdGlvblwiKTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7XG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWy4uLlNUWUxFX1RIRU1FX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHtcblx0XHRzdHlsZVRyZWVPYnNlcnZlZC5kZWxldGUocm9vdCk7XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblx0cmV0dXJuIHJvb3Q7XG59O1xudmFyIHJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMgPSAoKSA9PiB7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0Y29uc3QgY2FuUGFyc2UgPSB0eXBlb2YgVVJMICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkwuY2FuUGFyc2UgPT09IFwiZnVuY3Rpb25cIjtcblx0Zm9yIChjb25zdCBba2V5LCBzaGVldF0gb2YgYWRvcHRlZE1hcCkge1xuXHRcdGlmICghc2hlZXQgfHwgdHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XG5cdFx0aWYgKGNhblBhcnNlICYmIFVSTC5jYW5QYXJzZShrZXkpKSBjb250aW51ZTtcblx0XHRjb25zdCB0ZXh0ID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChzaGVldCkgfHwga2V5O1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoc2hlZXQsIHRleHQpO1xuXHRcdGlmIChkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0fVxufTtcbnZhciByZW1vdmVBZG9wdGVkID0gKHNoZWV0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgdGFyZ2V0ID0gdHlwZW9mIHNoZWV0ID09PSBcInN0cmluZ1wiID8gYWRvcHRlZE1hcC5nZXQoc2hlZXQpIDogc2hlZXQ7XG5cdGlmICghdGFyZ2V0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBzaGVldHMgPSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHM7XG5cdGNvbnN0IGlkeCA9IHNoZWV0cy5pbmRleE9mKHRhcmdldCk7XG5cdGlmIChpZHggIT09IC0xKSB7XG5cdFx0c2hlZXRzLnNwbGljZShpZHgsIDEpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgZ2V0VHJhbnNmb3JtID0gKGVsKSA9PiB7XG5cdGlmIChlbD8uY29tcHV0ZWRTdHlsZU1hcCkge1xuXHRcdGNvbnN0IG1hdHJpeCA9IGVsLmNvbXB1dGVkU3R5bGVNYXAoKS5nZXQoXCJ0cmFuc2Zvcm1cIik/LnRvTWF0cml4Py4oKTtcblx0XHRpZiAobWF0cml4KSByZXR1cm4gbWF0cml4O1xuXHR9IGVsc2UgaWYgKGVsKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRyZXR1cm4gbmV3IERPTU1hdHJpeChzdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZT8uKFwidHJhbnNmb3JtXCIpKTtcblx0fVxuXHRyZXR1cm4gbmV3IERPTU1hdHJpeCgpO1xufTtcbnZhciBnZXRUcmFuc2Zvcm1PcmlnaW4gPSAoZWwpID0+IHtcblx0Y29uc3QgY3NzT3JpZ2luID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk/LmdldFByb3BlcnR5VmFsdWU/LihcInRyYW5zZm9ybS1vcmlnaW5cIikgfHwgYDUwJSA1MCVgO1xuXHRyZXR1cm4gcGFyc2VPcmlnaW4oY3NzT3JpZ2luLCBlbCk7XG59O1xudmFyIGdldFByb3BlcnR5VmFsdWUgPSAoc3JjLCBuYW1lKSA9PiB7XG5cdGlmIChcImNvbXB1dGVkU3R5bGVNYXBcIiBpbiBzcmMpIHtcblx0XHRjb25zdCB2YWwgPSBzcmM/LmNvbXB1dGVkU3R5bGVNYXA/LigpPy5nZXQobmFtZSk7XG5cdFx0cmV0dXJuIHZhbCBpbnN0YW5jZW9mIENTU1VuaXRWYWx1ZSA/IHZhbD8udmFsdWUgfHwgMCA6IHZhbD8udG9TdHJpbmc/LigpO1xuXHR9XG5cdGlmIChzcmMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZT8uKHNyYywgXCJcIik7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQoY3M/LmdldFByb3BlcnR5VmFsdWU/LihuYW1lKT8ucmVwbGFjZT8uKFwicHhcIiwgXCJcIikpIHx8IDA7XG5cdH1cblx0cmV0dXJuIHBhcnNlRmxvYXQoKHNyYz8uc3R5bGUgPz8gc3JjKS5nZXRQcm9wZXJ0eVZhbHVlPy4obmFtZSk/LnJlcGxhY2U/LihcInB4XCIsIFwiXCIpKSB8fCAwO1xufTtcbnZhciBnZXRFbGVtZW50Wm9vbSA9IChlbGVtZW50KSA9PiB7XG5cdGxldCB6b29tID0gMSwgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuXHR3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcblx0XHRpZiAoXCJjdXJyZW50Q1NTWm9vbVwiIGluIGN1cnJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q1NTWm9vbSA9IGN1cnJlbnRFbGVtZW50LmN1cnJlbnRDU1Nab29tO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50Q1NTWm9vbSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHpvb20gKj0gY3VycmVudENTU1pvb207XG5cdFx0fVxuXHRcdGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCk7XG5cdFx0aWYgKHN0eWxlLnpvb20gJiYgc3R5bGUuem9vbSAhPT0gXCJub3JtYWxcIikgcmV0dXJuIHpvb20gKj0gcGFyc2VGbG9hdChzdHlsZS56b29tKTtcblx0XHRpZiAoc3R5bGUuem9vbSAmJiBzdHlsZS56b29tICE9PSBcIm5vcm1hbFwiIHx8IFwiY3VycmVudENTU1pvb21cIiBpbiBjdXJyZW50RWxlbWVudCkgcmV0dXJuIHpvb207XG5cdFx0Y3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudD8ub2Zmc2V0UGFyZW50ID8/IGN1cnJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuXHR9XG5cdHJldHVybiB6b29tO1xufTtcbnZhciBnZXRQeFZhbHVlID0gKGVsZW1lbnQsIG5hbWUpID0+IHtcblx0cmV0dXJuIGdldFByb3BlcnR5VmFsdWU/LihlbGVtZW50LCBuYW1lKTtcbn07XG52YXIgZ2V0UGFkZGluZyA9IChzcmMsIGF4aXMpID0+IHtcblx0aWYgKGF4aXMgPT0gXCJpbmxpbmVcIikgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctaW5saW5lLXN0YXJ0XCIpICsgZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1pbmxpbmUtZW5kXCIpO1xuXHRyZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1ibG9jay1zdGFydFwiKSArIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctYmxvY2stZW5kXCIpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2Nzc29tLnRzXG52YXIgc3R5bGVFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikgOiBudWxsO1xuaWYgKHN0eWxlRWxlbWVudCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKT8uYXBwZW5kQ2hpbGQ/LihzdHlsZUVsZW1lbnQpO1xuXHRzdHlsZUVsZW1lbnQuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG59XG52YXIgc2V0U3R5bGVVUkwgPSAoYmFzZSwgdXJsLCBsYXllciA9IFwiXCIpID0+IHtcblx0YmFzZVswXVtiYXNlWzFdXSA9IGJhc2VbMV0gPT0gXCJpbm5lckhUTUxcIiA/IGNzc0ltcG9ydFdpdGhMYXllcih1cmwsIGxheWVyKSA6IHVybDtcbn07XG52YXIgc2V0U3R5bGVSdWxlcyA9IChjbGFzc2VzKSA9PiB7XG5cdHJldHVybiBjbGFzc2VzPy5tYXA/LigoYXJncykgPT4gc2V0U3R5bGVSdWxlKC4uLmFyZ3MpKTtcbn07XG52YXIgZ2V0U3R5bGVMYXllciA9IChsYXllck5hbWUsIHNoZWV0KSA9PiB7XG5cdHNoZWV0IHx8PSBzdHlsZUVsZW1lbnQ/LnNoZWV0O1xuXHRyZXR1cm4gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG59O1xudmFyIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciA9IChlbGVtZW50KSA9PiB7XG5cdGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VzY2FwZUNTU0lkZW50aWZpZXIoZWxlbWVudC5pZCl9YDtcblx0bGV0IHN0eWxlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtc3R5bGUtaWRcIik7XG5cdGlmICghc3R5bGVJZCkge1xuXHRcdHN0eWxlSWQgPSBjcmVhdGVTdHlsZUlkKCk7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIsIHN0eWxlSWQpO1xuXHR9XG5cdHJldHVybiBgW2RhdGEtc3R5bGUtaWQ9XCIke2VzY2FwZUNTU0lkZW50aWZpZXIoc3R5bGVJZCl9XCJdYDtcbn07XG52YXIgam9pblNjb3BlZFNlbGVjdG9yID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRzZWxlY3RvciA9IHNlbGVjdG9yLnRyaW0oKTtcblx0aWYgKCFzY29wZSkgcmV0dXJuIHNlbGVjdG9yO1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gc2NvcGU7XG5cdGlmIChzZWxlY3Rvci5zdGFydHNXaXRoKFwiOjpcIikpIHJldHVybiBgJHtzY29wZX0ke3NlbGVjdG9yfWA7XG5cdHJldHVybiBgJHtzY29wZX0gJHtzZWxlY3Rvcn1gO1xufTtcbnZhciBmaW5kU3R5bGVSdWxlID0gKHNoZWV0LCBmdWxsU2VsZWN0b3IsIHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQ/LmNzc1J1bGVzIHx8IFtdKTtcblx0Y29uc3QgZXhwZWN0ZWQgPSBmdWxsU2VsZWN0b3IudHJpbSgpO1xuXHRjb25zdCByZXF1ZXN0ZWQgPSBzZWxlY3Rvci50cmltKCk7XG5cdHJldHVybiBydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHtcblx0XHRpZiAoIShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IGFjdHVhbCA9IHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA/PyBcIlwiO1xuXHRcdGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVxdWVzdGVkICYmIGFjdHVhbC5lbmRzV2l0aChyZXF1ZXN0ZWQpKSByZXR1cm4gYWN0dWFsLnNsaWNlKDAsIGFjdHVhbC5sZW5ndGggLSByZXF1ZXN0ZWQubGVuZ3RoKS50cmltKCkgPT09IHNjb3BlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59O1xudmFyIGdldFN0eWxlUnVsZSA9IChzZWxlY3Rvciwgc2hlZXQsIGxheWVyTmFtZSA9IFwidXgtcXVlcnlcIiwgYmFzaXMgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBpc1NoYWRvd1Jvb3QoYmFzaXMpIHx8IGlzRG9jdW1lbnQoYmFzaXMpID8gYmFzaXMgOiBiYXNpcz8uZ2V0Um9vdE5vZGU/LigpID8/ICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpO1xuXHRjb25zdCBiYXNpc0VsZW1lbnQgPSBpc0Nzc0VsZW1lbnQoYmFzaXMpID8gYmFzaXMgOiBudWxsO1xuXHRsZXQgc2NvcGUgPSBcIlwiO1xuXHRpZiAoYmFzaXNFbGVtZW50KSBzY29wZSA9IGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvcihiYXNpc0VsZW1lbnQpO1xuXHRlbHNlIGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHNjb3BlID0gXCI6aG9zdFwiO1xuXHRlbHNlIGlmIChpc0RvY3VtZW50KHJvb3QpKSBzY29wZSA9IFwiOnJvb3RcIjtcblx0bGV0IHN0eWxlRWxlbWVudCA9IG51bGw7XG5cdGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHtcblx0XHRzdHlsZUVsZW1lbnQgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLXV4LXF1ZXJ5XVwiKTtcblx0XHRpZiAoIXN0eWxlRWxlbWVudCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXV4LXF1ZXJ5XCIsIFwiXCIpO1xuXHRcdFx0cm9vdC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXHRcdH1cblx0fSBlbHNlIHN0eWxlRWxlbWVudCA9IHN0eWxlRWxlbWVudEdsb2JhbCgpO1xuXHRzaGVldCB8fD0gc3R5bGVFbGVtZW50Py5zaGVldDtcblx0aWYgKCFzaGVldCkgcmV0dXJuO1xuXHRpZiAobGF5ZXJOYW1lKSByZXR1cm4gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yLCBnZXRTdHlsZUxheWVyKGxheWVyTmFtZSwgc2hlZXQpLCBudWxsLCBiYXNpcyk7XG5cdGNvbnN0IGZ1bGxTZWxlY3RvciA9IGpvaW5TY29wZWRTZWxlY3RvcihzY29wZSwgc2VsZWN0b3IpO1xuXHRsZXQgcnVsZUlkID0gZmluZFN0eWxlUnVsZShzaGVldCwgZnVsbFNlbGVjdG9yLCBzY29wZSwgc2VsZWN0b3IpO1xuXHRpZiAocnVsZUlkID09PSAtMSkgcnVsZUlkID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtmdWxsU2VsZWN0b3J9IHt9YCk7XG5cdHJldHVybiBzaGVldC5jc3NSdWxlcz8uW3J1bGVJZF07XG59O1xuZnVuY3Rpb24gc3R5bGVFbGVtZW50R2xvYmFsKCkge1xuXHRyZXR1cm4gc3R5bGVFbGVtZW50ID8/IG51bGw7XG59XG52YXIgZmV0Y2hBbmRDYWNoZSA9ICh1cmwpID0+IHtcblx0aWYgKCF1cmwpIHJldHVybiBudWxsO1xuXHRpZiAoY2FjaGVNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZU1hcC5nZXQodXJsKTtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChibG9iVVJMTWFwLmhhcyh1cmwpKSByZXR1cm4gYmxvYlVSTE1hcC5nZXQodXJsKTtcblx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh1cmwpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0Y2FjaGVNYXAuc2V0KGJ1cmwsIGJ1cmwpO1xuXHRcdHJldHVybiBidXJsO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cdFx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdFx0Y2FjaGVNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0XHRjYWNoZU1hcC5zZXQoYnVybCwgYnVybCk7XG5cdFx0XHRyZXR1cm4gYnVybDtcblx0XHR9KTtcblx0XHRjYWNoZU1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmICh0eXBlb2YgdXJsID09IFwic3RyaW5nXCIpIHtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3VybF0sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXHRcdGNvbnN0IGJ1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdGNhY2hlTWFwLnNldChidXJsLCBidXJsKTtcblx0XHRyZXR1cm4gYnVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBmZXRjaEFzSW5saW5lID0gKHVybCkgPT4ge1xuXHRpZiAoIXVybCkgcmV0dXJuIFwiXCI7XG5cdGlmIChjYWNoZUNvbnRlbnRNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZUNvbnRlbnRNYXAuZ2V0KHVybCkgPz8gXCJcIjtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChjYWNoZUJsb2JDb250ZW50TWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVCbG9iQ29udGVudE1hcC5nZXQodXJsKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb21pc2VkID0gdXJsPy50ZXh0Py4oKT8udGhlbj8uKCh0ZXh0KSA9PiB7XG5cdFx0XHRjYWNoZUJsb2JDb250ZW50TWFwLnNldCh1cmwsIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSk7XG5cdFx0Y2FjaGVCbG9iQ29udGVudE1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cdFx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9KTtcblx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHVybCk7XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBnZXRBZG9wdGVkU3R5bGVSdWxlID0gKHNlbGVjdG9yLCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0aWYgKCFzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHJldHVybiBudWxsO1xuXHRjb25zdCByb290ID0gaXNTaGFkb3dSb290KGJhc2lzKSA/IGJhc2lzIDogYmFzaXM/LmdldFJvb3ROb2RlID8gYmFzaXMuZ2V0Um9vdE5vZGUoeyBjb21wb3NlZDogdHJ1ZSB9KSA6IG51bGw7XG5cdGNvbnN0IGluU2hhZG93ID0gaXNTaGFkb3dSb290KHJvb3QpO1xuXHRjb25zdCB0YXJnZXRBZG9wdGVkU2hlZXRzID0gaW5TaGFkb3cgPyByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA6IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzIDogbnVsbDtcblx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgc2VsZWN0b3JLZXkgPSBgJHtsYXllck5hbWUgfHwgXCJcIn06JHtzZWxlY3Rvcn1gO1xuXHRsZXQgc2hlZXQ7XG5cdGlmIChpblNoYWRvdykge1xuXHRcdGxldCBzaGFkb3dNYXAgPSBhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAuZ2V0KHJvb3QpO1xuXHRcdGlmICghc2hhZG93TWFwKSB7XG5cdFx0XHRzaGFkb3dNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0YWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLnNldChyb290LCBzaGFkb3dNYXApO1xuXHRcdH1cblx0XHRzaGVldCA9IHNoYWRvd01hcC5nZXQoc2VsZWN0b3JLZXkpO1xuXHRcdGlmICghc2hlZXQpIHtcblx0XHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRcdHNoYWRvd01hcC5zZXQoc2VsZWN0b3JLZXksIHNoZWV0KTtcblx0XHRcdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHRhcmdldEFkb3B0ZWRTaGVldHMucHVzaChzaGVldCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNoZWV0ID0gYWRvcHRlZFNlbGVjdG9yTWFwLmdldChzZWxlY3RvcktleSk7XG5cdFx0aWYgKCFzaGVldCkge1xuXHRcdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdFx0YWRvcHRlZFNlbGVjdG9yTWFwLnNldChzZWxlY3RvcktleSwgc2hlZXQpO1xuXHRcdFx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzLmluY2x1ZGVzKHNoZWV0KSkgdGFyZ2V0QWRvcHRlZFNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR9XG5cdH1cblx0aWYgKGxheWVyTmFtZSkge1xuXHRcdGxldCBsYXllclJ1bGU7XG5cdFx0aWYgKGluU2hhZG93KSB7XG5cdFx0XHRsZXQgc2hhZG93TGF5ZXJNYXAgPSBhZG9wdGVkU2hhZG93TGF5ZXJNYXAuZ2V0KHJvb3QpO1xuXHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRzaGFkb3dMYXllck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0XHRcdGFkb3B0ZWRTaGFkb3dMYXllck1hcC5zZXQocm9vdCwgc2hhZG93TGF5ZXJNYXApO1xuXHRcdFx0fVxuXHRcdFx0bGF5ZXJSdWxlID0gc2hhZG93TGF5ZXJNYXAuZ2V0KGxheWVyTmFtZSk7XG5cdFx0fSBlbHNlIGxheWVyUnVsZSA9IGFkb3B0ZWRMYXllck1hcC5nZXQobGF5ZXJOYW1lKTtcblx0XHRpZiAoIWxheWVyUnVsZSkge1xuXHRcdFx0bGF5ZXJSdWxlID0gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlKSB7XG5cdFx0XHRcdGlmIChpblNoYWRvdykge1xuXHRcdFx0XHRcdGxldCBzaGFkb3dMYXllck1hcCA9IGFkb3B0ZWRTaGFkb3dMYXllck1hcC5nZXQocm9vdCk7XG5cdFx0XHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRcdFx0c2hhZG93TGF5ZXJNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRcdFx0YWRvcHRlZFNoYWRvd0xheWVyTWFwLnNldChyb290LCBzaGFkb3dMYXllck1hcCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNoYWRvd0xheWVyTWFwLnNldChsYXllck5hbWUsIGxheWVyUnVsZSk7XG5cdFx0XHRcdH0gZWxzZSBhZG9wdGVkTGF5ZXJNYXAuc2V0KGxheWVyTmFtZSwgbGF5ZXJSdWxlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGxheWVyUnVsZSkge1xuXHRcdFx0bGV0IGxheWVyUnVsZUluZGV4ID0gQXJyYXkuZnJvbShsYXllclJ1bGUuY3NzUnVsZXMgfHwgW10pLmZpbmRJbmRleCgocikgPT4gciBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiByLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPT09IHNlbGVjdG9yPy50cmltPy4oKSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlSW5kZXggPT09IC0xKSB0cnkge1xuXHRcdFx0XHRsYXllclJ1bGVJbmRleCA9IGxheWVyUnVsZS5pbnNlcnRSdWxlKGAke3NlbGVjdG9yfSB7fWAsIGxheWVyUnVsZS5jc3NSdWxlcy5sZW5ndGgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsYXllclJ1bGUuY3NzUnVsZXNbbGF5ZXJSdWxlSW5kZXhdO1xuXHRcdH1cblx0fVxuXHRsZXQgcnVsZUluZGV4ID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZmluZEluZGV4KChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA9PT0gc2VsZWN0b3I/LnRyaW0/LigpKTtcblx0aWYgKHJ1bGVJbmRleCA9PT0gLTEpIHRyeSB7XG5cdFx0cnVsZUluZGV4ID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtzZWxlY3Rvcn0ge31gLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgcnVsZSA9IHNoZWV0LmNzc1J1bGVzW3J1bGVJbmRleF07XG5cdGlmIChydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSByZXR1cm4gcnVsZTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYmFrZXIudHNcbnZhciBpbnZhbGlkYXRpb25SZWFkeSA9IGZhbHNlO1xudmFyIGxhc3RGaW5nZXJwcmludCA9IFwiXCI7XG52YXIgcmViYWtlUXVldWVkID0gZmFsc2U7XG52YXIgbm9ybWFsaXplQ2F0ZWdvcmllcyA9IChjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGxpc3QgPSBbLi4uY2F0ZWdvcmllcz8ubGVuZ3RoID8gY2F0ZWdvcmllcyA6IERFRkFVTFRfQ0FURUdPUklFU107XG5cdHJldHVybiBbLi4ubmV3IFNldChsaXN0LmZpbHRlcihCb29sZWFuKSldO1xufTtcbnZhciBjYWNoZUtleUZvciA9IChzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEgPSBCQUtFX1NDUkVFTl9NRURJQSkgPT4gYCR7c2VsZWN0b3J9XFwwJHtbLi4uY2F0ZWdvcmllc10uc29ydCgpLmpvaW4oXCIsXCIpfVxcMCR7bWVkaWEgPT09IGZhbHNlID8gXCJcIiA6IG1lZGlhfWA7XG52YXIgYmFrZVRoZW1lRmluZ2VycHJpbnQgPSAocm9vdCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG51bGwsIGVsKSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKHJvb3QpO1xuXHRjb25zdCBwYXJ0cyA9IFtcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS10aGVtZVwiKSB8fCByb290LmdldEF0dHJpYnV0ZT8uKFwidGhlbWVcIikgfHwgXCJcIixcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS1jb2xvci1zY2hlbWVcIikgfHwgcm9vdC5nZXRBdHRyaWJ1dGU/LihcImNvbG9yLXNjaGVtZVwiKSB8fCBjcy5jb2xvclNjaGVtZSB8fCBcIlwiLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWJhc2UtY29sb3JcIikudHJpbSgpLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWNvbG9yLXByaW1hcnlcIikudHJpbSgpXG5cdF07XG5cdGlmIChlbCAmJiBlbCAhPT0gcm9vdCkge1xuXHRcdGNvbnN0IGxvY2FsID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0cGFydHMucHVzaChlbC5nZXRBdHRyaWJ1dGU/LihcImRhdGEtdGhlbWVcIikgfHwgXCJcIiwgbG9jYWwuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYmFzZS1jb2xvclwiKS50cmltKCkpO1xuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKFwifFwiKTtcbn07XG52YXIgdGFrZVByb3AgPSAoaW50bywgY3MsIG5hbWUpID0+IHtcblx0Y29uc3QgdmFsdWUgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpPy50cmltKCk7XG5cdGlmICghdmFsdWUpIHJldHVybjtcblx0aW50by5zZXQobmFtZSwgdmFsdWUpO1xufTtcbnZhciBDT0xPUl9QUk9QX1NFVCA9IG5ldyBTZXQoQ1NTX0NPTE9SX1BST1BFUlRJRVMpO1xudmFyIGJha2VEZWNsUmFuayA9IChuYW1lKSA9PiB7XG5cdGlmIChuYW1lLnN0YXJ0c1dpdGgoXCItLVwiKSkgcmV0dXJuIDI7XG5cdGlmIChDT0xPUl9QUk9QX1NFVC5oYXMobmFtZSkpIHJldHVybiAwO1xuXHRyZXR1cm4gMTtcbn07XG52YXIgY29sbGVjdEJha2VkRGVjbGFyYXRpb25zID0gKGNzLCBjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGludG8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCBzZXQgPSBuZXcgU2V0KGNhdGVnb3JpZXMpO1xuXHRpZiAoc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19DT0xPUl9QUk9QRVJUSUVTKSB0YWtlUHJvcChpbnRvLCBjcywgbmFtZSk7XG5cdGlmIChzZXQuaGFzKFwidHlwb2dyYXBoeVwiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJtb3Rpb25cIikpIGZvciAoY29uc3QgbmFtZSBvZiBDU1NfTU9USU9OX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJ0b2tlbnNcIikgfHwgc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChsZXQgaSA9IDA7IGkgPCBjcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IG5hbWUgPSBjcy5pdGVtKGkpO1xuXHRcdGlmICghbmFtZS5zdGFydHNXaXRoKFwiLS1cIikpIGNvbnRpbnVlO1xuXHRcdGlmIChzZXQuaGFzKFwidG9rZW5zXCIpIHx8IGlzQ29sb3JUb2tlbihuYW1lKSkgdGFrZVByb3AoaW50bywgY3MsIG5hbWUpO1xuXHR9XG5cdHJldHVybiBpbnRvO1xufTtcbnZhciBidWlsZEJha2VkQ3NzVGV4dCA9IChzZWxlY3RvciwgZGVjbGFyYXRpb25zLCBsYXllciA9IEJBS0VfTEFZRVIsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IHtcblx0Y29uc3QgYm9keSA9IFtdO1xuXHRjb25zdCByb3dzID0gWy4uLmRlY2xhcmF0aW9uc10uc29ydCgoYSwgYikgPT4gYmFrZURlY2xSYW5rKGFbMF0pIC0gYmFrZURlY2xSYW5rKGJbMF0pKTtcblx0Zm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHJvd3MpIHtcblx0XHRpZiAoIW5hbWUgfHwgIXZhbHVlKSBjb250aW51ZTtcblx0XHRjb25zdCBiYWtlZCA9IHZhbHVlLnJlcGxhY2UoL1xccyohaW1wb3J0YW50XFxzKiQvaSwgXCJcIikudHJpbSgpO1xuXHRcdGlmICghYmFrZWQpIGNvbnRpbnVlO1xuXHRcdGJvZHkucHVzaChgJHtuYW1lfTogJHtiYWtlZH0gIWltcG9ydGFudDtgKTtcblx0fVxuXHRpZiAoIWJvZHkubGVuZ3RoKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgcnVsZSA9IGAke3NlbGVjdG9yfSB7XFxuJHtib2R5LmpvaW4oXCJcXG5cIil9XFxufWA7XG5cdGNvbnN0IGlubmVyID0gbWVkaWEgPyBgQG1lZGlhICR7bWVkaWF9IHtcXG4ke3J1bGV9XFxufWAgOiBydWxlO1xuXHRyZXR1cm4gW2Nzc0xheWVyT3JkZXIobGF5ZXIpLCBjc3NMYXllckJsb2NrKGxheWVyLCBpbm5lcildLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXCIpO1xufTtcbnZhciBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzID0gKHJvb3QpID0+IHtcblx0aWYgKCFyb290IHx8IHJvb3Qubm9kZVR5cGUgIT09IDEpIHJldHVybiBbXTtcblx0Y29uc3QgaG9zdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbcm9vdF0pO1xuXHRjb25zdCBjaHJvbWUgPSByb290LmNsb3Nlc3Q/LihCQUtFX1NDUkVFTl9DSFJPTUUuam9pbihcIiwgXCIpKTtcblx0aWYgKGNocm9tZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBob3N0cy5hZGQoY2hyb21lKTtcblx0cmV0dXJuIFsuLi5ob3N0c107XG59O1xudmFyIGJha2VBbHNvUXVlcmllc0ZvciA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuIFtdO1xuXHRpZiAocm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKFwidmlldy1zZXR0aW5nc1wiKSB8fCByb290LmNsb3Nlc3Q/LihcIi52aWV3LXNldHRpbmdzXCIpKSByZXR1cm4gQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUztcblx0aWYgKHJvb3QuY2xhc3NMaXN0Py5jb250YWlucyhcInZpZXctZXhwbG9yZXJcIikgfHwgcm9vdC5jbG9zZXN0Py4oXCIudmlldy1leHBsb3JlclwiKSB8fCByb290LnF1ZXJ5U2VsZWN0b3I/LihcInVpLWZpbGUtbWFuYWdlclwiKSkgcmV0dXJuIEJBS0VfU0NSRUVOX0FMU09fRVhQTE9SRVI7XG5cdHJldHVybiBbXTtcbn07XG52YXIgY29sbGVjdEJha2VBbHNvSG9zdHMgPSAocm9vdCwgcXVlcmllcyA9IEJBS0VfU0NSRUVOX0FMU08sIHBpZXJjZVNoYWRvdyA9IHRydWUpID0+IHtcblx0aWYgKCFyb290IHx8ICFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXHRjb25zdCByb290U2VsID0gZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yKHJvb3QpO1xuXHRjb25zdCBmaW5kID0gcGllcmNlU2hhZG93ID8gcXVlcnlGaXJzdERlZXAgOiAoc2NvcGUsIHNlbCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBoaXQgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbCk7XG5cdFx0XHRyZXR1cm4gaGl0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBoaXQgOiBudWxsO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBncm91cGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG5cdFx0Y29uc3QgcSA9IFN0cmluZyhxdWVyeSB8fCBcIlwiKS50cmltKCk7XG5cdFx0aWYgKCFxKSBjb250aW51ZTtcblx0XHRjb25zdCBlbCA9IGZpbmQocm9vdCwgcSk7XG5cdFx0aWYgKCFlbCB8fCBlbCA9PT0gcm9vdCkgY29udGludWU7XG5cdFx0Y29uc3Qgc2VsID0gZWwuZ2V0Um9vdE5vZGUoKSA9PT0gcm9vdC5nZXRSb290Tm9kZSgpID8gYCR7cm9vdFNlbH0gJHtxfWAgOiBxO1xuXHRcdGNvbnN0IGxpc3QgPSBncm91cGVkLmdldChlbCk7XG5cdFx0aWYgKGxpc3QpIHtcblx0XHRcdGlmICghbGlzdC5pbmNsdWRlcyhzZWwpKSBsaXN0LnB1c2goc2VsKTtcblx0XHR9IGVsc2UgZ3JvdXBlZC5zZXQoZWwsIFtzZWxdKTtcblx0fVxuXHRyZXR1cm4gWy4uLmdyb3VwZWRdLm1hcCgoW2VsLCBzZWxzXSkgPT4gKHtcblx0XHRlbCxcblx0XHRzZWxlY3Rvcjogc2Vscy5qb2luKFwiLCBcIilcblx0fSkpO1xufTtcbnZhciBhZG9wdGVkTGlzdCA9IChlbCkgPT4ge1xuXHRjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGU/LigpO1xuXHRpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09IFwidW5kZWZpbmVkXCIgJiYgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA/PyBudWxsO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzID8/IG51bGw7XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBhc3NpZ25BZG9wdGVkID0gKGVsLCBuZXh0KSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZT8uKCk7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0XHRyb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IG5leHQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IG5leHQ7XG5cdH0gY2F0Y2gge31cbn07XG52YXIgYWRvcHRTaGVldCA9IChlbCwgYmFrZWQpID0+IHtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGNvbnN0IGxpc3QgPSBhZG9wdGVkTGlzdChlbCk7XG5cdFx0aWYgKCFsaXN0KSByZXR1cm47XG5cdFx0aWYgKGxpc3QuaW5jbHVkZXMoYmFrZWQuc2hlZXQpKSB7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGxpc3QucHVzaChiYWtlZC5zaGVldCk7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGFzc2lnbkFkb3B0ZWQoZWwsIFsuLi5saXN0LCBiYWtlZC5zaGVldF0pO1xuXHRcdFx0YmFrZWQuYWRvcHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cdGlmIChiYWtlZC5zdHlsZUVsICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGlmICghYmFrZWQuc3R5bGVFbC5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuaGVhZD8uYXBwZW5kKGJha2VkLnN0eWxlRWwpO1xuXHRcdGJha2VkLmFkb3B0ZWQgPSB0cnVlO1xuXHR9XG59O1xudmFyIHVuYWRvcHRTaGVldCA9IChlbCwgYmFrZWQpID0+IHtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGNvbnN0IGxpc3QgPSBhZG9wdGVkTGlzdChlbCk7XG5cdFx0aWYgKGxpc3QpIHtcblx0XHRcdGNvbnN0IGlkeCA9IGxpc3QuaW5kZXhPZihiYWtlZC5zaGVldCk7XG5cdFx0XHRpZiAoaWR4ICE9PSAtMSkgdHJ5IHtcblx0XHRcdFx0bGlzdC5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRhc3NpZ25BZG9wdGVkKGVsLCBsaXN0LmZpbHRlcigoc2hlZXQpID0+IHNoZWV0ICE9PSBiYWtlZC5zaGVldCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRiYWtlZC5zdHlsZUVsPy5yZW1vdmUoKTtcblx0YmFrZWQuYWRvcHRlZCA9IGZhbHNlO1xufTtcbnZhciB3cml0ZUJha2VkQ3NzID0gKGJha2VkLCBjc3NUZXh0KSA9PiB7XG5cdGJha2VkLmNzc1RleHQgPSBjc3NUZXh0O1xuXHRpZiAoIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkgdHJ5IHtcblx0XHRiYWtlZC5zaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbc3R5bGUtbGliXSBiYWtlIHJlcGxhY2VTeW5jIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChiYWtlZC5zdHlsZUVsKSB7XG5cdFx0YmFrZWQuc3R5bGVFbC50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciByZW1lbWJlckNhY2hlID0gKGJha2VkLCBjYWNoZU1zKSA9PiB7XG5cdGNvbnN0IHByZXYgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGlmIChwcmV2Py50aW1lcikgY2xlYXJUaW1lb3V0KHByZXYudGltZXIpO1xuXHRjb25zdCBlbnRyeSA9IHtcblx0XHRjc3NUZXh0OiBiYWtlZC5jc3NUZXh0LFxuXHRcdGZpbmdlcnByaW50OiBiYWtlZC5maW5nZXJwcmludCxcblx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdHNlbGVjdG9yOiBiYWtlZC5zZWxlY3Rvcixcblx0XHRleHBpcmVzOiBEYXRlLm5vdygpICsgY2FjaGVNc1xuXHR9O1xuXHRpZiAoY2FjaGVNcyA+IDAgJiYgdHlwZW9mIHNldFRpbWVvdXQgPT09IFwiZnVuY3Rpb25cIikgZW50cnkudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpID09PSBlbnRyeSkgYmFrZWRDYWNoZS5kZWxldGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9LCBjYWNoZU1zKTtcblx0YmFrZWRDYWNoZS5zZXQoYmFrZWQuY2FjaGVLZXksIGVudHJ5KTtcbn07XG52YXIgZHJvcENhY2hlID0gKGNhY2hlS2V5KSA9PiB7XG5cdGNvbnN0IHByZXYgPSBiYWtlZENhY2hlLmdldChjYWNoZUtleSk7XG5cdGlmIChwcmV2Py50aW1lcikgY2xlYXJUaW1lb3V0KHByZXYudGltZXIpO1xuXHRiYWtlZENhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG59O1xudmFyIGNsZWFyQWxsQ2FjaGUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZW50cnkgb2YgYmFrZWRDYWNoZS52YWx1ZXMoKSkgaWYgKGVudHJ5LnRpbWVyKSBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpO1xuXHRiYWtlZENhY2hlLmNsZWFyKCk7XG59O1xudmFyIHBhcmtCYWtlZCA9IChlbCwgY2FjaGVNcyA9IERFRkFVTFRfQ0FDSEVfTVMpID0+IHtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoIWJha2VkKSByZXR1cm47XG5cdGlmIChiYWtlZC5hZG9wdGVkKSB1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0YmFrZWRMaXZlLmRlbGV0ZShlbCk7XG5cdGlmIChiYWtlZC5jc3NUZXh0KSByZW1lbWJlckNhY2hlKGJha2VkLCBjYWNoZU1zKTtcbn07XG52YXIgcmVzdW1lQmFrZWQgPSAoZWwsIGNhY2hlTXMgPSBERUZBVUxUX0NBQ0hFX01TKSA9PiB7XG5cdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKCFiYWtlZCB8fCAhZWwuaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgZmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCh2b2lkIDAsIGVsKTtcblx0Y29uc3QgY2FjaGVkID0gYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpO1xuXHRpZiAoIWJha2VkLmNzc1RleHQgJiYgY2FjaGVkICYmIGNhY2hlZC5maW5nZXJwcmludCA9PT0gZmluZ2VycHJpbnQpIHtcblx0XHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjYWNoZWQuY3NzVGV4dCk7XG5cdFx0YmFrZWQuZmluZ2VycHJpbnQgPSBjYWNoZWQuZmluZ2VycHJpbnQ7XG5cdH1cblx0aWYgKCFiYWtlZC5jc3NUZXh0IHx8IGJha2VkLmZpbmdlcnByaW50ICE9PSBmaW5nZXJwcmludCkge1xuXHRcdGJha2VDb21wdXRlZFN0eWxlKGVsLCB7XG5cdFx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdFx0Y2FjaGVNcyxcblx0XHRcdGxheWVyOiBCQUtFX0xBWUVSXG5cdFx0fSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0YmFrZWRMaXZlLmFkZChlbCk7XG59O1xudmFyIGJha2VJTyA9IG51bGw7XG52YXIgZW5zdXJlQmFrZUlPID0gKCkgPT4ge1xuXHRpZiAoYmFrZUlPIHx8IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGJha2VJTztcblx0YmFrZUlPID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBlbCA9IGVudHJ5LnRhcmdldDtcblx0XHRcdGlmICghYmFrZWRTdHlsZXMuaGFzKGVsKSkgY29udGludWU7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZWwuaXNDb25uZWN0ZWQpIHJlc3VtZUJha2VkKGVsKTtcblx0XHRcdGVsc2UgcGFya0Jha2VkKGVsKTtcblx0XHR9XG5cdH0sIHsgdGhyZXNob2xkOiAwIH0pO1xuXHRyZXR1cm4gYmFrZUlPO1xufTtcbnZhciBlbnN1cmVCYWtlZFJlY29yZCA9IChlbCwgc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IHtcblx0bGV0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKGJha2VkKSB7XG5cdFx0YmFrZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRiYWtlZC5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcztcblx0XHRiYWtlZC5tZWRpYSA9IG1lZGlhO1xuXHRcdGJha2VkLmNhY2hlS2V5ID0gY2FjaGVLZXlGb3Ioc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhKTtcblx0XHRyZXR1cm4gYmFrZWQ7XG5cdH1cblx0Y29uc3QgY2FuQ29uc3RydWN0ID0gc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpO1xuXHRiYWtlZCA9IHtcblx0XHRzaGVldDogY2FuQ29uc3RydWN0ID8gbmV3IENTU1N0eWxlU2hlZXQoKSA6IG51bGwsXG5cdFx0c3R5bGVFbDogY2FuQ29uc3RydWN0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiksXG5cdFx0c2VsZWN0b3IsXG5cdFx0Y2F0ZWdvcmllcyxcblx0XHRjc3NUZXh0OiBcIlwiLFxuXHRcdGZpbmdlcnByaW50OiBcIlwiLFxuXHRcdGFkb3B0ZWQ6IGZhbHNlLFxuXHRcdGNhY2hlS2V5OiBjYWNoZUtleUZvcihzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEpLFxuXHRcdG1lZGlhXG5cdH07XG5cdGlmIChiYWtlZC5zdHlsZUVsKSB7XG5cdFx0YmFrZWQuc3R5bGVFbC5kYXRhc2V0LnV4QmFrZWQgPSBcIlwiO1xuXHRcdGJha2VkLnN0eWxlRWwuZGF0YXNldC5vd25lciA9IFwic3R5bGUtbGliXCI7XG5cdH1cblx0YmFrZWRTdHlsZXMuc2V0KGVsLCBiYWtlZCk7XG5cdGVuc3VyZUJha2VJTygpPy5vYnNlcnZlKGVsKTtcblx0cmV0dXJuIGJha2VkO1xufTtcbnZhciBmbHVzaFJlYmFrZSA9ICgpID0+IHtcblx0cmViYWtlUXVldWVkID0gZmFsc2U7XG5cdGNvbnN0IGJhdGNoID0gWy4uLnJlYmFrZUJhdGNoXTtcblx0cmViYWtlQmF0Y2guY2xlYXIoKTtcblx0Zm9yIChjb25zdCBlbCBvZiBiYXRjaCkge1xuXHRcdGlmICghZWwuaXNDb25uZWN0ZWQgfHwgIWJha2VkU3R5bGVzLmhhcyhlbCkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0XHRiYWtlQ29tcHV0ZWRTdHlsZShlbCwgYmFrZWQgPyB7XG5cdFx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdFx0c2VsZWN0b3I6IGJha2VkLnNlbGVjdG9yLFxuXHRcdFx0bWVkaWE6IGJha2VkLm1lZGlhXG5cdFx0fSA6IHt9KTtcblx0fVxufTtcbnZhciBzY2hlZHVsZVJlYmFrZSA9IChlbCkgPT4ge1xuXHRyZWJha2VCYXRjaC5hZGQoZWwpO1xuXHRpZiAocmViYWtlUXVldWVkKSByZXR1cm47XG5cdHJlYmFrZVF1ZXVlZCA9IHRydWU7XG5cdHF1ZXVlTWljcm90YXNrKGZsdXNoUmViYWtlKTtcbn07XG52YXIgaW52YWxpZGF0ZUJha2VkU3R5bGVzID0gKHJlYXNvbiA9IFwidGhlbWVcIikgPT4ge1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KCk7XG5cdGlmIChyZWFzb24gIT09IFwiZm9yY2VcIiAmJiBmaW5nZXJwcmludCA9PT0gbGFzdEZpbmdlcnByaW50ICYmIGxhc3RGaW5nZXJwcmludCkgcmV0dXJuO1xuXHRsYXN0RmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcblx0Y2xlYXJBbGxDYWNoZSgpO1xuXHRmb3IgKGNvbnN0IGVsIG9mIFsuLi5iYWtlZExpdmVdKSB7XG5cdFx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRcdGlmICghYmFrZWQpIHtcblx0XHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkLmNzc1RleHQgPSBcIlwiO1xuXHRcdGJha2VkLmZpbmdlcnByaW50ID0gXCJcIjtcblx0XHRzY2hlZHVsZVJlYmFrZShlbCk7XG5cdH1cbn07XG52YXIgZW5zdXJlQmFrZUludmFsaWRhdGlvbiA9ICgpID0+IHtcblx0aWYgKGludmFsaWRhdGlvblJlYWR5IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRpbnZhbGlkYXRpb25SZWFkeSA9IHRydWU7XG5cdGxhc3RGaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KCk7XG5cdHJlZ2lzdGVyU3R5bGVUcmVlSG9vaygoaG9zdCkgPT4ge1xuXHRcdGlmIChiYWtlVGhlbWVGaW5nZXJwcmludCgpICE9PSBsYXN0RmluZ2VycHJpbnQpIHtcblx0XHRcdGludmFsaWRhdGVCYWtlZFN0eWxlcyhcInN0eWxlLXRyZWVcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChob3N0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgYmFrZWRTdHlsZXMuaGFzKGhvc3QpKSBzY2hlZHVsZVJlYmFrZShob3N0KTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gaW52YWxpZGF0ZUJha2VkU3R5bGVzKFwidGhlbWUtYXR0clwiKSkub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsuLi5TVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHt9XG5cdHRyeSB7XG5cdFx0KG1hdGNoTWVkaWE/LihcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikpPy5hZGRFdmVudExpc3RlbmVyPy4oXCJjaGFuZ2VcIiwgKCkgPT4gaW52YWxpZGF0ZUJha2VkU3R5bGVzKFwiY29sb3Itc2NoZW1lXCIpKTtcblx0fSBjYXRjaCB7fVxufTtcbnZhciBiYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICghZWwgfHwgZWwubm9kZVR5cGUgIT09IDEpIHJldHVybiBudWxsO1xuXHRpZiAodHlwZW9mIGdldENvbXB1dGVkU3R5bGUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdGVuc3VyZUJha2VJbnZhbGlkYXRpb24oKTtcblx0Y29uc3QgY2F0ZWdvcmllcyA9IG5vcm1hbGl6ZUNhdGVnb3JpZXMob3B0aW9ucy5jYXRlZ29yaWVzKTtcblx0Y29uc3QgbGF5ZXIgPSBvcHRpb25zLmxheWVyIHx8IFwidXgtYmFrZWRcIjtcblx0Y29uc3QgY2FjaGVNcyA9IG9wdGlvbnMuY2FjaGVNcyA/PyAzZTQ7XG5cdGNvbnN0IG1lZGlhID0gb3B0aW9ucy5tZWRpYSA9PT0gdm9pZCAwID8gQkFLRV9TQ1JFRU5fTUVESUEgOiBvcHRpb25zLm1lZGlhO1xuXHRjb25zdCBzZWxlY3RvciA9IG9wdGlvbnMuc2VsZWN0b3I/LnRyaW0oKSB8fCBlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IoZWwpO1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KHZvaWQgMCwgZWwpO1xuXHRjb25zdCBiYWtlZCA9IGVuc3VyZUJha2VkUmVjb3JkKGVsLCBzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEpO1xuXHRiYWtlZC5maW5nZXJwcmludCA9IGZpbmdlcnByaW50O1xuXHRjb25zdCBjYWNoZWQgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGxldCBjc3NUZXh0ID0gXCJcIjtcblx0aWYgKGNhY2hlZCAmJiBjYWNoZWQuZmluZ2VycHJpbnQgPT09IGZpbmdlcnByaW50ICYmIGNhY2hlZC5jc3NUZXh0KSBjc3NUZXh0ID0gY2FjaGVkLmNzc1RleHQ7XG5cdGVsc2Uge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0Y3NzVGV4dCA9IGJ1aWxkQmFrZWRDc3NUZXh0KHNlbGVjdG9yLCBjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMoY3MsIGNhdGVnb3JpZXMpLCBsYXllciwgbWVkaWEpO1xuXHR9XG5cdGlmICghY3NzVGV4dCkge1xuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdHJldHVybiBiYWtlZDtcblx0fVxuXHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjc3NUZXh0KTtcblx0cmVtZW1iZXJDYWNoZShiYWtlZCwgY2FjaGVNcyk7XG5cdGlmIChpc0VsZW1lbnRWaXNpYmxlKGVsKSkge1xuXHRcdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuYWRkKGVsKTtcblx0fSBlbHNlIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0fVxuXHRyZXR1cm4gYmFrZWQ7XG59O1xudmFyIHVuYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIGtlZXBDYWNoZSA9IHRydWUpID0+IHtcblx0aWYgKCFlbCkgcmV0dXJuO1xuXHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmICghYmFrZWQpIHJldHVybjtcblx0dW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRiYWtlSU8/LnVub2JzZXJ2ZShlbCk7XG5cdGlmIChrZWVwQ2FjaGUgJiYgYmFrZWQuY3NzVGV4dCkgcmVtZW1iZXJDYWNoZShiYWtlZCwgREVGQVVMVF9DQUNIRV9NUyk7XG5cdGVsc2UgZHJvcENhY2hlKGJha2VkLmNhY2hlS2V5KTtcblx0YmFrZWRTdHlsZXMuZGVsZXRlKGVsKTtcbn07XG52YXIgcmViYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucykgPT4ge1xuXHRpZiAoIWVsKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoYmFrZWQpIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZC5jc3NUZXh0ID0gXCJcIjtcblx0XHRkcm9wQ2FjaGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9XG5cdHJldHVybiBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0aW9ucyA/PyAoYmFrZWQgPyB7XG5cdFx0Y2F0ZWdvcmllczogYmFrZWQuY2F0ZWdvcmllcyxcblx0XHRzZWxlY3RvcjogYmFrZWQuc2VsZWN0b3IsXG5cdFx0bWVkaWE6IGJha2VkLm1lZGlhXG5cdH0gOiB7fSkpO1xufTtcbnZhciBnZXRCYWtlZFN0eWxlID0gKGVsKSA9PiBlbCA/IGJha2VkU3R5bGVzLmdldChlbCkgOiB2b2lkIDA7XG52YXIgYmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBvcHRpb25zID0ge30pID0+IHtcblx0Y29uc3Qgb3B0cyA9IHtcblx0XHRtZWRpYTogQkFLRV9TQ1JFRU5fTUVESUEsXG5cdFx0cGllcmNlU2hhZG93OiBvcHRpb25zLnBpZXJjZVNoYWRvdyAhPT0gZmFsc2UsXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXHRjb25zdCBob3N0cyA9IGNvbGxlY3RCYWtlU2NyZWVuSG9zdHMocm9vdCk7XG5cdGNvbnN0IGV4dHJhcyA9IGNvbGxlY3RCYWtlQWxzb0hvc3RzKHJvb3QsIG9wdHMuYWxzbyA/PyBiYWtlQWxzb1F1ZXJpZXNGb3Iocm9vdCksIG9wdHMucGllcmNlU2hhZG93ICE9PSBmYWxzZSk7XG5cdGNvbnN0IG91dCA9IFtdO1xuXHRjb25zdCBmb2xsb3dlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0Y29uc3QgYmFrZWQgPSBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0cyk7XG5cdFx0aWYgKGJha2VkKSBvdXQucHVzaChiYWtlZCk7XG5cdH1cblx0Zm9yIChjb25zdCB7IGVsLCBzZWxlY3RvciB9IG9mIGV4dHJhcykge1xuXHRcdGlmIChob3N0cy5pbmNsdWRlcyhlbCkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZUNvbXB1dGVkU3R5bGUoZWwsIHtcblx0XHRcdC4uLm9wdHMsXG5cdFx0XHRzZWxlY3RvclxuXHRcdH0pO1xuXHRcdGlmIChiYWtlZCkgb3V0LnB1c2goYmFrZWQpO1xuXHRcdGZvbGxvd2Vycy5hZGQoZWwpO1xuXHR9XG5cdGlmIChyb290KSB7XG5cdFx0Y29uc3QgcHJldiA9IGJha2VkRm9sbG93ZXJzLmdldChyb290KTtcblx0XHRpZiAocHJldikge1xuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBwcmV2KSBpZiAoIWZvbGxvd2Vycy5oYXMoZWwpICYmICFob3N0cy5pbmNsdWRlcyhlbCkpIHVuYmFrZUNvbXB1dGVkU3R5bGUoZWwsIHRydWUpO1xuXHRcdH1cblx0XHRpZiAoZm9sbG93ZXJzLnNpemUpIGJha2VkRm9sbG93ZXJzLnNldChyb290LCBmb2xsb3dlcnMpO1xuXHRcdGVsc2UgYmFrZWRGb2xsb3dlcnMuZGVsZXRlKHJvb3QpO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59O1xudmFyIHVuYmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBrZWVwQ2FjaGUgPSB0cnVlKSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBmb2xsb3dlcnMgPSBiYWtlZEZvbGxvd2Vycy5nZXQocm9vdCk7XG5cdGJha2VkRm9sbG93ZXJzLmRlbGV0ZShyb290KTtcblx0Zm9yIChjb25zdCBlbCBvZiBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzKHJvb3QpKSB1bmJha2VDb21wdXRlZFN0eWxlKGVsLCBrZWVwQ2FjaGUpO1xuXHRpZiAoZm9sbG93ZXJzKSBmb3IgKGNvbnN0IGVsIG9mIGZvbGxvd2VycykgdW5iYWtlQ29tcHV0ZWRTdHlsZShlbCwga2VlcENhY2hlKTtcbn07XG52YXIgc2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzID0gKHJvb3QsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcnVuID0gKHJldHJ5TWlzcyA9IHRydWUpID0+IHtcblx0XHRiYWtlU2NyZWVuQ29sb3JzKHJvb3QsIG9wdGlvbnMpO1xuXHRcdGlmICghcmV0cnlNaXNzIHx8ICFyb290KSByZXR1cm47XG5cdFx0Y29uc3QgcXVlcmllcyA9IG9wdGlvbnM/LmFsc28gPz8gYmFrZUFsc29RdWVyaWVzRm9yKHJvb3QpO1xuXHRcdGNvbnN0IHBpZXJjZSA9IG9wdGlvbnM/LnBpZXJjZVNoYWRvdyAhPT0gZmFsc2U7XG5cdFx0aWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuO1xuXHRcdGlmIChxdWVyaWVzLnNvbWUoKHNlbCkgPT4gIShwaWVyY2UgPyBxdWVyeUZpcnN0RGVlcChyb290LCBzZWwpIDogcm9vdC5xdWVyeVNlbGVjdG9yKHNlbCkpKSAmJiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCIpIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBydW4oZmFsc2UpKTtcblx0fTtcblx0aWYgKCFyb290IHx8IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJ1bihmYWxzZSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBydW4odHJ1ZSkpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudC50c1xudmFyIHN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3cgPSAoYlRvKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBiVG8/LnNoYWRvd1Jvb3Q7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbykgfHwgW107XG5cdGZvciAoY29uc3Qgc2hlZXQgb2YgYWRvcHRlZFNoZWV0cykgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChzaGVldCk7XG5cdHRyeSB7XG5cdFx0Y29uc3QgbGl2ZSA9IHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzIHx8IFtdO1xuXHRcdHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gWy4uLmFkb3B0ZWRTaGVldHMuZmlsdGVyKChzKSA9PiAhbGl2ZS5pbmNsdWRlcyhzKSksIC4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5saXZlXSldO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCA9IChiVG8sIHNoZWV0KSA9PiB7XG5cdGxldCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbyk7XG5cdGlmICghYWRvcHRlZFNoZWV0cykgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuc2V0KGJUbywgYWRvcHRlZFNoZWV0cyA9IFtdKTtcblx0aWYgKHNoZWV0ICYmIGFkb3B0ZWRTaGVldHMuaW5kZXhPZihzaGVldCkgPCAwKSBhZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0KTtcblx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhiVG8pO1xufTtcbnZhciBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayA9IChiVG8sIGNzc1RleHQpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGJUbz8uc2hhZG93Um9vdDtcblx0aWYgKCFyb290IHx8ICFjc3NUZXh0KSByZXR1cm4gbnVsbDtcblx0bGV0IHN0eWxlID0gcm9vdC5xdWVyeVNlbGVjdG9yPy4oYHN0eWxlWyR7SE9TVF9DU1NfRkFMTEJBQ0t9XWApO1xuXHRpZiAoIXN0eWxlKSB7XG5cdFx0c3R5bGUgPSBsb2FkSW5saW5lU3R5bGUoY3NzVGV4dCwgcm9vdCwgXCJcIik7XG5cdFx0aWYgKHN0eWxlKSBzdHlsZS5zZXRBdHRyaWJ1dGUoSE9TVF9DU1NfRkFMTEJBQ0ssIFwiXCIpO1xuXHR9IGVsc2UgaWYgKHN0eWxlLnRleHRDb250ZW50ICE9PSBjc3NUZXh0KSBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdHJldHVybiBzdHlsZTtcbn07XG52YXIgcmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzID0gKHJvb3QgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpID0+IHtcblx0aWYgKCFyb290KSByZXR1cm47XG5cdGNvbnN0IHJlc3RvcmUgPSAoaG9zdCkgPT4ge1xuXHRcdGlmICghaG9zdD8uc2hhZG93Um9vdCkgcmV0dXJuO1xuXHRcdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGhvc3QsIGhvc3RDc3NUZXh0KGhvc3QpKTtcblx0XHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGhvc3QpO1xuXHR9O1xuXHRpZiAocm9vdC5ub2RlVHlwZSA9PT0gMSkgcmVzdG9yZShyb290KTtcblx0Y29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuXHRcdGxldCBjaGlsZHJlbiA9IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChcIipcIik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBjaGlsZHJlbltpXTtcblx0XHRcdGlmIChob3N0LnNoYWRvd1Jvb3QpIHtcblx0XHRcdFx0cmVzdG9yZShob3N0KTtcblx0XHRcdFx0dmlzaXQoaG9zdC5zaGFkb3dSb290KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHZpc2l0KHJvb3QpO1xufTtcbnZhciBob3N0Q3NzVGV4dCA9IChiVG8pID0+IHtcblx0Y29uc3Qgc3JjID0gYlRvPy5zdHlsZXM7XG5cdGlmICh0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdGNvbnN0IG91dCA9IHNyYy5jYWxsKGJUbyk7XG5cdFx0aWYgKHR5cGVvZiBvdXQgPT09IFwic3RyaW5nXCIpIHJldHVybiBvdXQ7XG5cdFx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQob3V0KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc3JjKTtcbn07XG52YXIgZW5zdXJlSG9zdFN0eWxlcyA9IChiVG8pID0+IHtcblx0aWYgKCFiVG8pIHJldHVybjtcblx0aWYgKGJUby5zdHlsZXMgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIGJUby5zdHlsZXMpO1xuXHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGJUbyk7XG5cdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgaG9zdENzc1RleHQoYlRvKSk7XG59O1xudmFyIHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xudmFyIHN0eWxlRmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMgPSAoYlRvKSA9PiB7XG5cdGlmICghYlRvIHx8ICEoYlRvIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgc3R5bGVGbHVzaFBlbmRpbmcuaGFzKGJUbykpIHJldHVybjtcblx0c3R5bGVGbHVzaFBlbmRpbmcuYWRkKGJUbyk7XG5cdHN0eWxlRmx1c2hCYXRjaC5wdXNoKGJUbyk7XG5cdGlmIChzdHlsZUZsdXNoU2NoZWR1bGVkKSByZXR1cm47XG5cdHN0eWxlRmx1c2hTY2hlZHVsZWQgPSB0cnVlO1xuXHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0c3R5bGVGbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IGJhdGNoID0gc3R5bGVGbHVzaEJhdGNoO1xuXHRcdHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xuXHRcdGZvciAoY29uc3QgaG9zdCBvZiBiYXRjaCkge1xuXHRcdFx0c3R5bGVGbHVzaFBlbmRpbmcuZGVsZXRlKGhvc3QpO1xuXHRcdFx0aWYgKGhvc3QuaXNDb25uZWN0ZWQpIGVuc3VyZUhvc3RTdHlsZXMoaG9zdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5yZWdpc3RlclN0eWxlVHJlZUhvb2soKGVsKSA9PiBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMoZWwpKTtcbnZhciBsb2FkQ2FjaGVkU3R5bGVzID0gKGJUbywgc3JjKSA9PiB7XG5cdGlmICghc3JjKSByZXR1cm4gbnVsbDtcblx0bGV0IHJlc29sdmVkU3JjID0gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PSBcImZ1bmN0aW9uXCIpIHRyeSB7XG5cdFx0Y29uc3Qgd2VhayA9IG5ldyBXZWFrUmVmKGJUbyk7XG5cdFx0cmVzb2x2ZWRTcmMgPSBzcmMuY2FsbChiVG8sIHdlYWspO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiRXJyb3IgY2FsbGluZyBzdHlsZXMgZnVuY3Rpb246XCIsIGUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmIChyZXNvbHZlZFNyYyAmJiB0eXBlb2YgQ1NTU3R5bGVTaGVldCAhPSBcInVuZGVmaW5lZFwiICYmIHJlc29sdmVkU3JjIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc29sdmVkU3JjKTtcblx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHJlc29sdmVkU3JjKSk7XG5cdH1cblx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdHJlc29sdmVkU3JjLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc3VsdCk7XG5cdFx0XHRlbHNlIGlmIChyZXN1bHQgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIHJlc3VsdCk7XG5cdFx0fSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgfHwgcmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBCbG9iIHx8IHJlc29sdmVkU3JjIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGNvbnN0IGFkb3B0ZWQgPSBsb2FkQXNBZG9wdGVkKHJlc29sdmVkU3JjLCBcIlwiKTtcblx0XHRpZiAoYWRvcHRlZCkge1xuXHRcdFx0Y29uc3QgYWRkQWRvcHRlZFNoZWV0ID0gKHNoZWV0KSA9PiB7XG5cdFx0XHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHNoZWV0KTtcblx0XHRcdH07XG5cdFx0XHRpZiAoYWRvcHRlZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0YWRvcHRlZC50aGVuKChzaGVldCkgPT4ge1xuXHRcdFx0XHRcdGFkZEFkb3B0ZWRTaGVldChzaGVldCk7XG5cdFx0XHRcdFx0ZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChzaGVldCkpO1xuXHRcdFx0XHR9KS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQWRvcHRlZFNoZWV0KGFkb3B0ZWQpO1xuXHRcdFx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChhZG9wdGVkKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHNvdXJjZSA9IHR5cGVvZiBzcmMgPT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBzcmMgPT0gXCJvYmplY3RcIiA/IHN0eWxlRWxlbWVudENhY2hlIDogc3R5bGVDYWNoZTtcblx0Y29uc3QgY2FjaGVkID0gc291cmNlLmdldChzcmMpO1xuXHRsZXQgc3R5bGVFbGVtZW50ID0gY2FjaGVkPy5zdHlsZUVsZW1lbnQ7XG5cdGxldCB2YXJzID0gY2FjaGVkPy52YXJzO1xuXHRpZiAoIWNhY2hlZCkge1xuXHRcdGxldCBzdHlsZXMgPSBgYDtcblx0XHRsZXQgcHJvcHMgPSBbXTtcblx0XHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIpIHN0eWxlcyA9IHJlc29sdmVkU3JjIHx8IFwiXCI7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwib2JqZWN0XCIgJiYgcmVzb2x2ZWRTcmMgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgSFRNTFN0eWxlRWxlbWVudCkgc3R5bGVFbGVtZW50ID0gcmVzb2x2ZWRTcmM7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c3R5bGVzID0gdHlwZW9mIHJlc29sdmVkU3JjLmNzcyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMuY3NzIDogdHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYyA6IFN0cmluZyhyZXNvbHZlZFNyYyk7XG5cdFx0XHRcdHByb3BzID0gcmVzb2x2ZWRTcmM/LnByb3BzID8/IHByb3BzO1xuXHRcdFx0XHR2YXJzID0gcmVzb2x2ZWRTcmM/LnZhcnMgPz8gdmFycztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFzdHlsZUVsZW1lbnQgJiYgc3R5bGVzKSBzdHlsZUVsZW1lbnQgPSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCBiVG8sIFwidXgtbGF5ZXJcIik7XG5cdFx0c291cmNlLnNldChzcmMsIHtcblx0XHRcdGNzczogc3R5bGVzLFxuXHRcdFx0cHJvcHMsXG5cdFx0XHR2YXJzLFxuXHRcdFx0c3R5bGVFbGVtZW50XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHN0eWxlRWxlbWVudDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uL2x1ci5lL3NyYy9sdXJlL2NvcmUvQmluZGluZy50c1xudmFyIGJhbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwibHVyLmVAYmFua1wiKTtcbnZhciBiYW5rID0gZ2xvYmFsVGhpc1tiYW5rU3ltYm9sXSA/Pz0gbmV3IERvdWJsZVdlYWtNYXAoKTtcbnZhciBlbE1hcFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJsdXIuZUBlbE1hcFwiKTtcbnZhciBlbE1hcCA9IGdsb2JhbFRoaXNbZWxNYXBTeW1ib2xdID8/PSBuZXcgRG91YmxlV2Vha01hcCgpO1xudmFyIGFsaXZlc1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJsdXIuZUBhbGl2ZXNcIik7XG52YXIgYWxpdmVzID0gZ2xvYmFsVGhpc1thbGl2ZXNTeW1ib2xdID8/PSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKHVuc3ViKSA9PiB1bnN1Yj8uKCkpO1xudmFyICRiZWhhdmlvciA9IFN5bWJvbC5mb3IoXCJAYmVoYXZpb3JcIik7XG52YXIgaXNMaW5rZXJMaWtlID0gKHZhbHVlKSA9PiB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIFwicmVmXCIgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlPy51bmJpbmQgPT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciAkb2JzZXJ2ZUlucHV0ID0gKGVsZW1lbnQsIHJlZiwgcHJvcCA9IFwidmFsdWVcIikgPT4ge1xuXHRjb25zdCB3ZWwgPSB0b1JlZihlbGVtZW50KTtcblx0Y29uc3QgcmYgPSB0b1JlZihyZWYpO1xuXHRjb25zdCBjdHJsQ2IgPSAoX2V2KSA9PiB7XG5cdFx0JHNldChyZiwgXCJ2YWx1ZVwiLCBkZXJlZih3ZWwpPy5bcHJvcCA/PyBcInZhbHVlXCJdID8/ICRnZXRWYWx1ZShkZXJlZihyZikpKTtcblx0fTtcblx0Y29uc3QgaGRsID0ge1xuXHRcdGNsaWNrOiBjdHJsQ2IsXG5cdFx0aW5wdXQ6IGN0cmxDYixcblx0XHRjaGFuZ2U6IGN0cmxDYlxuXHR9O1xuXHRjdHJsQ2I/Lih7IHRhcmdldDogZWxlbWVudCB9KTtcblx0aGFuZGxlTGlzdGVuZXJzPy4oZWxlbWVudCwgXCJhZGRFdmVudExpc3RlbmVyXCIsIGhkbCk7XG5cdCRzZXQocmYsIFwidmFsdWVcIiwgZWxlbWVudD8uW3Byb3AgPz8gXCJ2YWx1ZVwiXSA/PyAkZ2V0VmFsdWUoZGVyZWYocmVmKSkpO1xuXHRyZXR1cm4gKCkgPT4gaGFuZGxlTGlzdGVuZXJzPy4oZWxlbWVudCwgXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsIGhkbCk7XG59O1xudmFyICRvYnNlcnZlQXR0cmlidXRlID0gKGVsLCByZWYsIHByb3AgPSBcIlwiKSA9PiB7XG5cdHRvUmVmKGVsKTtcblx0Y29uc3Qgd3YgPSB0b1JlZihyZWYpO1xuXHRjb25zdCBhdHRyTmFtZSA9IGNhbWVsVG9LZWJhYihwcm9wKTtcblx0Y29uc3QgY2IgPSAobXV0YXRpb24pID0+IHtcblx0XHRpZiAobXV0YXRpb24udHlwZSA9PSBcImF0dHJpYnV0ZXNcIiAmJiBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09IGF0dHJOYW1lKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG11dGF0aW9uPy50YXJnZXQ/LmdldEF0dHJpYnV0ZT8uKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0Y29uc3QgdmFsUmVmID0gZGVyZWYod3YpLCByZVZhbCA9ICRnZXRWYWx1ZSh2YWxSZWYpO1xuXHRcdFx0aWYgKGlzTm90RXF1YWwobXV0YXRpb24ub2xkVmFsdWUsIHZhbHVlKSAmJiB2YWxSZWYgIT0gbnVsbCAmJiAodHlwZW9mIHZhbFJlZiA9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB2YWxSZWYgPT0gXCJmdW5jdGlvblwiKSkge1xuXHRcdFx0XHRpZiAoaXNOb3RFcXVhbChyZVZhbCwgdmFsdWUpIHx8IHJlVmFsID09IG51bGwpICRzZXQodmFsUmVmLCBcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBvYnNlcnZlQXR0cmlidXRlKGVsLCBhdHRyTmFtZSwgY2IpO1xufTtcbnZhciByZW1vdmVGcm9tQmFuayA9IChlbCwgaGFuZGxlciwgcHJvcCkgPT4ge1xuXHRjb25zdCBiYW5rID0gZWxNYXAuZ2V0KFtlbCwgaGFuZGxlcl0pO1xuXHRpZiAoYmFuaykge1xuXHRcdGNvbnN0IG9sZCA9IGJhbmtbcHJvcF0/LlsxXTtcblx0XHRkZWxldGUgYmFua1twcm9wXTtcblx0XHRvbGQ/LigpO1xuXHR9XG59O1xudmFyIGFkZFRvQmFuayA9IChlbCwgaGFuZGxlciwgcHJvcCwgZm9yTGluaykgPT4ge1xuXHRjb25zdCBiYW5rID0gZWxNYXAuZ2V0T3JJbnNlcnRDb21wdXRlZChbZWwsIGhhbmRsZXJdLCAoKSA9PiAoe30pKTtcblx0YmFuaz8uW3Byb3BdPy5bMV0/LigpO1xuXHRiYW5rW3Byb3BdID0gZm9yTGluaztcblx0cmV0dXJuIHRydWU7XG59O1xudmFyIGJpbmRIYW5kbGVyID0gKGVsZW1lbnQsIHZhbHVlLCBwcm9wLCBoYW5kbGVyLCBzZXQsIHdpdGhPYnNlcnZlcikgPT4ge1xuXHRjb25zdCBsaW5rZXIgPSBpc0xpbmtlckxpa2UodmFsdWUpID8gdmFsdWUgOiBudWxsO1xuXHRpZiAobGlua2VyKSB7XG5cdFx0bGlua2VyLmJpbmQ/LigpO1xuXHRcdHZhbHVlID0gbGlua2VyLnJlZjtcblx0fVxuXHRjb25zdCB3ZWwgPSB0b1JlZihlbGVtZW50KTtcblx0ZWxlbWVudCA9IGRlcmVmKHdlbCk7XG5cdGlmICghZWxlbWVudCB8fCAhKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlIHx8IGVsZW1lbnQ/LmVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlKSkgcmV0dXJuO1xuXHRsZXQgY29udHJvbGxlciA9IHZvaWQgMDtcblx0aWYgKGNvbnRyb2xsZXIpIGNvbnRyb2xsZXI/LmFib3J0Py4oKTtcblx0Y29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblx0Y29uc3Qgd3YgPSB0b1JlZih2YWx1ZSk7XG5cdGhhbmRsZXI/LihlbGVtZW50LCBwcm9wLCB2YWx1ZSk7XG5cdGNvbnN0IHVuID0gYWZmZWN0ZWQ/LihbdmFsdWUsIFwidmFsdWVcIl0sIChjdXJyLCBfcCwgb2xkKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVSZWYgPSBkZXJlZih3dik7XG5cdFx0Y29uc3Qgc2V0UmVmID0gZGVyZWYoc2V0KTtcblx0XHRjb25zdCBlbGVtZW50UmVmID0gZGVyZWYod2VsKTtcblx0XHRjb25zdCB2ID0gJGdldFZhbHVlKHZhbHVlUmVmKSA/PyAkZ2V0VmFsdWUoY3Vycik7XG5cdFx0aWYgKCFzZXRSZWYgfHwgc2V0UmVmPy5bcHJvcF0gPT0gdmFsdWVSZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgdmFsdWVSZWY/LlskYmVoYXZpb3JdID09IFwiZnVuY3Rpb25cIikgdmFsdWVSZWY/LlskYmVoYXZpb3JdPy4oKF92YWwgPSBjdXJyKSA9PiBoYW5kbGVyKGVsZW1lbnRSZWYsIHByb3AsIHYpLCBbXG5cdFx0XHRcdGN1cnIsXG5cdFx0XHRcdHByb3AsXG5cdFx0XHRcdG9sZFxuXHRcdFx0XSwgW1xuXHRcdFx0XHRjb250cm9sbGVyPy5zaWduYWwsXG5cdFx0XHRcdHByb3AsXG5cdFx0XHRcdHdlbFxuXHRcdFx0XSk7XG5cdFx0XHRlbHNlIGhhbmRsZXIoZWxlbWVudFJlZiwgcHJvcCwgdik7XG5cdFx0fVxuXHR9KTtcblx0bGV0IG9icyA9IG51bGw7XG5cdGlmICh0eXBlb2Ygd2l0aE9ic2VydmVyID09IFwiYm9vbGVhblwiICYmIHdpdGhPYnNlcnZlcikge1xuXHRcdGlmIChoYW5kbGVyID09IGhhbmRsZUF0dHJpYnV0ZSkgb2JzID0gJG9ic2VydmVBdHRyaWJ1dGUoZWxlbWVudCwgdmFsdWUsIHByb3ApO1xuXHRcdGlmIChoYW5kbGVyID09IGhhbmRsZVByb3BlcnR5KSBvYnMgPSAkb2JzZXJ2ZUlucHV0KGVsZW1lbnQsIHZhbHVlLCBwcm9wKTtcblx0fVxuXHRpZiAodHlwZW9mIHdpdGhPYnNlcnZlciA9PSBcImZ1bmN0aW9uXCIpIG9icyA9IHdpdGhPYnNlcnZlcihlbGVtZW50LCBwcm9wLCB2YWx1ZSk7XG5cdGNvbnN0IHVuc3ViID0gKCkgPT4ge1xuXHRcdG9icz8uZGlzY29ubmVjdD8uKCk7XG5cdFx0b2JzICE9IG51bGwgJiYgdHlwZW9mIG9icyA9PSBcImZ1bmN0aW9uXCIgJiYgb2JzPy4oKTtcblx0XHRsaW5rZXI/LnVuYmluZD8uKCk7XG5cdFx0dW4/LigpO1xuXHRcdGNvbnRyb2xsZXI/LmFib3J0Py4oKTtcblx0XHRyZW1vdmVGcm9tQmFuaz8uKGVsZW1lbnQsIGhhbmRsZXIsIHByb3ApO1xuXHR9O1xuXHRhZGRUb0NhbGxDaGFpbih2YWx1ZSwgU3ltYm9sLmRpc3Bvc2UsIHVuc3ViKTtcblx0YWxpdmVzLnJlZ2lzdGVyKGVsZW1lbnQsIHVuc3ViKTtcblx0aWYgKCFhZGRUb0JhbmsoZWxlbWVudCwgaGFuZGxlciwgcHJvcCwgW3ZhbHVlLCB1bnN1Yl0pKSByZXR1cm4gdW5zdWI7XG59O1xudmFyIGJpbmRXaXRoID0gKGVsLCBwcm9wLCB2YWx1ZSwgaGFuZGxlciwgc2V0LCB3aXRoT2JzZXJ2ZXIpID0+IHtcblx0aGFuZGxlcihlbCwgcHJvcCwgaXNMaW5rZXJMaWtlKHZhbHVlKSA/IHZhbHVlLnJlZiA6IHZhbHVlKTtcblx0cmV0dXJuIGJpbmRIYW5kbGVyKGVsLCB2YWx1ZSwgcHJvcCwgaGFuZGxlciwgc2V0LCB3aXRoT2JzZXJ2ZXIpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vZG9tLnRzL3NyYy9taXhpbi9IYW5kbGVyLnRzXG52YXIgZGVsZXRlU3R5bGVQcm9wZXJ0eSA9IChlbCwgbmFtZSkgPT4gZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoY2FtZWxUb0tlYmFiKG5hbWUpKTtcbnZhciBoYW5kbGVTdHlsZUNoYW5nZSA9IChlbCwgcHJvcCwgdmFsKSA9PiB7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWw/LnN0eWxlO1xuXHRpZiAoIXByb3AgfHwgdHlwZW9mIHByb3AgIT0gXCJzdHJpbmdcIiB8fCAhZWwgfHwgIXN0eWxlUmVmKSByZXR1cm4gZWw7XG5cdCRhdm9pZFRyaWdnZXIodmFsLCAoKSA9PiB7XG5cdFx0aWYgKGlzVmFsKHZhbCkgfHwgaGFzVmFsdWUodmFsKSB8fCBpc1ZhbHVlVW5pdCh2YWwpKSBzZXRTdHlsZVByb3BlcnR5KGVsLCBwcm9wLCB2YWwpO1xuXHRcdGVsc2UgaWYgKHZhbCA9PSBudWxsKSBkZWxldGVTdHlsZVByb3BlcnR5KGVsLCBwcm9wKTtcblx0fSk7XG5cdHJldHVybiBlbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9BbmltYXRhYmxlLnRzXG52YXIgYW5pbWF0YWJsZUlkID0gMDtcbnZhciBvblNjcm9sbCA9IChvID0ge30pID0+ICh7XG5cdGtpbmQ6IFwic2Nyb2xsXCIsXG5cdC4uLm9cbn0pO1xudmFyIG9uVmlldyA9IChvID0ge30pID0+ICh7XG5cdGtpbmQ6IFwidmlld1wiLFxuXHQuLi5vXG59KTtcbnZhciBBbmltYXRhYmxlVmFsdWUgPSBjbGFzcyB7XG5cdFtBTklNQVRBQkxFX0JSQU5EXSA9IHRydWU7XG5cdGlkID0gYW5pbWF0YWJsZUlkKys7XG5cdCNzdGVwcztcblx0I29wdGlvbnM7XG5cdCNjdXJyZW50O1xuXHQjc3Vic2NyaWJlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHQjYXR0YWNobWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHQjcmVzb2x2ZUVsZW1lbnRSZWYodiwgc2VsZikge1xuXHRcdGlmICh2ID09IG51bGwgfHwgdiA9PT0gXCJzZWxmXCIpIHJldHVybiBzZWxmO1xuXHRcdGlmICh2ID09PSBcInJvb3RcIikgcmV0dXJuIHNlbGYub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8/IHNlbGYub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0aWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiB2ICYmICEodiBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdi52YWx1ZSA/PyBzZWxmO1xuXHRcdHJldHVybiB2O1xuXHR9XG5cdCNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsKSB7XG5cdFx0Zm9yIChsZXQgbm9kZSA9IGVsLnBhcmVudEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHMgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuXHRcdFx0aWYgKC8oYXV0b3xzY3JvbGx8b3ZlcmxheSkvLnRlc3Qocy5vdmVyZmxvdyArIHMub3ZlcmZsb3dYICsgcy5vdmVyZmxvd1kpKSByZXR1cm4gbm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsLm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/PyBlbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0fVxuXHQjY3JlYXRlVGltZWxpbmUoZWxlbWVudCwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzO1xuXHRcdGlmIChpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSkge1xuXHRcdFx0Y29uc3QgU2Nyb2xsVGltZWxpbmVDdG9yID0gd2luLlNjcm9sbFRpbWVsaW5lO1xuXHRcdFx0aWYgKHR5cGVvZiBTY3JvbGxUaW1lbGluZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdFx0XHRyZXR1cm4gbmV3IFNjcm9sbFRpbWVsaW5lQ3Rvcih7XG5cdFx0XHRcdHNvdXJjZTogdHJpZ2dlci5zb3VyY2UgPT09IFwibmVhcmVzdFwiIHx8IHRyaWdnZXIuc291cmNlID09IG51bGwgPyB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpIDogdGhpcy4jcmVzb2x2ZUVsZW1lbnRSZWYodHJpZ2dlci5zb3VyY2UsIGVsZW1lbnQpLFxuXHRcdFx0XHRheGlzOiB0cmlnZ2VyLmF4aXMgPz8gXCJibG9ja1wiXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3QgVmlld1RpbWVsaW5lQ3RvciA9IHdpbi5WaWV3VGltZWxpbmU7XG5cdFx0aWYgKHR5cGVvZiBWaWV3VGltZWxpbmVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgVmlld1RpbWVsaW5lQ3Rvcih7XG5cdFx0XHRzdWJqZWN0OiB0cmlnZ2VyLnN1YmplY3QgPyB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnN1YmplY3QsIGVsZW1lbnQpIDogZWxlbWVudCxcblx0XHRcdGF4aXM6IHRyaWdnZXIuYXhpcyA/PyBcImJsb2NrXCIsXG5cdFx0XHRpbnNldDogdHJpZ2dlci5pbnNldFxuXHRcdH0pO1xuXHR9XG5cdCNzdGFydFRpbWVsaW5lRHJpdmVuKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpIHtcblx0XHRjb25zdCB0aW1lbGluZSA9IHRoaXMuI2NyZWF0ZVRpbWVsaW5lKGVsZW1lbnQsIHRyaWdnZXIpO1xuXHRcdGlmICghdGltZWxpbmUpIHJldHVybiB0aGlzLiNzdGFydFRpbWVsaW5lRmFsbGJhY2soZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcik7XG5cdFx0Y29uc3QgdGltaW5nID0gdGhpcy4jYnVpbGRUaW1pbmcoKTtcblx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHtcblx0XHRcdC4uLnRpbWluZyxcblx0XHRcdGR1cmF0aW9uOiBcImF1dG9cIixcblx0XHRcdGRlbGF5OiAwLFxuXHRcdFx0ZW5kRGVsYXk6IDAsXG5cdFx0XHRpdGVyYXRpb25zOiAxLFxuXHRcdFx0ZmlsbDogdGhpcy4jb3B0aW9ucy5maWxsID8/IFwiYm90aFwiLFxuXHRcdFx0dGltZWxpbmVcblx0XHR9KTtcblx0XHRpZiAodHJpZ2dlci5yYW5nZVN0YXJ0KSBhbmltYXRpb24ucmFuZ2VTdGFydCA9IHRyaWdnZXIucmFuZ2VTdGFydDtcblx0XHRpZiAodHJpZ2dlci5yYW5nZUVuZCkgYW5pbWF0aW9uLnJhbmdlRW5kID0gdHJpZ2dlci5yYW5nZUVuZDtcblx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRyZXR1cm4gKCkgPT4gYW5pbWF0aW9uLmNhbmNlbCgpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKHN0ZXBzLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3RlcHMpIHx8IHN0ZXBzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhbmltYXRhYmxlKCkgZXhwZWN0cyBhdCBsZWFzdCAyIHN0ZXBzXCIpO1xuXHRcdHRoaXMuI3N0ZXBzID0gc3RlcHM7XG5cdFx0dGhpcy4jb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy4jY3VycmVudCA9IHRoaXMuI3Jlc29sdmVTdGVwKHN0ZXBzWzBdKTtcblx0fVxuXHQjc3RhcnRUaW1lbGluZUZhbGxiYWNrKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpIHtcblx0XHRjb25zdCBEVVJBVElPTiA9IDFlNDtcblx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHtcblx0XHRcdC4uLnRoaXMuI2J1aWxkVGltaW5nKCksXG5cdFx0XHRkdXJhdGlvbjogRFVSQVRJT04sXG5cdFx0XHRkZWxheTogMCxcblx0XHRcdGl0ZXJhdGlvbnM6IDEsXG5cdFx0XHRmaWxsOiBcImJvdGhcIlxuXHRcdH0pO1xuXHRcdGFuaW1hdGlvbi5wYXVzZSgpO1xuXHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdGNvbnN0IHNjcm9sbGVyID0gaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikgPyB0cmlnZ2VyLnNvdXJjZSA9PT0gXCJuZWFyZXN0XCIgfHwgdHJpZ2dlci5zb3VyY2UgPT0gbnVsbCA/IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCkgOiB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnNvdXJjZSwgZWxlbWVudCkgOiB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpO1xuXHRcdGxldCByYWZJZCA9IDA7XG5cdFx0Y29uc3QgY29tcHV0ZVByb2dyZXNzID0gKCkgPT4ge1xuXHRcdFx0aWYgKGlzVmlld0RyaXZlbih0cmlnZ2VyKSkge1xuXHRcdFx0XHRjb25zdCB2cCA9IHNjcm9sbGVyID09PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8ge1xuXHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRoZWlnaHQ6IGlubmVySGVpZ2h0XG5cdFx0XHRcdH0gOiBzY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IHRvdGFsID0gdnAuaGVpZ2h0ICsgcmVjdC5oZWlnaHQ7XG5cdFx0XHRcdHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCAodnAudG9wICsgdnAuaGVpZ2h0IC0gcmVjdC50b3ApIC8gdG90YWwpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGVsID0gc2Nyb2xsZXI7XG5cdFx0XHRjb25zdCBtYXggPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5jbGllbnRIZWlnaHQ7XG5cdFx0XHRyZXR1cm4gbWF4ID4gMCA/IGVsLnNjcm9sbFRvcCAvIG1heCA6IDA7XG5cdFx0fTtcblx0XHRjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcblx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcblx0XHRcdHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0YW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY29tcHV0ZVByb2dyZXNzKCkgKiBEVVJBVElPTjtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y29uc3QgbGlzdGVuVGFyZ2V0ID0gc2Nyb2xsZXIgPT09IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPyB3aW5kb3cgOiBzY3JvbGxlcjtcblx0XHRsaXN0ZW5UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBvblNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXHRcdG9uU2Nyb2xsKCk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcblx0XHRcdGxpc3RlblRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsKTtcblx0XHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHR9O1xuXHR9XG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jY3VycmVudDtcblx0fVxuXHRzZXQgdmFsdWUobmV4dCkge1xuXHRcdHRoaXMuI2N1cnJlbnQgPSBuZXh0O1xuXHRcdGZvciAoY29uc3QgY2Igb2YgdGhpcy4jc3Vic2NyaWJlcnMpIGNiKG5leHQpO1xuXHR9XG5cdHZhbHVlT2YoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2N1cnJlbnQ7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgdiA9IHRoaXMuI2N1cnJlbnQ7XG5cdFx0cmV0dXJuIHYgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcodik7XG5cdH1cblx0W1N5bWJvbC50b1ByaW1pdGl2ZV0oaGludCkge1xuXHRcdGlmIChoaW50ID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRjb25zdCBuID0gTnVtYmVyKHRoaXMuI2N1cnJlbnQpO1xuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiAwO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpO1xuXHR9XG5cdHN1YnNjcmliZShjYikge1xuXHRcdHRoaXMuI3N1YnNjcmliZXJzLmFkZChjYik7XG5cdFx0cmV0dXJuICgpID0+IHRoaXMuI3N1YnNjcmliZXJzLmRlbGV0ZShjYik7XG5cdH1cblx0Z2V0IG9wdGlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI29wdGlvbnM7XG5cdH1cblx0Z2V0IHN0ZXBzKCkge1xuXHRcdHJldHVybiB0aGlzLiNzdGVwcztcblx0fVxuXHQjcmVzb2x2ZVN0ZXAoc3RlcCkge1xuXHRcdGlmIChzdGVwICE9IG51bGwgJiYgdHlwZW9mIHN0ZXAgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHN0ZXApIHJldHVybiBzdGVwLnZhbHVlO1xuXHRcdHJldHVybiBzdGVwO1xuXHR9XG5cdCNidWlsZEtleWZyYW1lcyhwbGFuKSB7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLiNzdGVwcy5tYXAoKHMpID0+IHRoaXMuI3Jlc29sdmVTdGVwKHMpKTtcblx0XHRjb25zdCBjb3VudCA9IHN0ZXBzLmxlbmd0aDtcblx0XHRjb25zdCBvZmZzZXRzID0gdGhpcy4jb3B0aW9ucy5vZmZzZXRzO1xuXHRcdGNvbnN0IGVhc2luZyA9IHRoaXMuI29wdGlvbnMuZWFzaW5nO1xuXHRcdHJldHVybiBzdGVwcy5tYXAoKHJhdywgaSkgPT4ge1xuXHRcdFx0Y29uc3QgZnJhbWUgPSB7IG9mZnNldDogb2Zmc2V0cz8uW2ldID8/IChjb3VudCA+IDEgPyBpIC8gKGNvdW50IC0gMSkgOiAwKSB9O1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZWFzaW5nKSkge1xuXHRcdFx0XHRpZiAoZWFzaW5nW2ldKSBmcmFtZS5lYXNpbmcgPSBlYXNpbmdbaV07XG5cdFx0XHR9XG5cdFx0XHRsZXQgdmFsdWUgPSByYXc7XG5cdFx0XHRpZiAocGxhbi5tb2RlID09PSBcInByb3BlcnR5XCIgJiYgcGxhbi51bml0ICE9IG51bGwgJiYgdHlwZW9mIHJhdyA9PT0gXCJudW1iZXJcIikgdmFsdWUgPSBgJHtyYXd9JHtwbGFuLnVuaXR9YDtcblx0XHRcdGlmIChwbGFuLm1vZGUgPT09IFwiY3VzdG9tLXByb3BlcnR5XCIgJiYgdHlwZW9mIHJhdyAhPT0gXCJzdHJpbmdcIikgdmFsdWUgPSBTdHJpbmcocmF3KTtcblx0XHRcdGZyYW1lW3BsYW4udGFyZ2V0XSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIGZyYW1lO1xuXHRcdH0pO1xuXHR9XG5cdCNidWlsZFRpbWluZygpIHtcblx0XHRjb25zdCBvID0gdGhpcy4jb3B0aW9ucztcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZHVyYXRpb246IHBhcnNlVGltZShvLmR1cmF0aW9uLCAzMDApLFxuXHRcdFx0ZGVsYXk6IHBhcnNlVGltZShvLmRlbGF5LCAwKSxcblx0XHRcdGVuZERlbGF5OiBvLmVuZERlbGF5ID8/IDAsXG5cdFx0XHRpdGVyYXRpb25zOiBub3JtYWxpemVJdGVyYXRpb25zKG8uaXRlcmF0aW9ucyksXG5cdFx0XHRkaXJlY3Rpb246IG8uZGlyZWN0aW9uID8/IFwibm9ybWFsXCIsXG5cdFx0XHRmaWxsOiBvLmZpbGwgPz8gXCJib3RoXCIsXG5cdFx0XHRjb21wb3NpdGU6IG8uY29tcG9zaXRlLFxuXHRcdFx0ZWFzaW5nOiBBcnJheS5pc0FycmF5KG8uZWFzaW5nKSA/IFwibGluZWFyXCIgOiBvLmVhc2luZyA/PyBcImxpbmVhclwiXG5cdFx0fTtcblx0fVxuXHRhdHRhY2goZWxlbWVudCwgcGxhbikge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB7XG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0YW5pbWF0aW9uOiBudWxsLFxuXHRcdFx0Y2xlYW51cDogKCkgPT4ge31cblx0XHR9O1xuXHRcdGNvbnN0IHRyaWdnZXIgPSB0aGlzLiNvcHRpb25zLnRyaWdnZXIgPz8gXCJtb3VudFwiO1xuXHRcdGxldCBpbm5lcjtcblx0XHRpZiAoaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikgfHwgaXNWaWV3RHJpdmVuKHRyaWdnZXIpKSBpbm5lciA9IHRoaXMuI3N0YXJ0VGltZWxpbmVEcml2ZW4oZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcik7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24/LmNhbmNlbCgpO1xuXHRcdFx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHRoaXMuI2J1aWxkVGltaW5nKCkpO1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRcdFx0dGhpcy4jdHJhY2tQcm9ncmVzcyhhbmltYXRpb24sIHBsYW4pO1xuXHRcdFx0XHRyZXR1cm4gYW5pbWF0aW9uO1xuXHRcdFx0fTtcblx0XHRcdGlubmVyID0gdGhpcy4jd2lyZVRyaWdnZXIoZWxlbWVudCwgYXR0YWNobWVudCwgc3RhcnQpO1xuXHRcdH1cblx0XHR0aGlzLiNhdHRhY2htZW50cy5hZGQoYXR0YWNobWVudCk7XG5cdFx0YXR0YWNobWVudC5jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0aW5uZXIoKTtcblx0XHRcdHRoaXMuI2F0dGFjaG1lbnRzLmRlbGV0ZShhdHRhY2htZW50KTtcblx0XHR9O1xuXHRcdHJldHVybiBhdHRhY2htZW50LmNsZWFudXA7XG5cdH1cblx0I3RyYWNrUHJvZ3Jlc3MoYW5pbWF0aW9uLCBwbGFuKSB7XG5cdFx0YW5pbWF0aW9uLmZpbmlzaGVkLnRoZW4oKCkgPT4ge1xuXHRcdFx0Y29uc3QgbGFzdCA9IHRoaXMuI3Jlc29sdmVTdGVwKHRoaXMuI3N0ZXBzW3RoaXMuI3N0ZXBzLmxlbmd0aCAtIDFdKTtcblx0XHRcdHRoaXMudmFsdWUgPSBsYXN0O1xuXHRcdH0pLmNhdGNoKCgpID0+IHt9KTtcblx0fVxuXHQjd2lyZVRyaWdnZXIoZWxlbWVudCwgYXR0YWNobWVudCwgc3RhcnQpIHtcblx0XHRjb25zdCB0cmlnZ2VyID0gdGhpcy4jb3B0aW9ucy50cmlnZ2VyID8/IFwibW91bnRcIjtcblx0XHRjb25zdCByZXZlcnNlT25FeGl0ID0gdGhpcy4jb3B0aW9ucy5yZXZlcnNlT25FeGl0ID8/IHRydWU7XG5cdFx0Y29uc3QgcGxheUZvcndhcmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQuYW5pbWF0aW9uIHx8IGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXlTdGF0ZSA9PT0gXCJpZGxlXCIpIHN0YXJ0KCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24ucGxheWJhY2tSYXRlID0gTWF0aC5hYnMoYXR0YWNobWVudC5hbmltYXRpb24ucGxheWJhY2tSYXRlIHx8IDEpO1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBwbGF5QmFja3dhcmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQuYW5pbWF0aW9uKSByZXR1cm47XG5cdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5yZXZlcnNlKCk7XG5cdFx0fTtcblx0XHRpZiAodHJpZ2dlciA9PT0gXCJtb3VudFwiKSB7XG5cdFx0XHRzdGFydCgpO1xuXHRcdFx0cmV0dXJuICgpID0+IHt9O1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciA9PT0gXCJtYW51YWxcIikgcmV0dXJuICgpID0+IHt9O1xuXHRcdGlmICh0cmlnZ2VyID09PSBcImhvdmVyXCIgfHwgdHJpZ2dlciA9PT0gXCJmb2N1c1wiKSB7XG5cdFx0XHRjb25zdCBlbnRlciA9IHRyaWdnZXIgPT09IFwiaG92ZXJcIiA/IFwicG9pbnRlcmVudGVyXCIgOiBcImZvY3VzaW5cIjtcblx0XHRcdGNvbnN0IGxlYXZlID0gdHJpZ2dlciA9PT0gXCJob3ZlclwiID8gXCJwb2ludGVybGVhdmVcIiA6IFwiZm9jdXNvdXRcIjtcblx0XHRcdGNvbnN0IG9uRW50ZXIgPSAoKSA9PiBwbGF5Rm9yd2FyZCgpO1xuXHRcdFx0Y29uc3Qgb25MZWF2ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHJldmVyc2VPbkV4aXQpIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlbnRlciwgb25FbnRlcik7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobGVhdmUsIG9uTGVhdmUpO1xuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGVudGVyLCBvbkVudGVyKTtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGxlYXZlLCBvbkxlYXZlKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGxldCBmb3J3YXJkID0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9uQ2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdGZvcndhcmQgPyBwbGF5Rm9yd2FyZCgpIDogcGxheUJhY2t3YXJkKCk7XG5cdFx0XHRcdGZvcndhcmQgPSAhZm9yd2FyZDtcblx0XHRcdH07XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcblx0XHRcdHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwidmlzaWJsZVwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHBsYXlGb3J3YXJkKCk7XG5cdFx0XHRcdGVsc2UgaWYgKHJldmVyc2VPbkV4aXQgJiYgYXR0YWNobWVudC5hbmltYXRpb24pIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fSwgdGhpcy4jb3B0aW9ucy5pbnRlcnNlY3Rpb24pO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcblx0XHRcdHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyICE9IG51bGwgJiYgdHlwZW9mIHRyaWdnZXIgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHRyaWdnZXIpIHtcblx0XHRcdGNvbnN0IGFwcGx5ID0gKHYpID0+IHYgPyBwbGF5Rm9yd2FyZCgpIDogcGxheUJhY2t3YXJkKCk7XG5cdFx0XHRhcHBseSh0cmlnZ2VyLnZhbHVlKTtcblx0XHRcdGNvbnN0IHVuc3Vic2NyaWJlID0gdHlwZW9mIHRyaWdnZXIuc3Vic2NyaWJlID09PSBcImZ1bmN0aW9uXCIgPyB0cmlnZ2VyLnN1YnNjcmliZShhcHBseSkgOiBudWxsO1xuXHRcdFx0cmV0dXJuICgpID0+IHVuc3Vic2NyaWJlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuICgpID0+IHt9O1xuXHR9XG5cdCNlYWNoKGZuKSB7XG5cdFx0Zm9yIChjb25zdCBhdCBvZiB0aGlzLiNhdHRhY2htZW50cykgaWYgKGF0LmFuaW1hdGlvbikgZm4oYXQuYW5pbWF0aW9uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRwbGF5KCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLnBsYXkoKSk7XG5cdH1cblx0cGF1c2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEucGF1c2UoKSk7XG5cdH1cblx0cmV2ZXJzZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5yZXZlcnNlKCkpO1xuXHR9XG5cdGNhbmNlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5jYW5jZWwoKSk7XG5cdH1cblx0ZmluaXNoKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLmZpbmlzaCgpKTtcblx0fVxuXHRzZXQgcGxheWJhY2tSYXRlKHJhdGUpIHtcblx0XHR0aGlzLiNlYWNoKChhKSA9PiB7XG5cdFx0XHRhLnBsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdFx0fSk7XG5cdH1cblx0Z2V0IGZpbmlzaGVkKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBbXTtcblx0XHR0aGlzLiNlYWNoKChhKSA9PiBsaXN0LnB1c2goYS5maW5pc2hlZC5jYXRjaCgoKSA9PiB7fSkpKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwobGlzdCkudGhlbigoKSA9PiB7fSk7XG5cdH1cbn07XG52YXIgYW5pbWF0YWJsZSA9IChzdGVwcywgb3B0aW9ucykgPT4gbmV3IEFuaW1hdGFibGVWYWx1ZShzdGVwcywgb3B0aW9ucyk7XG52YXIgaXNBbmltYXRhYmxlVmFsdWUgPSAodmFsdWUpID0+IHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlW0FOSU1BVEFCTEVfQlJBTkRdID09PSB0cnVlO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvU3R5bGVzLnRzXG52YXIgc3R5bGVUZW1wbGF0ZUlkID0gMDtcbnZhciByZWFkUmVhY3RpdmVOdW1iZXIgPSAoc2xvdCkgPT4ge1xuXHRjb25zdCBjdXJyZW50ID0gc2xvdC52YWx1ZT8udmFsdWU7XG5cdGNvbnN0IG51bWJlciA9IHR5cGVvZiBjdXJyZW50ID09PSBcIm51bWJlclwiID8gY3VycmVudCA6IE51bWJlcihjdXJyZW50KTtcblx0aWYgKCFOdW1iZXIuaXNGaW5pdGUobnVtYmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVhY3RpdmUgQ1NTIHZhbHVlIFwiJHtTdHJpbmcoY3VycmVudCl9XCIgaXMgbm90IGZpbml0ZWApO1xuXHRyZXR1cm4gbnVtYmVyO1xufTtcbnZhciBnZXRSZWFjdGl2ZUluaXRpYWxOdW1iZXIgPSAodmFsdWUpID0+IHtcblx0Y29uc3QgbnVtYmVyID0gTnVtYmVyKHZhbHVlPy52YWx1ZSk7XG5cdHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IDA7XG59O1xudmFyIHJlcGxhY2VUeXBlZE1hcmtlcnMgPSAoY3NzVmFsdWUsIHNsb3RzKSA9PiB7XG5cdGxldCByZXN1bHQgPSBjc3NWYWx1ZTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHNsb3RzKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKGB2YXJcXFxcKFxcXFxzKiR7ZXNjYXBlUmVnRXhwKHNsb3QubWFya2VyKX1cXFxccypcXFxcKWAsIFwiZ1wiKSwgU3RyaW5nKHNsb3QudmFsdWUpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNEaXJlY3RTbG90VmFsdWUgPSAoY3NzVmFsdWUsIG1hcmtlcikgPT4ge1xuXHRjb25zdCBlc2NhcGVkTWFya2VyID0gZXNjYXBlUmVnRXhwKG1hcmtlcik7XG5cdHJldHVybiBuZXcgUmVnRXhwKGBedmFyXFxcXChcXFxccyoke2VzY2FwZWRNYXJrZXJ9XFxcXHMqXFxcXCkkYCkudGVzdChjc3NWYWx1ZS50cmltKCkpO1xufTtcbnZhciBzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUgPSAocmF3LCB1bml0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHJhdztcblx0aWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCkpIHZhbHVlID0gdmFsdWUudmFsdWU7XG5cdGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSByZXR1cm4gdW5pdCA/IGAwJHt1bml0fWAgOiBcIjBcIjtcblx0aWYgKHVuaXQgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiBgJHt2YWx1ZX0ke3VuaXR9YDtcblx0cmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59O1xudmFyIGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0ID0gKGNzc1ZhbHVlLCBtYXJrZXIsIHVuaXQpID0+IHtcblx0aWYgKCF1bml0KSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IGVzY2FwZWRNYXJrZXIgPSBlc2NhcGVSZWdFeHAobWFya2VyKTtcblx0Y29uc3QgZXNjYXBlZFVuaXQgPSBlc2NhcGVSZWdFeHAodW5pdCk7XG5cdHJldHVybiBuZXcgUmVnRXhwKGBeY2FsY1xcXFwoXFxcXHMqdmFyXFxcXChcXFxccyoke2VzY2FwZWRNYXJrZXJ9XFxcXHMqXFxcXClcXFxccypcXFxcKlxcXFxzKjEke2VzY2FwZWRVbml0fVxcXFxzKlxcXFwpJGAsIFwiaVwiKS50ZXN0KGNzc1ZhbHVlLnRyaW0oKSk7XG59O1xudmFyIHNldFBhcnNlZFR5cGVkVmFsdWUgPSAoc3R5bGVNYXAsIENTU1N0eWxlVmFsdWVDdG9yLCBwcm9wZXJ0eSwgY3NzVmFsdWUpID0+IHtcblx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3Rvcj8ucGFyc2VBbGwgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IHZhbHVlcyA9IENTU1N0eWxlVmFsdWVDdG9yLnBhcnNlQWxsKHByb3BlcnR5LCBjc3NWYWx1ZSk7XG5cdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCAuLi52YWx1ZXMpO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yPy5wYXJzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBDU1NTdHlsZVZhbHVlQ3Rvci5wYXJzZShwcm9wZXJ0eSwgY3NzVmFsdWUpKTtcblx0XHRyZXR1cm47XG5cdH1cblx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBjc3NWYWx1ZSk7XG59O1xudmFyIHRva2VuaXplTnVtZXJpY0NTUyA9IChzb3VyY2UpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gW107XG5cdGxldCBjdXJzb3IgPSAwO1xuXHR3aGlsZSAoY3Vyc29yIDwgc291cmNlLmxlbmd0aCkge1xuXHRcdGNvbnN0IHJlc3QgPSBzb3VyY2Uuc2xpY2UoY3Vyc29yKTtcblx0XHRjb25zdCB3aGl0ZXNwYWNlID0gL15cXHMrLy5leGVjKHJlc3QpO1xuXHRcdGlmICh3aGl0ZXNwYWNlKSB7XG5cdFx0XHRjdXJzb3IgKz0gd2hpdGVzcGFjZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFibGUgPSAvXnZhclxcKFxccyooLS1bYS16QS1aMC05Xy1dKylcXHMqXFwpLy5leGVjKHJlc3QpO1xuXHRcdGlmICh2YXJpYWJsZSkge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcInZhcmlhYmxlXCIsXG5cdFx0XHRcdG1hcmtlcjogdmFyaWFibGVbMV1cblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yICs9IHZhcmlhYmxlWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBudW1iZXIgPSAvXig/OlxcZCpcXC5cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWystXT9cXGQrKT8vLmV4ZWMocmVzdCk7XG5cdFx0aWYgKG51bWJlcikge1xuXHRcdFx0Y3Vyc29yICs9IG51bWJlclswXS5sZW5ndGg7XG5cdFx0XHRjb25zdCB1bml0TWF0Y2ggPSAvXiglfFthLXpBLVpdKykvLmV4ZWMoc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRNYXRjaD8uWzBdID8/IG51bGw7XG5cdFx0XHRpZiAodW5pdE1hdGNoKSBjdXJzb3IgKz0gdW5pdE1hdGNoWzBdLmxlbmd0aDtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJudW1iZXJcIixcblx0XHRcdFx0dmFsdWU6IE51bWJlcihudW1iZXJbMF0pLFxuXHRcdFx0XHR1bml0OiB1bml0ID09IG51bGwgPyBudWxsIDogdW5pdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBpZGVudGlmaWVyID0gL15bYS16QS1aX11bYS16QS1aMC05Xy1dKi8uZXhlYyhyZXN0KTtcblx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcImlkZW50aWZpZXJcIixcblx0XHRcdFx0dmFsdWU6IGlkZW50aWZpZXJbMF0udG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gaWRlbnRpZmllclswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltYm9sID0gcmVzdFswXTtcblx0XHRpZiAoc3ltYm9sID09PSBcIitcIiB8fCBzeW1ib2wgPT09IFwiLVwiIHx8IHN5bWJvbCA9PT0gXCIqXCIgfHwgc3ltYm9sID09PSBcIi9cIiB8fCBzeW1ib2wgPT09IFwiKFwiIHx8IHN5bWJvbCA9PT0gXCIpXCIgfHwgc3ltYm9sID09PSBcIixcIikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcInN5bWJvbFwiLFxuXHRcdFx0XHR2YWx1ZTogc3ltYm9sXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvcisrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgVHlwZWQgT00gbnVtZXJpYyB0b2tlbiBuZWFyIFwiJHtyZXN0fVwiYCk7XG5cdH1cblx0cmV0dXJuIHRva2Vucztcbn07XG52YXIgTnVtZXJpY1R5cGVkT01QYXJzZXIgPSBjbGFzcyB7XG5cdHRva2Vucztcblx0d2luO1xuXHRyZWFjdGl2ZUJ5TWFya2VyO1xuXHR0eXBlZEJ5TWFya2VyO1xuXHRpbmRleCA9IDA7XG5cdGxlYXZlcyA9IFtdO1xuXHRjb25zdHJ1Y3Rvcih0b2tlbnMsIHdpbiwgcmVhY3RpdmVCeU1hcmtlciwgdHlwZWRCeU1hcmtlcikge1xuXHRcdHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMud2luID0gd2luO1xuXHRcdHRoaXMucmVhY3RpdmVCeU1hcmtlciA9IHJlYWN0aXZlQnlNYXJrZXI7XG5cdFx0dGhpcy50eXBlZEJ5TWFya2VyID0gdHlwZWRCeU1hcmtlcjtcblx0fVxuXHRwYXJzZSgpIHtcblx0XHRjb25zdCByb290ID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdGlmICh0aGlzLmluZGV4ICE9PSB0aGlzLnRva2Vucy5sZW5ndGgpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgdHJhaWxpbmcgVHlwZWQgT00gZXhwcmVzc2lvblwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cm9vdCxcblx0XHRcdGxlYXZlczogdGhpcy5sZWF2ZXNcblx0XHR9O1xuXHR9XG5cdGN1cnJlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHR9XG5cdGNvbnN1bWUoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBUeXBlZCBPTSBleHByZXNzaW9uXCIpO1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH1cblx0Y29uc3VtZVN5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9XG5cdG1hdGNoZXNTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRyZXR1cm4gdG9rZW4/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHN5bWJvbDtcblx0fVxuXHRjcmVhdGVNYXRoKG5hbWUsIC4uLnZhbHVlcykge1xuXHRcdGNvbnN0IENvbnN0cnVjdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3IodGhpcy53aW4sIG5hbWUpO1xuXHRcdGlmICh0eXBlb2YgQ29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvciguLi52YWx1ZXMpO1xuXHR9XG5cdHBhcnNlU3VtKCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIHN1bSBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIrXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFN1bVwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgcmlnaHQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHBhcnNlUHJvZHVjdCgpIHtcblx0XHRsZXQgdmFsdWUgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiKlwiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCIvXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIHByb2R1Y3Qgb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiKlwiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhQcm9kdWN0XCIsIHZhbHVlLCByaWdodCk7XG5cdFx0XHRlbHNlIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhJbnZlcnRcIiwgcmlnaHQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHBhcnNlVW5hcnkoKSB7XG5cdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikpIHtcblx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VVbmFyeSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE5lZ2F0ZVwiLCB0aGlzLnBhcnNlVW5hcnkoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcnNlUHJpbWFyeSgpO1xuXHR9XG5cdHBhcnNlUHJpbWFyeSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kID09PSBcIm51bWJlclwiKSByZXR1cm4gY3JlYXRlVHlwZWRVbml0VmFsdWUodGhpcy53aW4sIHRva2VuLnVuaXQgPz8gXCJudW1iZXJcIiwgdG9rZW4udmFsdWUpO1xuXHRcdGlmICh0b2tlbi5raW5kID09PSBcInZhcmlhYmxlXCIpIHtcblx0XHRcdGNvbnN0IHJlYWN0aXZlID0gdGhpcy5yZWFjdGl2ZUJ5TWFya2VyLmdldCh0b2tlbi5tYXJrZXIpO1xuXHRcdFx0aWYgKHJlYWN0aXZlKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCIqXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2hlY2twb2ludCA9IHRoaXMuaW5kZXg7XG5cdFx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdFx0Y29uc3QgcmhzID0gdGhpcy5jdXJyZW50KCk7XG5cdFx0XHRcdFx0aWYgKHJocz8ua2luZCA9PT0gXCJudW1iZXJcIiAmJiByaHMudmFsdWUgPT09IDEgJiYgdHlwZW9mIHJocy51bml0ID09PSBcInN0cmluZ1wiICYmICghcmVhY3RpdmUubXVsdGlwbGllZEJ5VW5pdCB8fCByZWFjdGl2ZS5tdWx0aXBsaWVkQnlVbml0ID09PSByaHMudW5pdC50b0xvd2VyQ2FzZSgpKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBsZWFmID0gY3JlYXRlVHlwZWRVbml0VmFsdWUodGhpcy53aW4sIHJocy51bml0LnRvTG93ZXJDYXNlKCksIHJlYWRSZWFjdGl2ZU51bWJlcihyZWFjdGl2ZSkpO1xuXHRcdFx0XHRcdFx0dGhpcy5sZWF2ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHNsb3Q6IHJlYWN0aXZlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogbGVhZlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbGVhZjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5pbmRleCA9IGNoZWNrcG9pbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbGVhZiA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCBcIm51bWJlclwiLCByZWFkUmVhY3RpdmVOdW1iZXIocmVhY3RpdmUpKTtcblx0XHRcdFx0dGhpcy5sZWF2ZXMucHVzaCh7XG5cdFx0XHRcdFx0c2xvdDogcmVhY3RpdmUsXG5cdFx0XHRcdFx0dmFsdWU6IGxlYWZcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBsZWFmO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdHlwZWQgPSB0aGlzLnR5cGVkQnlNYXJrZXIuZ2V0KHRva2VuLm1hcmtlcik7XG5cdFx0XHRpZiAodHlwZWQpIHJldHVybiB0eXBlZC52YWx1ZTtcblx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5rbm93biBzdHlsZSBzbG90IFwiJHt0b2tlbi5tYXJrZXJ9XCJgKTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0b2tlbi52YWx1ZSk7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBUeXBlZCBPTSBudW1lcmljIHZhbHVlXCIpO1xuXHR9XG5cdHBhcnNlRnVuY3Rpb24obmFtZSkge1xuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwiY2FsY1wiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdGlmICghdGhpcy5tYXRjaGVzU3ltYm9sKFwiKVwiKSkge1xuXHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIsXCIpKSB7XG5cdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdGlmIChuYW1lID09PSBcIm1pblwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWluKCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWluXCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcIm1heFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWF4KCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWF4XCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcImNsYW1wXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJjbGFtcCgpIHJlcXVpcmVzIHRocmVlIHZhbHVlc1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoQ2xhbXBcIiwgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgVHlwZWQgT00gZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0fVxufTtcbnZhciBidWlsZE51bWVyaWNUeXBlZE9NVHJlZSA9IChjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKSA9PiB7XG5cdGNvbnN0IHJlYWN0aXZlQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCB0eXBlZEJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHJlYWN0aXZlU2xvdHMpIHJlYWN0aXZlQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHR5cGVkU2xvdHMpIHR5cGVkQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0cmV0dXJuIG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlcih0b2tlbml6ZU51bWVyaWNDU1MoY3NzVmFsdWUpLCB3aW4sIHJlYWN0aXZlQnlNYXJrZXIsIHR5cGVkQnlNYXJrZXIpLnBhcnNlKCk7XG59O1xudmFyIGlzVHJhbnNmb3JtU3R5bGVQcm9wZXJ0eSA9IChwcm9wZXJ0eSkgPT4ge1xuXHRyZXR1cm4gcHJvcGVydHkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJhbnNmb3JtXCI7XG59O1xudmFyIGJ1aWxkVHJhbnNmb3JtVHlwZWRPTVRyZWUgPSAoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cykgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSB0b2tlbml6ZU51bWVyaWNDU1MoY3NzVmFsdWUpO1xuXHRjb25zdCBsZWF2ZXMgPSBbXTtcblx0Y29uc3QgY29tcG9uZW50cyA9IFtdO1xuXHRjb25zdCByZWFjdGl2ZUJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgdHlwZWRCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiByZWFjdGl2ZVNsb3RzKSByZWFjdGl2ZUJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiB0eXBlZFNsb3RzKSB0eXBlZEJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdGNvbnN0IHplcm9QeCA9ICgpID0+IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJweFwiLCAwKTtcblx0Y29uc3Qgb25lTnVtYmVyID0gKCkgPT4gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAxKTtcblx0bGV0IGluZGV4ID0gMDtcblx0Y29uc3QgY3VycmVudCA9ICgpID0+IHRva2Vuc1tpbmRleF07XG5cdGNvbnN0IGNvbnN1bWUgPSAoKSA9PiB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuXHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIHRyYW5zZm9ybSBleHByZXNzaW9uXCIpO1xuXHRcdGluZGV4Kys7XG5cdFx0cmV0dXJuIHRva2VuO1xuXHR9O1xuXHRjb25zdCBjb25zdW1lU3ltYm9sID0gKHN5bWJvbCkgPT4ge1xuXHRcdGNvbnN0IHRva2VuID0gY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9O1xuXHRjb25zdCBwYXJzZUFyZ3VtZW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0ID0gaW5kZXg7XG5cdFx0bGV0IGRlcHRoID0gMDtcblx0XHR3aGlsZSAoaW5kZXggPCB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF07XG5cdFx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdFx0ZGVwdGgrKztcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIpXCIpIHtcblx0XHRcdFx0aWYgKGRlcHRoID09PSAwKSBicmVhaztcblx0XHRcdFx0ZGVwdGgtLTtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIsXCIgJiYgZGVwdGggPT09IDApIGJyZWFrO1xuXHRcdFx0aW5kZXgrKztcblx0XHR9XG5cdFx0Y29uc3Qgc2xpY2UgPSB0b2tlbnMuc2xpY2Uoc3RhcnQsIGluZGV4KTtcblx0XHRpZiAoc2xpY2UubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFbXB0eSB0cmFuc2Zvcm0gZnVuY3Rpb24gYXJndW1lbnRcIik7XG5cdFx0Y29uc3QgdHJlZSA9IG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlcihzbGljZSwgd2luLCByZWFjdGl2ZUJ5TWFya2VyLCB0eXBlZEJ5TWFya2VyKS5wYXJzZSgpO1xuXHRcdGxlYXZlcy5wdXNoKC4uLnRyZWUubGVhdmVzKTtcblx0XHRyZXR1cm4gdHJlZS5yb290O1xuXHR9O1xuXHRjb25zdCBwYXJzZUFyZ3VtZW50TGlzdCA9ICgpID0+IHtcblx0XHRjb25zdCBhcmdzID0gW107XG5cdFx0Y29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKCEoY3VycmVudCgpPy5raW5kID09PSBcInN5bWJvbFwiICYmIGN1cnJlbnQoKT8udmFsdWUgPT09IFwiKVwiKSkge1xuXHRcdFx0YXJncy5wdXNoKHBhcnNlQXJndW1lbnQoKSk7XG5cdFx0XHR3aGlsZSAoY3VycmVudCgpPy5raW5kID09PSBcInN5bWJvbFwiICYmIGN1cnJlbnQoKT8udmFsdWUgPT09IFwiLFwiKSB7XG5cdFx0XHRcdGNvbnN1bWUoKTtcblx0XHRcdFx0YXJncy5wdXNoKHBhcnNlQXJndW1lbnQoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdHJldHVybiBhcmdzO1xuXHR9O1xuXHRjb25zdCBjcmVhdGVDb21wb25lbnQgPSAobmFtZSwgYXJncykgPT4ge1xuXHRcdGNvbnN0IGN0b3IgPSAoY2xhc3NOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBjbGFzc05hbWUpO1xuXHRcdFx0aWYgKHR5cGVvZiBDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y2xhc3NOYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0XHRyZXR1cm4gQ3Rvcjtcblx0XHR9O1xuXHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZVwiOiB7XG5cdFx0XHRcdGNvbnN0IFRyYW5zbGF0ZSA9IGN0b3IoXCJDU1NUcmFuc2xhdGVcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBUcmFuc2xhdGUoYXJnc1swXSwgemVyb1B4KCkpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDIpIHJldHVybiBuZXcgVHJhbnNsYXRlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDMpIHJldHVybiBuZXcgVHJhbnNsYXRlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJ0cmFuc2xhdGUoKSBleHBlY3RzIDEuLjMgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGV4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKGFyZ3NbMF0sIHplcm9QeCgpKTtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGV5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKHplcm9QeCgpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGV6XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKHplcm9QeCgpLCB6ZXJvUHgoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRlM2RcIjpcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJ0cmFuc2xhdGUzZCgpIGV4cGVjdHMgMyBhcmdzXCIpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdGNhc2UgXCJzY2FsZVwiOiB7XG5cdFx0XHRcdGNvbnN0IFNjYWxlID0gY3RvcihcIkNTU1NjYWxlXCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgU2NhbGUoYXJnc1swXSwgYXJnc1swXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMikgcmV0dXJuIG5ldyBTY2FsZShhcmdzWzBdLCBhcmdzWzFdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAzKSByZXR1cm4gbmV3IFNjYWxlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJzY2FsZSgpIGV4cGVjdHMgMS4uMyBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInNjYWxleFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKGFyZ3NbMF0sIG9uZU51bWJlcigpKTtcblx0XHRcdGNhc2UgXCJzY2FsZXlcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShvbmVOdW1iZXIoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwic2NhbGV6XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkob25lTnVtYmVyKCksIG9uZU51bWJlcigpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJzY2FsZTNkXCI6XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwic2NhbGUzZCgpIGV4cGVjdHMgMyBhcmdzXCIpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZVwiOiB7XG5cdFx0XHRcdGNvbnN0IFJvdGF0ZSA9IGN0b3IoXCJDU1NSb3RhdGVcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBSb3RhdGUoYXJnc1swXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gNCkgcmV0dXJuIG5ldyBSb3RhdGUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInJvdGF0ZSgpIGV4cGVjdHMgMSBvciA0IGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwicm90YXRleFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShvbmVOdW1iZXIoKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicm90YXRleVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBvbmVOdW1iZXIoKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicm90YXRlelwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBvbmVOdW1iZXIoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicm90YXRlM2RcIjpcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoICE9PSA0KSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJyb3RhdGUzZCgpIGV4cGVjdHMgNCBhcmdzXCIpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0XHRcdGNhc2UgXCJza2V3XCI6IHtcblx0XHRcdFx0Y29uc3QgU2tldyA9IGN0b3IoXCJDU1NTa2V3XCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgU2tldyhhcmdzWzBdLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwiZGVnXCIsIDApKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAyKSByZXR1cm4gbmV3IFNrZXcoYXJnc1swXSwgYXJnc1sxXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInNrZXcoKSBleHBlY3RzIDEuLjIgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJza2V3eFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2tld1hcIikpKGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInNrZXd5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTa2V3WVwiKSkoYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicGVyc3BlY3RpdmVcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1BlcnNwZWN0aXZlXCIpKShhcmdzWzBdKTtcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgdHJhbnNmb3JtIGZ1bmN0aW9uIFwiJHtuYW1lfVwiYCk7XG5cdFx0fVxuXHR9O1xuXHR3aGlsZSAoaW5kZXggPCB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSBjb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwiaWRlbnRpZmllclwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIHRyYW5zZm9ybSBmdW5jdGlvbiBuYW1lXCIpO1xuXHRcdGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3VtZW50TGlzdCgpO1xuXHRcdGNvbXBvbmVudHMucHVzaChjcmVhdGVDb21wb25lbnQodG9rZW4udmFsdWUsIGFyZ3MpKTtcblx0fVxuXHRpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkVtcHR5IHRyYW5zZm9ybSBsaXN0XCIpO1xuXHRjb25zdCBDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIFwiQ1NTVHJhbnNmb3JtVmFsdWVcIik7XG5cdGlmICh0eXBlb2YgQ1NTVHJhbnNmb3JtVmFsdWVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDU1NUcmFuc2Zvcm1WYWx1ZSBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXHRyZXR1cm4ge1xuXHRcdHJvb3Q6IG5ldyBDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IoY29tcG9uZW50cyksXG5cdFx0bGVhdmVzXG5cdH07XG59O1xudmFyIGJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUgPSAocHJvcGVydHksIGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpID0+IHtcblx0aWYgKGlzVHJhbnNmb3JtU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eSkpIHJldHVybiBidWlsZFRyYW5zZm9ybVR5cGVkT01UcmVlKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpO1xuXHRyZXR1cm4gYnVpbGROdW1lcmljVHlwZWRPTVRyZWUoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cyk7XG59O1xudmFyIGFkZE11dGFibGVMZWF2ZXMgPSAodGFyZ2V0LCBsZWF2ZXMpID0+IHtcblx0Zm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0YXJnZXQuZ2V0KGxlYWYuc2xvdC5tYXJrZXIpO1xuXHRcdGlmIChjdXJyZW50KSBjdXJyZW50LnB1c2gobGVhZik7XG5cdFx0ZWxzZSB0YXJnZXQuc2V0KGxlYWYuc2xvdC5tYXJrZXIsIFtsZWFmXSk7XG5cdH1cbn07XG52YXIgYXR0YWNoTGVhZlRhcmdldHMgPSAobGVhdmVzLCBwcm9wZXJ0eSwgcm9vdCkgPT4ge1xuXHRyZXR1cm4gbGVhdmVzLm1hcCgobGVhZikgPT4gKHtcblx0XHRzbG90OiBsZWFmLnNsb3QsXG5cdFx0dmFsdWU6IGxlYWYudmFsdWUsXG5cdFx0cHJvcGVydHksXG5cdFx0cm9vdFxuXHR9KSk7XG59O1xudmFyIGFwcGx5U3R5bGVUZW1wbGF0ZSA9IChlbGVtZW50LCBjc3NUZXh0LCB0eXBlZFNsb3RzLCByZWFjdGl2ZVNsb3RzLCB2YXJpYWJsZXMsIGFuaW1hdGFibGVTbG90cykgPT4ge1xuXHRjb25zdCBwcm9iZSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0cHJvYmUuc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7XG5cdGFwcGx5Tm9ybWFsaXplZElubGluZVN0eWxlKGVsZW1lbnQsIFwiXCIpO1xuXHRjb25zdCB0YXJnZXQgPSBlbGVtZW50O1xuXHRjb25zdCBzdHlsZU1hcCA9IHRhcmdldC5hdHRyaWJ1dGVTdHlsZU1hcCA/PyB0YXJnZXQuc3R5bGVNYXA7XG5cdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzO1xuXHRjb25zdCBDU1NTdHlsZVZhbHVlQ3RvciA9IHdpbj8uQ1NTU3R5bGVWYWx1ZSA/PyBnbG9iYWxUaGlzLkNTU1N0eWxlVmFsdWU7XG5cdGNvbnN0IG11dGFibGVMZWF2ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCByZXF1aXJlZENTU1ZhcmlhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBbXTtcblx0Y29uc3QgcHJvcGVydHlNb2RlT3duZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgYW5pbWF0YWJsZVNsb3RzKSB7XG5cdFx0bGV0IHBsYW4gPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvYmUuc3R5bGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvYmUuc3R5bGUuaXRlbShpKTtcblx0XHRcdGNvbnN0IHBhcnNlZFZhbHVlID0gcHJvYmUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG5cdFx0XHRpZiAoaXNEaXJlY3RTbG90VmFsdWUocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyKSkge1xuXHRcdFx0XHRwbGFuID0ge1xuXHRcdFx0XHRcdG1vZGU6IFwicHJvcGVydHlcIixcblx0XHRcdFx0XHR0YXJnZXQ6IHByb3BlcnR5XG5cdFx0XHRcdH07XG5cdFx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZShzbG90LnZhbHVlLnZhbHVlKSk7XG5cdFx0XHRcdHByb3BlcnR5TW9kZU93bmVkLmFkZChwcm9wZXJ0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0KHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlciwgc2xvdC5tdWx0aXBsaWVkQnlVbml0KSkge1xuXHRcdFx0XHRwbGFuID0ge1xuXHRcdFx0XHRcdG1vZGU6IFwicHJvcGVydHlcIixcblx0XHRcdFx0XHR0YXJnZXQ6IHByb3BlcnR5LFxuXHRcdFx0XHRcdHVuaXQ6IHNsb3QubXVsdGlwbGllZEJ5VW5pdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUoc2xvdC52YWx1ZS52YWx1ZSwgc2xvdC5tdWx0aXBsaWVkQnlVbml0KSk7XG5cdFx0XHRcdHByb3BlcnR5TW9kZU93bmVkLmFkZChwcm9wZXJ0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIXBsYW4pIHtcblx0XHRcdGNvbnN0IGluaXRpYWxOdW1iZXIgPSBOdW1iZXIoc2xvdC52YWx1ZS52YWx1ZSkgfHwgMDtcblx0XHRcdGVuc3VyZVJlZ2lzdGVyZWROdW1iZXJQcm9wZXJ0eSh3aW4sIHNsb3QubWFya2VyLCBpbml0aWFsTnVtYmVyKTtcblx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc2xvdC5tYXJrZXIsIFN0cmluZyhpbml0aWFsTnVtYmVyKSk7XG5cdFx0XHRwbGFuID0ge1xuXHRcdFx0XHRtb2RlOiBcImN1c3RvbS1wcm9wZXJ0eVwiLFxuXHRcdFx0XHR0YXJnZXQ6IHNsb3QubWFya2VyXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRzdWJzY3JpcHRpb25zLnB1c2goc2xvdC52YWx1ZS5hdHRhY2goZWxlbWVudCwgcGxhbikpO1xuXHR9XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwcm9iZS5zdHlsZS5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb2JlLnN0eWxlLml0ZW0oaW5kZXgpO1xuXHRcdGlmIChwcm9wZXJ0eU1vZGVPd25lZC5oYXMocHJvcGVydHkpKSBjb250aW51ZTtcblx0XHRjb25zdCBwYXJzZWRWYWx1ZSA9IHByb2JlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuXHRcdGNvbnN0IHByaW9yaXR5ID0gcHJvYmUuc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdXNlZFR5cGVkU2xvdHMgPSB0eXBlZFNsb3RzLmZpbHRlcigoc2xvdCkgPT4gY29udGFpbnNNYXJrZXIocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyKSk7XG5cdFx0Y29uc3QgdXNlZFJlYWN0aXZlU2xvdHMgPSByZWFjdGl2ZVNsb3RzLmZpbHRlcigoc2xvdCkgPT4gY29udGFpbnNNYXJrZXIocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyKSk7XG5cdFx0aWYgKHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA9PT0gMCAmJiB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPT09IDApIHtcblx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHBhcnNlZFZhbHVlLCBwcmlvcml0eSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgY2FuVXNlVHlwZWRPTSA9IHN0eWxlTWFwPy5zZXQgJiYgIXByaW9yaXR5ICYmICFwcm9wZXJ0eS5zdGFydHNXaXRoKFwiLS1cIik7XG5cdFx0bGV0IGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IGZhbHNlO1xuXHRcdGlmIChjYW5Vc2VUeXBlZE9NICYmIHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA+IDApIHRyeSB7XG5cdFx0XHRjb25zdCBkaXJlY3RTbG90ID0gdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID09PSAxICYmIHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA9PT0gMCA/IHVzZWRSZWFjdGl2ZVNsb3RzWzBdIDogbnVsbDtcblx0XHRcdGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0KHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlciwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0KSkge1xuXHRcdFx0XHRjb25zdCBsaW5rZWRWYWx1ZSA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0LCByZWFkUmVhY3RpdmVOdW1iZXIoZGlyZWN0U2xvdCkpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGxpbmtlZFZhbHVlKTtcblx0XHRcdFx0YWRkTXV0YWJsZUxlYXZlcyhtdXRhYmxlTGVhdmVzLCBhdHRhY2hMZWFmVGFyZ2V0cyhbe1xuXHRcdFx0XHRcdHNsb3Q6IGRpcmVjdFNsb3QsXG5cdFx0XHRcdFx0dmFsdWU6IGxpbmtlZFZhbHVlXG5cdFx0XHRcdH1dLCBwcm9wZXJ0eSwgbGlua2VkVmFsdWUpKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RWYWx1ZShwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIpKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZFZhbHVlID0gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCByZWFkUmVhY3RpdmVOdW1iZXIoZGlyZWN0U2xvdCkpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGxpbmtlZFZhbHVlKTtcblx0XHRcdFx0YWRkTXV0YWJsZUxlYXZlcyhtdXRhYmxlTGVhdmVzLCBhdHRhY2hMZWFmVGFyZ2V0cyhbe1xuXHRcdFx0XHRcdHNsb3Q6IGRpcmVjdFNsb3QsXG5cdFx0XHRcdFx0dmFsdWU6IGxpbmtlZFZhbHVlXG5cdFx0XHRcdH1dLCBwcm9wZXJ0eSwgbGlua2VkVmFsdWUpKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRyZWUgPSBidWlsZFR5cGVkT01TdHlsZVZhbHVlKHByb3BlcnR5LCBwYXJzZWRWYWx1ZSwgd2luLCB1c2VkUmVhY3RpdmVTbG90cywgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIHRyZWUucm9vdCk7XG5cdFx0XHRcdGFkZE11dGFibGVMZWF2ZXMobXV0YWJsZUxlYXZlcywgYXR0YWNoTGVhZlRhcmdldHModHJlZS5sZWF2ZXMsIHByb3BlcnR5LCB0cmVlLnJvb3QpKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0aWYgKGFwcGxpZWRUaHJvdWdoVHlwZWRPTSkgY29udGludWU7XG5cdFx0aWYgKGNhblVzZVR5cGVkT00gJiYgdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID09PSAwICYmIHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA+IDApIHRyeSB7XG5cdFx0XHRjb25zdCBkaXJlY3RTbG90ID0gdXNlZFR5cGVkU2xvdHMubGVuZ3RoID09PSAxID8gdXNlZFR5cGVkU2xvdHNbMF0gOiBudWxsO1xuXHRcdFx0aWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VmFsdWUocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyKSkge1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGRpcmVjdFNsb3QudmFsdWUpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0KHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlciwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0KSkge1xuXHRcdFx0XHRjb25zdCBDU1NNYXRoUHJvZHVjdEN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIFwiQ1NTTWF0aFByb2R1Y3RcIik7XG5cdFx0XHRcdGlmICh0eXBlb2YgQ1NTTWF0aFByb2R1Y3RDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDU1NNYXRoUHJvZHVjdCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0XHRjb25zdCBwcm9kdWN0ID0gbmV3IENTU01hdGhQcm9kdWN0Q3RvcihkaXJlY3RTbG90LnZhbHVlLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCwgMSkpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIHByb2R1Y3QpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB0cmVlID0gYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZShwcm9wZXJ0eSwgcGFyc2VkVmFsdWUsIHdpbiwgW10sIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIHRyZWUucm9vdCk7XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdGNvbnN0IHJlY29uc3RydWN0ZWQgPSByZXBsYWNlVHlwZWRNYXJrZXJzKHBhcnNlZFZhbHVlLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0XHRcdFx0c2V0UGFyc2VkVHlwZWRWYWx1ZShzdHlsZU1hcCwgQ1NTU3R5bGVWYWx1ZUN0b3IsIHByb3BlcnR5LCByZWNvbnN0cnVjdGVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge31cblx0XHRpZiAoYXBwbGllZFRocm91Z2hUeXBlZE9NKSBjb250aW51ZTtcblx0XHRjb25zdCByZWNvbnN0cnVjdGVkID0gcmVwbGFjZVR5cGVkTWFya2VycyhwYXJzZWRWYWx1ZSwgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHJlY29uc3RydWN0ZWQsIHByaW9yaXR5KTtcblx0XHRmb3IgKGNvbnN0IHNsb3Qgb2YgdXNlZFJlYWN0aXZlU2xvdHMpIHJlcXVpcmVkQ1NTVmFyaWFibGVzLmFkZChzbG90Lm1hcmtlcik7XG5cdH1cblx0Zm9yIChjb25zdCBzbG90IG9mIHJlYWN0aXZlU2xvdHMpIHtcblx0XHRjb25zdCBsZWF2ZXMgPSBtdXRhYmxlTGVhdmVzLmdldChzbG90Lm1hcmtlcikgPz8gW107XG5cdFx0Y29uc3QgbmVlZHNDU1NWYXJpYWJsZSA9IHJlcXVpcmVkQ1NTVmFyaWFibGVzLmhhcyhzbG90Lm1hcmtlcik7XG5cdFx0aWYgKGxlYXZlcy5sZW5ndGggPT09IDAgJiYgIW5lZWRzQ1NTVmFyaWFibGUpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IGJpbmRXaXRoKGVsZW1lbnQsIHNsb3QubWFya2VyLCBzbG90LnZhbHVlLCBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobGVhdmVzLmxlbmd0aCA+IDApIHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHRWYWx1ZSA9IHJlYWRSZWFjdGl2ZU51bWJlcihzbG90KTtcblx0XHRcdFx0Y29uc3QgZGlydHlSb290cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcblx0XHRcdFx0XHRsZWFmLnZhbHVlLnZhbHVlID0gbmV4dFZhbHVlO1xuXHRcdFx0XHRcdGRpcnR5Um9vdHMuc2V0KGxlYWYucHJvcGVydHksIGxlYWYucm9vdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHN0eWxlTWFwPy5zZXQpIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcm9vdF0gb2YgZGlydHlSb290cykgc3R5bGVNYXAuc2V0KHByb3BlcnR5TmFtZSwgcm9vdCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRpZiAobmVlZHNDU1NWYXJpYWJsZSkgaGFuZGxlU3R5bGVDaGFuZ2UuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSk7XG5cdFx0c3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG5cdH1cblx0Zm9yIChjb25zdCBuYW1lIG9mIHJlcXVpcmVkQ1NTVmFyaWFibGVzKSB7XG5cdFx0aWYgKHJlYWN0aXZlU2xvdHMuc29tZSgoc2xvdCkgPT4gc2xvdC5tYXJrZXIgPT09IG5hbWUpKSBjb250aW51ZTtcblx0XHRjb25zdCB2YWx1ZSA9IHZhcmlhYmxlcy5nZXQobmFtZSk7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdHN1YnNjcmlwdGlvbnMucHVzaChiaW5kV2l0aChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaGFuZGxlU3R5bGVDaGFuZ2UpKTtcblx0fVxuXHRwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCk7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucykgc3Vic2NyaXB0aW9uPy4oKTtcblx0fTtcbn07XG52YXIgY29tcGxpbGVTdGF0aWNDU1NUZXh0ID0gKGZvclJldHVybikgPT4ge1xuXHRjb25zdCBbYXBwbHksIHByb3BlcnRpZXMsIHZhcmlhYmxlc10gPSBmb3JSZXR1cm47XG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRhcHBseShlbGVtZW50KTtcblx0cmV0dXJuIGVsZW1lbnQuc3R5bGUuY3NzVGV4dDtcbn07XG52YXIgUyA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcblx0Y29uc3QgdGVtcGxhdGVJZCA9IHN0eWxlVGVtcGxhdGVJZCsrO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gW107XG5cdGNvbnN0IHZhcmlhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHR5cGVkU2xvdHMgPSBbXTtcblx0Y29uc3QgcmVhY3RpdmVTbG90cyA9IFtdO1xuXHRjb25zdCBwYXJ0cyA9IFtdO1xuXHRjb25zdCBhbmltYXRhYmxlU2xvdHMgPSBbXTtcblx0Y29uc3QgY29uc3VtZWQgPSBuZXcgQXJyYXkoc3RyaW5ncy5sZW5ndGgpLmZpbGwoMCk7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdHJpbmdzLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdHBhcnRzLnB1c2goc3RyaW5nc1tpbmRleF0uc2xpY2UoY29uc3VtZWRbaW5kZXhdKSk7XG5cdFx0aWYgKGluZGV4ID49IHZhbHVlcy5sZW5ndGgpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2luZGV4XTtcblx0XHRjb25zdCBuZXh0VGV4dCA9IHN0cmluZ3NbaW5kZXggKyAxXSA/PyBcIlwiO1xuXHRcdGNvbnN0IGF0dGFjaGVkVW5pdCA9IHJlYWRBdHRhY2hlZENTU1VuaXQobmV4dFRleHQpO1xuXHRcdGlmIChpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRjb25zdCBtYXJrZXIgPSBgLS1mZXN0LXR5cGVkLSR7dGVtcGxhdGVJZH0tJHt0eXBlZFNsb3RzLmxlbmd0aH1gO1xuXHRcdFx0dHlwZWRTbG90cy5wdXNoKHtcblx0XHRcdFx0bWFya2VyLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bXVsdGlwbGllZEJ5VW5pdDogYXR0YWNoZWRVbml0Py5ub3JtYWxpemVkXG5cdFx0XHR9KTtcblx0XHRcdGlmIChhdHRhY2hlZFVuaXQpIHtcblx0XHRcdFx0cGFydHMucHVzaChgY2FsYyh2YXIoJHttYXJrZXJ9KSAqIDEke2F0dGFjaGVkVW5pdC5hdXRob3JlZH0pYCk7XG5cdFx0XHRcdGNvbnN1bWVkW2luZGV4ICsgMV0gKz0gYXR0YWNoZWRVbml0Lmxlbmd0aDtcblx0XHRcdH0gZWxzZSBwYXJ0cy5wdXNoKGB2YXIoJHttYXJrZXJ9KWApO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChpc0FuaW1hdGFibGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IG1hcmtlciA9IGAtLWZlc3QtYW5pbS0ke3RlbXBsYXRlSWR9LSR7YW5pbWF0YWJsZVNsb3RzLmxlbmd0aH1gO1xuXHRcdFx0aWYgKGF0dGFjaGVkVW5pdCkge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGBjYWxjKHZhcigke21hcmtlcn0pICogMSR7YXR0YWNoZWRVbml0LmF1dGhvcmVkfSlgKTtcblx0XHRcdFx0Y29uc3VtZWRbaW5kZXggKyAxXSArPSBhdHRhY2hlZFVuaXQubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHBhcnRzLnB1c2goYHZhcigke21hcmtlcn0pYCk7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYEBwcm9wZXJ0eSAke21hcmtlcn0geyBzeW50YXg6IFwiPG51bWJlcj5cIjsgaW5pdGlhbC12YWx1ZTogJHtOdW1iZXIodmFsdWUudmFsdWUpIHx8IDB9OyBpbmhlcml0czogZmFsc2U7IH07YCk7XG5cdFx0XHRhbmltYXRhYmxlU2xvdHMucHVzaCh7XG5cdFx0XHRcdG1hcmtlcixcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdG11bHRpcGxpZWRCeVVuaXQ6IGF0dGFjaGVkVW5pdD8ubm9ybWFsaXplZFxuXHRcdFx0fSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKGlzUmVhY3RpdmVTdHlsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgbWFya2VyID0gYC0tZmVzdC1yZWYtJHt0ZW1wbGF0ZUlkfS0ke3JlYWN0aXZlU2xvdHMubGVuZ3RofWA7XG5cdFx0XHRyZWFjdGl2ZVNsb3RzLnB1c2goe1xuXHRcdFx0XHRtYXJrZXIsXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRtdWx0aXBsaWVkQnlVbml0OiBhdHRhY2hlZFVuaXQ/Lm5vcm1hbGl6ZWRcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGF0dGFjaGVkVW5pdCkge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGBjYWxjKHZhcigke21hcmtlcn0pICogMSR7YXR0YWNoZWRVbml0LmF1dGhvcmVkfSlgKTtcblx0XHRcdFx0Y29uc3VtZWRbaW5kZXggKyAxXSArPSBhdHRhY2hlZFVuaXQubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHBhcnRzLnB1c2goYHZhcigke21hcmtlcn0pYCk7XG5cdFx0XHRjb25zdCBpbml0aWFsVmFsdWUgPSBnZXRSZWFjdGl2ZUluaXRpYWxOdW1iZXIodmFsdWUpO1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGBAcHJvcGVydHkgJHttYXJrZXJ9IHsgc3ludGF4OiBcIjxudW1iZXI+XCI7IGluaXRpYWwtdmFsdWU6ICR7aW5pdGlhbFZhbHVlfTsgaW5oZXJpdHM6IHRydWU7IH07YCk7XG5cdFx0XHR2YXJpYWJsZXMuc2V0KG1hcmtlciwgdmFsdWUpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUgIT0gbnVsbCAmJiBTdHJpbmcodmFsdWUpLnRyaW0oKSAhPT0gXCJcIikgcGFydHMucHVzaChTdHJpbmcodmFsdWUpKTtcblx0fVxuXHRjb25zdCBmb3JSZXR1cm4gPSBbXG5cdFx0KGVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBhcHBseVN0eWxlVGVtcGxhdGUoZWxlbWVudCwgcGFydHMuam9pbihcIlwiKSwgdHlwZWRTbG90cywgcmVhY3RpdmVTbG90cywgdmFyaWFibGVzLCBhbmltYXRhYmxlU2xvdHMpO1xuXHRcdH0sXG5cdFx0cHJvcGVydGllcyxcblx0XHR2YXJpYWJsZXNcblx0XTtcblx0Zm9yUmV0dXJuW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0Zm9yUmV0dXJuW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSAodHlwZSkgPT4ge1xuXHRcdGlmICh0eXBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdFx0cmV0dXJuIGZvclJldHVyblswXTtcblx0fTtcblx0Zm9yUmV0dXJuLnRvU3RyaW5nID0gKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdGZvclJldHVybi52YWx1ZU9mID0gKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3JSZXR1cm4sIFwiY3NzVGV4dFwiLCB7XG5cdFx0Z2V0OiAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKSxcblx0XHRzZXQ6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0Y29uc29sZS5sb2coXCJzZXQgY3NzVGV4dFwiLCB2YWx1ZSk7XG5cdFx0XHRjb25zdCBbYXBwbHksIHByb3BlcnRpZXMsIHZhcmlhYmxlc10gPSBmb3JSZXR1cm47XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGFwcGx5KGVsZW1lbnQpO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZVxuXHR9KTtcblx0cmV0dXJuIGZvclJldHVybjtcbn07XG52YXIgY3NzID0gKHN0cmluZ3MsIC4uLnZhbHVlcykgPT4ge1xuXHRyZXR1cm4gUyhzdHJpbmdzLCAuLi52YWx1ZXMpO1xufTtcbnZhciBzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzID0gKHNvdXJjZSwgYXR0cmlidXRlcykgPT4ge1xuXHRjb25zdCBzdHJpbmdzID0gW107XG5cdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRjb25zdCBwYXR0ZXJuID0gLyNcXHsoXFxkKylcXH0vZztcblx0bGV0IGN1cnNvciA9IDA7XG5cdGxldCBtYXRjaDtcblx0d2hpbGUgKChtYXRjaCA9IHBhdHRlcm4uZXhlYyhzb3VyY2UpKSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgYXR0cmlidXRlSW5kZXggPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcblx0XHRpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGF0dHJpYnV0ZUluZGV4KSB8fCBhdHRyaWJ1dGVJbmRleCA8IDApIGNvbnRpbnVlO1xuXHRcdHN0cmluZ3MucHVzaChzb3VyY2Uuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpO1xuXHRcdHZhbHVlcy5wdXNoKGF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdKTtcblx0XHRjdXJzb3IgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcblx0fVxuXHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cdHN0cmluZ3MucHVzaChzb3VyY2Uuc2xpY2UoY3Vyc29yKSk7XG5cdHJldHVybiB7XG5cdFx0c3RyaW5ncyxcblx0XHR2YWx1ZXNcblx0fTtcbn07XG52YXIgam9pblN0YXRpY0lubGluZVN0eWxlID0gKHN0cmluZ3MsIHZhbHVlcykgPT4ge1xuXHRsZXQgcmVzdWx0ID0gc3RyaW5nc1swXSA/PyBcIlwiO1xuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2luZGV4XTtcblx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcmVzdWx0ICs9IFN0cmluZyh2YWx1ZSk7XG5cdFx0cmVzdWx0ICs9IHN0cmluZ3NbaW5kZXggKyAxXSA/PyBcIlwiO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xudmFyIGNvbXBpbGVJbmxpbmVTdHlsZUF0dHJpYnV0ZSA9IChzb3VyY2UsIGF0dHJpYnV0ZXMpID0+IHtcblx0Y29uc3QgcGFyc2VkID0gc3BsaXRJbmxpbmVTdHlsZVBsYWNlaG9sZGVycyhzb3VyY2UsIGF0dHJpYnV0ZXMpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHsgc3RyaW5ncywgdmFsdWVzIH0gPSBwYXJzZWQ7XG5cdGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIChzdHJpbmdzWzBdID8/IFwiXCIpLnRyaW0oKSA9PT0gXCJcIiAmJiAoc3RyaW5nc1sxXSA/PyBcIlwiKS50cmltKCkgPT09IFwiXCIgJiYgIWlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uKHZhbHVlc1swXSkgJiYgIWlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZXNbMF0pKSB7XG5cdFx0aWYgKGlzU3R5bGVCaW5kaW5nKHZhbHVlc1swXSkpIHJldHVybiB7XG5cdFx0XHRraW5kOiBcInRlbXBsYXRlXCIsXG5cdFx0XHRiaW5kaW5nOiB2YWx1ZXNbMF1cblx0XHR9O1xuXHRcdHJldHVybiB7XG5cdFx0XHRraW5kOiBcImRpcmVjdFwiLFxuXHRcdFx0dmFsdWU6IHZhbHVlc1swXVxuXHRcdH07XG5cdH1cblx0aWYgKHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpIHx8IGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpKSByZXR1cm4ge1xuXHRcdGtpbmQ6IFwidGVtcGxhdGVcIixcblx0XHRiaW5kaW5nOiBTKHN0cmluZ3MsIC4uLnZhbHVlcylcblx0fTtcblx0aWYgKHZhbHVlcy5ldmVyeShpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbikpIHJldHVybiB7XG5cdFx0a2luZDogXCJzdGF0aWNcIixcblx0XHRjc3NUZXh0OiBqb2luU3RhdGljSW5saW5lU3R5bGUoc3RyaW5ncywgdmFsdWVzKVxuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGtpbmQ6IFwidGVtcGxhdGVcIixcblx0XHRiaW5kaW5nOiBTKHN0cmluZ3MsIC4uLnZhbHVlcylcblx0fTtcbn07XG52YXIgYmluZFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlZCkgPT4ge1xuXHRjb25zdCBhcHBseSA9IEFycmF5LmlzQXJyYXkoc3R5bGVkKSA/IHN0eWxlZFswXSA6IHN0eWxlZDtcblx0aWYgKHR5cGVvZiBhcHBseSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gKCkgPT4ge307XG5cdGNvbnN0IHJlc3VsdCA9IGFwcGx5KGVsZW1lbnQpO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJlc3VsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXN1bHQ/LnVuYmluZD8uKCk7XG5cdH07XG59O1xudmFyIGVuc3VyZVJlZ2lzdGVyZWROdW1iZXJQcm9wZXJ0eSA9ICh3aW4sIG5hbWUsIGluaXRpYWxWYWx1ZSkgPT4ge1xuXHRpZiAocmVnaXN0ZXJlZFByb3BlcnRpZXMuaGFzKG5hbWUpKSByZXR1cm47XG5cdHJlZ2lzdGVyZWRQcm9wZXJ0aWVzLmFkZChuYW1lKTtcblx0dHJ5IHtcblx0XHQod2luPy5DU1MgPz8gQ1NTKT8ucmVnaXN0ZXJQcm9wZXJ0eT8uKHtcblx0XHRcdG5hbWUsXG5cdFx0XHRzeW50YXg6IFwiPG51bWJlcj5cIixcblx0XHRcdGluaXRpYWxWYWx1ZTogU3RyaW5nKGluaXRpYWxWYWx1ZSksXG5cdFx0XHRpbmhlcml0czogZmFsc2Vcblx0XHR9KTtcblx0fSBjYXRjaCB7fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL0FuaW1hdGUudHNcbnZhciBwYXJzZVByb3BlcnR5TGlzdCA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGZyb21TdHJpbmcgPSBbXTtcblx0aWYgKHR5cGVvZiBvcHRpb25zLnByb3BlcnRpZXMgPT0gXCJzdHJpbmdcIikge1xuXHRcdGNvbnN0IHByb3BzID0gb3B0aW9ucy5wcm9wZXJ0aWVzPy50cmltPy4oKT8uc3BsaXQ/LihcIjtcIik7XG5cdFx0ZnJvbVN0cmluZy5wdXNoKC4uLkFycmF5LmZyb20ocHJvcHMgfHwgW10pPy5tYXA/LigoJHBhaXIpID0+IHtcblx0XHRcdGlmICgkcGFpcj8uaW5jbHVkZXM/LihcIjpcIikpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAoJHBhaXI/LnNwbGl0Py4oXCI6XCIpID8/IFtdKT8uc2xpY2U/LigxLCAtMSk/LmpvaW4/LihcIjpcIik7XG5cdFx0XHRcdHJldHVybiB7IFsoJHBhaXI/LlswXSk/LnRyaW0/LigpXTogdmFsdWU/LnRyaW0/LigpIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9KT8uZmlsdGVyPy4oKGEpID0+IGEgIT0gbnVsbCkgfHwgW10pO1xuXHR9XG5cdHJldHVybiBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3B0aW9ucy5wcm9wZXJ0aWVzKSA/IG9wdGlvbnMucHJvcGVydGllcyA6IGZyb21TdHJpbmcpO1xufTtcbnZhciBwYXJzZUFuaW1hdGlvblRlbXBsYXRlID0gKHN0cmluZ3MsIHZhbHVlcykgPT4ge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0bGV0IGZ1bGxUZXh0ID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZnVsbFRleHQgKz0gc3RyaW5nc1tpXTtcblx0XHRpZiAoaSA8IHZhbHVlcy5sZW5ndGgpIGZ1bGxUZXh0ICs9IGBfX1NMT1RfJHtpfV9fYDtcblx0fVxuXHRjb25zdCBkZWNsYXJhdGlvbnMgPSBmdWxsVGV4dC5zcGxpdChcIjtcIikubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuXHRmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuXHRcdGNvbnN0IGNvbG9uSW5kZXggPSBkZWNsYXJhdGlvbi5pbmRleE9mKFwiOlwiKTtcblx0XHRpZiAoY29sb25JbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGVjbGFyYXRpb24uc2xpY2UoMCwgY29sb25JbmRleCkudHJpbSgpO1xuXHRcdGNvbnN0IHZhbHVlVGV4dCA9IGRlY2xhcmF0aW9uLnNsaWNlKGNvbG9uSW5kZXggKyAxKS50cmltKCk7XG5cdFx0Y29uc3Qgc2xvdE1hdGNoID0gL19fU0xPVF8oXFxkKylfXy8uZXhlYyh2YWx1ZVRleHQpO1xuXHRcdGlmICghc2xvdE1hdGNoKSBjb250aW51ZTtcblx0XHRjb25zdCBzbG90VmFsdWUgPSB2YWx1ZXNbcGFyc2VJbnQoc2xvdE1hdGNoWzFdLCAxMCldO1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzbG90VmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBBXFxgJHtwcm9wZXJ0eX1cXGAgZXhwZWN0cyBhbiBhcnJheSBvZiB2YWx1ZXMsIGdvdCAke3R5cGVvZiBzbG90VmFsdWV9YCk7XG5cdFx0cHJvcGVydGllcy5zZXQocHJvcGVydHksIHtcblx0XHRcdHByb3BlcnR5LFxuXHRcdFx0dmFsdWVzOiBzbG90VmFsdWVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4geyBwcm9wZXJ0aWVzIH07XG59O1xudmFyIHByb2Nlc3NBbmltYXRpb25WYWx1ZXMgPSAodmFsdWVzKSA9PiB7XG5cdGNvbnN0IHJlc29sdmVkID0gW107XG5cdGNvbnN0IHJlYWN0aXZlSW5kaWNlcyA9IFtdO1xuXHRsZXQgaGFzUmVhY3RpdmUgPSBmYWxzZTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcblx0XHRpZiAoaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRoYXNSZWFjdGl2ZSA9IHRydWU7XG5cdFx0XHRyZWFjdGl2ZUluZGljZXMucHVzaChpKTtcblx0XHRcdHJlc29sdmVkLnB1c2godmFsdWUudmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgcmVzb2x2ZWQucHVzaCh2YWx1ZSk7XG5cdFx0ZWxzZSByZXNvbHZlZC5wdXNoKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHJlc29sdmVkLFxuXHRcdGhhc1JlYWN0aXZlLFxuXHRcdHJlYWN0aXZlSW5kaWNlc1xuXHR9O1xufTtcbnZhciBidWlsZFdlYkFuaW1hdGlvbktleWZyYW1lcyA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGdsb2JhbE9mZnNldHMgPSBvcHRpb25zPy5vZmZzZXRzO1xuXHRjb25zdCBwcm9wZXJ0eUxpc3QgPSBwYXJzZVByb3BlcnR5TGlzdChvcHRpb25zKTtcblx0aWYgKHByb3BlcnR5TGlzdC5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGFuaW1hdGFibGUgcHJvcGVydGllcyBmb3VuZCBpbiBBIHRlbXBsYXRlXCIpO1xuXHRjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heCguLi5wcm9wZXJ0eUxpc3QubWFwKChwKSA9PiBwLnZhbHVlcy5sZW5ndGgpKTtcblx0Y29uc3Qgb2Zmc2V0cyA9IChnbG9iYWxPZmZzZXRzPy5sZW5ndGggPiAxID8gZ2xvYmFsT2Zmc2V0cyA6IG51bGwpIHx8IEFycmF5LmZyb20oeyBsZW5ndGg6IG1heExlbmd0aCB9LCAoXywgaSkgPT4gaSAvIChtYXhMZW5ndGggLSAxKSk7XG5cdGNvbnN0IGZyYW1lcyA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZnJhbWUgPSB7IG9mZnNldDogb2Zmc2V0c1tpXSA/PyBpIC8gKG1heExlbmd0aCAtIDEpIH07XG5cdFx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdFx0Y29uc3QgeyByZXNvbHZlZCB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0XHRjb25zdCBrZWJhYlByb3AgPSBjYW1lbFRvS2ViYWIocHJvcC5wcm9wZXJ0eSk7XG5cdFx0XHRsZXQgdmFsdWUgPSByZXNvbHZlZFtNYXRoLm1pbihpLCByZXNvbHZlZC5sZW5ndGggLSAxKV07XG5cdFx0XHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0ZnJhbWVba2ViYWJQcm9wXSA9IHZhbHVlO1xuXHRcdH1cblx0XHRmcmFtZXMucHVzaChmcmFtZSk7XG5cdH1cblx0cmV0dXJuIGZyYW1lcztcbn07XG52YXIgYnVpbGRBbmltYXRpb25UaW1pbmcgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBkdXJhdGlvbiA9IHBhcnNlVGltZShvcHRpb25zLmR1cmF0aW9uID8/IDMwMCk7XG5cdGNvbnN0IGRlbGF5ID0gcGFyc2VUaW1lKG9wdGlvbnMuZGVsYXkgPz8gMCk7XG5cdGNvbnN0IGl0ZXJhdGlvbnMgPSBub3JtYWxpemVJdGVyYXRpb25Db3VudChvcHRpb25zLml0ZXJhdGlvbkNvdW50KTtcblx0cmV0dXJuIHtcblx0XHRkdXJhdGlvbixcblx0XHRkZWxheSxcblx0XHRjb21wb3NpdGU6IG9wdGlvbnMuY29tcG9zaXRlIHx8IFwicmVwbGFjZVwiLFxuXHRcdGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMgPT09IFwiSW5maW5pdHlcIiA/IEluZmluaXR5IDogaXRlcmF0aW9ucyxcblx0XHRmaWxsOiBvcHRpb25zLmZpbGxNb2RlID8/IFwibm9uZVwiLFxuXHRcdGRpcmVjdGlvbjogb3B0aW9ucy5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRlYXNpbmc6IHR5cGVvZiBvcHRpb25zLmVhc2luZyA9PT0gXCJzdHJpbmdcIiA/IG9wdGlvbnMuZWFzaW5nIDogXCJsaW5lYXJcIixcblx0XHR0aW1lbGluZTogb3B0aW9ucy50aW1lbGluZVxuXHR9O1xufTtcbnZhciBjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbiA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMpO1xuXHRjb25zdCBzdWJzY3JpcHRpb25zID0gW107XG5cdGNvbnN0IGZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhvcHRpb25zKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdGNvbnN0IHsgaGFzUmVhY3RpdmUsIHJlYWN0aXZlSW5kaWNlcyB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0aWYgKCFoYXNSZWFjdGl2ZSkgY29udGludWU7XG5cdFx0Zm9yIChjb25zdCBpbmRleCBvZiByZWFjdGl2ZUluZGljZXMpIHtcblx0XHRcdGNvbnN0IHJlYWN0aXZlVmFsdWUgPSBwcm9wLnZhbHVlc1tpbmRleF07XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBiaW5kV2l0aChlbGVtZW50LCBgLS1hbmltLSR7cHJvcC5wcm9wZXJ0eX0tJHtpbmRleH1gLCByZWFjdGl2ZVZhbHVlLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0ZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGltZSA9IGFuaW1hdGlvbi5jdXJyZW50VGltZTtcblx0XHRcdFx0YW5pbWF0aW9uLmVmZmVjdCA9IG5ldyBLZXlmcmFtZUVmZmVjdChlbGVtZW50LCBuZXdGcmFtZXMsIHRpbWluZyk7XG5cdFx0XHRcdGlmIChjdXJyZW50VGltZSAhPT0gbnVsbCkgYW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG5cdFx0XHR9KTtcblx0XHRcdHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHRcdH1cblx0fVxuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHRzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbixcblx0XHRjbGVhbnVwXG5cdH07XG59O1xudmFyIEEgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdHJldHVybiBwYXJzZUFuaW1hdGlvblRlbXBsYXRlKHN0cmluZ3MsIHZhbHVlcyk7XG59O1xudmFyIGRvQW5pbWF0aW9uID0gKGVsZW1lbnQsIGNvbmZpZywga2V5ZnJhbWVzKSA9PiB7XG5cdGlmIChwYXJzZVByb3BlcnR5TGlzdChjb25maWcpLnNvbWUoKHByb3ApID0+IHtcblx0XHRjb25zdCB7IGhhc1JlYWN0aXZlIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRyZXR1cm4gaGFzUmVhY3RpdmU7XG5cdH0pKSByZXR1cm4gY3JlYXRlUmVhY3RpdmVBbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0Y29uc3QgZnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMoY29uZmlnKTtcblx0Y29uc3QgdGltaW5nID0gYnVpbGRBbmltYXRpb25UaW1pbmcoY29uZmlnKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Y29uc3QgY2xlYW51cCA9ICgpID0+IHtcblx0XHRhbmltYXRpb24uY2FuY2VsKCk7XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YW5pbWF0aW9uLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgYW5pbWF0ZSA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLnByb3BlcnRpZXMpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHRocm93IG5ldyBUeXBlRXJyb3IoYGFuaW1hdGUoKSBleHBlY3RzIGFycmF5cyBvZiB2YWx1ZXMsIGdvdCAke3R5cGVvZiB2YWx1ZXN9IGZvciAke3Byb3BlcnR5fWApO1xuXHRcdHByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB7XG5cdFx0XHRwcm9wZXJ0eSxcblx0XHRcdHZhbHVlc1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCB7IC4uLm9wdGlvbnMgfSwgcHJvcGVydGllcyk7XG59O1xudmFyIGRlZmluZUFuaW1hdGlvbiA9IChvcHRpb25zKSA9PiB7XG5cdHJldHVybiAoZWxlbWVudCkgPT4ge1xuXHRcdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCBvcHRpb25zKTtcblx0fTtcbn07XG52YXIgc2VxdWVuY2VBbmltYXRpb25zID0gYXN5bmMgKGVsZW1lbnQsIHNlcXVlbmNlKSA9PiB7XG5cdGZvciAoY29uc3QgY29uZmlnIG9mIHNlcXVlbmNlKSB7XG5cdFx0Y29uc3QgeyBhbmltYXRpb24gfSA9IGRvQW5pbWF0aW9uKGVsZW1lbnQsIGNvbmZpZyk7XG5cdFx0YXdhaXQgYW5pbWF0aW9uLmZpbmlzaGVkO1xuXHR9XG59O1xudmFyIHBhcmFsbGVsQW5pbWF0aW9ucyA9IChlbGVtZW50LCBhbmltYXRpb25zKSA9PiB7XG5cdGNvbnN0IHJlc3VsdHMgPSBhbmltYXRpb25zLm1hcCgoY29uZmlnKSA9PiBkb0FuaW1hdGlvbihlbGVtZW50LCBjb25maWcpKTtcblx0Y29uc3QgY2xlYW51cCA9ICgpID0+IHtcblx0XHRyZXN1bHRzLmZvckVhY2goKHIpID0+IHIuY2xlYW51cCgpKTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRhbmltYXRpb25zOiByZXN1bHRzLm1hcCgocikgPT4gci5hbmltYXRpb24pLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgc3RhZ2dlckFuaW1hdGlvbiA9IChlbGVtZW50cywgb3B0aW9ucywgc3RhZ2dlckRlbGF5ID0gMTAwKSA9PiB7XG5cdHJldHVybiBlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgZGVsYXkgPSBwYXJzZVRpbWUob3B0aW9ucz8uZGVsYXkgPz8gMCkgKyBpbmRleCAqIHN0YWdnZXJEZWxheTtcblx0XHRyZXR1cm4gZG9BbmltYXRpb24oZWxlbWVudCwge1xuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdGRlbGF5XG5cdFx0fSk7XG5cdH0pO1xufTtcblxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBBLCBBTklNQVRBQkxFX0JSQU5ELCBBbmltYXRhYmxlVmFsdWUsIEJBS0VfQ0FURUdPUklFUywgQkFLRV9MQVlFUiwgQkFLRV9TQ1JFRU5fQUxTTywgQkFLRV9TQ1JFRU5fQUxTT19FWFBMT1JFUiwgQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUywgQkFLRV9TQ1JFRU5fQ0hST01FLCBCQUtFX1NDUkVFTl9NRURJQSwgQ1NTX0NPTE9SX1BST1BFUlRJRVMsIENTU19ESU1FTlNJT05fVU5JVFMsIENTU19ESU1FTlNJT05fVU5JVFNfTElTVCwgQ1NTX01PVElPTl9QUk9QRVJUSUVTLCBDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTLCBDU1NfVU5JVF9GQUNUT1JZX0FMSUFTRVMsIENTU19VTklUX1RPS0VOX1JFLCBERUZBVUxUX0NBQ0hFX01TLCBERUZBVUxUX0NBVEVHT1JJRVMsIEhPU1RfQ1NTX0ZBTExCQUNLLCBMQVlFUl9OQU1FLCBMQVlFUl9PUEVOLCBPV05FUiwgUywgU1RZTEVfVEhFTUVfQVRUUlMsIFNUWUxFX1RIRU1FX09CU0VSVkVfQVRUUlMsIFVYX0hPU1RfTEFZRVJTLCBVWF9QUkVMT0FEX0hPU1RfQ1NTLCBWRUVMQV9DQVNDQURFX0xBWUVSUywgVklFV0VSX0NTU19MQVlFUl9PUkRFUiwgVklFV0VSX1JVTlRJTUVfTEFZRVJTLCBhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQsIGFkb3B0ZWRBcHBsaWVkVGV4dCwgYWRvcHRlZEJsb2JNYXAsIGFkb3B0ZWRGaWxsZWQsIGFkb3B0ZWRMYXllck1hcCwgYWRvcHRlZE1hcCwgYWRvcHRlZFNlbGVjdG9yTWFwLCBhZG9wdGVkU2hhZG93TGF5ZXJNYXAsIGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCwgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUsIGFuaW1hdGFibGUsIGFuaW1hdGUsIGFwcGx5Tm9ybWFsaXplZElubGluZVN0eWxlLCBiYWtlQWxzb1F1ZXJpZXNGb3IsIGJha2VDb21wdXRlZFN0eWxlLCBiYWtlU2NyZWVuQ29sb3JzLCBiYWtlVGhlbWVGaW5nZXJwcmludCwgYmFrZWRDYWNoZSwgYmFrZWRGb2xsb3dlcnMsIGJha2VkTGl2ZSwgYmFrZWRTdHlsZXMsIGJpbmRTdHlsZSwgYmxvYlVSTE1hcCwgYnVpbGRCYWtlZENzc1RleHQsIGNhY2hlQmxvYkNvbnRlbnRNYXAsIGNhY2hlQ29udGVudE1hcCwgY2FjaGVNYXAsIGNvbGxlY3RCYWtlQWxzb0hvc3RzLCBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzLCBjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMsIGNvbXBpbGVJbmxpbmVTdHlsZUF0dHJpYnV0ZSwgY29udGFpbnNNYXJrZXIsIGNyZWF0ZVN0eWxlSWQsIGNyZWF0ZVR5cGVkVW5pdFZhbHVlLCBjc3MsIGNzc0VtcHR5TGF5ZXJSdWxlLCBjc3NJbXBvcnRXaXRoTGF5ZXIsIGNzc0xheWVyQmxvY2ssIGNzc0xheWVyT3JkZXIsIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQsIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCwgY3NzVW5pdENvbnN0cnVjdG9yTmFtZSwgY3NzVW5pdEZhY3RvcnlOYW1lLCBkZWZpbmVBbmltYXRpb24sIGRvQW5pbWF0aW9uLCBlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50LCBlbnN1cmVIb3N0U3R5bGVzLCBlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IsIGVzY2FwZUNTU0lkZW50aWZpZXIsIGVzY2FwZVJlZ0V4cCwgZmV0Y2hBbmRDYWNoZSwgZmV0Y2hBc0lubGluZSwgZ2V0QWRvcHRlZFN0eWxlUnVsZSwgZ2V0QmFrZWRTdHlsZSwgZ2V0RWxlbWVudFpvb20sIGdldE9yQ3JlYXRlTGF5ZXJSdWxlLCBnZXRQYWRkaW5nLCBnZXRQcm9wZXJ0eVZhbHVlLCBnZXRQeFZhbHVlLCBnZXRTdHlsZUxheWVyLCBnZXRTdHlsZVJ1bGUsIGdldFRyYW5zZm9ybSwgZ2V0VHJhbnNmb3JtT3JpZ2luLCBnZXRXaW5kb3dDb25zdHJ1Y3RvciwgaGFzVHlwZWRPTSwgaGFzaCwgaW52YWxpZGF0ZUJha2VkU3R5bGVzLCBpc0Fkb3B0ZWRTaGVldEVtcHR5LCBpc0FuaW1hdGFibGVWYWx1ZSwgaXNDb2xvclRva2VuLCBpc0Nzc0VsZW1lbnQsIGlzQ3NzTGF5ZXJOYW1lLCBpc0RvY3VtZW50LCBpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQsIGlzRWxlbWVudFZpc2libGUsIGlzTGF5ZXJCbG9ja1J1bGUsIGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSwgaXNSZWFjdGl2ZVN0eWxlVmFsdWUsIGlzU2Nyb2xsRHJpdmVuLCBpc1NoYWRvd1Jvb3QsIGlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uLCBpc1N0eWxlQmluZGluZywgaXNTdHlsZUhvc3QsIGlzU3R5bGVWYWx1ZSwgaXNVbml0VmFsdWUsIGlzVmlld0RyaXZlbiwgbGF5ZXJDb3VudGVyLCBsb2FkQXNBZG9wdGVkLCBsb2FkQmxvYlN0eWxlLCBsb2FkQ2FjaGVkU3R5bGVzLCBsb2FkSW5saW5lU3R5bGUsIGxvYWRTdHlsZVNoZWV0LCBtYWtlSG9zdExheWVyT3JkZXIsIG5vcm1hbGl6ZUNzc0ZvckxheWVyLCBub3JtYWxpemVJdGVyYXRpb25Db3VudCwgbm9ybWFsaXplSXRlcmF0aW9ucywgbm90aWZ5U3R5bGVUcmVlSG9zdHMsIG9ic2VydmVTdHlsZVRyZWUsIG9uU2Nyb2xsLCBvblZpZXcsIHBhcmFsbGVsQW5pbWF0aW9ucywgcGFyc2VMZW5ndGgsIHBhcnNlT3JpZ2luLCBwYXJzZVRpbWUsIHByZWxvYWRTdHlsZSwgcHJvbWlzZU9yRGlyZWN0LCBwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUsIHF1ZXJ5Rmlyc3REZWVwLCByZWFkQXR0YWNoZWRDU1NVbml0LCByZWFkU2hlZXRSdWxlQ291bnQsIHJlYmFrZUJhdGNoLCByZWJha2VDb21wdXRlZFN0eWxlLCByZWdpc3RlclN0eWxlVHJlZUhvb2ssIHJlZ2lzdGVyZWRQcm9wZXJ0aWVzLCByZWh5ZHJhdGVBZG9wdGVkU3R5bGVTaGVldHMsIHJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMsIHJlbW92ZUFkb3B0ZWQsIHNjaGVkdWxlQmFrZVNjcmVlbkNvbG9ycywgc2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzLCBzZXF1ZW5jZUFuaW1hdGlvbnMsIHNldFByb3BlcnR5LCBzZXRTdHlsZUluUnVsZSwgc2V0U3R5bGVQcm9wZXJ0eSwgc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrLCBzZXRTdHlsZVByb3BlcnR5VHlwZWQsIHNldFN0eWxlUnVsZSwgc2V0U3R5bGVSdWxlcywgc2V0U3R5bGVVUkwsIHN0YWdnZXJBbmltYXRpb24sIHN0cmlwQ3NzUHJlYW1ibGUsIHN0eWxlQ2FjaGUsIHN0eWxlRWxlbWVudENhY2hlLCBzdHlsZUZsdXNoUGVuZGluZywgc3R5bGVUcmVlSG9va3MsIHN0eWxlVHJlZU9ic2VydmVkLCBzdHlsZVRyZWVSb290cywgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCwgdW5iYWtlQ29tcHV0ZWRTdHlsZSwgdW5iYWtlU2NyZWVuQ29sb3JzLCB1bndyYXBDc3NMYXllciwgdXJsQ2FuUGFyc2UsIHZlZWxhQ2FzY2FkZU9yZGVyLCB3cmFwQ3NzTGF5ZXIgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGFBQUFDLElBQVcsUUFBQUMsSUFBTSxnQkFBQUMsSUFBYyxTQUFBQyxHQUFPLHVCQUFBQyxJQUFxQixtQkFBQUMsSUFBaUIsWUFBQUMsSUFBVSxjQUFBQyxJQUFZLFNBQUFDLElBQU8sZUFBQUMsSUFBYSxTQUFBQyxHQUFPLHFCQUFBQyxVQUF5QjtBQUM5SyxTQUFTLGlCQUFBQyxJQUFlLGtCQUFBQyxJQUFnQixZQUFBQyxVQUFnQjtBQUN4RCxTQUFTLG1CQUFBQyxJQUFpQixrQkFBQUMsSUFB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LCAiZGVyZWYiLCAiZ2V0T3JJbnNlcnRDb21wdXRlZCIsICJoYW5kbGVMaXN0ZW5lcnMiLCAiaGFzVmFsdWUiLCAiaXNOb3RFcXVhbCIsICJpc1ZhbCIsICJpc1ZhbHVlVW5pdCIsICJ0b1JlZiIsICJ0cnlTdHJpbmdBc051bWJlciIsICJEb3VibGVXZWFrTWFwIiwgImFkZFRvQ2FsbENoYWluIiwgImFmZmVjdGVkIiwgImhhbmRsZUF0dHJpYnV0ZSIsICJoYW5kbGVQcm9wZXJ0eSIsICJvYnNlcnZlQXR0cmlidXRlIiwgInNoYXJlZCIsICJrZXkiLCAiY3JlYXRlIiwgImJsb2JVUkxNYXAiLCAiY2FjaGVNYXAiLCAiY2FjaGVDb250ZW50TWFwIiwgImNhY2hlQmxvYkNvbnRlbnRNYXAiLCAiYWRvcHRlZFNlbGVjdG9yTWFwIiwgImFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCIsICJhZG9wdGVkTGF5ZXJNYXAiLCAiYWRvcHRlZFNoYWRvd0xheWVyTWFwIiwgImFkb3B0ZWRNYXAiLCAiYWRvcHRlZEJsb2JNYXAiLCAiYWRvcHRlZEFwcGxpZWRUZXh0IiwgImFkb3B0ZWRGaWxsZWQiLCAibGF5ZXJDb3VudGVyIiwgInN0eWxlVHJlZUhvb2tzIiwgInN0eWxlVHJlZU9ic2VydmVkIiwgInN0eWxlVHJlZVJvb3RzIiwgImJha2VkU3R5bGVzIiwgImJha2VkTGl2ZSIsICJiYWtlZENhY2hlIiwgInJlYmFrZUJhdGNoIiwgImJha2VkRm9sbG93ZXJzIiwgImFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlIiwgInN0eWxlQ2FjaGUiLCAic3R5bGVFbGVtZW50Q2FjaGUiLCAic3R5bGVGbHVzaFBlbmRpbmciLCAicmVnaXN0ZXJlZFByb3BlcnRpZXMiLCAiQ1NTX0RJTUVOU0lPTl9VTklUU19MSVNUIiwgIkNTU19ESU1FTlNJT05fVU5JVFMiLCAiQ1NTX1VOSVRfRkFDVE9SWV9BTElBU0VTIiwgIkNTU19VTklUX1RPS0VOX1JFIiwgIkNTU19DT0xPUl9QUk9QRVJUSUVTIiwgIkNTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMiLCAiQ1NTX01PVElPTl9QUk9QRVJUSUVTIiwgIlNUWUxFX1RIRU1FX0FUVFJTIiwgIlNUWUxFX1RIRU1FX09CU0VSVkVfQVRUUlMiLCAiQkFLRV9DQVRFR09SSUVTIiwgIlZFRUxBX0NBU0NBREVfTEFZRVJTIiwgIlVYX0hPU1RfTEFZRVJTIiwgIlZJRVdFUl9SVU5USU1FX0xBWUVSUyIsICJWSUVXRVJfQ1NTX0xBWUVSX09SREVSIiwgIkxBWUVSX05BTUUiLCAiTEFZRVJfT1BFTiIsICJPV05FUiIsICJIT1NUX0NTU19GQUxMQkFDSyIsICJCQUtFX0xBWUVSIiwgIkRFRkFVTFRfQ0FURUdPUklFUyIsICJERUZBVUxUX0NBQ0hFX01TIiwgIkJBS0VfU0NSRUVOX01FRElBIiwgIkJBS0VfU0NSRUVOX0NIUk9NRSIsICJCQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSIiwgIkJBS0VfU0NSRUVOX0FMU09fU0VUVElOR1MiLCAiQkFLRV9TQ1JFRU5fQUxTTyIsICJBTklNQVRBQkxFX0JSQU5EIiwgImhhc1R5cGVkT00iLCAiY3NzVW5pdEZhY3RvcnlOYW1lIiwgInVuaXQiLCAiY3NzVW5pdENvbnN0cnVjdG9yTmFtZSIsICJpc0Nzc0xheWVyTmFtZSIsICJuYW1lIiwgImNzc0VtcHR5TGF5ZXJSdWxlIiwgImxheWVyTmFtZSIsICJzdHJpcENzc1ByZWFtYmxlIiwgImNzcyIsICJvdXQiLCAiaSIsICJuZXh0IiwgImlzTGF5ZXJCbG9ja1J1bGUiLCAicnVsZSIsICJzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0IiwgImNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCIsICJwcm9taXNlT3JEaXJlY3QiLCAicHJvbWlzZSIsICJjYiIsICJpc1NoYWRvd1Jvb3QiLCAidmFsdWUiLCAiaXNEb2N1bWVudCIsICJpc0Nzc0VsZW1lbnQiLCAiZXNjYXBlQ1NTSWRlbnRpZmllciIsICJjaGFyIiwgInN0eWxlSWRDb3VudGVyIiwgImNyZWF0ZVN0eWxlSWQiLCAidXJsQ2FuUGFyc2UiLCAiaGFzaCIsICJzdHJpbmciLCAiaGFzaEJ1ZmZlciIsICJwYXJzZUxlbmd0aCIsICJzaXplIiwgInBhcnNlT3JpZ2luIiwgIm9yaWdpbiIsICJlbGVtZW50IiwgInZhbHVlcyIsICJwYXJzZVRpbWUiLCAidiIsICJmYWxsYmFjayIsICJ0IiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50IiwgImNvdW50IiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbnMiLCAibiIsICJpc1Njcm9sbERyaXZlbiIsICJpc1ZpZXdEcml2ZW4iLCAiaXNTdHlsZUhvc3QiLCAibm9kZSIsICJyZWFkU2hlZXRSdWxlQ291bnQiLCAic2hlZXQiLCAiaXNBZG9wdGVkU2hlZXRFbXB0eSIsICJpc0NvbG9yVG9rZW4iLCAiaXNFbGVtZW50VmlzaWJsZSIsICJlbCIsICJpc1N0eWxlQmluZGluZyIsICJzdHlsZXMiLCAiaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0IiwgImNzc1RleHQiLCAic291cmNlIiwgImNodW5rIiwgImRlY2xhcmF0aW9uIiwgImNvbG9uSW5kZXgiLCAicHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlIiwgInJhdyIsICJhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZSIsICJpc05hdGl2ZUNTU1N0eWxlVmFsdWUiLCAiQ1NTU3R5bGVWYWx1ZUN0b3IiLCAicHJvdG90eXBlIiwgImlzUmVhY3RpdmVTdHlsZVZhbHVlIiwgImlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uIiwgImVzY2FwZVJlZ0V4cCIsICJjb250YWluc01hcmtlciIsICJjc3NWYWx1ZSIsICJtYXJrZXIiLCAicmVhZEF0dGFjaGVkQ1NTVW5pdCIsICJ0ZXh0IiwgIm1hdGNoIiwgImF1dGhvcmVkIiwgIm5vcm1hbGl6ZWQiLCAiZ2V0V2luZG93Q29uc3RydWN0b3IiLCAid2luIiwgImNyZWF0ZVR5cGVkVW5pdFZhbHVlIiwgIkNTU05hbWVzcGFjZSIsICJmYWN0b3J5TmFtZSIsICJmYWN0b3J5IiwgIkNTU1VuaXRWYWx1ZUN0b3IiLCAiaXNTdHlsZVZhbHVlIiwgInZhbCIsICJpc1VuaXRWYWx1ZSIsICJxdWVyeUZpcnN0RGVlcCIsICJyb290IiwgInNlbGVjdG9yIiwgImRpcmVjdCIsICJzY29wZSIsICJoaXQiLCAiaW5uZXIiLCAiY3NzTGF5ZXJPcmRlciIsICJncm91cHMiLCAic2VlbiIsICJuYW1lcyIsICJncm91cCIsICJsaXN0IiwgInZlZWxhQ2FzY2FkZU9yZGVyIiwgIm1ha2VIb3N0TGF5ZXJPcmRlciIsICJleHRyYSIsICJjc3NMYXllckJsb2NrIiwgImJvZHkiLCAid3JhcENzc0xheWVyIiwgIm5vcm1hbGl6ZUNzc0ZvckxheWVyIiwgInRyaW1tZWQiLCAidW53cmFwT3V0ZXJMYXllckJsb2NrIiwgImV4cGVjdGVkTmFtZSIsICJvcGVuIiwgImRlcHRoIiwgImNoIiwgInVud3JhcENzc0xheWVyIiwgInN0cmlwcGVkIiwgImNzc0ltcG9ydFdpdGhMYXllciIsICJ1cmwiLCAibGF5ZXIiLCAiVVhfUFJFTE9BRF9IT1NUX0NTUyIsICJnZXRPckNyZWF0ZUxheWVyUnVsZSIsICJydWxlcyIsICJleGlzdGluZyIsICJydWxlSW5kZXgiLCAiY3JlYXRlZCIsICJ0b2tlbml6ZU51bWVyaWNDU1MkMSIsICJ0b2tlbnMiLCAiY3Vyc29yIiwgInJlc3QiLCAid2hpdGVzcGFjZSIsICJudW1iZXIiLCAidW5pdE1hdGNoIiwgImlkZW50aWZpZXIiLCAic3ltYm9sIiwgIk51bWVyaWNUeXBlZE9NUGFyc2VyJDEiLCAidG9rZW4iLCAiQ29uc3RydWN0b3IiLCAib3BlcmF0b3IiLCAicmlnaHQiLCAicGFyc2VUb1R5cGVkT00iLCAic2V0UHJvcGVydHlJZk5vdEVxdWFsIiwgInN0eWxlUmVmIiwgImtlYmFiIiwgImltcG9ydGFuY2UiLCAic2V0U3R5bGVQcm9wZXJ0eVR5cGVkIiwgInN0eWxlTWFwUmVmIiwgInNldFN0eWxlUHJvcGVydHlGYWxsYmFjayIsICJvbGQiLCAibmV3VmFsIiwgInBhcnNlZCIsICJtYXliZU51bSIsICJzZXRTdHlsZVByb3BlcnR5IiwgInNldFN0eWxlSW5SdWxlIiwgImdldFN0eWxlUnVsZSIsICJzZXRTdHlsZVJ1bGUiLCAicHJvcE5hbWUiLCAicHJvcFZhbHVlIiwgImxvYWRTdHlsZVNoZWV0IiwgImlubGluZSIsICJiYXNlIiwgImludGVncml0eSIsICJsb2FkIiwgImZldGNoQW5kQ2FjaGUiLCAic2V0U3R5bGVVUkwiLCAicmVzIiwgImVycm9yIiwgImxvYWRCbG9iU3R5bGUiLCAic3R5bGUiLCAibG9hZElubGluZVN0eWxlIiwgInJvb3RFbGVtZW50IiwgIlBMQUNFIiwgInNldFByb3BlcnR5IiwgInRhcmdldCIsICJwcmVsb2FkU3R5bGUiLCAibG9hZEFzQWRvcHRlZCIsICJyZW1lbWJlckFkb3B0ZWRUZXh0IiwgImNzc1RleHRGb3JBZG9wdGVkU2hlZXQiLCAic3RvcmVkIiwgIm1hcHBlZCIsICJlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50IiwgImFwcGx5QWRvcHRlZFN0eWxlVGV4dCIsICJtZXNzYWdlIiwgInNoZWV0Rm9yQmxvYiIsICJibG9iIiwgImxvYWRBc0Fkb3B0ZWRVbnNhZmUiLCAiY2FjaGVkIiwgImFwcGxpZWQiLCAibGF5ZXJXcmFwcGVkIiwgInJlbW92ZUFkb3B0ZWQiLCAiZmV0Y2hBc0lubGluZSIsICJjb2xsZWN0U3R5bGVIb3N0cyIsICJpbnRvIiwgImNoaWxkIiwgIm5vdGlmeVN0eWxlVHJlZUhvc3RzIiwgImhvc3RzIiwgInJlYXNvbiIsICJmbiIsICJyZWdpc3RlclN0eWxlVHJlZUhvb2siLCAib2JzZXJ2ZVN0eWxlVHJlZSIsICJvYnNlcnZlciIsICJyZWNvcmRzIiwgInJlYyIsICJzaGVldHMiLCAicmVoeWRyYXRlQ29uc3RydWN0YWJsZVNoZWV0cyIsICJjYW5QYXJzZSIsICJpZHgiLCAiZ2V0VHJhbnNmb3JtIiwgIm1hdHJpeCIsICJnZXRUcmFuc2Zvcm1PcmlnaW4iLCAiY3NzT3JpZ2luIiwgImdldFByb3BlcnR5VmFsdWUiLCAic3JjIiwgImNzIiwgImdldEVsZW1lbnRab29tIiwgInpvb20iLCAiY3VycmVudEVsZW1lbnQiLCAiY3VycmVudENTU1pvb20iLCAiZ2V0UHhWYWx1ZSIsICJnZXRQYWRkaW5nIiwgImF4aXMiLCAic3R5bGVFbGVtZW50IiwgInNldFN0eWxlUnVsZXMiLCAiY2xhc3NlcyIsICJhcmdzIiwgImdldFN0eWxlTGF5ZXIiLCAiZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yIiwgInN0eWxlSWQiLCAiam9pblNjb3BlZFNlbGVjdG9yIiwgImZpbmRTdHlsZVJ1bGUiLCAiZnVsbFNlbGVjdG9yIiwgImV4cGVjdGVkIiwgInJlcXVlc3RlZCIsICJhY3R1YWwiLCAiYmFzaXMiLCAiYmFzaXNFbGVtZW50IiwgInN0eWxlRWxlbWVudEdsb2JhbCIsICJydWxlSWQiLCAiYnVybCIsICJwcm9taXNlZCIsICJnZXRBZG9wdGVkU3R5bGVSdWxlIiwgImluU2hhZG93IiwgInRhcmdldEFkb3B0ZWRTaGVldHMiLCAic2VsZWN0b3JLZXkiLCAic2hhZG93TWFwIiwgImxheWVyUnVsZSIsICJzaGFkb3dMYXllck1hcCIsICJsYXllclJ1bGVJbmRleCIsICJyIiwgImludmFsaWRhdGlvblJlYWR5IiwgImxhc3RGaW5nZXJwcmludCIsICJyZWJha2VRdWV1ZWQiLCAibm9ybWFsaXplQ2F0ZWdvcmllcyIsICJjYXRlZ29yaWVzIiwgImNhY2hlS2V5Rm9yIiwgIm1lZGlhIiwgImJha2VUaGVtZUZpbmdlcnByaW50IiwgInBhcnRzIiwgImxvY2FsIiwgInRha2VQcm9wIiwgIkNPTE9SX1BST1BfU0VUIiwgImJha2VEZWNsUmFuayIsICJjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMiLCAic2V0IiwgImJ1aWxkQmFrZWRDc3NUZXh0IiwgImRlY2xhcmF0aW9ucyIsICJyb3dzIiwgImEiLCAiYiIsICJiYWtlZCIsICJjb2xsZWN0QmFrZVNjcmVlbkhvc3RzIiwgImNocm9tZSIsICJiYWtlQWxzb1F1ZXJpZXNGb3IiLCAiY29sbGVjdEJha2VBbHNvSG9zdHMiLCAicXVlcmllcyIsICJwaWVyY2VTaGFkb3ciLCAicm9vdFNlbCIsICJmaW5kIiwgInNlbCIsICJncm91cGVkIiwgInF1ZXJ5IiwgInEiLCAic2VscyIsICJhZG9wdGVkTGlzdCIsICJhc3NpZ25BZG9wdGVkIiwgImFkb3B0U2hlZXQiLCAidW5hZG9wdFNoZWV0IiwgIndyaXRlQmFrZWRDc3MiLCAicmVtZW1iZXJDYWNoZSIsICJjYWNoZU1zIiwgInByZXYiLCAiZW50cnkiLCAiZHJvcENhY2hlIiwgImNhY2hlS2V5IiwgImNsZWFyQWxsQ2FjaGUiLCAicGFya0Jha2VkIiwgInJlc3VtZUJha2VkIiwgImZpbmdlcnByaW50IiwgImJha2VDb21wdXRlZFN0eWxlIiwgImJha2VJTyIsICJlbnN1cmVCYWtlSU8iLCAiZW50cmllcyIsICJlbnN1cmVCYWtlZFJlY29yZCIsICJjYW5Db25zdHJ1Y3QiLCAiZmx1c2hSZWJha2UiLCAiYmF0Y2giLCAic2NoZWR1bGVSZWJha2UiLCAiaW52YWxpZGF0ZUJha2VkU3R5bGVzIiwgImVuc3VyZUJha2VJbnZhbGlkYXRpb24iLCAiaG9zdCIsICJvcHRpb25zIiwgInVuYmFrZUNvbXB1dGVkU3R5bGUiLCAia2VlcENhY2hlIiwgInJlYmFrZUNvbXB1dGVkU3R5bGUiLCAiZ2V0QmFrZWRTdHlsZSIsICJiYWtlU2NyZWVuQ29sb3JzIiwgIm9wdHMiLCAiZXh0cmFzIiwgImZvbGxvd2VycyIsICJ1bmJha2VTY3JlZW5Db2xvcnMiLCAic2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzIiwgInJ1biIsICJyZXRyeU1pc3MiLCAicGllcmNlIiwgInN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3ciLCAiYlRvIiwgImFkb3B0ZWRTaGVldHMiLCAibGl2ZSIsICJzIiwgImFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCIsICJlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayIsICJyZWh5ZHJhdGVBZG9wdGVkU3R5bGVTaGVldHMiLCAicmVzdG9yZSIsICJob3N0Q3NzVGV4dCIsICJ2aXNpdCIsICJjaGlsZHJlbiIsICJlbnN1cmVIb3N0U3R5bGVzIiwgImxvYWRDYWNoZWRTdHlsZXMiLCAic3R5bGVGbHVzaEJhdGNoIiwgInN0eWxlRmx1c2hTY2hlZHVsZWQiLCAic2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzIiwgInJlc29sdmVkU3JjIiwgIndlYWsiLCAiZSIsICJyZXN1bHQiLCAiYWRvcHRlZCIsICJhZGRBZG9wdGVkU2hlZXQiLCAidmFycyIsICJwcm9wcyIsICJiYW5rU3ltYm9sIiwgImJhbmsiLCAiZWxNYXBTeW1ib2wiLCAiZWxNYXAiLCAiYWxpdmVzU3ltYm9sIiwgImFsaXZlcyIsICJ1bnN1YiIsICIkYmVoYXZpb3IiLCAiaXNMaW5rZXJMaWtlIiwgIiRvYnNlcnZlSW5wdXQiLCAicmVmIiwgInByb3AiLCAid2VsIiwgInJmIiwgImN0cmxDYiIsICJfZXYiLCAiaGRsIiwgIiRvYnNlcnZlQXR0cmlidXRlIiwgInd2IiwgImF0dHJOYW1lIiwgIm11dGF0aW9uIiwgInZhbFJlZiIsICJyZVZhbCIsICJyZW1vdmVGcm9tQmFuayIsICJoYW5kbGVyIiwgImFkZFRvQmFuayIsICJmb3JMaW5rIiwgImJpbmRIYW5kbGVyIiwgIndpdGhPYnNlcnZlciIsICJsaW5rZXIiLCAiY29udHJvbGxlciIsICJ1biIsICJjdXJyIiwgIl9wIiwgInZhbHVlUmVmIiwgInNldFJlZiIsICJlbGVtZW50UmVmIiwgIl92YWwiLCAib2JzIiwgImJpbmRXaXRoIiwgImRlbGV0ZVN0eWxlUHJvcGVydHkiLCAiaGFuZGxlU3R5bGVDaGFuZ2UiLCAiYW5pbWF0YWJsZUlkIiwgIm9uU2Nyb2xsIiwgIm8iLCAib25WaWV3IiwgIkFuaW1hdGFibGVWYWx1ZSIsICIjc3RlcHMiLCAiI29wdGlvbnMiLCAiI2N1cnJlbnQiLCAiI3N1YnNjcmliZXJzIiwgIiNhdHRhY2htZW50cyIsICIjcmVzb2x2ZUVsZW1lbnRSZWYiLCAic2VsZiIsICIjZmluZE5lYXJlc3RTY3JvbGxlciIsICIjY3JlYXRlVGltZWxpbmUiLCAidHJpZ2dlciIsICJTY3JvbGxUaW1lbGluZUN0b3IiLCAiVmlld1RpbWVsaW5lQ3RvciIsICIjc3RhcnRUaW1lbGluZURyaXZlbiIsICJhdHRhY2htZW50IiwgInBsYW4iLCAidGltZWxpbmUiLCAiI3N0YXJ0VGltZWxpbmVGYWxsYmFjayIsICJ0aW1pbmciLCAiI2J1aWxkVGltaW5nIiwgImFuaW1hdGlvbiIsICIjYnVpbGRLZXlmcmFtZXMiLCAic3RlcHMiLCAiI3Jlc29sdmVTdGVwIiwgInNjcm9sbGVyIiwgInJhZklkIiwgImNvbXB1dGVQcm9ncmVzcyIsICJ2cCIsICJyZWN0IiwgInRvdGFsIiwgIm1heCIsICJsaXN0ZW5UYXJnZXQiLCAiaGludCIsICJzdGVwIiwgIm9mZnNldHMiLCAiZWFzaW5nIiwgImZyYW1lIiwgInN0YXJ0IiwgIiN0cmFja1Byb2dyZXNzIiwgIiN3aXJlVHJpZ2dlciIsICJsYXN0IiwgInJldmVyc2VPbkV4aXQiLCAicGxheUZvcndhcmQiLCAicGxheUJhY2t3YXJkIiwgImVudGVyIiwgImxlYXZlIiwgIm9uRW50ZXIiLCAib25MZWF2ZSIsICJmb3J3YXJkIiwgIm9uQ2xpY2siLCAiYXBwbHkiLCAidW5zdWJzY3JpYmUiLCAiI2VhY2giLCAiYXQiLCAicmF0ZSIsICJhbmltYXRhYmxlIiwgImlzQW5pbWF0YWJsZVZhbHVlIiwgInN0eWxlVGVtcGxhdGVJZCIsICJyZWFkUmVhY3RpdmVOdW1iZXIiLCAic2xvdCIsICJjdXJyZW50IiwgImdldFJlYWN0aXZlSW5pdGlhbE51bWJlciIsICJyZXBsYWNlVHlwZWRNYXJrZXJzIiwgInNsb3RzIiwgImlzRGlyZWN0U2xvdFZhbHVlIiwgImVzY2FwZWRNYXJrZXIiLCAic2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlIiwgImlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0IiwgImVzY2FwZWRVbml0IiwgInNldFBhcnNlZFR5cGVkVmFsdWUiLCAic3R5bGVNYXAiLCAicHJvcGVydHkiLCAidG9rZW5pemVOdW1lcmljQ1NTIiwgInZhcmlhYmxlIiwgIk51bWVyaWNUeXBlZE9NUGFyc2VyIiwgInJlYWN0aXZlQnlNYXJrZXIiLCAidHlwZWRCeU1hcmtlciIsICJyZWFjdGl2ZSIsICJjaGVja3BvaW50IiwgInJocyIsICJsZWFmIiwgInR5cGVkIiwgImJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlIiwgInJlYWN0aXZlU2xvdHMiLCAidHlwZWRTbG90cyIsICJpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkiLCAiYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZSIsICJsZWF2ZXMiLCAiY29tcG9uZW50cyIsICJ6ZXJvUHgiLCAib25lTnVtYmVyIiwgImluZGV4IiwgImNvbnN1bWUiLCAiY29uc3VtZVN5bWJvbCIsICJwYXJzZUFyZ3VtZW50IiwgInNsaWNlIiwgInRyZWUiLCAicGFyc2VBcmd1bWVudExpc3QiLCAiY3JlYXRlQ29tcG9uZW50IiwgImN0b3IiLCAiY2xhc3NOYW1lIiwgIkN0b3IiLCAiVHJhbnNsYXRlIiwgIlNjYWxlIiwgIlJvdGF0ZSIsICJTa2V3IiwgIkNTU1RyYW5zZm9ybVZhbHVlQ3RvciIsICJidWlsZFR5cGVkT01TdHlsZVZhbHVlIiwgImFkZE11dGFibGVMZWF2ZXMiLCAiYXR0YWNoTGVhZlRhcmdldHMiLCAiYXBwbHlTdHlsZVRlbXBsYXRlIiwgInZhcmlhYmxlcyIsICJhbmltYXRhYmxlU2xvdHMiLCAicHJvYmUiLCAibXV0YWJsZUxlYXZlcyIsICJyZXF1aXJlZENTU1ZhcmlhYmxlcyIsICJzdWJzY3JpcHRpb25zIiwgInByb3BlcnR5TW9kZU93bmVkIiwgInBhcnNlZFZhbHVlIiwgImluaXRpYWxOdW1iZXIiLCAiZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5IiwgInByaW9yaXR5IiwgInVzZWRUeXBlZFNsb3RzIiwgInVzZWRSZWFjdGl2ZVNsb3RzIiwgImNhblVzZVR5cGVkT00iLCAiYXBwbGllZFRocm91Z2hUeXBlZE9NIiwgImRpcmVjdFNsb3QiLCAibGlua2VkVmFsdWUiLCAiQ1NTTWF0aFByb2R1Y3RDdG9yIiwgInByb2R1Y3QiLCAicmVjb25zdHJ1Y3RlZCIsICJuZWVkc0NTU1ZhcmlhYmxlIiwgInN1YnNjcmlwdGlvbiIsICJuZXh0VmFsdWUiLCAiZGlydHlSb290cyIsICJwcm9wZXJ0eU5hbWUiLCAiY29tcGxpbGVTdGF0aWNDU1NUZXh0IiwgImZvclJldHVybiIsICJwcm9wZXJ0aWVzIiwgIlMiLCAic3RyaW5ncyIsICJ0ZW1wbGF0ZUlkIiwgImNvbnN1bWVkIiwgIm5leHRUZXh0IiwgImF0dGFjaGVkVW5pdCIsICJpbml0aWFsVmFsdWUiLCAidHlwZSIsICJzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzIiwgImF0dHJpYnV0ZXMiLCAicGF0dGVybiIsICJhdHRyaWJ1dGVJbmRleCIsICJqb2luU3RhdGljSW5saW5lU3R5bGUiLCAiY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlIiwgImJpbmRTdHlsZSIsICJzdHlsZWQiLCAicGFyc2VQcm9wZXJ0eUxpc3QiLCAiZnJvbVN0cmluZyIsICIkcGFpciIsICJwYXJzZUFuaW1hdGlvblRlbXBsYXRlIiwgImZ1bGxUZXh0IiwgInZhbHVlVGV4dCIsICJzbG90TWF0Y2giLCAic2xvdFZhbHVlIiwgInByb2Nlc3NBbmltYXRpb25WYWx1ZXMiLCAicmVzb2x2ZWQiLCAicmVhY3RpdmVJbmRpY2VzIiwgImhhc1JlYWN0aXZlIiwgImJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzIiwgImdsb2JhbE9mZnNldHMiLCAicHJvcGVydHlMaXN0IiwgIm1heExlbmd0aCIsICJwIiwgIl8iLCAiZnJhbWVzIiwgImtlYmFiUHJvcCIsICJidWlsZEFuaW1hdGlvblRpbWluZyIsICJkdXJhdGlvbiIsICJkZWxheSIsICJpdGVyYXRpb25zIiwgImNyZWF0ZVJlYWN0aXZlQW5pbWF0aW9uIiwgInJlYWN0aXZlVmFsdWUiLCAibmV3RnJhbWVzIiwgImN1cnJlbnRUaW1lIiwgInN1YiIsICJBIiwgImRvQW5pbWF0aW9uIiwgImNvbmZpZyIsICJrZXlmcmFtZXMiLCAiYW5pbWF0ZSIsICJkZWZpbmVBbmltYXRpb24iLCAic2VxdWVuY2VBbmltYXRpb25zIiwgInNlcXVlbmNlIiwgInBhcmFsbGVsQW5pbWF0aW9ucyIsICJhbmltYXRpb25zIiwgInJlc3VsdHMiLCAiY2xlYW51cCIsICJzdGFnZ2VyQW5pbWF0aW9uIiwgImVsZW1lbnRzIiwgInN0YWdnZXJEZWxheSJdCn0K
2318
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGUtbGliLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyAkYXZvaWRUcmlnZ2VyLCAkZ2V0VmFsdWUsIGNhbWVsVG9LZWJhYiwgZGVyZWYsIGdldE9ySW5zZXJ0Q29tcHV0ZWQsIGhhc1ZhbHVlLCBpc1ZhbCwgaXNWYWx1ZVVuaXQsIHRvUmVmLCB0cnlTdHJpbmdBc051bWJlciB9IGZyb20gXCJAZmVzdC1saWIvY29yZVwiO1xuaW1wb3J0IHsgYWRkVG9DYWxsQ2hhaW4sIGFmZmVjdGVkIH0gZnJvbSBcIkBmZXN0LWxpYi9vYmplY3RcIjtcblxuLy8jcmVnaW9uIHNyYy9tYXBzLnRzXG52YXIgc2hhcmVkID0gKGtleSwgY3JlYXRlKSA9PiBnbG9iYWxUaGlzW1N5bWJvbC5mb3Ioa2V5KV0gPz89IGNyZWF0ZSgpO1xudmFyIGJsb2JVUkxNYXAgPSBzaGFyZWQoXCJkb20udHNAYmxvYlVSTE1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgY2FjaGVNYXAgPSBzaGFyZWQoXCJkb20udHNAY2FjaGVNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgY2FjaGVDb250ZW50TWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlQ29udGVudE1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBjYWNoZUJsb2JDb250ZW50TWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlQmxvYkNvbnRlbnRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRTZWxlY3Rvck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkU2VsZWN0b3JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYWRvcHRlZExheWVyTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRMYXllck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbnZhciBhZG9wdGVkU2hhZG93TGF5ZXJNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZFNoYWRvd0xheWVyTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZEJsb2JNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEJsb2JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRBcHBsaWVkVGV4dCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkQXBwbGllZFRleHRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRGaWxsZWQgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEZpbGxlZFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgbGF5ZXJDb3VudGVyID0gc2hhcmVkKFwiZG9tLnRzQGxheWVyQ291bnRlclwiLCAoKSA9PiAwKTtcbnZhciBzdHlsZVRyZWVIb29rcyA9IHNoYXJlZChcImRvbS50c0BzdHlsZVRyZWVIb29rc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBzdHlsZVRyZWVPYnNlcnZlZCA9IHNoYXJlZChcImRvbS50c0BzdHlsZVRyZWVPYnNlcnZlZFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG52YXIgc3R5bGVUcmVlUm9vdHMgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlUm9vdHNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRTdHlsZXMgPSBzaGFyZWQoXCJzdHlsZS1saWJAYmFrZWRTdHlsZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYmFrZWRMaXZlID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkTGl2ZVwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbnZhciBiYWtlZENhY2hlID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgcmViYWtlQmF0Y2ggPSBzaGFyZWQoXCJzdHlsZS1saWJAcmViYWtlQmF0Y2hcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRGb2xsb3dlcnMgPSBzaGFyZWQoXCJzdHlsZS1saWJAYmFrZWRGb2xsb3dlcnNcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlID0gc2hhcmVkKFwibHVyLmVAYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlQ2FjaGUgPSBzaGFyZWQoXCJsdXIuZUBzdHlsZUNhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIHN0eWxlRWxlbWVudENhY2hlID0gc2hhcmVkKFwibHVyLmVAc3R5bGVFbGVtZW50Q2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlRmx1c2hQZW5kaW5nID0gc2hhcmVkKFwic3R5bGUtbGliQHN0eWxlRmx1c2hQZW5kaW5nXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpKTtcbnZhciByZWdpc3RlcmVkUHJvcGVydGllcyA9IHNoYXJlZChcInN0eWxlLWxpYkByZWdpc3RlcmVkUHJvcGVydGllc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbnN0YW50cy50c1xudmFyIENTU19ESU1FTlNJT05fVU5JVFNfTElTVCA9IFtcblx0XCIlXCIsXG5cdFwicHhcIixcblx0XCJjbVwiLFxuXHRcIm1tXCIsXG5cdFwicVwiLFxuXHRcImluXCIsXG5cdFwicGNcIixcblx0XCJwdFwiLFxuXHRcImVtXCIsXG5cdFwiZXhcIixcblx0XCJjaFwiLFxuXHRcImNhcFwiLFxuXHRcImljXCIsXG5cdFwibGhcIixcblx0XCJyZW1cIixcblx0XCJyZXhcIixcblx0XCJyY2hcIixcblx0XCJyY2FwXCIsXG5cdFwicmljXCIsXG5cdFwicmxoXCIsXG5cdFwidndcIixcblx0XCJ2aFwiLFxuXHRcInZpXCIsXG5cdFwidmJcIixcblx0XCJ2bWluXCIsXG5cdFwidm1heFwiLFxuXHRcInN2d1wiLFxuXHRcInN2aFwiLFxuXHRcInN2aVwiLFxuXHRcInN2YlwiLFxuXHRcInN2bWluXCIsXG5cdFwic3ZtYXhcIixcblx0XCJsdndcIixcblx0XCJsdmhcIixcblx0XCJsdmlcIixcblx0XCJsdmJcIixcblx0XCJsdm1pblwiLFxuXHRcImx2bWF4XCIsXG5cdFwiZHZ3XCIsXG5cdFwiZHZoXCIsXG5cdFwiZHZpXCIsXG5cdFwiZHZiXCIsXG5cdFwiZHZtaW5cIixcblx0XCJkdm1heFwiLFxuXHRcImNxd1wiLFxuXHRcImNxaFwiLFxuXHRcImNxaVwiLFxuXHRcImNxYlwiLFxuXHRcImNxbWluXCIsXG5cdFwiY3FtYXhcIixcblx0XCJkZWdcIixcblx0XCJncmFkXCIsXG5cdFwicmFkXCIsXG5cdFwidHVyblwiLFxuXHRcInNcIixcblx0XCJtc1wiLFxuXHRcImh6XCIsXG5cdFwia2h6XCIsXG5cdFwiZHBpXCIsXG5cdFwiZHBjbVwiLFxuXHRcImRwcHhcIixcblx0XCJ4XCIsXG5cdFwiZnJcIlxuXTtcbnZhciBDU1NfRElNRU5TSU9OX1VOSVRTID0gbmV3IFNldChDU1NfRElNRU5TSU9OX1VOSVRTX0xJU1QpO1xudmFyIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyA9IHtcblx0XCIlXCI6IFwicGVyY2VudFwiLFxuXHRxOiBcIlFcIixcblx0aHo6IFwiSHpcIixcblx0a2h6OiBcImtIelwiLFxuXHRmcjogXCJmbGV4XCJcbn07XG52YXIgQ1NTX1VOSVRfVE9LRU5fUkUgPSAvXiglfFthLXpBLVpdKykvO1xudmFyIENTU19DT0xPUl9QUk9QRVJUSUVTID0gW1xuXHRcImNvbG9yXCIsXG5cdFwiYmFja2dyb3VuZC1jb2xvclwiLFxuXHRcImJvcmRlci1jb2xvclwiLFxuXHRcImJvcmRlci10b3AtY29sb3JcIixcblx0XCJib3JkZXItcmlnaHQtY29sb3JcIixcblx0XCJib3JkZXItYm90dG9tLWNvbG9yXCIsXG5cdFwiYm9yZGVyLWxlZnQtY29sb3JcIixcblx0XCJvdXRsaW5lLWNvbG9yXCIsXG5cdFwiYWNjZW50LWNvbG9yXCIsXG5cdFwiY2FyZXQtY29sb3JcIixcblx0XCJ0ZXh0LWRlY29yYXRpb24tY29sb3JcIixcblx0XCJjb2x1bW4tcnVsZS1jb2xvclwiLFxuXHRcImZpbGxcIixcblx0XCJzdHJva2VcIixcblx0XCJmbG9vZC1jb2xvclwiLFxuXHRcImxpZ2h0aW5nLWNvbG9yXCIsXG5cdFwic3RvcC1jb2xvclwiXG5dO1xudmFyIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMgPSBbXG5cdFwiZm9udC1mYW1pbHlcIixcblx0XCJmb250LXNpemVcIixcblx0XCJmb250LXdlaWdodFwiLFxuXHRcImZvbnQtc3R5bGVcIixcblx0XCJmb250LXN0cmV0Y2hcIixcblx0XCJsaW5lLWhlaWdodFwiLFxuXHRcImxldHRlci1zcGFjaW5nXCIsXG5cdFwid29yZC1zcGFjaW5nXCJcbl07XG52YXIgQ1NTX01PVElPTl9QUk9QRVJUSUVTID0gW1xuXHRcInRyYW5zaXRpb24tZHVyYXRpb25cIixcblx0XCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLFxuXHRcImFuaW1hdGlvbi1kdXJhdGlvblwiLFxuXHRcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIlxuXTtcbnZhciBTVFlMRV9USEVNRV9BVFRSUyA9IFtcblx0XCJkYXRhLXRoZW1lXCIsXG5cdFwiZGF0YS1leHBsb3Jlci1jb2xvci1zY2hlbWVcIixcblx0XCJkYXRhLWNvbG9yLXNjaGVtZVwiLFxuXHRcInRoZW1lXCIsXG5cdFwiY29sb3Itc2NoZW1lXCJcbl07XG52YXIgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUyA9IFtcblx0Li4uU1RZTEVfVEhFTUVfQVRUUlMsXG5cdFwic3R5bGVcIixcblx0XCJjbGFzc1wiXG5dO1xudmFyIEJBS0VfQ0FURUdPUklFUyA9IFtcblx0XCJ0b2tlbnNcIixcblx0XCJjb2xvcnNcIixcblx0XCJ0eXBvZ3JhcGh5XCIsXG5cdFwibW90aW9uXCJcbl07XG52YXIgVkVFTEFfQ0FTQ0FERV9MQVlFUlMgPSBbXG5cdFwidG9rZW5zXCIsXG5cdFwiYmFzZVwiLFxuXHRcImxheW91dFwiLFxuXHRcImNvbXBvbmVudHNcIixcblx0XCJ1dGlsaXRpZXNcIixcblx0XCJ0aGVtZVwiLFxuXHRcIm92ZXJyaWRlc1wiLFxuXHRcInByaW50XCJcbl07XG52YXIgVVhfSE9TVF9MQVlFUlMgPSBbXCJ1eC1wcmVsb2FkXCIsIFwidXgtbGF5ZXJcIl07XG52YXIgVklFV0VSX1JVTlRJTUVfTEFZRVJTID0gW1xuXHRcInJzLW1kLWJhc2VcIixcblx0XCJycy1tZC1zeXN0ZW1cIixcblx0XCJycy1tZC1tb2R1bGVzXCIsXG5cdFwicnMtbWQtdXNlclwiLFxuXHRcInJzLW1kLXByaW50XCIsXG5cdFwicnMtbWQtdXNlci1wcmludFwiXG5dO1xudmFyIFZJRVdFUl9DU1NfTEFZRVJfT1JERVIgPSBWSUVXRVJfUlVOVElNRV9MQVlFUlM7XG52YXIgTEFZRVJfTkFNRSA9IC9eW2EtekEtWjAtOV8uLV0rJC87XG52YXIgTEFZRVJfT1BFTiA9IC9eQGxheWVyXFxzKyhbYS16QS1aMC05Xy4tXSspXFxzKlxcey87XG52YXIgT1dORVIgPSBcIkRPTVwiO1xudmFyIEhPU1RfQ1NTX0ZBTExCQUNLID0gXCJkYXRhLWdsaXQtaG9zdC1jc3NcIjtcbnZhciBCQUtFX0xBWUVSID0gXCJ1eC1iYWtlZFwiO1xudmFyIERFRkFVTFRfQ0FURUdPUklFUyA9IFtcImNvbG9yc1wiLCBcInRva2Vuc1wiXTtcbnZhciBERUZBVUxUX0NBQ0hFX01TID0gM2U0O1xudmFyIEJBS0VfU0NSRUVOX01FRElBID0gXCJzY3JlZW5cIjtcbnZhciBCQUtFX1NDUkVFTl9DSFJPTUUgPSBbXG5cdFwidWktd2luZG93LWZyYW1lXCIsXG5cdFwidWktbW9kYWxcIixcblx0XCJhcHAtYm94XCIsXG5cdFwiLnVpLW1vZGFsLWRpYWxvZ1wiLFxuXHRcIi51aS1tb2RhbC1wYW5lbFwiXG5dO1xudmFyIEJBS0VfU0NSRUVOX0FMU09fRVhQTE9SRVIgPSBbXG5cdFwiLnJvdy5jMi1zdXJmYWNlXCIsXG5cdFwiLnJvdy5jMi1zdXJmYWNlW2RhdGEta2luZD1kaXJlY3RvcnldXCIsXG5cdFwiLnJvdy5jMi1zdXJmYWNlW2RhdGEta2luZD1maWxlXVwiLFxuXHRcIi5yb3cuYzItc3VyZmFjZSAuYy5uYW1lXCIsXG5cdFwiLmZtLWdyaWQtaGVhZGVyXCJcbl07XG52YXIgQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUyA9IFtcblx0XCIuZmllbGRcIixcblx0XCIuZm9ybS1pbnB1dFwiLFxuXHRcIi5mb3JtLXNlbGVjdFwiLFxuXHRcIi5maWVsZC1jb250cm9sXCJcbl07XG52YXIgQkFLRV9TQ1JFRU5fQUxTTyA9IFsuLi5CQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSLCAuLi5CQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTXTtcbnZhciBBTklNQVRBQkxFX0JSQU5EID0gU3ltYm9sLmZvcihcImZlc3QuYW5pbWF0YWJsZVwiKTtcbnZhciBoYXNUeXBlZE9NID0gdHlwZW9mIENTU1N0eWxlVmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIENTU1VuaXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3V0aWxzLnRzXG52YXIgY3NzVW5pdEZhY3RvcnlOYW1lID0gKHVuaXQpID0+IENTU19VTklUX0ZBQ1RPUllfQUxJQVNFU1t1bml0LnRvTG93ZXJDYXNlKCldID8/IHVuaXQudG9Mb3dlckNhc2UoKTtcbnZhciBjc3NVbml0Q29uc3RydWN0b3JOYW1lID0gKHVuaXQpID0+IHVuaXQudG9Mb3dlckNhc2UoKSA9PT0gXCIlXCIgPyBcInBlcmNlbnRcIiA6IHVuaXQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0Nzc0xheWVyTmFtZSA9IChuYW1lKSA9PiBMQVlFUl9OQU1FLnRlc3QobmFtZSk7XG52YXIgY3NzRW1wdHlMYXllclJ1bGUgPSAobGF5ZXJOYW1lKSA9PiBgQGxheWVyICR7bGF5ZXJOYW1lfSB7fWA7XG52YXIgc3RyaXBDc3NQcmVhbWJsZSA9IChjc3MpID0+IHtcblx0bGV0IG91dCA9IFN0cmluZyhjc3MgfHwgXCJcIikudHJpbSgpO1xuXHRvdXQgPSBvdXQucmVwbGFjZSgvXihAY2hhcnNldFxccytbXjtdKztcXHMqKSsvaSwgXCJcIik7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdFx0Y29uc3QgbmV4dCA9IG91dC5yZXBsYWNlKC9eXFwvXFwqW1xcc1xcU10qP1xcKlxcL1xccyovLCBcIlwiKTtcblx0XHRpZiAobmV4dCA9PT0gb3V0KSBicmVhaztcblx0XHRvdXQgPSBuZXh0LnRyaW0oKTtcblx0fVxuXHRyZXR1cm4gb3V0O1xufTtcbnZhciBpc0xheWVyQmxvY2tSdWxlID0gKHJ1bGUpID0+IHR5cGVvZiBDU1NMYXllckJsb2NrUnVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBydWxlIGluc3RhbmNlb2YgQ1NTTGF5ZXJCbG9ja1J1bGU7XG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCA9ICgpID0+IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBnbG9iYWxUaGlzLkNTU1N0eWxlU2hlZXQgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQgPSAoY3NzKSA9PiB0eXBlb2YgY3NzID09PSBcInN0cmluZ1wiICYmIC9AaW1wb3J0XFxiL2kudGVzdChjc3MpO1xudmFyIHByb21pc2VPckRpcmVjdCA9IChwcm9taXNlLCBjYikgPT4ge1xuXHRpZiAodHlwZW9mIHByb21pc2U/LnRoZW4gPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gcHJvbWlzZT8udGhlbj8uKGNiKTtcblx0cmV0dXJuIGNiKHByb21pc2UpO1xufTtcbnZhciBpc1NoYWRvd1Jvb3QgPSAodmFsdWUpID0+IHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbnZhciBpc0RvY3VtZW50ID0gKHZhbHVlKSA9PiB0eXBlb2YgRG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEb2N1bWVudDtcbnZhciBpc0Nzc0VsZW1lbnQgPSAodmFsdWUpID0+IHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudDtcbnZhciBlc2NhcGVDU1NJZGVudGlmaWVyID0gKHZhbHVlKSA9PiB7XG5cdGlmICh0eXBlb2YgQ1NTICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBDU1MuZXNjYXBlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBDU1MuZXNjYXBlKHZhbHVlKTtcblx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpLm1hcCgoY2hhcikgPT4gYFxcXFwke2NoYXIuY29kZVBvaW50QXQoMCkudG9TdHJpbmcoMTYpfSBgKS5qb2luKFwiXCIpO1xufTtcbnZhciBzdHlsZUlkQ291bnRlciA9IDA7XG52YXIgY3JlYXRlU3R5bGVJZCA9ICgpID0+IHtcblx0aWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuXHRyZXR1cm4gYHV4LSR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7KCsrc3R5bGVJZENvdW50ZXIpLnRvU3RyaW5nKDM2KX1gO1xufTtcbnZhciB1cmxDYW5QYXJzZSA9ICh2YWx1ZSkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiB0eXBlb2YgVVJMICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkwuY2FuUGFyc2UgPT09IFwiZnVuY3Rpb25cIiAmJiBVUkwuY2FuUGFyc2UodmFsdWUpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgaGFzaCA9IGFzeW5jIChzdHJpbmcpID0+IHtcblx0Y29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0bz8uc3VidGxlPy5kaWdlc3QoXCJTSEEtMjU2XCIsIHR5cGVvZiBzdHJpbmcgPT0gXCJzdHJpbmdcIiA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHJpbmcpIDogc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBzdHJpbmcgOiBhd2FpdCBzdHJpbmc/LmFycmF5QnVmZmVyPy4oKSk7XG5cdHJldHVybiBcInNoYTI1Ni1cIiArIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSkpO1xufTtcbnZhciBwYXJzZUxlbmd0aCA9ICh2YWx1ZSwgc2l6ZSkgPT4ge1xuXHRpZiAodmFsdWUuZW5kc1dpdGgoXCIlXCIpKSByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAgKiBzaXplKCk7XG5cdHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbn07XG52YXIgcGFyc2VPcmlnaW4gPSAob3JpZ2luLCBlbGVtZW50KSA9PiB7XG5cdGNvbnN0IHZhbHVlcyA9IG9yaWdpbi5zcGxpdChcIiBcIik7XG5cdHJldHVybiBuZXcgRE9NUG9pbnQocGFyc2VMZW5ndGgodmFsdWVzWzBdLCAoKSA9PiBlbGVtZW50LmNsaWVudFdpZHRoKSwgcGFyc2VMZW5ndGgodmFsdWVzWzFdLCAoKSA9PiBlbGVtZW50LmNsaWVudEhlaWdodCkpO1xufTtcbnZhciBwYXJzZVRpbWUgPSAodiwgZmFsbGJhY2sgPSAwKSA9PiB7XG5cdGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHY7XG5cdGlmICghdikgcmV0dXJuIGZhbGxiYWNrO1xuXHRjb25zdCB0ID0gU3RyaW5nKHYpLnRyaW0oKTtcblx0aWYgKHQuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHBhcnNlRmxvYXQodCk7XG5cdGlmICh0LmVuZHNXaXRoKFwic1wiKSkgcmV0dXJuIHBhcnNlRmxvYXQodCkgKiAxZTM7XG5cdHJldHVybiBwYXJzZUZsb2F0KHQpIHx8IGZhbGxiYWNrO1xufTtcbnZhciBub3JtYWxpemVJdGVyYXRpb25Db3VudCA9IChjb3VudCkgPT4ge1xuXHRpZiAoY291bnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG5cdGlmIChjb3VudCA9PT0gLTEgfHwgY291bnQgPT09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG5cdHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGNvdW50KSk7XG59O1xudmFyIG5vcm1hbGl6ZUl0ZXJhdGlvbnMgPSAobikgPT4gbiA9PT0gLTEgfHwgbiA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IE1hdGgubWF4KDEsIG4gPz8gMSk7XG52YXIgaXNTY3JvbGxEcml2ZW4gPSAodCkgPT4gdCAhPSBudWxsICYmIHR5cGVvZiB0ID09PSBcIm9iamVjdFwiICYmIHQua2luZCA9PT0gXCJzY3JvbGxcIjtcbnZhciBpc1ZpZXdEcml2ZW4gPSAodCkgPT4gdCAhPSBudWxsICYmIHR5cGVvZiB0ID09PSBcIm9iamVjdFwiICYmIHQua2luZCA9PT0gXCJ2aWV3XCI7XG52YXIgaXNTdHlsZUhvc3QgPSAobm9kZSkgPT4ge1xuXHRpZiAoIW5vZGUgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoU3RyaW5nKG5vZGUubG9jYWxOYW1lIHx8IFwiXCIpLmluY2x1ZGVzKFwiLVwiKSkgcmV0dXJuIHRydWU7XG5cdGlmIChub2RlLnNoYWRvd1Jvb3QpIHJldHVybiB0cnVlO1xuXHRpZiAobm9kZS5zdHlsZXMgIT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgcmVhZFNoZWV0UnVsZUNvdW50ID0gKHNoZWV0KSA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHNoZWV0LmNzc1J1bGVzLmxlbmd0aDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG52YXIgaXNBZG9wdGVkU2hlZXRFbXB0eSA9IChzaGVldCkgPT4ge1xuXHRpZiAoIXNoZWV0KSByZXR1cm4gdHJ1ZTtcblx0Y29uc3QgY291bnQgPSByZWFkU2hlZXRSdWxlQ291bnQoc2hlZXQpO1xuXHRpZiAoY291bnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIGNvdW50ID09PSAwO1xufTtcbnZhciBpc0NvbG9yVG9rZW4gPSAobmFtZSkgPT4gbmFtZSA9PT0gXCItLWJhc2UtY29sb3JcIiB8fCBuYW1lLnN0YXJ0c1dpdGgoXCItLWNvbG9yLVwiKSB8fCBuYW1lLmVuZHNXaXRoKFwiLWNvbG9yXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCItZmdcIikgfHwgbmFtZS5lbmRzV2l0aChcIi1iZ1wiKTtcbnZhciBpc0VsZW1lbnRWaXNpYmxlID0gKGVsKSA9PiB7XG5cdGlmICghZWwuaXNDb25uZWN0ZWQpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBlbC5nZXRDbGllbnRSZWN0cyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZWwuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcbnZhciBpc1N0eWxlQmluZGluZyA9IChzdHlsZXMpID0+IHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkoc3R5bGVzKSAmJiB0eXBlb2Ygc3R5bGVzWzBdID09PSBcImZ1bmN0aW9uXCI7XG59O1xudmFyIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCA9IChjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IHNvdXJjZSA9IHR5cGVvZiBjc3NUZXh0ID09PSBcInN0cmluZ1wiID8gY3NzVGV4dC50cmltKCkgOiBcIlwiO1xuXHRpZiAoIXNvdXJjZSkgcmV0dXJuIHRydWU7XG5cdGZvciAoY29uc3QgY2h1bmsgb2Ygc291cmNlLnNwbGl0KFwiO1wiKSkge1xuXHRcdGNvbnN0IGRlY2xhcmF0aW9uID0gY2h1bmsudHJpbSgpO1xuXHRcdGlmICghZGVjbGFyYXRpb24pIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGNvbG9uSW5kZXggPSBkZWNsYXJhdGlvbi5pbmRleE9mKFwiOlwiKTtcblx0XHRpZiAoY29sb25JbmRleCA8IDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoZGVjbGFyYXRpb24uc2xpY2UoY29sb25JbmRleCArIDEpLnRyaW0oKS5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xudmFyIHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSA9IChlbGVtZW50KSA9PiB7XG5cdGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcblx0Y29uc3QgcmF3ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0aWYgKHJhdyA9PSBudWxsKSByZXR1cm47XG5cdGlmIChpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQocmF3KSkge1xuXHRcdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG5cdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0fVxufTtcbnZhciBhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZSA9IChlbGVtZW50LCBjc3NUZXh0KSA9PiB7XG5cdGlmIChpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQoY3NzVGV4dCkpIHtcblx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuXHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7XG59O1xudmFyIGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRjb25zdCBDU1NTdHlsZVZhbHVlQ3RvciA9IGdsb2JhbFRoaXMuQ1NTU3R5bGVWYWx1ZTtcblx0XHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBDU1NTdHlsZVZhbHVlQ3RvcikgcmV0dXJuIHRydWU7XG5cdFx0Zm9yIChsZXQgcHJvdG90eXBlID0gdmFsdWU7IHByb3RvdHlwZTsgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkpIGlmIChwcm90b3R5cGU/LmNvbnN0cnVjdG9yPy5uYW1lID09PSBcIkNTU1N0eWxlVmFsdWVcIikgcmV0dXJuIHRydWU7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciBpc1JlYWN0aXZlU3R5bGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdHJldHVybiBcInZhbHVlXCIgaW4gdmFsdWU7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbiA9ICh2YWx1ZSkgPT4ge1xuXHRyZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCI7XG59O1xudmFyIGVzY2FwZVJlZ0V4cCA9ICh2YWx1ZSkgPT4ge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufTtcbnZhciBjb250YWluc01hcmtlciA9IChjc3NWYWx1ZSwgbWFya2VyKSA9PiB7XG5cdHJldHVybiBuZXcgUmVnRXhwKGB2YXJcXFxcKFxcXFxzKiR7ZXNjYXBlUmVnRXhwKG1hcmtlcil9XFxcXHMqXFxcXClgKS50ZXN0KGNzc1ZhbHVlKTtcbn07XG52YXIgcmVhZEF0dGFjaGVkQ1NTVW5pdCA9ICh0ZXh0KSA9PiB7XG5cdGNvbnN0IG1hdGNoID0gQ1NTX1VOSVRfVE9LRU5fUkUuZXhlYyh0ZXh0KTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IGF1dGhvcmVkID0gbWF0Y2hbMF07XG5cdGNvbnN0IG5vcm1hbGl6ZWQgPSBhdXRob3JlZC50b0xvd2VyQ2FzZSgpO1xuXHRpZiAoIUNTU19ESU1FTlNJT05fVU5JVFMuaGFzKG5vcm1hbGl6ZWQpKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHtcblx0XHRhdXRob3JlZCxcblx0XHRub3JtYWxpemVkLFxuXHRcdGxlbmd0aDogYXV0aG9yZWQubGVuZ3RoXG5cdH07XG59O1xudmFyIGdldFdpbmRvd0NvbnN0cnVjdG9yID0gKHdpbiwgbmFtZSkgPT4ge1xuXHRyZXR1cm4gd2luPy5bbmFtZV0gPz8gZ2xvYmFsVGhpcz8uW25hbWVdO1xufTtcbnZhciBjcmVhdGVUeXBlZFVuaXRWYWx1ZSA9ICh3aW4sIHVuaXQsIHZhbHVlKSA9PiB7XG5cdGNvbnN0IENTU05hbWVzcGFjZSA9IHdpbj8uQ1NTO1xuXHRjb25zdCBmYWN0b3J5TmFtZSA9IGNzc1VuaXRGYWN0b3J5TmFtZSh1bml0KTtcblx0Y29uc3QgZmFjdG9yeSA9IENTU05hbWVzcGFjZT8uW2ZhY3RvcnlOYW1lXTtcblx0aWYgKHR5cGVvZiBmYWN0b3J5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWN0b3J5LmNhbGwoQ1NTTmFtZXNwYWNlLCB2YWx1ZSk7XG5cdGNvbnN0IENTU1VuaXRWYWx1ZUN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIFwiQ1NTVW5pdFZhbHVlXCIpO1xuXHRpZiAodHlwZW9mIENTU1VuaXRWYWx1ZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgVHlwZWQgT00gZG9lcyBub3Qgc3VwcG9ydCBDU1MgdW5pdCBcIiR7dW5pdH1cImApO1xuXHRyZXR1cm4gbmV3IENTU1VuaXRWYWx1ZUN0b3IodmFsdWUsIGNzc1VuaXRDb25zdHJ1Y3Rvck5hbWUodW5pdCkpO1xufTtcbnZhciBpc1N0eWxlVmFsdWUgPSAodmFsKSA9PiBoYXNUeXBlZE9NICYmIHZhbCBpbnN0YW5jZW9mIENTU1N0eWxlVmFsdWU7XG52YXIgaXNVbml0VmFsdWUgPSAodmFsKSA9PiBoYXNUeXBlZE9NICYmIHZhbCBpbnN0YW5jZW9mIENTU1VuaXRWYWx1ZTtcbnZhciBxdWVyeUZpcnN0RGVlcCA9IChyb290LCBzZWxlY3RvcikgPT4ge1xuXHRpZiAoIXJvb3QgfHwgIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgdHJ5UXVlcnkgPSAoc2NvcGUpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaGl0ID0gc2NvcGUucXVlcnlTZWxlY3Rvcj8uKHNlbGVjdG9yKTtcblx0XHRcdHJldHVybiBoaXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGhpdCA6IG51bGw7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGRpcmVjdCA9IHRyeVF1ZXJ5KHJvb3QpO1xuXHRpZiAoZGlyZWN0KSByZXR1cm4gZGlyZWN0O1xuXHRpZiAocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgcm9vdC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgaW5uZXIgPSBxdWVyeUZpcnN0RGVlcChyb290LnNoYWRvd1Jvb3QsIHNlbGVjdG9yKTtcblx0XHRpZiAoaW5uZXIpIHJldHVybiBpbm5lcjtcblx0fVxuXHRpZiAodHlwZW9mIHJvb3QucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblx0Zm9yIChjb25zdCBlbCBvZiByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKSB7XG5cdFx0aWYgKCFlbC5zaGFkb3dSb290KSBjb250aW51ZTtcblx0XHRjb25zdCBoaXQgPSBxdWVyeUZpcnN0RGVlcChlbC5zaGFkb3dSb290LCBzZWxlY3Rvcik7XG5cdFx0aWYgKGhpdCkgcmV0dXJuIGhpdDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9sYXllcnMudHNcbnZhciBjc3NMYXllck9yZGVyID0gKC4uLmdyb3VwcykgPT4ge1xuXHRjb25zdCBzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3QgbmFtZXMgPSBbXTtcblx0Zm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcblx0XHRpZiAoZ3JvdXAgPT0gbnVsbCkgY29udGludWU7XG5cdFx0Y29uc3QgbGlzdCA9IHR5cGVvZiBncm91cCA9PT0gXCJzdHJpbmdcIiA/IFtncm91cF0gOiBncm91cDtcblx0XHRmb3IgKGNvbnN0IHJhdyBvZiBsaXN0KSB7XG5cdFx0XHRjb25zdCBuYW1lID0gU3RyaW5nKHJhdyB8fCBcIlwiKS50cmltKCk7XG5cdFx0XHRpZiAoIW5hbWUgfHwgc2Vlbi5oYXMobmFtZSkpIGNvbnRpbnVlO1xuXHRcdFx0c2Vlbi5hZGQobmFtZSk7XG5cdFx0XHRuYW1lcy5wdXNoKG5hbWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbmFtZXMubGVuZ3RoID8gYEBsYXllciAke25hbWVzLmpvaW4oXCIsIFwiKX07YCA6IFwiXCI7XG59O1xudmFyIHZlZWxhQ2FzY2FkZU9yZGVyID0gKCkgPT4gY3NzTGF5ZXJPcmRlcihWRUVMQV9DQVNDQURFX0xBWUVSUyk7XG52YXIgbWFrZUhvc3RMYXllck9yZGVyID0gKGV4dHJhKSA9PiBjc3NMYXllck9yZGVyKFVYX0hPU1RfTEFZRVJTLCBleHRyYSk7XG52YXIgY3NzTGF5ZXJCbG9jayA9IChsYXllck5hbWUsIGNzc1RleHQpID0+IHtcblx0Y29uc3QgYm9keSA9IChjc3NUZXh0IHx8IFwiXCIpLnRyaW0oKTtcblx0aWYgKCFsYXllck5hbWUgfHwgIWJvZHkpIHJldHVybiBcIlwiO1xuXHRyZXR1cm4gYEBsYXllciAke2xheWVyTmFtZX0ge1xcbiR7Ym9keX1cXG59YDtcbn07XG52YXIgd3JhcENzc0xheWVyID0gKGNzc1RleHQsIGxheWVyTmFtZSkgPT4gbGF5ZXJOYW1lID8gYEBsYXllciAke2xheWVyTmFtZX0geyAke2Nzc1RleHR9IH1gIDogY3NzVGV4dDtcbnZhciBub3JtYWxpemVDc3NGb3JMYXllciA9IChsYXllck5hbWUsIGNzc1RleHQpID0+IHtcblx0Y29uc3QgdHJpbW1lZCA9IChjc3NUZXh0IHx8IFwiXCIpLnRyaW0oKTtcblx0aWYgKCF0cmltbWVkKSByZXR1cm4gXCJcIjtcblx0aWYgKC9eQGxheWVyXFxiLy50ZXN0KHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDtcblx0cmV0dXJuIGNzc0xheWVyQmxvY2sobGF5ZXJOYW1lLCB0cmltbWVkKTtcbn07XG52YXIgdW53cmFwT3V0ZXJMYXllckJsb2NrID0gKGNzcywgZXhwZWN0ZWROYW1lKSA9PiB7XG5cdGNvbnN0IG1hdGNoID0gY3NzLm1hdGNoKExBWUVSX09QRU4pO1xuXHRpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4cGVjdGVkTmFtZSAmJiBtYXRjaFsxXSAhPT0gZXhwZWN0ZWROYW1lKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgb3BlbiA9IG1hdGNoWzBdLmxhc3RJbmRleE9mKFwie1wiKTtcblx0bGV0IGRlcHRoID0gMDtcblx0Zm9yIChsZXQgaSA9IG9wZW47IGkgPCBjc3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjaCA9IGNzc1tpXTtcblx0XHRpZiAoY2ggPT09IFwie1wiKSBkZXB0aCsrO1xuXHRcdGVsc2UgaWYgKGNoID09PSBcIn1cIikge1xuXHRcdFx0ZGVwdGgtLTtcblx0XHRcdGlmIChkZXB0aCA9PT0gMCkge1xuXHRcdFx0XHRpZiAoY3NzLnNsaWNlKGkgKyAxKS50cmltKCkpIHJldHVybiBudWxsO1xuXHRcdFx0XHRyZXR1cm4gY3NzLnNsaWNlKG9wZW4gKyAxLCBpKS50cmltKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciB1bndyYXBDc3NMYXllciA9IChjc3NUZXh0LCBsYXllck5hbWUpID0+IHtcblx0Y29uc3Qgc3RyaXBwZWQgPSBzdHJpcENzc1ByZWFtYmxlKGNzc1RleHQpO1xuXHRyZXR1cm4gdW53cmFwT3V0ZXJMYXllckJsb2NrKHN0cmlwcGVkLCBsYXllck5hbWUpID8/IHN0cmlwcGVkO1xufTtcbnZhciBjc3NJbXBvcnRXaXRoTGF5ZXIgPSAodXJsLCBsYXllciA9IFwiXCIpID0+IGBAaW1wb3J0IHVybChcIiR7dXJsfVwiKSAke2xheWVyICYmIHR5cGVvZiBsYXllciA9PT0gXCJzdHJpbmdcIiA/IGBsYXllcigke2xheWVyfSlgIDogXCJcIn07YDtcbnZhciBVWF9QUkVMT0FEX0hPU1RfQ1NTID0gY3NzTGF5ZXJCbG9jayhcInV4LXByZWxvYWRcIiwgXCI6aG9zdCB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cIik7XG52YXIgZ2V0T3JDcmVhdGVMYXllclJ1bGUgPSAoc2hlZXQsIGxheWVyTmFtZSkgPT4ge1xuXHRpZiAoIXNoZWV0IHx8ICFsYXllck5hbWUpIHJldHVybiB2b2lkIDA7XG5cdGNvbnN0IHJ1bGVzID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSk7XG5cdGNvbnN0IGV4aXN0aW5nID0gcnVsZXMuZmluZCgocnVsZSkgPT4gaXNMYXllckJsb2NrUnVsZShydWxlKSAmJiBydWxlLm5hbWUgPT09IGxheWVyTmFtZSk7XG5cdGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXHR0cnkge1xuXHRcdGNvbnN0IHJ1bGVJbmRleCA9IHNoZWV0Lmluc2VydFJ1bGUoY3NzRW1wdHlMYXllclJ1bGUobGF5ZXJOYW1lKSwgcnVsZXMubGVuZ3RoKTtcblx0XHRjb25zdCBjcmVhdGVkID0gc2hlZXQuY3NzUnVsZXM/LltydWxlSW5kZXhdO1xuXHRcdHJldHVybiBpc0xheWVyQmxvY2tSdWxlKGNyZWF0ZWQpID8gY3JlYXRlZCA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcHJvcGVydHkudHNcbnZhciB0b2tlbml6ZU51bWVyaWNDU1MkMSA9IChzb3VyY2UpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gW107XG5cdGxldCBjdXJzb3IgPSAwO1xuXHR3aGlsZSAoY3Vyc29yIDwgc291cmNlLmxlbmd0aCkge1xuXHRcdGNvbnN0IHJlc3QgPSBzb3VyY2Uuc2xpY2UoY3Vyc29yKTtcblx0XHRjb25zdCB3aGl0ZXNwYWNlID0gL15cXHMrLy5leGVjKHJlc3QpO1xuXHRcdGlmICh3aGl0ZXNwYWNlKSB7XG5cdFx0XHRjdXJzb3IgKz0gd2hpdGVzcGFjZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyID0gL14oPzpcXGQqXFwuXFxkK3xcXGQrXFwuP1xcZCopKD86W2VFXVsrLV0/XFxkKyk/Ly5leGVjKHJlc3QpO1xuXHRcdGlmIChudW1iZXIpIHtcblx0XHRcdGN1cnNvciArPSBudW1iZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29uc3QgdW5pdE1hdGNoID0gQ1NTX1VOSVRfVE9LRU5fUkUuZXhlYyhzb3VyY2Uuc2xpY2UoY3Vyc29yKSk7XG5cdFx0XHRjb25zdCB1bml0ID0gdW5pdE1hdGNoPy5bMF0gPz8gbnVsbDtcblx0XHRcdGlmICh1bml0TWF0Y2gpIGN1cnNvciArPSB1bml0TWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcIm51bWJlclwiLFxuXHRcdFx0XHR2YWx1ZTogTnVtYmVyKG51bWJlclswXSksXG5cdFx0XHRcdHVuaXQ6IHVuaXQgPT0gbnVsbCA/IG51bGwgOiB1bml0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSAvXlthLXpBLVpfXVthLXpBLVowLTlfLV0qLy5leGVjKHJlc3QpO1xuXHRcdGlmIChpZGVudGlmaWVyKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwiaWRlbnRpZmllclwiLFxuXHRcdFx0XHR2YWx1ZTogaWRlbnRpZmllclswXS50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvciArPSBpZGVudGlmaWVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBzeW1ib2wgPSByZXN0WzBdO1xuXHRcdGlmIChbXG5cdFx0XHRcIitcIixcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCIqXCIsXG5cdFx0XHRcIi9cIixcblx0XHRcdFwiKFwiLFxuXHRcdFx0XCIpXCIsXG5cdFx0XHRcIixcIlxuXHRcdF0uaW5jbHVkZXMoc3ltYm9sKSkge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcInN5bWJvbFwiLFxuXHRcdFx0XHR2YWx1ZTogc3ltYm9sXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvcisrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgdG9rZW4gbmVhciBcIiR7cmVzdH1cImApO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xudmFyIE51bWVyaWNUeXBlZE9NUGFyc2VyJDEgPSBjbGFzcyB7XG5cdHRva2Vucztcblx0d2luO1xuXHRpbmRleCA9IDA7XG5cdGNvbnN0cnVjdG9yKHRva2Vucywgd2luKSB7XG5cdFx0dGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy53aW4gPSB3aW47XG5cdH1cblx0cGFyc2UoKSB7XG5cdFx0Y29uc3Qgcm9vdCA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRpZiAodGhpcy5pbmRleCAhPT0gdGhpcy50b2tlbnMubGVuZ3RoKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIHRyYWlsaW5nIGV4cHJlc3Npb25cIik7XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblx0Y3VycmVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdH1cblx0Y29uc3VtZSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cIik7XG5cdFx0dGhpcy5pbmRleCsrO1xuXHRcdHJldHVybiB0b2tlbjtcblx0fVxuXHRjb25zdW1lU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwic3ltYm9sXCIgfHwgdG9rZW4udmFsdWUgIT09IHN5bWJvbCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBFeHBlY3RlZCBcIiR7c3ltYm9sfVwiYCk7XG5cdH1cblx0bWF0Y2hlc1N5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudCgpO1xuXHRcdHJldHVybiB0b2tlbj8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gc3ltYm9sO1xuXHR9XG5cdGNyZWF0ZU1hdGgobmFtZSwgLi4udmFsdWVzKSB7XG5cdFx0Y29uc3QgQ29uc3RydWN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih0aGlzLndpbiwgbmFtZSk7XG5cdFx0aWYgKHR5cGVvZiBDb25zdHJ1Y3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKC4uLnZhbHVlcyk7XG5cdH1cblx0cGFyc2VTdW0oKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlUHJvZHVjdCgpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLmtpbmQgIT09IFwic3ltYm9sXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIHN1bSBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIrXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFN1bVwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgcmlnaHQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHBhcnNlUHJvZHVjdCgpIHtcblx0XHRsZXQgdmFsdWUgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiKlwiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCIvXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBwcm9kdWN0IG9wZXJhdG9yXCIpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLnZhbHVlID09PSBcIipcIikgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhQcm9kdWN0XCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoSW52ZXJ0XCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVVuYXJ5KCkge1xuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCIrXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIi1cIikpIHtcblx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgdGhpcy5wYXJzZVVuYXJ5KCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVByaW1hcnkoKTtcblx0fVxuXHRwYXJzZVByaW1hcnkoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCB0b2tlbi51bml0ID8/IFwibnVtYmVyXCIsIHRva2VuLnZhbHVlKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKHRva2VuLnZhbHVlKTtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIG51bWVyaWMgdmFsdWVcIik7XG5cdH1cblx0cGFyc2VGdW5jdGlvbihuYW1lKSB7XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJjYWxjXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVzID0gW107XG5cdFx0aWYgKCF0aGlzLm1hdGNoZXNTeW1ib2woXCIpXCIpKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIixcIikpIHtcblx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwibWluXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtaW4oKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNaW5cIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWF4XCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtYXgoKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNYXhcIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwiY2xhbXBcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcImNsYW1wKCkgcmVxdWlyZXMgdGhyZWUgdmFsdWVzXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhDbGFtcFwiLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHR9XG59O1xudmFyIHBhcnNlVG9UeXBlZE9NID0gKGNzc1ZhbHVlLCB3aW4pID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCB0b2tlbnMgPSB0b2tlbml6ZU51bWVyaWNDU1MkMShjc3NWYWx1ZSk7XG5cdFx0cmV0dXJuIG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlciQxKHRva2Vucywgd2luKS5wYXJzZSgpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciBzZXRQcm9wZXJ0eUlmTm90RXF1YWwgPSAoc3R5bGVSZWYsIGtlYmFiLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFzdHlsZVJlZiB8fCAha2ViYWIpIHJldHVybjtcblx0aWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRpZiAoc3R5bGVSZWYuZ2V0UHJvcGVydHlWYWx1ZShrZWJhYikgIT09IFwiXCIpIHN0eWxlUmVmLnJlbW92ZVByb3BlcnR5KGtlYmFiKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHN0eWxlUmVmLmdldFByb3BlcnR5VmFsdWUoa2ViYWIpICE9PSB2YWx1ZSkgc3R5bGVSZWYuc2V0UHJvcGVydHkoa2ViYWIsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eVR5cGVkID0gKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRpZiAoIWVsZW1lbnQgfHwgIW5hbWUpIHJldHVybiBlbGVtZW50O1xuXHRjb25zdCBrZWJhYiA9IGNhbWVsVG9LZWJhYihuYW1lKTtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbGVtZW50LnN0eWxlO1xuXHRjb25zdCBzdHlsZU1hcFJlZiA9IGVsZW1lbnQuYXR0cmlidXRlU3R5bGVNYXAgPz8gZWxlbWVudC5zdHlsZU1hcDtcblx0aWYgKCFoYXNUeXBlZE9NIHx8ICFzdHlsZU1hcFJlZikgcmV0dXJuIHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayhlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG5cdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXcgPz8gZ2xvYmFsVGhpcztcblx0bGV0IHZhbCA9IGhhc1ZhbHVlKHZhbHVlKSAmJiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuXHRpZiAodmFsID09IG51bGwpIHtcblx0XHRzdHlsZU1hcFJlZi5kZWxldGU/LihrZWJhYik7XG5cdFx0aWYgKHN0eWxlUmVmKSBzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBudWxsLCBpbXBvcnRhbmNlKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbCkpIHtcblx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdGlmIChpc1VuaXRWYWx1ZSh2YWwpICYmIGlzVW5pdFZhbHVlKG9sZCkpIHtcblx0XHRcdGlmIChvbGQudmFsdWUgPT09IHZhbC52YWx1ZSAmJiBvbGQudW5pdCA9PT0gdmFsLnVuaXQpIHJldHVybiBlbGVtZW50O1xuXHRcdH0gZWxzZSBpZiAob2xkID09PSB2YWwpIHJldHVybiBlbGVtZW50O1xuXHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgdmFsKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAodHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikge1xuXHRcdGlmIChDU1M/Lm51bWJlciAmJiAha2ViYWIuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG5cdFx0XHRjb25zdCBuZXdWYWwgPSBDU1MubnVtYmVyKHZhbCk7XG5cdFx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdFx0aWYgKGlzVW5pdFZhbHVlKG9sZCkgJiYgb2xkLnZhbHVlID09PSBuZXdWYWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IG5ld1ZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgbmV3VmFsKTtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoL1xcYihjYWxjfG1pbnxtYXh8Y2xhbXApXFxzKlxcKC8udGVzdCh2YWwpKSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSBwYXJzZVRvVHlwZWRPTSh2YWwsIHdpbik7XG5cdFx0XHRpZiAocGFyc2VkKSB0cnkge1xuXHRcdFx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIHBhcnNlZCk7XG5cdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0XHRjb25zdCBtYXliZU51bSA9IHRyeVN0cmluZ0FzTnVtYmVyKHZhbCk7XG5cdFx0aWYgKHR5cGVvZiBtYXliZU51bSA9PT0gXCJudW1iZXJcIiAmJiBDU1M/Lm51bWJlciAmJiAha2ViYWIuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG5cdFx0XHRjb25zdCBuZXdWYWwgPSBDU1MubnVtYmVyKG1heWJlTnVtKTtcblx0XHRcdGNvbnN0IG9sZCA9IHN0eWxlTWFwUmVmLmdldChrZWJhYik7XG5cdFx0XHRpZiAoaXNVbml0VmFsdWUob2xkKSAmJiBvbGQudmFsdWUgPT09IG5ld1ZhbC52YWx1ZSAmJiBvbGQudW5pdCA9PT0gbmV3VmFsLnVuaXQpIHJldHVybiBlbGVtZW50O1xuXHRcdFx0c3R5bGVNYXBSZWYuc2V0KGtlYmFiLCBuZXdWYWwpO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIHZhbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrID0gKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRpZiAoIWVsZW1lbnQgfHwgIW5hbWUpIHJldHVybiBlbGVtZW50O1xuXHRjb25zdCBrZWJhYiA9IGNhbWVsVG9LZWJhYihuYW1lKTtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbGVtZW50LnN0eWxlO1xuXHRpZiAoIXN0eWxlUmVmKSByZXR1cm4gZWxlbWVudDtcblx0bGV0IHZhbCA9IGhhc1ZhbHVlKHZhbHVlKSAmJiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuXHRpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbCkpIHZhbCA9IHRyeVN0cmluZ0FzTnVtYmVyKHZhbCkgPz8gdmFsO1xuXHRpZiAodmFsID09IG51bGwpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBudWxsLCBpbXBvcnRhbmNlKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbCkpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eSA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0cmV0dXJuIGhhc1R5cGVkT00gPyBzZXRTdHlsZVByb3BlcnR5VHlwZWQoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UpIDogc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgaGFuZGxlU3R5bGVDaGFuZ2UgPSAoZWwsIHByb3AsIHZhbCkgPT4ge1xuXHRjb25zdCBzdHlsZVJlZiA9IGVsPy5zdHlsZTtcblx0aWYgKCFwcm9wIHx8IHR5cGVvZiBwcm9wICE9PSBcInN0cmluZ1wiIHx8ICFlbCB8fCAhc3R5bGVSZWYpIHJldHVybiBlbDtcblx0JGF2b2lkVHJpZ2dlcih2YWwsICgpID0+IHtcblx0XHRpZiAoaXNWYWwodmFsKSB8fCBoYXNWYWx1ZSh2YWwpIHx8IGlzVmFsdWVVbml0KHZhbCkpIHNldFN0eWxlUHJvcGVydHkoZWwsIHByb3AsIHZhbCk7XG5cdFx0ZWxzZSBpZiAodmFsID09IG51bGwpIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KGNhbWVsVG9LZWJhYihwcm9wKSk7XG5cdH0pO1xuXHRyZXR1cm4gZWw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hlZXRzLnRzXG52YXIgc2V0U3R5bGVJblJ1bGUgPSAoc2VsZWN0b3IsIG5hbWUsIHZhbHVlKSA9PiB7XG5cdHJldHVybiBzZXRTdHlsZVByb3BlcnR5KGdldFN0eWxlUnVsZShzZWxlY3RvciksIG5hbWUsIHZhbHVlKTtcbn07XG52YXIgc2V0U3R5bGVSdWxlID0gKHNlbGVjdG9yLCBzaGVldCkgPT4ge1xuXHRjb25zdCBydWxlID0gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yKTtcblx0T2JqZWN0LmVudHJpZXMoc2hlZXQpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFZhbHVlXSkgPT4gc2V0U3R5bGVQcm9wZXJ0eShydWxlLCBwcm9wTmFtZSwgcHJvcFZhbHVlKSk7XG5cdHJldHVybiBydWxlO1xufTtcbnZhciBsb2FkU3R5bGVTaGVldCA9IChpbmxpbmUsIGJhc2UsIGxheWVyID0gXCJcIiwgaW50ZWdyaXR5KSA9PiB7XG5cdGNvbnN0IGxvYWQgPSBmZXRjaEFuZENhY2hlKGlubGluZSk7XG5cdGNvbnN0IHVybCA9IHR5cGVvZiBpbmxpbmUgPT0gXCJzdHJpbmdcIiA/IFVSTC5jYW5QYXJzZShpbmxpbmUpID8gaW5saW5lIDogbG9hZCA6IGxvYWQ7XG5cdGlmIChiYXNlPy5bMF0pIGJhc2VbMF0uZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoYmFzZSAmJiB1cmwgJiYgdHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSBzZXRTdHlsZVVSTChiYXNlLCB1cmwsIGxheWVyKTtcblx0aWYgKGJhc2U/LlswXSAmJiAoIVVSTC5jYW5QYXJzZShpbmxpbmUpIHx8IGludGVncml0eSkgJiYgYmFzZT8uWzBdIGluc3RhbmNlb2YgSFRNTExpbmtFbGVtZW50KSB7fVxuXHRyZXR1cm4gcHJvbWlzZU9yRGlyZWN0KGxvYWQsIChyZXMpID0+IHtcblx0XHRpZiAoYmFzZT8uWzBdICYmIHJlcykge1xuXHRcdFx0c2V0U3R5bGVVUkwoYmFzZSwgcmVzLCBsYXllcik7XG5cdFx0XHRiYXNlPy5bMF0uc2V0QXR0cmlidXRlKFwibG9hZGVkXCIsIFwiXCIpO1xuXHRcdH1cblx0fSk/LmNhdGNoPy4oKGVycm9yKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgc3R5bGUgc2hlZXQ6XCIsIGVycm9yKTtcblx0fSk7XG59O1xudmFyIGxvYWRCbG9iU3R5bGUgPSAoaW5saW5lKSA9PiB7XG5cdGNvbnN0IHN0eWxlID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSA6IG51bGw7XG5cdGlmIChzdHlsZSkgc3R5bGUuZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoc3R5bGUpIHtcblx0XHRPYmplY3QuYXNzaWduKHN0eWxlLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdFx0dHlwZTogXCJ0ZXh0L2Nzc1wiLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwic2FtZS1vcmlnaW5cIlxuXHRcdH0pO1xuXHRcdHN0eWxlLmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xuXHRcdGxvYWRTdHlsZVNoZWV0KGlubGluZSwgW3N0eWxlLCBcImhyZWZcIl0pO1xuXHRcdHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlKTtcblx0XHRyZXR1cm4gc3R5bGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGxvYWRJbmxpbmVTdHlsZSA9IChpbmxpbmUsIHJvb3RFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudD8uaGVhZCA6IG51bGwsIGxheWVyID0gXCJcIikgPT4ge1xuXHRjb25zdCBQTEFDRSA9IHJvb3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPy4oXCJoZWFkXCIpID8/IHJvb3RFbGVtZW50O1xuXHRpZiAodHlwZW9mIEhUTUxIZWFkRWxlbWVudCAhPSBcInVuZGVmaW5lZFwiICYmIFBMQUNFIGluc3RhbmNlb2YgSFRNTEhlYWRFbGVtZW50KSByZXR1cm4gbG9hZEJsb2JTdHlsZShpbmxpbmUpO1xuXHRjb25zdCBzdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpIDogbnVsbDtcblx0aWYgKHN0eWxlKSB7XG5cdFx0c3R5bGUuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG5cdFx0bG9hZFN0eWxlU2hlZXQoaW5saW5lLCBbc3R5bGUsIFwiaW5uZXJIVE1MXCJdLCBsYXllcik7XG5cdFx0UExBQ0U/LnByZXBlbmQ/LihzdHlsZSk7XG5cdFx0cmV0dXJuIHN0eWxlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBzZXRQcm9wZXJ0eSA9ICh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRyZXR1cm4gc2V0U3R5bGVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgcHJlbG9hZFN0eWxlID0gKHN0eWxlcykgPT4ge1xuXHRyZXR1cm4gbG9hZEFzQWRvcHRlZChzdHlsZXMsIFwiXCIpO1xufTtcbnZhciByZW1lbWJlckFkb3B0ZWRUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIGNzc1RleHQpO1xuXHRhZG9wdGVkRmlsbGVkLmFkZChzaGVldCk7XG59O1xudmFyIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHN0b3JlZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpO1xuXHRpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuXHRmb3IgKGNvbnN0IFtrZXksIG1hcHBlZF0gb2YgYWRvcHRlZE1hcCkgaWYgKG1hcHBlZCA9PT0gc2hlZXQgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGtleTtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQgPSAoc2hlZXQsIGNzc1RleHQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCB0ZXh0ID0gY3NzVGV4dCB8fCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHNoZWV0KTtcblx0Y29uc3QgY291bnQgPSByZWFkU2hlZXRSdWxlQ291bnQoc2hlZXQpO1xuXHRpZiAoY291bnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0aWYgKGNvdW50ID4gMCkge1xuXHRcdGFkb3B0ZWRGaWxsZWQuYWRkKHNoZWV0KTtcblx0XHRpZiAodGV4dCAmJiAhYWRvcHRlZEFwcGxpZWRUZXh0LmhhcyhzaGVldCkpIGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghdGV4dCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCB0ZXh0KSkge1xuXHRcdHJlbWVtYmVyQWRvcHRlZFRleHQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgYXBwbHlBZG9wdGVkU3R5bGVUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGlmICghc2hlZXQgfHwgIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRzaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycm9yPy5tZXNzYWdlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKCEobWVzc2FnZS5pbmNsdWRlcyhcIkBpbXBvcnQgcnVsZXMgYXJlIG5vdCBhbGxvd2VkXCIpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoXCJAaW1wb3J0XCIpICYmIG1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgYWxsb3dlZFwiKSkpIGNvbnNvbGUud2FybihcIltET01dIEZhaWxlZCB0byBhcHBseSBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGVycm9yKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgc2hlZXRGb3JCbG9iID0gKGJsb2IpID0+IHtcblx0bGV0IHNoZWV0ID0gYWRvcHRlZEJsb2JNYXAuZ2V0KGJsb2IpO1xuXHRpZiAoIXNoZWV0KSB7XG5cdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGFkb3B0ZWRCbG9iTWFwLnNldChibG9iLCBzaGVldCk7XG5cdH1cblx0cmV0dXJuIHNoZWV0O1xufTtcbnZhciBsb2FkQXNBZG9wdGVkID0gKHN0eWxlcywgbGF5ZXJOYW1lID0gbnVsbCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBsb2FkQXNBZG9wdGVkVW5zYWZlKHN0eWxlcywgbGF5ZXJOYW1lKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbRE9NXSBsb2FkQXNBZG9wdGVkIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xudmFyIGxvYWRBc0Fkb3B0ZWRVbnNhZmUgPSAoc3R5bGVzLCBsYXllck5hbWUgPSBudWxsKSA9PiB7XG5cdGlmICghc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiICYmIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudChzdHlsZXMpKSB7XG5cdFx0bG9hZElubGluZVN0eWxlKHN0eWxlcywgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiBhZG9wdGVkTWFwPy5oYXM/LihzdHlsZXMpKSB7XG5cdFx0Y29uc3QgY2FjaGVkID0gYWRvcHRlZE1hcC5nZXQoc3R5bGVzKTtcblx0XHRjb25zdCBhcHBsaWVkID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChjYWNoZWQpIHx8IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0ZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChjYWNoZWQsIGFwcGxpZWQpO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoY2FjaGVkKSkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goY2FjaGVkKTtcblx0XHRyZXR1cm4gY2FjaGVkO1xuXHR9XG5cdGlmICgoc3R5bGVzIGluc3RhbmNlb2YgQmxvYiB8fCBzdHlsZXMgaW5zdGFuY2VvZiBGaWxlKSAmJiBhZG9wdGVkQmxvYk1hcD8uaGFzPy4oc3R5bGVzKSkge1xuXHRcdGNvbnN0IGNhY2hlZCA9IGFkb3B0ZWRCbG9iTWFwLmdldChzdHlsZXMpO1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoY2FjaGVkKTtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiAhZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLmluY2x1ZGVzKGNhY2hlZCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKGNhY2hlZCk7XG5cdFx0cmV0dXJuIGNhY2hlZDtcblx0fVxuXHRpZiAoIXN0eWxlcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHNoZWV0ID0gdHlwZW9mIHN0eWxlcyA9PSBcInN0cmluZ1wiID8gZ2V0T3JJbnNlcnRDb21wdXRlZChhZG9wdGVkTWFwLCBzdHlsZXMsICgpID0+IG5ldyBDU1NTdHlsZVNoZWV0KCkpIDogc2hlZXRGb3JCbG9iKHN0eWxlcyk7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiAhdXJsQ2FuUGFyc2Uoc3R5bGVzKSkge1xuXHRcdGNvbnN0IGxheWVyV3JhcHBlZCA9IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0YWRvcHRlZE1hcC5zZXQoc3R5bGVzLCBzaGVldCk7XG5cdFx0aWYgKCFhcHBseUFkb3B0ZWRTdHlsZVRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCkpIHtcblx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMpO1xuXHRcdH0gZWxzZSByZW1lbWJlckFkb3B0ZWRUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpO1xuXHRcdHJldHVybiBzaGVldDtcblx0fSBlbHNlIHByb21pc2VPckRpcmVjdChmZXRjaEFzSW5saW5lKHN0eWxlcyksIChjYWNoZWQpID0+IHtcblx0XHRhZG9wdGVkTWFwLnNldChjYWNoZWQsIHNoZWV0KTtcblx0XHRpZiAoY2FjaGVkKSB7XG5cdFx0XHRpZiAoY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50KGNhY2hlZCkpIHtcblx0XHRcdFx0cmVtb3ZlQWRvcHRlZChzaGVldCk7XG5cdFx0XHRcdGFkb3B0ZWRNYXAuZGVsZXRlKGNhY2hlZCk7XG5cdFx0XHRcdGFkb3B0ZWRCbG9iTWFwLmRlbGV0ZShzdHlsZXMpO1xuXHRcdFx0XHRsb2FkSW5saW5lU3R5bGUoY2FjaGVkLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNoZWV0O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbGF5ZXJXcmFwcGVkID0gd3JhcENzc0xheWVyKGNhY2hlZCwgbGF5ZXJOYW1lKTtcblx0XHRcdGlmICghYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpKSB7XG5cdFx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0XHRhZG9wdGVkTWFwLmRlbGV0ZShjYWNoZWQpO1xuXHRcdFx0XHRhZG9wdGVkQmxvYk1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdFx0bG9hZElubGluZVN0eWxlKGNhY2hlZCwgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0XHR9IGVsc2UgcmVtZW1iZXJBZG9wdGVkVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKTtcblx0XHRcdHJldHVybiBzaGVldDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2hlZXQ7XG59O1xudmFyIGNvbGxlY3RTdHlsZUhvc3RzID0gKG5vZGUsIGludG8pID0+IHtcblx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgPT09IDMpIHJldHVybjtcblx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDExKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkTm9kZXMgfHwgW10pIGNvbGxlY3RTdHlsZUhvc3RzKGNoaWxkLCBpbnRvKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGlzU3R5bGVIb3N0KG5vZGUpKSBpbnRvLmFkZChub2RlKTtcblx0aWYgKHR5cGVvZiBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuO1xuXHR0cnkge1xuXHRcdGZvciAoY29uc3QgZWwgb2Ygbm9kZS5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkgaWYgKGlzU3R5bGVIb3N0KGVsKSkgaW50by5hZGQoZWwpO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIG5vdGlmeVN0eWxlVHJlZUhvc3RzID0gKGhvc3RzLCByZWFzb24gPSBcInRyZWVcIikgPT4ge1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0aWYgKCFpc1N0eWxlSG9zdChlbCkpIGNvbnRpbnVlO1xuXHRcdGZvciAoY29uc3QgZm4gb2Ygc3R5bGVUcmVlSG9va3MpIGZuKGVsLCByZWFzb24pO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyU3R5bGVUcmVlSG9vayA9IChmbikgPT4ge1xuXHRpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybjtcblx0c3R5bGVUcmVlSG9va3MuYWRkKGZuKTtcbn07XG52YXIgb2JzZXJ2ZVN0eWxlVHJlZSA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHJvb3Q7XG5cdGlmIChzdHlsZVRyZWVPYnNlcnZlZC5oYXMocm9vdCkpIHJldHVybiByb290O1xuXHRzdHlsZVRyZWVPYnNlcnZlZC5hZGQocm9vdCk7XG5cdHN0eWxlVHJlZVJvb3RzLmFkZChyb290KTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuXHRcdGNvbnN0IGhvc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IHJlYyBvZiByZWNvcmRzKSBpZiAocmVjLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiByZWMuYWRkZWROb2RlcykgY29sbGVjdFN0eWxlSG9zdHMobm9kZSwgaG9zdHMpO1xuXHRcdFx0Y29uc3Qgc2NvcGUgPSByZWMudGFyZ2V0Py5nZXRSb290Tm9kZT8uKCk7XG5cdFx0XHRpZiAoc2NvcGUgaW5zdGFuY2VvZiBTaGFkb3dSb290ICYmIGlzU3R5bGVIb3N0KHNjb3BlLmhvc3QpKSB7XG5cdFx0XHRcdGNvbnN0IHNoZWV0cyA9IHNjb3BlLmFkb3B0ZWRTdHlsZVNoZWV0cztcblx0XHRcdFx0aWYgKCFzaGVldHMgfHwgc2hlZXRzLmxlbmd0aCA9PT0gMCkgaG9zdHMuYWRkKHNjb3BlLmhvc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVjLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIHJlYy50YXJnZXQpIHtcblx0XHRcdGlmIChpc1N0eWxlSG9zdChyZWMudGFyZ2V0KSkgaG9zdHMuYWRkKHJlYy50YXJnZXQpO1xuXHRcdH1cblx0XHRub3RpZnlTdHlsZVRyZWVIb3N0cyhob3N0cywgXCJtdXRhdGlvblwiKTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7XG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWy4uLlNUWUxFX1RIRU1FX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHtcblx0XHRzdHlsZVRyZWVPYnNlcnZlZC5kZWxldGUocm9vdCk7XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblx0cmV0dXJuIHJvb3Q7XG59O1xudmFyIHJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMgPSAoKSA9PiB7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0Y29uc3QgY2FuUGFyc2UgPSB0eXBlb2YgVVJMICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkwuY2FuUGFyc2UgPT09IFwiZnVuY3Rpb25cIjtcblx0Zm9yIChjb25zdCBba2V5LCBzaGVldF0gb2YgYWRvcHRlZE1hcCkge1xuXHRcdGlmICghc2hlZXQgfHwgdHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XG5cdFx0aWYgKGNhblBhcnNlICYmIFVSTC5jYW5QYXJzZShrZXkpKSBjb250aW51ZTtcblx0XHRjb25zdCB0ZXh0ID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChzaGVldCkgfHwga2V5O1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoc2hlZXQsIHRleHQpO1xuXHRcdGlmIChkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0fVxufTtcbnZhciByZW1vdmVBZG9wdGVkID0gKHNoZWV0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgdGFyZ2V0ID0gdHlwZW9mIHNoZWV0ID09PSBcInN0cmluZ1wiID8gYWRvcHRlZE1hcC5nZXQoc2hlZXQpIDogc2hlZXQ7XG5cdGlmICghdGFyZ2V0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBzaGVldHMgPSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHM7XG5cdGNvbnN0IGlkeCA9IHNoZWV0cy5pbmRleE9mKHRhcmdldCk7XG5cdGlmIChpZHggIT09IC0xKSB7XG5cdFx0c2hlZXRzLnNwbGljZShpZHgsIDEpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgZ2V0VHJhbnNmb3JtID0gKGVsKSA9PiB7XG5cdGlmIChlbD8uY29tcHV0ZWRTdHlsZU1hcCkge1xuXHRcdGNvbnN0IG1hdHJpeCA9IGVsLmNvbXB1dGVkU3R5bGVNYXAoKS5nZXQoXCJ0cmFuc2Zvcm1cIik/LnRvTWF0cml4Py4oKTtcblx0XHRpZiAobWF0cml4KSByZXR1cm4gbWF0cml4O1xuXHR9IGVsc2UgaWYgKGVsKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRyZXR1cm4gbmV3IERPTU1hdHJpeChzdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZT8uKFwidHJhbnNmb3JtXCIpKTtcblx0fVxuXHRyZXR1cm4gbmV3IERPTU1hdHJpeCgpO1xufTtcbnZhciBnZXRUcmFuc2Zvcm1PcmlnaW4gPSAoZWwpID0+IHtcblx0Y29uc3QgY3NzT3JpZ2luID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk/LmdldFByb3BlcnR5VmFsdWU/LihcInRyYW5zZm9ybS1vcmlnaW5cIikgfHwgYDUwJSA1MCVgO1xuXHRyZXR1cm4gcGFyc2VPcmlnaW4oY3NzT3JpZ2luLCBlbCk7XG59O1xudmFyIGdldFByb3BlcnR5VmFsdWUgPSAoc3JjLCBuYW1lKSA9PiB7XG5cdGlmIChcImNvbXB1dGVkU3R5bGVNYXBcIiBpbiBzcmMpIHtcblx0XHRjb25zdCB2YWwgPSBzcmM/LmNvbXB1dGVkU3R5bGVNYXA/LigpPy5nZXQobmFtZSk7XG5cdFx0cmV0dXJuIHZhbCBpbnN0YW5jZW9mIENTU1VuaXRWYWx1ZSA/IHZhbD8udmFsdWUgfHwgMCA6IHZhbD8udG9TdHJpbmc/LigpO1xuXHR9XG5cdGlmIChzcmMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZT8uKHNyYywgXCJcIik7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQoY3M/LmdldFByb3BlcnR5VmFsdWU/LihuYW1lKT8ucmVwbGFjZT8uKFwicHhcIiwgXCJcIikpIHx8IDA7XG5cdH1cblx0cmV0dXJuIHBhcnNlRmxvYXQoKHNyYz8uc3R5bGUgPz8gc3JjKS5nZXRQcm9wZXJ0eVZhbHVlPy4obmFtZSk/LnJlcGxhY2U/LihcInB4XCIsIFwiXCIpKSB8fCAwO1xufTtcbnZhciBnZXRFbGVtZW50Wm9vbSA9IChlbGVtZW50KSA9PiB7XG5cdGxldCB6b29tID0gMSwgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuXHR3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcblx0XHRpZiAoXCJjdXJyZW50Q1NTWm9vbVwiIGluIGN1cnJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q1NTWm9vbSA9IGN1cnJlbnRFbGVtZW50LmN1cnJlbnRDU1Nab29tO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50Q1NTWm9vbSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHpvb20gKj0gY3VycmVudENTU1pvb207XG5cdFx0fVxuXHRcdGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCk7XG5cdFx0aWYgKHN0eWxlLnpvb20gJiYgc3R5bGUuem9vbSAhPT0gXCJub3JtYWxcIikgcmV0dXJuIHpvb20gKj0gcGFyc2VGbG9hdChzdHlsZS56b29tKTtcblx0XHRpZiAoc3R5bGUuem9vbSAmJiBzdHlsZS56b29tICE9PSBcIm5vcm1hbFwiIHx8IFwiY3VycmVudENTU1pvb21cIiBpbiBjdXJyZW50RWxlbWVudCkgcmV0dXJuIHpvb207XG5cdFx0Y3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudD8ub2Zmc2V0UGFyZW50ID8/IGN1cnJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuXHR9XG5cdHJldHVybiB6b29tO1xufTtcbnZhciBnZXRQeFZhbHVlID0gKGVsZW1lbnQsIG5hbWUpID0+IHtcblx0cmV0dXJuIGdldFByb3BlcnR5VmFsdWU/LihlbGVtZW50LCBuYW1lKTtcbn07XG52YXIgZ2V0UGFkZGluZyA9IChzcmMsIGF4aXMpID0+IHtcblx0aWYgKGF4aXMgPT0gXCJpbmxpbmVcIikgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctaW5saW5lLXN0YXJ0XCIpICsgZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1pbmxpbmUtZW5kXCIpO1xuXHRyZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1ibG9jay1zdGFydFwiKSArIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctYmxvY2stZW5kXCIpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2Nzc29tLnRzXG52YXIgc3R5bGVFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikgOiBudWxsO1xuaWYgKHN0eWxlRWxlbWVudCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKT8uYXBwZW5kQ2hpbGQ/LihzdHlsZUVsZW1lbnQpO1xuXHRzdHlsZUVsZW1lbnQuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG59XG52YXIgc2V0U3R5bGVVUkwgPSAoYmFzZSwgdXJsLCBsYXllciA9IFwiXCIpID0+IHtcblx0YmFzZVswXVtiYXNlWzFdXSA9IGJhc2VbMV0gPT0gXCJpbm5lckhUTUxcIiA/IGNzc0ltcG9ydFdpdGhMYXllcih1cmwsIGxheWVyKSA6IHVybDtcbn07XG52YXIgc2V0U3R5bGVSdWxlcyA9IChjbGFzc2VzKSA9PiB7XG5cdHJldHVybiBjbGFzc2VzPy5tYXA/LigoYXJncykgPT4gc2V0U3R5bGVSdWxlKC4uLmFyZ3MpKTtcbn07XG52YXIgZ2V0U3R5bGVMYXllciA9IChsYXllck5hbWUsIHNoZWV0KSA9PiB7XG5cdHNoZWV0IHx8PSBzdHlsZUVsZW1lbnQ/LnNoZWV0O1xuXHRyZXR1cm4gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG59O1xudmFyIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciA9IChlbGVtZW50KSA9PiB7XG5cdGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VzY2FwZUNTU0lkZW50aWZpZXIoZWxlbWVudC5pZCl9YDtcblx0bGV0IHN0eWxlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtc3R5bGUtaWRcIik7XG5cdGlmICghc3R5bGVJZCkge1xuXHRcdHN0eWxlSWQgPSBjcmVhdGVTdHlsZUlkKCk7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIsIHN0eWxlSWQpO1xuXHR9XG5cdHJldHVybiBgW2RhdGEtc3R5bGUtaWQ9XCIke2VzY2FwZUNTU0lkZW50aWZpZXIoc3R5bGVJZCl9XCJdYDtcbn07XG52YXIgam9pblNjb3BlZFNlbGVjdG9yID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRzZWxlY3RvciA9IHNlbGVjdG9yLnRyaW0oKTtcblx0aWYgKCFzY29wZSkgcmV0dXJuIHNlbGVjdG9yO1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gc2NvcGU7XG5cdGlmIChzZWxlY3Rvci5zdGFydHNXaXRoKFwiOjpcIikpIHJldHVybiBgJHtzY29wZX0ke3NlbGVjdG9yfWA7XG5cdHJldHVybiBgJHtzY29wZX0gJHtzZWxlY3Rvcn1gO1xufTtcbnZhciBmaW5kU3R5bGVSdWxlID0gKHNoZWV0LCBmdWxsU2VsZWN0b3IsIHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQ/LmNzc1J1bGVzIHx8IFtdKTtcblx0Y29uc3QgZXhwZWN0ZWQgPSBmdWxsU2VsZWN0b3IudHJpbSgpO1xuXHRjb25zdCByZXF1ZXN0ZWQgPSBzZWxlY3Rvci50cmltKCk7XG5cdHJldHVybiBydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHtcblx0XHRpZiAoIShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IGFjdHVhbCA9IHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA/PyBcIlwiO1xuXHRcdGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVxdWVzdGVkICYmIGFjdHVhbC5lbmRzV2l0aChyZXF1ZXN0ZWQpKSByZXR1cm4gYWN0dWFsLnNsaWNlKDAsIGFjdHVhbC5sZW5ndGggLSByZXF1ZXN0ZWQubGVuZ3RoKS50cmltKCkgPT09IHNjb3BlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59O1xudmFyIGdldFN0eWxlUnVsZSA9IChzZWxlY3Rvciwgc2hlZXQsIGxheWVyTmFtZSA9IFwidXgtcXVlcnlcIiwgYmFzaXMgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBpc1NoYWRvd1Jvb3QoYmFzaXMpIHx8IGlzRG9jdW1lbnQoYmFzaXMpID8gYmFzaXMgOiBiYXNpcz8uZ2V0Um9vdE5vZGU/LigpID8/ICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpO1xuXHRjb25zdCBiYXNpc0VsZW1lbnQgPSBpc0Nzc0VsZW1lbnQoYmFzaXMpID8gYmFzaXMgOiBudWxsO1xuXHRsZXQgc2NvcGUgPSBcIlwiO1xuXHRpZiAoYmFzaXNFbGVtZW50KSBzY29wZSA9IGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvcihiYXNpc0VsZW1lbnQpO1xuXHRlbHNlIGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHNjb3BlID0gXCI6aG9zdFwiO1xuXHRlbHNlIGlmIChpc0RvY3VtZW50KHJvb3QpKSBzY29wZSA9IFwiOnJvb3RcIjtcblx0bGV0IHN0eWxlRWxlbWVudCA9IG51bGw7XG5cdGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHtcblx0XHRzdHlsZUVsZW1lbnQgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLXV4LXF1ZXJ5XVwiKTtcblx0XHRpZiAoIXN0eWxlRWxlbWVudCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXV4LXF1ZXJ5XCIsIFwiXCIpO1xuXHRcdFx0cm9vdC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXHRcdH1cblx0fSBlbHNlIHN0eWxlRWxlbWVudCA9IHN0eWxlRWxlbWVudEdsb2JhbCgpO1xuXHRzaGVldCB8fD0gc3R5bGVFbGVtZW50Py5zaGVldDtcblx0aWYgKCFzaGVldCkgcmV0dXJuO1xuXHRpZiAobGF5ZXJOYW1lKSByZXR1cm4gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yLCBnZXRTdHlsZUxheWVyKGxheWVyTmFtZSwgc2hlZXQpLCBudWxsLCBiYXNpcyk7XG5cdGNvbnN0IGZ1bGxTZWxlY3RvciA9IGpvaW5TY29wZWRTZWxlY3RvcihzY29wZSwgc2VsZWN0b3IpO1xuXHRsZXQgcnVsZUlkID0gZmluZFN0eWxlUnVsZShzaGVldCwgZnVsbFNlbGVjdG9yLCBzY29wZSwgc2VsZWN0b3IpO1xuXHRpZiAocnVsZUlkID09PSAtMSkgcnVsZUlkID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtmdWxsU2VsZWN0b3J9IHt9YCk7XG5cdHJldHVybiBzaGVldC5jc3NSdWxlcz8uW3J1bGVJZF07XG59O1xuZnVuY3Rpb24gc3R5bGVFbGVtZW50R2xvYmFsKCkge1xuXHRyZXR1cm4gc3R5bGVFbGVtZW50ID8/IG51bGw7XG59XG52YXIgZmV0Y2hBbmRDYWNoZSA9ICh1cmwpID0+IHtcblx0aWYgKCF1cmwpIHJldHVybiBudWxsO1xuXHRpZiAoY2FjaGVNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZU1hcC5nZXQodXJsKTtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChibG9iVVJMTWFwLmhhcyh1cmwpKSByZXR1cm4gYmxvYlVSTE1hcC5nZXQodXJsKTtcblx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh1cmwpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0Y2FjaGVNYXAuc2V0KGJ1cmwsIGJ1cmwpO1xuXHRcdHJldHVybiBidXJsO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cdFx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdFx0Y2FjaGVNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0XHRjYWNoZU1hcC5zZXQoYnVybCwgYnVybCk7XG5cdFx0XHRyZXR1cm4gYnVybDtcblx0XHR9KTtcblx0XHRjYWNoZU1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmICh0eXBlb2YgdXJsID09IFwic3RyaW5nXCIpIHtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3VybF0sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXHRcdGNvbnN0IGJ1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdGNhY2hlTWFwLnNldChidXJsLCBidXJsKTtcblx0XHRyZXR1cm4gYnVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBmZXRjaEFzSW5saW5lID0gKHVybCkgPT4ge1xuXHRpZiAoIXVybCkgcmV0dXJuIFwiXCI7XG5cdGlmIChjYWNoZUNvbnRlbnRNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZUNvbnRlbnRNYXAuZ2V0KHVybCkgPz8gXCJcIjtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChjYWNoZUJsb2JDb250ZW50TWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVCbG9iQ29udGVudE1hcC5nZXQodXJsKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb21pc2VkID0gdXJsPy50ZXh0Py4oKT8udGhlbj8uKCh0ZXh0KSA9PiB7XG5cdFx0XHRjYWNoZUJsb2JDb250ZW50TWFwLnNldCh1cmwsIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSk7XG5cdFx0Y2FjaGVCbG9iQ29udGVudE1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cdFx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9KTtcblx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHVybCk7XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBnZXRBZG9wdGVkU3R5bGVSdWxlID0gKHNlbGVjdG9yLCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0aWYgKCFzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHJldHVybiBudWxsO1xuXHRjb25zdCByb290ID0gaXNTaGFkb3dSb290KGJhc2lzKSA/IGJhc2lzIDogYmFzaXM/LmdldFJvb3ROb2RlID8gYmFzaXMuZ2V0Um9vdE5vZGUoeyBjb21wb3NlZDogdHJ1ZSB9KSA6IG51bGw7XG5cdGNvbnN0IGluU2hhZG93ID0gaXNTaGFkb3dSb290KHJvb3QpO1xuXHRjb25zdCB0YXJnZXRBZG9wdGVkU2hlZXRzID0gaW5TaGFkb3cgPyByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA6IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzIDogbnVsbDtcblx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgc2VsZWN0b3JLZXkgPSBgJHtsYXllck5hbWUgfHwgXCJcIn06JHtzZWxlY3Rvcn1gO1xuXHRsZXQgc2hlZXQ7XG5cdGlmIChpblNoYWRvdykge1xuXHRcdGxldCBzaGFkb3dNYXAgPSBhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAuZ2V0KHJvb3QpO1xuXHRcdGlmICghc2hhZG93TWFwKSB7XG5cdFx0XHRzaGFkb3dNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0YWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLnNldChyb290LCBzaGFkb3dNYXApO1xuXHRcdH1cblx0XHRzaGVldCA9IHNoYWRvd01hcC5nZXQoc2VsZWN0b3JLZXkpO1xuXHRcdGlmICghc2hlZXQpIHtcblx0XHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRcdHNoYWRvd01hcC5zZXQoc2VsZWN0b3JLZXksIHNoZWV0KTtcblx0XHRcdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHRhcmdldEFkb3B0ZWRTaGVldHMucHVzaChzaGVldCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNoZWV0ID0gYWRvcHRlZFNlbGVjdG9yTWFwLmdldChzZWxlY3RvcktleSk7XG5cdFx0aWYgKCFzaGVldCkge1xuXHRcdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdFx0YWRvcHRlZFNlbGVjdG9yTWFwLnNldChzZWxlY3RvcktleSwgc2hlZXQpO1xuXHRcdFx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzLmluY2x1ZGVzKHNoZWV0KSkgdGFyZ2V0QWRvcHRlZFNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR9XG5cdH1cblx0aWYgKGxheWVyTmFtZSkge1xuXHRcdGxldCBsYXllclJ1bGU7XG5cdFx0aWYgKGluU2hhZG93KSB7XG5cdFx0XHRsZXQgc2hhZG93TGF5ZXJNYXAgPSBhZG9wdGVkU2hhZG93TGF5ZXJNYXAuZ2V0KHJvb3QpO1xuXHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRzaGFkb3dMYXllck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0XHRcdGFkb3B0ZWRTaGFkb3dMYXllck1hcC5zZXQocm9vdCwgc2hhZG93TGF5ZXJNYXApO1xuXHRcdFx0fVxuXHRcdFx0bGF5ZXJSdWxlID0gc2hhZG93TGF5ZXJNYXAuZ2V0KGxheWVyTmFtZSk7XG5cdFx0fSBlbHNlIGxheWVyUnVsZSA9IGFkb3B0ZWRMYXllck1hcC5nZXQobGF5ZXJOYW1lKTtcblx0XHRpZiAoIWxheWVyUnVsZSkge1xuXHRcdFx0bGF5ZXJSdWxlID0gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlKSB7XG5cdFx0XHRcdGlmIChpblNoYWRvdykge1xuXHRcdFx0XHRcdGxldCBzaGFkb3dMYXllck1hcCA9IGFkb3B0ZWRTaGFkb3dMYXllck1hcC5nZXQocm9vdCk7XG5cdFx0XHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRcdFx0c2hhZG93TGF5ZXJNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRcdFx0YWRvcHRlZFNoYWRvd0xheWVyTWFwLnNldChyb290LCBzaGFkb3dMYXllck1hcCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNoYWRvd0xheWVyTWFwLnNldChsYXllck5hbWUsIGxheWVyUnVsZSk7XG5cdFx0XHRcdH0gZWxzZSBhZG9wdGVkTGF5ZXJNYXAuc2V0KGxheWVyTmFtZSwgbGF5ZXJSdWxlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGxheWVyUnVsZSkge1xuXHRcdFx0bGV0IGxheWVyUnVsZUluZGV4ID0gQXJyYXkuZnJvbShsYXllclJ1bGUuY3NzUnVsZXMgfHwgW10pLmZpbmRJbmRleCgocikgPT4gciBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiByLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPT09IHNlbGVjdG9yPy50cmltPy4oKSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlSW5kZXggPT09IC0xKSB0cnkge1xuXHRcdFx0XHRsYXllclJ1bGVJbmRleCA9IGxheWVyUnVsZS5pbnNlcnRSdWxlKGAke3NlbGVjdG9yfSB7fWAsIGxheWVyUnVsZS5jc3NSdWxlcy5sZW5ndGgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsYXllclJ1bGUuY3NzUnVsZXNbbGF5ZXJSdWxlSW5kZXhdO1xuXHRcdH1cblx0fVxuXHRsZXQgcnVsZUluZGV4ID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZmluZEluZGV4KChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA9PT0gc2VsZWN0b3I/LnRyaW0/LigpKTtcblx0aWYgKHJ1bGVJbmRleCA9PT0gLTEpIHRyeSB7XG5cdFx0cnVsZUluZGV4ID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtzZWxlY3Rvcn0ge31gLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgcnVsZSA9IHNoZWV0LmNzc1J1bGVzW3J1bGVJbmRleF07XG5cdGlmIChydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSByZXR1cm4gcnVsZTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYmFrZXIudHNcbnZhciBpbnZhbGlkYXRpb25SZWFkeSA9IGZhbHNlO1xudmFyIGxhc3RGaW5nZXJwcmludCA9IFwiXCI7XG52YXIgcmViYWtlUXVldWVkID0gZmFsc2U7XG52YXIgbm9ybWFsaXplQ2F0ZWdvcmllcyA9IChjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGxpc3QgPSBbLi4uY2F0ZWdvcmllcz8ubGVuZ3RoID8gY2F0ZWdvcmllcyA6IERFRkFVTFRfQ0FURUdPUklFU107XG5cdHJldHVybiBbLi4ubmV3IFNldChsaXN0LmZpbHRlcihCb29sZWFuKSldO1xufTtcbnZhciBjYWNoZUtleUZvciA9IChzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEgPSBCQUtFX1NDUkVFTl9NRURJQSkgPT4gYCR7c2VsZWN0b3J9XFwwJHtbLi4uY2F0ZWdvcmllc10uc29ydCgpLmpvaW4oXCIsXCIpfVxcMCR7bWVkaWEgPT09IGZhbHNlID8gXCJcIiA6IG1lZGlhfWA7XG52YXIgYmFrZVRoZW1lRmluZ2VycHJpbnQgPSAocm9vdCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG51bGwsIGVsKSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKHJvb3QpO1xuXHRjb25zdCBwYXJ0cyA9IFtcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS10aGVtZVwiKSB8fCByb290LmdldEF0dHJpYnV0ZT8uKFwidGhlbWVcIikgfHwgXCJcIixcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS1jb2xvci1zY2hlbWVcIikgfHwgcm9vdC5nZXRBdHRyaWJ1dGU/LihcImNvbG9yLXNjaGVtZVwiKSB8fCBjcy5jb2xvclNjaGVtZSB8fCBcIlwiLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWJhc2UtY29sb3JcIikudHJpbSgpLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWNvbG9yLXByaW1hcnlcIikudHJpbSgpXG5cdF07XG5cdGlmIChlbCAmJiBlbCAhPT0gcm9vdCkge1xuXHRcdGNvbnN0IGxvY2FsID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0cGFydHMucHVzaChlbC5nZXRBdHRyaWJ1dGU/LihcImRhdGEtdGhlbWVcIikgfHwgXCJcIiwgbG9jYWwuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYmFzZS1jb2xvclwiKS50cmltKCkpO1xuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKFwifFwiKTtcbn07XG52YXIgdGFrZVByb3AgPSAoaW50bywgY3MsIG5hbWUpID0+IHtcblx0Y29uc3QgdmFsdWUgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpPy50cmltKCk7XG5cdGlmICghdmFsdWUpIHJldHVybjtcblx0aW50by5zZXQobmFtZSwgdmFsdWUpO1xufTtcbnZhciBDT0xPUl9QUk9QX1NFVCA9IG5ldyBTZXQoQ1NTX0NPTE9SX1BST1BFUlRJRVMpO1xudmFyIGJha2VEZWNsUmFuayA9IChuYW1lKSA9PiB7XG5cdGlmIChuYW1lLnN0YXJ0c1dpdGgoXCItLVwiKSkgcmV0dXJuIDI7XG5cdGlmIChDT0xPUl9QUk9QX1NFVC5oYXMobmFtZSkpIHJldHVybiAwO1xuXHRyZXR1cm4gMTtcbn07XG52YXIgY29sbGVjdEJha2VkRGVjbGFyYXRpb25zID0gKGNzLCBjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGludG8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCBzZXQgPSBuZXcgU2V0KGNhdGVnb3JpZXMpO1xuXHRpZiAoc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19DT0xPUl9QUk9QRVJUSUVTKSB0YWtlUHJvcChpbnRvLCBjcywgbmFtZSk7XG5cdGlmIChzZXQuaGFzKFwidHlwb2dyYXBoeVwiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJtb3Rpb25cIikpIGZvciAoY29uc3QgbmFtZSBvZiBDU1NfTU9USU9OX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJ0b2tlbnNcIikgfHwgc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChsZXQgaSA9IDA7IGkgPCBjcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IG5hbWUgPSBjcy5pdGVtKGkpO1xuXHRcdGlmICghbmFtZS5zdGFydHNXaXRoKFwiLS1cIikpIGNvbnRpbnVlO1xuXHRcdGlmIChzZXQuaGFzKFwidG9rZW5zXCIpIHx8IGlzQ29sb3JUb2tlbihuYW1lKSkgdGFrZVByb3AoaW50bywgY3MsIG5hbWUpO1xuXHR9XG5cdHJldHVybiBpbnRvO1xufTtcbnZhciBidWlsZEJha2VkQ3NzVGV4dCA9IChzZWxlY3RvciwgZGVjbGFyYXRpb25zLCBsYXllciA9IEJBS0VfTEFZRVIsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IHtcblx0Y29uc3QgYm9keSA9IFtdO1xuXHRjb25zdCByb3dzID0gWy4uLmRlY2xhcmF0aW9uc10uc29ydCgoYSwgYikgPT4gYmFrZURlY2xSYW5rKGFbMF0pIC0gYmFrZURlY2xSYW5rKGJbMF0pKTtcblx0Zm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHJvd3MpIHtcblx0XHRpZiAoIW5hbWUgfHwgIXZhbHVlKSBjb250aW51ZTtcblx0XHRjb25zdCBiYWtlZCA9IHZhbHVlLnJlcGxhY2UoL1xccyohaW1wb3J0YW50XFxzKiQvaSwgXCJcIikudHJpbSgpO1xuXHRcdGlmICghYmFrZWQpIGNvbnRpbnVlO1xuXHRcdGJvZHkucHVzaChgJHtuYW1lfTogJHtiYWtlZH0gIWltcG9ydGFudDtgKTtcblx0fVxuXHRpZiAoIWJvZHkubGVuZ3RoKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgcnVsZSA9IGAke3NlbGVjdG9yfSB7XFxuJHtib2R5LmpvaW4oXCJcXG5cIil9XFxufWA7XG5cdGNvbnN0IGlubmVyID0gbWVkaWEgPyBgQG1lZGlhICR7bWVkaWF9IHtcXG4ke3J1bGV9XFxufWAgOiBydWxlO1xuXHRyZXR1cm4gW2Nzc0xheWVyT3JkZXIobGF5ZXIpLCBjc3NMYXllckJsb2NrKGxheWVyLCBpbm5lcildLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXCIpO1xufTtcbnZhciBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzID0gKHJvb3QpID0+IHtcblx0aWYgKCFyb290IHx8IHJvb3Qubm9kZVR5cGUgIT09IDEpIHJldHVybiBbXTtcblx0Y29uc3QgaG9zdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbcm9vdF0pO1xuXHRjb25zdCBjaHJvbWUgPSByb290LmNsb3Nlc3Q/LihCQUtFX1NDUkVFTl9DSFJPTUUuam9pbihcIiwgXCIpKTtcblx0aWYgKGNocm9tZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBob3N0cy5hZGQoY2hyb21lKTtcblx0cmV0dXJuIFsuLi5ob3N0c107XG59O1xudmFyIGJha2VBbHNvUXVlcmllc0ZvciA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuIFtdO1xuXHRpZiAocm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKFwidmlldy1zZXR0aW5nc1wiKSB8fCByb290LmNsb3Nlc3Q/LihcIi52aWV3LXNldHRpbmdzXCIpKSByZXR1cm4gQkFLRV9TQ1JFRU5fQUxTT19TRVRUSU5HUztcblx0aWYgKHJvb3QuY2xhc3NMaXN0Py5jb250YWlucyhcInZpZXctZXhwbG9yZXJcIikgfHwgcm9vdC5jbG9zZXN0Py4oXCIudmlldy1leHBsb3JlclwiKSB8fCByb290LnF1ZXJ5U2VsZWN0b3I/LihcInVpLWZpbGUtbWFuYWdlclwiKSkgcmV0dXJuIEJBS0VfU0NSRUVOX0FMU09fRVhQTE9SRVI7XG5cdHJldHVybiBbXTtcbn07XG52YXIgY29sbGVjdEJha2VBbHNvSG9zdHMgPSAocm9vdCwgcXVlcmllcyA9IEJBS0VfU0NSRUVOX0FMU08sIHBpZXJjZVNoYWRvdyA9IHRydWUpID0+IHtcblx0aWYgKCFyb290IHx8ICFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXHRjb25zdCByb290U2VsID0gZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yKHJvb3QpO1xuXHRjb25zdCBmaW5kID0gcGllcmNlU2hhZG93ID8gcXVlcnlGaXJzdERlZXAgOiAoc2NvcGUsIHNlbCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBoaXQgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbCk7XG5cdFx0XHRyZXR1cm4gaGl0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBoaXQgOiBudWxsO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBncm91cGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG5cdFx0Y29uc3QgcSA9IFN0cmluZyhxdWVyeSB8fCBcIlwiKS50cmltKCk7XG5cdFx0aWYgKCFxKSBjb250aW51ZTtcblx0XHRjb25zdCBlbCA9IGZpbmQocm9vdCwgcSk7XG5cdFx0aWYgKCFlbCB8fCBlbCA9PT0gcm9vdCkgY29udGludWU7XG5cdFx0Y29uc3Qgc2VsID0gZWwuZ2V0Um9vdE5vZGUoKSA9PT0gcm9vdC5nZXRSb290Tm9kZSgpID8gYCR7cm9vdFNlbH0gJHtxfWAgOiBxO1xuXHRcdGNvbnN0IGxpc3QgPSBncm91cGVkLmdldChlbCk7XG5cdFx0aWYgKGxpc3QpIHtcblx0XHRcdGlmICghbGlzdC5pbmNsdWRlcyhzZWwpKSBsaXN0LnB1c2goc2VsKTtcblx0XHR9IGVsc2UgZ3JvdXBlZC5zZXQoZWwsIFtzZWxdKTtcblx0fVxuXHRyZXR1cm4gWy4uLmdyb3VwZWRdLm1hcCgoW2VsLCBzZWxzXSkgPT4gKHtcblx0XHRlbCxcblx0XHRzZWxlY3Rvcjogc2Vscy5qb2luKFwiLCBcIilcblx0fSkpO1xufTtcbnZhciBhZG9wdGVkTGlzdCA9IChlbCkgPT4ge1xuXHRjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGU/LigpO1xuXHRpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09IFwidW5kZWZpbmVkXCIgJiYgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA/PyBudWxsO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzID8/IG51bGw7XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBhc3NpZ25BZG9wdGVkID0gKGVsLCBuZXh0KSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZT8uKCk7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0XHRyb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IG5leHQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IG5leHQ7XG5cdH0gY2F0Y2gge31cbn07XG52YXIgYWRvcHRTaGVldCA9IChlbCwgYmFrZWQpID0+IHtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGNvbnN0IGxpc3QgPSBhZG9wdGVkTGlzdChlbCk7XG5cdFx0aWYgKCFsaXN0KSByZXR1cm47XG5cdFx0aWYgKGxpc3QuaW5jbHVkZXMoYmFrZWQuc2hlZXQpKSB7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGxpc3QucHVzaChiYWtlZC5zaGVldCk7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGFzc2lnbkFkb3B0ZWQoZWwsIFsuLi5saXN0LCBiYWtlZC5zaGVldF0pO1xuXHRcdFx0YmFrZWQuYWRvcHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cdGlmIChiYWtlZC5zdHlsZUVsICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGlmICghYmFrZWQuc3R5bGVFbC5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuaGVhZD8uYXBwZW5kKGJha2VkLnN0eWxlRWwpO1xuXHRcdGJha2VkLmFkb3B0ZWQgPSB0cnVlO1xuXHR9XG59O1xudmFyIHVuYWRvcHRTaGVldCA9IChlbCwgYmFrZWQpID0+IHtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGNvbnN0IGxpc3QgPSBhZG9wdGVkTGlzdChlbCk7XG5cdFx0aWYgKGxpc3QpIHtcblx0XHRcdGNvbnN0IGlkeCA9IGxpc3QuaW5kZXhPZihiYWtlZC5zaGVldCk7XG5cdFx0XHRpZiAoaWR4ICE9PSAtMSkgdHJ5IHtcblx0XHRcdFx0bGlzdC5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRhc3NpZ25BZG9wdGVkKGVsLCBsaXN0LmZpbHRlcigoc2hlZXQpID0+IHNoZWV0ICE9PSBiYWtlZC5zaGVldCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRiYWtlZC5zdHlsZUVsPy5yZW1vdmUoKTtcblx0YmFrZWQuYWRvcHRlZCA9IGZhbHNlO1xufTtcbnZhciB3cml0ZUJha2VkQ3NzID0gKGJha2VkLCBjc3NUZXh0KSA9PiB7XG5cdGJha2VkLmNzc1RleHQgPSBjc3NUZXh0O1xuXHRpZiAoIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0aWYgKGJha2VkLnNoZWV0ICYmIHN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkgdHJ5IHtcblx0XHRiYWtlZC5zaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbc3R5bGUtbGliXSBiYWtlIHJlcGxhY2VTeW5jIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChiYWtlZC5zdHlsZUVsKSB7XG5cdFx0YmFrZWQuc3R5bGVFbC50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciByZW1lbWJlckNhY2hlID0gKGJha2VkLCBjYWNoZU1zKSA9PiB7XG5cdGNvbnN0IHByZXYgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGlmIChwcmV2Py50aW1lcikgY2xlYXJUaW1lb3V0KHByZXYudGltZXIpO1xuXHRjb25zdCBlbnRyeSA9IHtcblx0XHRjc3NUZXh0OiBiYWtlZC5jc3NUZXh0LFxuXHRcdGZpbmdlcnByaW50OiBiYWtlZC5maW5nZXJwcmludCxcblx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdHNlbGVjdG9yOiBiYWtlZC5zZWxlY3Rvcixcblx0XHRleHBpcmVzOiBEYXRlLm5vdygpICsgY2FjaGVNc1xuXHR9O1xuXHRpZiAoY2FjaGVNcyA+IDAgJiYgdHlwZW9mIHNldFRpbWVvdXQgPT09IFwiZnVuY3Rpb25cIikgZW50cnkudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpID09PSBlbnRyeSkgYmFrZWRDYWNoZS5kZWxldGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9LCBjYWNoZU1zKTtcblx0YmFrZWRDYWNoZS5zZXQoYmFrZWQuY2FjaGVLZXksIGVudHJ5KTtcbn07XG52YXIgZHJvcENhY2hlID0gKGNhY2hlS2V5KSA9PiB7XG5cdGNvbnN0IHByZXYgPSBiYWtlZENhY2hlLmdldChjYWNoZUtleSk7XG5cdGlmIChwcmV2Py50aW1lcikgY2xlYXJUaW1lb3V0KHByZXYudGltZXIpO1xuXHRiYWtlZENhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG59O1xudmFyIGNsZWFyQWxsQ2FjaGUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZW50cnkgb2YgYmFrZWRDYWNoZS52YWx1ZXMoKSkgaWYgKGVudHJ5LnRpbWVyKSBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpO1xuXHRiYWtlZENhY2hlLmNsZWFyKCk7XG59O1xudmFyIHBhcmtCYWtlZCA9IChlbCwgY2FjaGVNcyA9IERFRkFVTFRfQ0FDSEVfTVMpID0+IHtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoIWJha2VkKSByZXR1cm47XG5cdGlmIChiYWtlZC5hZG9wdGVkKSB1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0YmFrZWRMaXZlLmRlbGV0ZShlbCk7XG5cdGlmIChiYWtlZC5jc3NUZXh0KSByZW1lbWJlckNhY2hlKGJha2VkLCBjYWNoZU1zKTtcbn07XG52YXIgcmVzdW1lQmFrZWQgPSAoZWwsIGNhY2hlTXMgPSBERUZBVUxUX0NBQ0hFX01TKSA9PiB7XG5cdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKCFiYWtlZCB8fCAhZWwuaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgZmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCh2b2lkIDAsIGVsKTtcblx0Y29uc3QgY2FjaGVkID0gYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpO1xuXHRpZiAoIWJha2VkLmNzc1RleHQgJiYgY2FjaGVkICYmIGNhY2hlZC5maW5nZXJwcmludCA9PT0gZmluZ2VycHJpbnQpIHtcblx0XHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjYWNoZWQuY3NzVGV4dCk7XG5cdFx0YmFrZWQuZmluZ2VycHJpbnQgPSBjYWNoZWQuZmluZ2VycHJpbnQ7XG5cdH1cblx0aWYgKCFiYWtlZC5jc3NUZXh0IHx8IGJha2VkLmZpbmdlcnByaW50ICE9PSBmaW5nZXJwcmludCkge1xuXHRcdGJha2VDb21wdXRlZFN0eWxlKGVsLCB7XG5cdFx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdFx0Y2FjaGVNcyxcblx0XHRcdGxheWVyOiBCQUtFX0xBWUVSXG5cdFx0fSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0YmFrZWRMaXZlLmFkZChlbCk7XG59O1xudmFyIGJha2VJTyA9IG51bGw7XG52YXIgZW5zdXJlQmFrZUlPID0gKCkgPT4ge1xuXHRpZiAoYmFrZUlPIHx8IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGJha2VJTztcblx0YmFrZUlPID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBlbCA9IGVudHJ5LnRhcmdldDtcblx0XHRcdGlmICghYmFrZWRTdHlsZXMuaGFzKGVsKSkgY29udGludWU7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZWwuaXNDb25uZWN0ZWQpIHJlc3VtZUJha2VkKGVsKTtcblx0XHRcdGVsc2UgcGFya0Jha2VkKGVsKTtcblx0XHR9XG5cdH0sIHsgdGhyZXNob2xkOiAwIH0pO1xuXHRyZXR1cm4gYmFrZUlPO1xufTtcbnZhciBlbnN1cmVCYWtlZFJlY29yZCA9IChlbCwgc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhID0gQkFLRV9TQ1JFRU5fTUVESUEpID0+IHtcblx0bGV0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0aWYgKGJha2VkKSB7XG5cdFx0YmFrZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRiYWtlZC5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcztcblx0XHRiYWtlZC5tZWRpYSA9IG1lZGlhO1xuXHRcdGJha2VkLmNhY2hlS2V5ID0gY2FjaGVLZXlGb3Ioc2VsZWN0b3IsIGNhdGVnb3JpZXMsIG1lZGlhKTtcblx0XHRyZXR1cm4gYmFrZWQ7XG5cdH1cblx0Y29uc3QgY2FuQ29uc3RydWN0ID0gc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpO1xuXHRiYWtlZCA9IHtcblx0XHRzaGVldDogY2FuQ29uc3RydWN0ID8gbmV3IENTU1N0eWxlU2hlZXQoKSA6IG51bGwsXG5cdFx0c3R5bGVFbDogY2FuQ29uc3RydWN0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiksXG5cdFx0c2VsZWN0b3IsXG5cdFx0Y2F0ZWdvcmllcyxcblx0XHRjc3NUZXh0OiBcIlwiLFxuXHRcdGZpbmdlcnByaW50OiBcIlwiLFxuXHRcdGFkb3B0ZWQ6IGZhbHNlLFxuXHRcdGNhY2hlS2V5OiBjYWNoZUtleUZvcihzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEpLFxuXHRcdG1lZGlhXG5cdH07XG5cdGlmIChiYWtlZC5zdHlsZUVsKSB7XG5cdFx0YmFrZWQuc3R5bGVFbC5kYXRhc2V0LnV4QmFrZWQgPSBcIlwiO1xuXHRcdGJha2VkLnN0eWxlRWwuZGF0YXNldC5vd25lciA9IFwic3R5bGUtbGliXCI7XG5cdH1cblx0YmFrZWRTdHlsZXMuc2V0KGVsLCBiYWtlZCk7XG5cdGVuc3VyZUJha2VJTygpPy5vYnNlcnZlKGVsKTtcblx0cmV0dXJuIGJha2VkO1xufTtcbnZhciBmbHVzaFJlYmFrZSA9ICgpID0+IHtcblx0cmViYWtlUXVldWVkID0gZmFsc2U7XG5cdGNvbnN0IGJhdGNoID0gWy4uLnJlYmFrZUJhdGNoXTtcblx0cmViYWtlQmF0Y2guY2xlYXIoKTtcblx0Zm9yIChjb25zdCBlbCBvZiBiYXRjaCkge1xuXHRcdGlmICghZWwuaXNDb25uZWN0ZWQgfHwgIWJha2VkU3R5bGVzLmhhcyhlbCkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0XHRiYWtlQ29tcHV0ZWRTdHlsZShlbCwgYmFrZWQgPyB7XG5cdFx0XHRjYXRlZ29yaWVzOiBiYWtlZC5jYXRlZ29yaWVzLFxuXHRcdFx0c2VsZWN0b3I6IGJha2VkLnNlbGVjdG9yLFxuXHRcdFx0bWVkaWE6IGJha2VkLm1lZGlhXG5cdFx0fSA6IHt9KTtcblx0fVxufTtcbnZhciBzY2hlZHVsZVJlYmFrZSA9IChlbCkgPT4ge1xuXHRyZWJha2VCYXRjaC5hZGQoZWwpO1xuXHRpZiAocmViYWtlUXVldWVkKSByZXR1cm47XG5cdHJlYmFrZVF1ZXVlZCA9IHRydWU7XG5cdHF1ZXVlTWljcm90YXNrKGZsdXNoUmViYWtlKTtcbn07XG52YXIgaW52YWxpZGF0ZUJha2VkU3R5bGVzID0gKHJlYXNvbiA9IFwidGhlbWVcIikgPT4ge1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KCk7XG5cdGlmIChyZWFzb24gIT09IFwiZm9yY2VcIiAmJiBmaW5nZXJwcmludCA9PT0gbGFzdEZpbmdlcnByaW50ICYmIGxhc3RGaW5nZXJwcmludCkgcmV0dXJuO1xuXHRsYXN0RmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcblx0Y2xlYXJBbGxDYWNoZSgpO1xuXHRmb3IgKGNvbnN0IGVsIG9mIFsuLi5iYWtlZExpdmVdKSB7XG5cdFx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRcdGlmICghYmFrZWQpIHtcblx0XHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkLmNzc1RleHQgPSBcIlwiO1xuXHRcdGJha2VkLmZpbmdlcnByaW50ID0gXCJcIjtcblx0XHRzY2hlZHVsZVJlYmFrZShlbCk7XG5cdH1cbn07XG52YXIgZW5zdXJlQmFrZUludmFsaWRhdGlvbiA9ICgpID0+IHtcblx0aWYgKGludmFsaWRhdGlvblJlYWR5IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRpbnZhbGlkYXRpb25SZWFkeSA9IHRydWU7XG5cdGxhc3RGaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KCk7XG5cdHJlZ2lzdGVyU3R5bGVUcmVlSG9vaygoaG9zdCkgPT4ge1xuXHRcdGlmIChiYWtlVGhlbWVGaW5nZXJwcmludCgpICE9PSBsYXN0RmluZ2VycHJpbnQpIHtcblx0XHRcdGludmFsaWRhdGVCYWtlZFN0eWxlcyhcInN0eWxlLXRyZWVcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChob3N0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgYmFrZWRTdHlsZXMuaGFzKGhvc3QpKSBzY2hlZHVsZVJlYmFrZShob3N0KTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gaW52YWxpZGF0ZUJha2VkU3R5bGVzKFwidGhlbWUtYXR0clwiKSkub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsuLi5TVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHt9XG5cdHRyeSB7XG5cdFx0KG1hdGNoTWVkaWE/LihcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikpPy5hZGRFdmVudExpc3RlbmVyPy4oXCJjaGFuZ2VcIiwgKCkgPT4gaW52YWxpZGF0ZUJha2VkU3R5bGVzKFwiY29sb3Itc2NoZW1lXCIpKTtcblx0fSBjYXRjaCB7fVxufTtcbnZhciBiYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICghZWwgfHwgZWwubm9kZVR5cGUgIT09IDEpIHJldHVybiBudWxsO1xuXHRpZiAodHlwZW9mIGdldENvbXB1dGVkU3R5bGUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdGVuc3VyZUJha2VJbnZhbGlkYXRpb24oKTtcblx0Y29uc3QgY2F0ZWdvcmllcyA9IG5vcm1hbGl6ZUNhdGVnb3JpZXMob3B0aW9ucy5jYXRlZ29yaWVzKTtcblx0Y29uc3QgbGF5ZXIgPSBvcHRpb25zLmxheWVyIHx8IFwidXgtYmFrZWRcIjtcblx0Y29uc3QgY2FjaGVNcyA9IG9wdGlvbnMuY2FjaGVNcyA/PyAzZTQ7XG5cdGNvbnN0IG1lZGlhID0gb3B0aW9ucy5tZWRpYSA9PT0gdm9pZCAwID8gQkFLRV9TQ1JFRU5fTUVESUEgOiBvcHRpb25zLm1lZGlhO1xuXHRjb25zdCBzZWxlY3RvciA9IG9wdGlvbnMuc2VsZWN0b3I/LnRyaW0oKSB8fCBlbnN1cmVTdHlsZVNjb3BlU2VsZWN0b3IoZWwpO1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KHZvaWQgMCwgZWwpO1xuXHRjb25zdCBiYWtlZCA9IGVuc3VyZUJha2VkUmVjb3JkKGVsLCBzZWxlY3RvciwgY2F0ZWdvcmllcywgbWVkaWEpO1xuXHRiYWtlZC5maW5nZXJwcmludCA9IGZpbmdlcnByaW50O1xuXHRjb25zdCBjYWNoZWQgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGxldCBjc3NUZXh0ID0gXCJcIjtcblx0aWYgKGNhY2hlZCAmJiBjYWNoZWQuZmluZ2VycHJpbnQgPT09IGZpbmdlcnByaW50ICYmIGNhY2hlZC5jc3NUZXh0KSBjc3NUZXh0ID0gY2FjaGVkLmNzc1RleHQ7XG5cdGVsc2Uge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0Y3NzVGV4dCA9IGJ1aWxkQmFrZWRDc3NUZXh0KHNlbGVjdG9yLCBjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMoY3MsIGNhdGVnb3JpZXMpLCBsYXllciwgbWVkaWEpO1xuXHR9XG5cdGlmICghY3NzVGV4dCkge1xuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdHJldHVybiBiYWtlZDtcblx0fVxuXHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjc3NUZXh0KTtcblx0cmVtZW1iZXJDYWNoZShiYWtlZCwgY2FjaGVNcyk7XG5cdGlmIChpc0VsZW1lbnRWaXNpYmxlKGVsKSkge1xuXHRcdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuYWRkKGVsKTtcblx0fSBlbHNlIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0fVxuXHRyZXR1cm4gYmFrZWQ7XG59O1xudmFyIHVuYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIGtlZXBDYWNoZSA9IHRydWUpID0+IHtcblx0aWYgKCFlbCkgcmV0dXJuO1xuXHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmICghYmFrZWQpIHJldHVybjtcblx0dW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRiYWtlSU8/LnVub2JzZXJ2ZShlbCk7XG5cdGlmIChrZWVwQ2FjaGUgJiYgYmFrZWQuY3NzVGV4dCkgcmVtZW1iZXJDYWNoZShiYWtlZCwgREVGQVVMVF9DQUNIRV9NUyk7XG5cdGVsc2UgZHJvcENhY2hlKGJha2VkLmNhY2hlS2V5KTtcblx0YmFrZWRTdHlsZXMuZGVsZXRlKGVsKTtcbn07XG52YXIgcmViYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucykgPT4ge1xuXHRpZiAoIWVsKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoYmFrZWQpIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZC5jc3NUZXh0ID0gXCJcIjtcblx0XHRkcm9wQ2FjaGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9XG5cdHJldHVybiBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0aW9ucyA/PyAoYmFrZWQgPyB7XG5cdFx0Y2F0ZWdvcmllczogYmFrZWQuY2F0ZWdvcmllcyxcblx0XHRzZWxlY3RvcjogYmFrZWQuc2VsZWN0b3IsXG5cdFx0bWVkaWE6IGJha2VkLm1lZGlhXG5cdH0gOiB7fSkpO1xufTtcbnZhciBnZXRCYWtlZFN0eWxlID0gKGVsKSA9PiBlbCA/IGJha2VkU3R5bGVzLmdldChlbCkgOiB2b2lkIDA7XG52YXIgYmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBvcHRpb25zID0ge30pID0+IHtcblx0Y29uc3Qgb3B0cyA9IHtcblx0XHRtZWRpYTogQkFLRV9TQ1JFRU5fTUVESUEsXG5cdFx0cGllcmNlU2hhZG93OiBvcHRpb25zLnBpZXJjZVNoYWRvdyAhPT0gZmFsc2UsXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXHRjb25zdCBob3N0cyA9IGNvbGxlY3RCYWtlU2NyZWVuSG9zdHMocm9vdCk7XG5cdGNvbnN0IGV4dHJhcyA9IGNvbGxlY3RCYWtlQWxzb0hvc3RzKHJvb3QsIG9wdHMuYWxzbyA/PyBiYWtlQWxzb1F1ZXJpZXNGb3Iocm9vdCksIG9wdHMucGllcmNlU2hhZG93ICE9PSBmYWxzZSk7XG5cdGNvbnN0IG91dCA9IFtdO1xuXHRjb25zdCBmb2xsb3dlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0Y29uc3QgYmFrZWQgPSBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0cyk7XG5cdFx0aWYgKGJha2VkKSBvdXQucHVzaChiYWtlZCk7XG5cdH1cblx0Zm9yIChjb25zdCB7IGVsLCBzZWxlY3RvciB9IG9mIGV4dHJhcykge1xuXHRcdGlmIChob3N0cy5pbmNsdWRlcyhlbCkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZUNvbXB1dGVkU3R5bGUoZWwsIHtcblx0XHRcdC4uLm9wdHMsXG5cdFx0XHRzZWxlY3RvclxuXHRcdH0pO1xuXHRcdGlmIChiYWtlZCkgb3V0LnB1c2goYmFrZWQpO1xuXHRcdGZvbGxvd2Vycy5hZGQoZWwpO1xuXHR9XG5cdGlmIChyb290KSB7XG5cdFx0Y29uc3QgcHJldiA9IGJha2VkRm9sbG93ZXJzLmdldChyb290KTtcblx0XHRpZiAocHJldikge1xuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBwcmV2KSBpZiAoIWZvbGxvd2Vycy5oYXMoZWwpICYmICFob3N0cy5pbmNsdWRlcyhlbCkpIHVuYmFrZUNvbXB1dGVkU3R5bGUoZWwsIHRydWUpO1xuXHRcdH1cblx0XHRpZiAoZm9sbG93ZXJzLnNpemUpIGJha2VkRm9sbG93ZXJzLnNldChyb290LCBmb2xsb3dlcnMpO1xuXHRcdGVsc2UgYmFrZWRGb2xsb3dlcnMuZGVsZXRlKHJvb3QpO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59O1xudmFyIHVuYmFrZVNjcmVlbkNvbG9ycyA9IChyb290LCBrZWVwQ2FjaGUgPSB0cnVlKSA9PiB7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBmb2xsb3dlcnMgPSBiYWtlZEZvbGxvd2Vycy5nZXQocm9vdCk7XG5cdGJha2VkRm9sbG93ZXJzLmRlbGV0ZShyb290KTtcblx0Zm9yIChjb25zdCBlbCBvZiBjb2xsZWN0QmFrZVNjcmVlbkhvc3RzKHJvb3QpKSB1bmJha2VDb21wdXRlZFN0eWxlKGVsLCBrZWVwQ2FjaGUpO1xuXHRpZiAoZm9sbG93ZXJzKSBmb3IgKGNvbnN0IGVsIG9mIGZvbGxvd2VycykgdW5iYWtlQ29tcHV0ZWRTdHlsZShlbCwga2VlcENhY2hlKTtcbn07XG52YXIgc2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzID0gKHJvb3QsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcnVuID0gKHJldHJ5TWlzcyA9IHRydWUpID0+IHtcblx0XHRiYWtlU2NyZWVuQ29sb3JzKHJvb3QsIG9wdGlvbnMpO1xuXHRcdGlmICghcmV0cnlNaXNzIHx8ICFyb290KSByZXR1cm47XG5cdFx0Y29uc3QgcXVlcmllcyA9IG9wdGlvbnM/LmFsc28gPz8gYmFrZUFsc29RdWVyaWVzRm9yKHJvb3QpO1xuXHRcdGNvbnN0IHBpZXJjZSA9IG9wdGlvbnM/LnBpZXJjZVNoYWRvdyAhPT0gZmFsc2U7XG5cdFx0aWYgKCFxdWVyaWVzLmxlbmd0aCkgcmV0dXJuO1xuXHRcdGlmIChxdWVyaWVzLnNvbWUoKHNlbCkgPT4gIShwaWVyY2UgPyBxdWVyeUZpcnN0RGVlcChyb290LCBzZWwpIDogcm9vdC5xdWVyeVNlbGVjdG9yKHNlbCkpKSAmJiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCIpIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBydW4oZmFsc2UpKTtcblx0fTtcblx0aWYgKCFyb290IHx8IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJ1bihmYWxzZSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBydW4odHJ1ZSkpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudC50c1xudmFyIHN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3cgPSAoYlRvKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBiVG8/LnNoYWRvd1Jvb3Q7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbykgfHwgW107XG5cdGZvciAoY29uc3Qgc2hlZXQgb2YgYWRvcHRlZFNoZWV0cykgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChzaGVldCk7XG5cdHRyeSB7XG5cdFx0Y29uc3QgbGl2ZSA9IHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzIHx8IFtdO1xuXHRcdHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gWy4uLmFkb3B0ZWRTaGVldHMuZmlsdGVyKChzKSA9PiAhbGl2ZS5pbmNsdWRlcyhzKSksIC4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5saXZlXSldO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCA9IChiVG8sIHNoZWV0KSA9PiB7XG5cdGxldCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbyk7XG5cdGlmICghYWRvcHRlZFNoZWV0cykgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuc2V0KGJUbywgYWRvcHRlZFNoZWV0cyA9IFtdKTtcblx0aWYgKHNoZWV0ICYmIGFkb3B0ZWRTaGVldHMuaW5kZXhPZihzaGVldCkgPCAwKSBhZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0KTtcblx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhiVG8pO1xufTtcbnZhciBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayA9IChiVG8sIGNzc1RleHQpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGJUbz8uc2hhZG93Um9vdDtcblx0aWYgKCFyb290IHx8ICFjc3NUZXh0KSByZXR1cm4gbnVsbDtcblx0bGV0IHN0eWxlID0gcm9vdC5xdWVyeVNlbGVjdG9yPy4oYHN0eWxlWyR7SE9TVF9DU1NfRkFMTEJBQ0t9XWApO1xuXHRpZiAoIXN0eWxlKSB7XG5cdFx0c3R5bGUgPSBsb2FkSW5saW5lU3R5bGUoY3NzVGV4dCwgcm9vdCwgXCJcIik7XG5cdFx0aWYgKHN0eWxlKSBzdHlsZS5zZXRBdHRyaWJ1dGUoSE9TVF9DU1NfRkFMTEJBQ0ssIFwiXCIpO1xuXHR9IGVsc2UgaWYgKHN0eWxlLnRleHRDb250ZW50ICE9PSBjc3NUZXh0KSBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdHJldHVybiBzdHlsZTtcbn07XG52YXIgcmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzID0gKHJvb3QgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpID0+IHtcblx0aWYgKCFyb290KSByZXR1cm47XG5cdGNvbnN0IHJlc3RvcmUgPSAoaG9zdCkgPT4ge1xuXHRcdGlmICghaG9zdD8uc2hhZG93Um9vdCkgcmV0dXJuO1xuXHRcdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGhvc3QsIGhvc3RDc3NUZXh0KGhvc3QpKTtcblx0XHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGhvc3QpO1xuXHR9O1xuXHRpZiAocm9vdC5ub2RlVHlwZSA9PT0gMSkgcmVzdG9yZShyb290KTtcblx0Y29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuXHRcdGxldCBjaGlsZHJlbiA9IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChcIipcIik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBjaGlsZHJlbltpXTtcblx0XHRcdGlmIChob3N0LnNoYWRvd1Jvb3QpIHtcblx0XHRcdFx0cmVzdG9yZShob3N0KTtcblx0XHRcdFx0dmlzaXQoaG9zdC5zaGFkb3dSb290KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHZpc2l0KHJvb3QpO1xufTtcbnZhciBob3N0Q3NzVGV4dCA9IChiVG8pID0+IHtcblx0Y29uc3Qgc3JjID0gYlRvPy5zdHlsZXM7XG5cdGlmICh0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdGNvbnN0IG91dCA9IHNyYy5jYWxsKGJUbyk7XG5cdFx0aWYgKHR5cGVvZiBvdXQgPT09IFwic3RyaW5nXCIpIHJldHVybiBvdXQ7XG5cdFx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQob3V0KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc3JjKTtcbn07XG52YXIgZW5zdXJlSG9zdFN0eWxlcyA9IChiVG8pID0+IHtcblx0aWYgKCFiVG8pIHJldHVybjtcblx0aWYgKGJUby5zdHlsZXMgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIGJUby5zdHlsZXMpO1xuXHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGJUbyk7XG5cdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgaG9zdENzc1RleHQoYlRvKSk7XG59O1xudmFyIHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xudmFyIHN0eWxlRmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMgPSAoYlRvKSA9PiB7XG5cdGlmICghYlRvIHx8ICEoYlRvIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgc3R5bGVGbHVzaFBlbmRpbmcuaGFzKGJUbykpIHJldHVybjtcblx0c3R5bGVGbHVzaFBlbmRpbmcuYWRkKGJUbyk7XG5cdHN0eWxlRmx1c2hCYXRjaC5wdXNoKGJUbyk7XG5cdGlmIChzdHlsZUZsdXNoU2NoZWR1bGVkKSByZXR1cm47XG5cdHN0eWxlRmx1c2hTY2hlZHVsZWQgPSB0cnVlO1xuXHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0c3R5bGVGbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IGJhdGNoID0gc3R5bGVGbHVzaEJhdGNoO1xuXHRcdHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xuXHRcdGZvciAoY29uc3QgaG9zdCBvZiBiYXRjaCkge1xuXHRcdFx0c3R5bGVGbHVzaFBlbmRpbmcuZGVsZXRlKGhvc3QpO1xuXHRcdFx0aWYgKGhvc3QuaXNDb25uZWN0ZWQpIGVuc3VyZUhvc3RTdHlsZXMoaG9zdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5yZWdpc3RlclN0eWxlVHJlZUhvb2soKGVsKSA9PiBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMoZWwpKTtcbnZhciBsb2FkQ2FjaGVkU3R5bGVzID0gKGJUbywgc3JjKSA9PiB7XG5cdGlmICghc3JjKSByZXR1cm4gbnVsbDtcblx0bGV0IHJlc29sdmVkU3JjID0gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PSBcImZ1bmN0aW9uXCIpIHRyeSB7XG5cdFx0Y29uc3Qgd2VhayA9IG5ldyBXZWFrUmVmKGJUbyk7XG5cdFx0cmVzb2x2ZWRTcmMgPSBzcmMuY2FsbChiVG8sIHdlYWspO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiRXJyb3IgY2FsbGluZyBzdHlsZXMgZnVuY3Rpb246XCIsIGUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmIChyZXNvbHZlZFNyYyAmJiB0eXBlb2YgQ1NTU3R5bGVTaGVldCAhPSBcInVuZGVmaW5lZFwiICYmIHJlc29sdmVkU3JjIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc29sdmVkU3JjKTtcblx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHJlc29sdmVkU3JjKSk7XG5cdH1cblx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdHJlc29sdmVkU3JjLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc3VsdCk7XG5cdFx0XHRlbHNlIGlmIChyZXN1bHQgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIHJlc3VsdCk7XG5cdFx0fSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgfHwgcmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBCbG9iIHx8IHJlc29sdmVkU3JjIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGNvbnN0IGFkb3B0ZWQgPSBsb2FkQXNBZG9wdGVkKHJlc29sdmVkU3JjLCBcIlwiKTtcblx0XHRpZiAoYWRvcHRlZCkge1xuXHRcdFx0Y29uc3QgYWRkQWRvcHRlZFNoZWV0ID0gKHNoZWV0KSA9PiB7XG5cdFx0XHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHNoZWV0KTtcblx0XHRcdH07XG5cdFx0XHRpZiAoYWRvcHRlZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0YWRvcHRlZC50aGVuKChzaGVldCkgPT4ge1xuXHRcdFx0XHRcdGFkZEFkb3B0ZWRTaGVldChzaGVldCk7XG5cdFx0XHRcdFx0ZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChzaGVldCkpO1xuXHRcdFx0XHR9KS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQWRvcHRlZFNoZWV0KGFkb3B0ZWQpO1xuXHRcdFx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChhZG9wdGVkKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHNvdXJjZSA9IHR5cGVvZiBzcmMgPT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBzcmMgPT0gXCJvYmplY3RcIiA/IHN0eWxlRWxlbWVudENhY2hlIDogc3R5bGVDYWNoZTtcblx0Y29uc3QgY2FjaGVkID0gc291cmNlLmdldChzcmMpO1xuXHRsZXQgc3R5bGVFbGVtZW50ID0gY2FjaGVkPy5zdHlsZUVsZW1lbnQ7XG5cdGxldCB2YXJzID0gY2FjaGVkPy52YXJzO1xuXHRpZiAoIWNhY2hlZCkge1xuXHRcdGxldCBzdHlsZXMgPSBgYDtcblx0XHRsZXQgcHJvcHMgPSBbXTtcblx0XHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIpIHN0eWxlcyA9IHJlc29sdmVkU3JjIHx8IFwiXCI7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwib2JqZWN0XCIgJiYgcmVzb2x2ZWRTcmMgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgSFRNTFN0eWxlRWxlbWVudCkgc3R5bGVFbGVtZW50ID0gcmVzb2x2ZWRTcmM7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c3R5bGVzID0gdHlwZW9mIHJlc29sdmVkU3JjLmNzcyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMuY3NzIDogdHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYyA6IFN0cmluZyhyZXNvbHZlZFNyYyk7XG5cdFx0XHRcdHByb3BzID0gcmVzb2x2ZWRTcmM/LnByb3BzID8/IHByb3BzO1xuXHRcdFx0XHR2YXJzID0gcmVzb2x2ZWRTcmM/LnZhcnMgPz8gdmFycztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFzdHlsZUVsZW1lbnQgJiYgc3R5bGVzKSBzdHlsZUVsZW1lbnQgPSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCBiVG8sIFwidXgtbGF5ZXJcIik7XG5cdFx0c291cmNlLnNldChzcmMsIHtcblx0XHRcdGNzczogc3R5bGVzLFxuXHRcdFx0cHJvcHMsXG5cdFx0XHR2YXJzLFxuXHRcdFx0c3R5bGVFbGVtZW50XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHN0eWxlRWxlbWVudDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9iaW5kLnRzXG52YXIgaXNMaW5rZXJMaWtlID0gKHZhbHVlKSA9PiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInJlZlwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZT8udW5iaW5kID09PSBcImZ1bmN0aW9uXCI7XG52YXIgYmluZFdpdGggPSAoZWwsIHByb3AsIHZhbHVlLCBoYW5kbGVyKSA9PiB7XG5cdGNvbnN0IGxpbmtlciA9IGlzTGlua2VyTGlrZSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGw7XG5cdGlmIChsaW5rZXIpIHtcblx0XHRsaW5rZXIuYmluZD8uKCk7XG5cdFx0dmFsdWUgPSBsaW5rZXIucmVmO1xuXHR9XG5cdGhhbmRsZXI/LihlbCwgcHJvcCwgdmFsdWUpO1xuXHRjb25zdCB3ZWwgPSB0b1JlZihlbCk7XG5cdGNvbnN0IHd2ID0gdG9SZWYodmFsdWUpO1xuXHRjb25zdCB1biA9IGFmZmVjdGVkPy4oW3ZhbHVlLCBcInZhbHVlXCJdLCAoY3VycikgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnRSZWYgPSBkZXJlZih3ZWwpO1xuXHRcdGNvbnN0IHZhbHVlUmVmID0gZGVyZWYod3YpO1xuXHRcdGNvbnN0IHYgPSAkZ2V0VmFsdWUodmFsdWVSZWYpID8/ICRnZXRWYWx1ZShjdXJyKTtcblx0XHRoYW5kbGVyPy4oZWxlbWVudFJlZiwgcHJvcCwgdik7XG5cdH0pO1xuXHRjb25zdCB1bnN1YiA9ICgpID0+IHtcblx0XHRsaW5rZXI/LnVuYmluZD8uKCk7XG5cdFx0dW4/LigpO1xuXHR9O1xuXHRhZGRUb0NhbGxDaGFpbih2YWx1ZSwgU3ltYm9sLmRpc3Bvc2UsIHVuc3ViKTtcblx0cmV0dXJuIHVuc3ViO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL0FuaW1hdGFibGUudHNcbnZhciBhbmltYXRhYmxlSWQgPSAwO1xudmFyIG9uU2Nyb2xsID0gKG8gPSB7fSkgPT4gKHtcblx0a2luZDogXCJzY3JvbGxcIixcblx0Li4ub1xufSk7XG52YXIgb25WaWV3ID0gKG8gPSB7fSkgPT4gKHtcblx0a2luZDogXCJ2aWV3XCIsXG5cdC4uLm9cbn0pO1xudmFyIEFuaW1hdGFibGVWYWx1ZSA9IGNsYXNzIHtcblx0W0FOSU1BVEFCTEVfQlJBTkRdID0gdHJ1ZTtcblx0aWQgPSBhbmltYXRhYmxlSWQrKztcblx0I3N0ZXBzO1xuXHQjb3B0aW9ucztcblx0I2N1cnJlbnQ7XG5cdCNzdWJzY3JpYmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdCNhdHRhY2htZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdCNyZXNvbHZlRWxlbWVudFJlZih2LCBzZWxmKSB7XG5cdFx0aWYgKHYgPT0gbnVsbCB8fCB2ID09PSBcInNlbGZcIikgcmV0dXJuIHNlbGY7XG5cdFx0aWYgKHYgPT09IFwicm9vdFwiKSByZXR1cm4gc2VsZi5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPz8gc2VsZi5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRpZiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHYgJiYgISh2IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB2LnZhbHVlID8/IHNlbGY7XG5cdFx0cmV0dXJuIHY7XG5cdH1cblx0I2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWwpIHtcblx0XHRmb3IgKGxldCBub2RlID0gZWwucGFyZW50RWxlbWVudDsgbm9kZTsgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCkge1xuXHRcdFx0Y29uc3QgcyA9IGdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cdFx0XHRpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChzLm92ZXJmbG93ICsgcy5vdmVyZmxvd1ggKyBzLm92ZXJmbG93WSkpIHJldHVybiBub2RlO1xuXHRcdH1cblx0XHRyZXR1cm4gZWwub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8/IGVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHR9XG5cdCNjcmVhdGVUaW1lbGluZShlbGVtZW50LCB0cmlnZ2VyKSB7XG5cdFx0Y29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdFx0aWYgKGlzU2Nyb2xsRHJpdmVuKHRyaWdnZXIpKSB7XG5cdFx0XHRjb25zdCBTY3JvbGxUaW1lbGluZUN0b3IgPSB3aW4uU2Nyb2xsVGltZWxpbmU7XG5cdFx0XHRpZiAodHlwZW9mIFNjcm9sbFRpbWVsaW5lQ3RvciAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiBuZXcgU2Nyb2xsVGltZWxpbmVDdG9yKHtcblx0XHRcdFx0c291cmNlOiB0cmlnZ2VyLnNvdXJjZSA9PT0gXCJuZWFyZXN0XCIgfHwgdHJpZ2dlci5zb3VyY2UgPT0gbnVsbCA/IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCkgOiB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnNvdXJjZSwgZWxlbWVudCksXG5cdFx0XHRcdGF4aXM6IHRyaWdnZXIuYXhpcyA/PyBcImJsb2NrXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCBWaWV3VGltZWxpbmVDdG9yID0gd2luLlZpZXdUaW1lbGluZTtcblx0XHRpZiAodHlwZW9mIFZpZXdUaW1lbGluZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIG5ldyBWaWV3VGltZWxpbmVDdG9yKHtcblx0XHRcdHN1YmplY3Q6IHRyaWdnZXIuc3ViamVjdCA/IHRoaXMuI3Jlc29sdmVFbGVtZW50UmVmKHRyaWdnZXIuc3ViamVjdCwgZWxlbWVudCkgOiBlbGVtZW50LFxuXHRcdFx0YXhpczogdHJpZ2dlci5heGlzID8/IFwiYmxvY2tcIixcblx0XHRcdGluc2V0OiB0cmlnZ2VyLmluc2V0XG5cdFx0fSk7XG5cdH1cblx0I3N0YXJ0VGltZWxpbmVEcml2ZW4oZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IHRpbWVsaW5lID0gdGhpcy4jY3JlYXRlVGltZWxpbmUoZWxlbWVudCwgdHJpZ2dlcik7XG5cdFx0aWYgKCF0aW1lbGluZSkgcmV0dXJuIHRoaXMuI3N0YXJ0VGltZWxpbmVGYWxsYmFjayhlbGVtZW50LCBhdHRhY2htZW50LCBwbGFuLCB0cmlnZ2VyKTtcblx0XHRjb25zdCB0aW1pbmcgPSB0aGlzLiNidWlsZFRpbWluZygpO1xuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IGVsZW1lbnQuYW5pbWF0ZSh0aGlzLiNidWlsZEtleWZyYW1lcyhwbGFuKSwge1xuXHRcdFx0Li4udGltaW5nLFxuXHRcdFx0ZHVyYXRpb246IFwiYXV0b1wiLFxuXHRcdFx0ZGVsYXk6IDAsXG5cdFx0XHRlbmREZWxheTogMCxcblx0XHRcdGl0ZXJhdGlvbnM6IDEsXG5cdFx0XHRmaWxsOiB0aGlzLiNvcHRpb25zLmZpbGwgPz8gXCJib3RoXCIsXG5cdFx0XHR0aW1lbGluZVxuXHRcdH0pO1xuXHRcdGlmICh0cmlnZ2VyLnJhbmdlU3RhcnQpIGFuaW1hdGlvbi5yYW5nZVN0YXJ0ID0gdHJpZ2dlci5yYW5nZVN0YXJ0O1xuXHRcdGlmICh0cmlnZ2VyLnJhbmdlRW5kKSBhbmltYXRpb24ucmFuZ2VFbmQgPSB0cmlnZ2VyLnJhbmdlRW5kO1xuXHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdHJldHVybiAoKSA9PiBhbmltYXRpb24uY2FuY2VsKCk7XG5cdH1cblx0Y29uc3RydWN0b3Ioc3RlcHMsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzdGVwcykgfHwgc3RlcHMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFuaW1hdGFibGUoKSBleHBlY3RzIGF0IGxlYXN0IDIgc3RlcHNcIik7XG5cdFx0dGhpcy4jc3RlcHMgPSBzdGVwcztcblx0XHR0aGlzLiNvcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLiNjdXJyZW50ID0gdGhpcy4jcmVzb2x2ZVN0ZXAoc3RlcHNbMF0pO1xuXHR9XG5cdCNzdGFydFRpbWVsaW5lRmFsbGJhY2soZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IERVUkFUSU9OID0gMWU0O1xuXHRcdGNvbnN0IGFuaW1hdGlvbiA9IGVsZW1lbnQuYW5pbWF0ZSh0aGlzLiNidWlsZEtleWZyYW1lcyhwbGFuKSwge1xuXHRcdFx0Li4udGhpcy4jYnVpbGRUaW1pbmcoKSxcblx0XHRcdGR1cmF0aW9uOiBEVVJBVElPTixcblx0XHRcdGRlbGF5OiAwLFxuXHRcdFx0aXRlcmF0aW9uczogMSxcblx0XHRcdGZpbGw6IFwiYm90aFwiXG5cdFx0fSk7XG5cdFx0YW5pbWF0aW9uLnBhdXNlKCk7XG5cdFx0YXR0YWNobWVudC5hbmltYXRpb24gPSBhbmltYXRpb247XG5cdFx0Y29uc3Qgc2Nyb2xsZXIgPSBpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSA/IHRyaWdnZXIuc291cmNlID09PSBcIm5lYXJlc3RcIiB8fCB0cmlnZ2VyLnNvdXJjZSA9PSBudWxsID8gdGhpcy4jZmluZE5lYXJlc3RTY3JvbGxlcihlbGVtZW50KSA6IHRoaXMuI3Jlc29sdmVFbGVtZW50UmVmKHRyaWdnZXIuc291cmNlLCBlbGVtZW50KSA6IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCk7XG5cdFx0bGV0IHJhZklkID0gMDtcblx0XHRjb25zdCBjb21wdXRlUHJvZ3Jlc3MgPSAoKSA9PiB7XG5cdFx0XHRpZiAoaXNWaWV3RHJpdmVuKHRyaWdnZXIpKSB7XG5cdFx0XHRcdGNvbnN0IHZwID0gc2Nyb2xsZXIgPT09IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPyB7XG5cdFx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRcdGhlaWdodDogaW5uZXJIZWlnaHRcblx0XHRcdFx0fSA6IHNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgdG90YWwgPSB2cC5oZWlnaHQgKyByZWN0LmhlaWdodDtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsICh2cC50b3AgKyB2cC5oZWlnaHQgLSByZWN0LnRvcCkgLyB0b3RhbCkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZWwgPSBzY3JvbGxlcjtcblx0XHRcdGNvbnN0IG1heCA9IGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodDtcblx0XHRcdHJldHVybiBtYXggPiAwID8gZWwuc2Nyb2xsVG9wIC8gbWF4IDogMDtcblx0XHR9O1xuXHRcdGNvbnN0IG9uU2Nyb2xsID0gKCkgPT4ge1xuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuXHRcdFx0cmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRhbmltYXRpb24uY3VycmVudFRpbWUgPSBjb21wdXRlUHJvZ3Jlc3MoKSAqIERVUkFUSU9OO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRjb25zdCBsaXN0ZW5UYXJnZXQgPSBzY3JvbGxlciA9PT0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/IHdpbmRvdyA6IHNjcm9sbGVyO1xuXHRcdGxpc3RlblRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cdFx0b25TY3JvbGwoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuXHRcdFx0bGlzdGVuVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25TY3JvbGwpO1xuXHRcdFx0YW5pbWF0aW9uLmNhbmNlbCgpO1xuXHRcdH07XG5cdH1cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLiNjdXJyZW50O1xuXHR9XG5cdHNldCB2YWx1ZShuZXh0KSB7XG5cdFx0dGhpcy4jY3VycmVudCA9IG5leHQ7XG5cdFx0Zm9yIChjb25zdCBjYiBvZiB0aGlzLiNzdWJzY3JpYmVycykgY2IobmV4dCk7XG5cdH1cblx0dmFsdWVPZigpIHtcblx0XHRyZXR1cm4gdGhpcy4jY3VycmVudDtcblx0fVxuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCB2ID0gdGhpcy4jY3VycmVudDtcblx0XHRyZXR1cm4gdiA9PSBudWxsID8gXCJcIiA6IFN0cmluZyh2KTtcblx0fVxuXHRbU3ltYm9sLnRvUHJpbWl0aXZlXShoaW50KSB7XG5cdFx0aWYgKGhpbnQgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdGNvbnN0IG4gPSBOdW1iZXIodGhpcy4jY3VycmVudCk7XG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IDA7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG5cdH1cblx0c3Vic2NyaWJlKGNiKSB7XG5cdFx0dGhpcy4jc3Vic2NyaWJlcnMuYWRkKGNiKTtcblx0XHRyZXR1cm4gKCkgPT4gdGhpcy4jc3Vic2NyaWJlcnMuZGVsZXRlKGNiKTtcblx0fVxuXHRnZXQgb3B0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy4jb3B0aW9ucztcblx0fVxuXHRnZXQgc3RlcHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3N0ZXBzO1xuXHR9XG5cdCNyZXNvbHZlU3RlcChzdGVwKSB7XG5cdFx0aWYgKHN0ZXAgIT0gbnVsbCAmJiB0eXBlb2Ygc3RlcCA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gc3RlcCkgcmV0dXJuIHN0ZXAudmFsdWU7XG5cdFx0cmV0dXJuIHN0ZXA7XG5cdH1cblx0I2J1aWxkS2V5ZnJhbWVzKHBsYW4pIHtcblx0XHRjb25zdCBzdGVwcyA9IHRoaXMuI3N0ZXBzLm1hcCgocykgPT4gdGhpcy4jcmVzb2x2ZVN0ZXAocykpO1xuXHRcdGNvbnN0IGNvdW50ID0gc3RlcHMubGVuZ3RoO1xuXHRcdGNvbnN0IG9mZnNldHMgPSB0aGlzLiNvcHRpb25zLm9mZnNldHM7XG5cdFx0Y29uc3QgZWFzaW5nID0gdGhpcy4jb3B0aW9ucy5lYXNpbmc7XG5cdFx0cmV0dXJuIHN0ZXBzLm1hcCgocmF3LCBpKSA9PiB7XG5cdFx0XHRjb25zdCBmcmFtZSA9IHsgb2Zmc2V0OiBvZmZzZXRzPy5baV0gPz8gKGNvdW50ID4gMSA/IGkgLyAoY291bnQgLSAxKSA6IDApIH07XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlYXNpbmcpKSB7XG5cdFx0XHRcdGlmIChlYXNpbmdbaV0pIGZyYW1lLmVhc2luZyA9IGVhc2luZ1tpXTtcblx0XHRcdH1cblx0XHRcdGxldCB2YWx1ZSA9IHJhdztcblx0XHRcdGlmIChwbGFuLm1vZGUgPT09IFwicHJvcGVydHlcIiAmJiBwbGFuLnVuaXQgIT0gbnVsbCAmJiB0eXBlb2YgcmF3ID09PSBcIm51bWJlclwiKSB2YWx1ZSA9IGAke3Jhd30ke3BsYW4udW5pdH1gO1xuXHRcdFx0aWYgKHBsYW4ubW9kZSA9PT0gXCJjdXN0b20tcHJvcGVydHlcIiAmJiB0eXBlb2YgcmF3ICE9PSBcInN0cmluZ1wiKSB2YWx1ZSA9IFN0cmluZyhyYXcpO1xuXHRcdFx0ZnJhbWVbcGxhbi50YXJnZXRdID0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gZnJhbWU7XG5cdFx0fSk7XG5cdH1cblx0I2J1aWxkVGltaW5nKCkge1xuXHRcdGNvbnN0IG8gPSB0aGlzLiNvcHRpb25zO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkdXJhdGlvbjogcGFyc2VUaW1lKG8uZHVyYXRpb24sIDMwMCksXG5cdFx0XHRkZWxheTogcGFyc2VUaW1lKG8uZGVsYXksIDApLFxuXHRcdFx0ZW5kRGVsYXk6IG8uZW5kRGVsYXkgPz8gMCxcblx0XHRcdGl0ZXJhdGlvbnM6IG5vcm1hbGl6ZUl0ZXJhdGlvbnMoby5pdGVyYXRpb25zKSxcblx0XHRcdGRpcmVjdGlvbjogby5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRcdGZpbGw6IG8uZmlsbCA/PyBcImJvdGhcIixcblx0XHRcdGNvbXBvc2l0ZTogby5jb21wb3NpdGUsXG5cdFx0XHRlYXNpbmc6IEFycmF5LmlzQXJyYXkoby5lYXNpbmcpID8gXCJsaW5lYXJcIiA6IG8uZWFzaW5nID8/IFwibGluZWFyXCJcblx0XHR9O1xuXHR9XG5cdGF0dGFjaChlbGVtZW50LCBwbGFuKSB7XG5cdFx0Y29uc3QgYXR0YWNobWVudCA9IHtcblx0XHRcdGVsZW1lbnQsXG5cdFx0XHRhbmltYXRpb246IG51bGwsXG5cdFx0XHRjbGVhbnVwOiAoKSA9PiB7fVxuXHRcdH07XG5cdFx0Y29uc3QgdHJpZ2dlciA9IHRoaXMuI29wdGlvbnMudHJpZ2dlciA/PyBcIm1vdW50XCI7XG5cdFx0bGV0IGlubmVyO1xuXHRcdGlmIChpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSB8fCBpc1ZpZXdEcml2ZW4odHJpZ2dlcikpIGlubmVyID0gdGhpcy4jc3RhcnRUaW1lbGluZURyaXZlbihlbGVtZW50LCBhdHRhY2htZW50LCBwbGFuLCB0cmlnZ2VyKTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbj8uY2FuY2VsKCk7XG5cdFx0XHRcdGNvbnN0IGFuaW1hdGlvbiA9IGVsZW1lbnQuYW5pbWF0ZSh0aGlzLiNidWlsZEtleWZyYW1lcyhwbGFuKSwgdGhpcy4jYnVpbGRUaW1pbmcoKSk7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdFx0XHR0aGlzLiN0cmFja1Byb2dyZXNzKGFuaW1hdGlvbiwgcGxhbik7XG5cdFx0XHRcdHJldHVybiBhbmltYXRpb247XG5cdFx0XHR9O1xuXHRcdFx0aW5uZXIgPSB0aGlzLiN3aXJlVHJpZ2dlcihlbGVtZW50LCBhdHRhY2htZW50LCBzdGFydCk7XG5cdFx0fVxuXHRcdHRoaXMuI2F0dGFjaG1lbnRzLmFkZChhdHRhY2htZW50KTtcblx0XHRhdHRhY2htZW50LmNsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRpbm5lcigpO1xuXHRcdFx0dGhpcy4jYXR0YWNobWVudHMuZGVsZXRlKGF0dGFjaG1lbnQpO1xuXHRcdH07XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnQuY2xlYW51cDtcblx0fVxuXHQjdHJhY2tQcm9ncmVzcyhhbmltYXRpb24sIHBsYW4pIHtcblx0XHRhbmltYXRpb24uZmluaXNoZWQudGhlbigoKSA9PiB7XG5cdFx0XHRjb25zdCBsYXN0ID0gdGhpcy4jcmVzb2x2ZVN0ZXAodGhpcy4jc3RlcHNbdGhpcy4jc3RlcHMubGVuZ3RoIC0gMV0pO1xuXHRcdFx0dGhpcy52YWx1ZSA9IGxhc3Q7XG5cdFx0fSkuY2F0Y2goKCkgPT4ge30pO1xuXHR9XG5cdCN3aXJlVHJpZ2dlcihlbGVtZW50LCBhdHRhY2htZW50LCBzdGFydCkge1xuXHRcdGNvbnN0IHRyaWdnZXIgPSB0aGlzLiNvcHRpb25zLnRyaWdnZXIgPz8gXCJtb3VudFwiO1xuXHRcdGNvbnN0IHJldmVyc2VPbkV4aXQgPSB0aGlzLiNvcHRpb25zLnJldmVyc2VPbkV4aXQgPz8gdHJ1ZTtcblx0XHRjb25zdCBwbGF5Rm9yd2FyZCA9ICgpID0+IHtcblx0XHRcdGlmICghYXR0YWNobWVudC5hbmltYXRpb24gfHwgYXR0YWNobWVudC5hbmltYXRpb24ucGxheVN0YXRlID09PSBcImlkbGVcIikgc3RhcnQoKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5YmFja1JhdGUgPSBNYXRoLmFicyhhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5YmFja1JhdGUgfHwgMSk7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXkoKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IHBsYXlCYWNrd2FyZCA9ICgpID0+IHtcblx0XHRcdGlmICghYXR0YWNobWVudC5hbmltYXRpb24pIHJldHVybjtcblx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uLnJldmVyc2UoKTtcblx0XHR9O1xuXHRcdGlmICh0cmlnZ2VyID09PSBcIm1vdW50XCIpIHtcblx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRyZXR1cm4gKCkgPT4ge307XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyID09PSBcIm1hbnVhbFwiKSByZXR1cm4gKCkgPT4ge307XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwiaG92ZXJcIiB8fCB0cmlnZ2VyID09PSBcImZvY3VzXCIpIHtcblx0XHRcdGNvbnN0IGVudGVyID0gdHJpZ2dlciA9PT0gXCJob3ZlclwiID8gXCJwb2ludGVyZW50ZXJcIiA6IFwiZm9jdXNpblwiO1xuXHRcdFx0Y29uc3QgbGVhdmUgPSB0cmlnZ2VyID09PSBcImhvdmVyXCIgPyBcInBvaW50ZXJsZWF2ZVwiIDogXCJmb2N1c291dFwiO1xuXHRcdFx0Y29uc3Qgb25FbnRlciA9ICgpID0+IHBsYXlGb3J3YXJkKCk7XG5cdFx0XHRjb25zdCBvbkxlYXZlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAocmV2ZXJzZU9uRXhpdCkgcGxheUJhY2t3YXJkKCk7XG5cdFx0XHR9O1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGVudGVyLCBvbkVudGVyKTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihsZWF2ZSwgb25MZWF2ZSk7XG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZW50ZXIsIG9uRW50ZXIpO1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobGVhdmUsIG9uTGVhdmUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwiY2xpY2tcIikge1xuXHRcdFx0bGV0IGZvcndhcmQgPSB0cnVlO1xuXHRcdFx0Y29uc3Qgb25DbGljayA9ICgpID0+IHtcblx0XHRcdFx0Zm9yd2FyZCA/IHBsYXlGb3J3YXJkKCkgOiBwbGF5QmFja3dhcmQoKTtcblx0XHRcdFx0Zm9yd2FyZCA9ICFmb3J3YXJkO1xuXHRcdFx0fTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xuXHRcdFx0cmV0dXJuICgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciA9PT0gXCJ2aXNpYmxlXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRzdGFydCgpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4ge307XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgcGxheUZvcndhcmQoKTtcblx0XHRcdFx0ZWxzZSBpZiAocmV2ZXJzZU9uRXhpdCAmJiBhdHRhY2htZW50LmFuaW1hdGlvbikgcGxheUJhY2t3YXJkKCk7XG5cdFx0XHR9LCB0aGlzLiNvcHRpb25zLmludGVyc2VjdGlvbik7XG5cdFx0XHRvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuXHRcdFx0cmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgIT0gbnVsbCAmJiB0eXBlb2YgdHJpZ2dlciA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gdHJpZ2dlcikge1xuXHRcdFx0Y29uc3QgYXBwbHkgPSAodikgPT4gdiA/IHBsYXlGb3J3YXJkKCkgOiBwbGF5QmFja3dhcmQoKTtcblx0XHRcdGFwcGx5KHRyaWdnZXIudmFsdWUpO1xuXHRcdFx0Y29uc3QgdW5zdWJzY3JpYmUgPSB0eXBlb2YgdHJpZ2dlci5zdWJzY3JpYmUgPT09IFwiZnVuY3Rpb25cIiA/IHRyaWdnZXIuc3Vic2NyaWJlKGFwcGx5KSA6IG51bGw7XG5cdFx0XHRyZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmU/LigpO1xuXHRcdH1cblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblx0I2VhY2goZm4pIHtcblx0XHRmb3IgKGNvbnN0IGF0IG9mIHRoaXMuI2F0dGFjaG1lbnRzKSBpZiAoYXQuYW5pbWF0aW9uKSBmbihhdC5hbmltYXRpb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHBsYXkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEucGxheSgpKTtcblx0fVxuXHRwYXVzZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5wYXVzZSgpKTtcblx0fVxuXHRyZXZlcnNlKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLnJldmVyc2UoKSk7XG5cdH1cblx0Y2FuY2VsKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLmNhbmNlbCgpKTtcblx0fVxuXHRmaW5pc2goKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEuZmluaXNoKCkpO1xuXHR9XG5cdHNldCBwbGF5YmFja1JhdGUocmF0ZSkge1xuXHRcdHRoaXMuI2VhY2goKGEpID0+IHtcblx0XHRcdGEucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0XHR9KTtcblx0fVxuXHRnZXQgZmluaXNoZWQoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IFtdO1xuXHRcdHRoaXMuI2VhY2goKGEpID0+IGxpc3QucHVzaChhLmZpbmlzaGVkLmNhdGNoKCgpID0+IHt9KSkpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChsaXN0KS50aGVuKCgpID0+IHt9KTtcblx0fVxufTtcbnZhciBhbmltYXRhYmxlID0gKHN0ZXBzLCBvcHRpb25zKSA9PiBuZXcgQW5pbWF0YWJsZVZhbHVlKHN0ZXBzLCBvcHRpb25zKTtcbnZhciBpc0FuaW1hdGFibGVWYWx1ZSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWVbQU5JTUFUQUJMRV9CUkFORF0gPT09IHRydWU7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9TdHlsZXMudHNcbnZhciBzdHlsZVRlbXBsYXRlSWQgPSAwO1xudmFyIHJlYWRSZWFjdGl2ZU51bWJlciA9IChzbG90KSA9PiB7XG5cdGNvbnN0IGN1cnJlbnQgPSBzbG90LnZhbHVlPy52YWx1ZTtcblx0Y29uc3QgbnVtYmVyID0gdHlwZW9mIGN1cnJlbnQgPT09IFwibnVtYmVyXCIgPyBjdXJyZW50IDogTnVtYmVyKGN1cnJlbnQpO1xuXHRpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWFjdGl2ZSBDU1MgdmFsdWUgXCIke1N0cmluZyhjdXJyZW50KX1cIiBpcyBub3QgZmluaXRlYCk7XG5cdHJldHVybiBudW1iZXI7XG59O1xudmFyIGdldFJlYWN0aXZlSW5pdGlhbE51bWJlciA9ICh2YWx1ZSkgPT4ge1xuXHRjb25zdCBudW1iZXIgPSBOdW1iZXIodmFsdWU/LnZhbHVlKTtcblx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogMDtcbn07XG52YXIgcmVwbGFjZVR5cGVkTWFya2VycyA9IChjc3NWYWx1ZSwgc2xvdHMpID0+IHtcblx0bGV0IHJlc3VsdCA9IGNzc1ZhbHVlO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2Ygc2xvdHMpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG5ldyBSZWdFeHAoYHZhclxcXFwoXFxcXHMqJHtlc2NhcGVSZWdFeHAoc2xvdC5tYXJrZXIpfVxcXFxzKlxcXFwpYCwgXCJnXCIpLCBTdHJpbmcoc2xvdC52YWx1ZSkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbnZhciBpc0RpcmVjdFNsb3RWYWx1ZSA9IChjc3NWYWx1ZSwgbWFya2VyKSA9PiB7XG5cdGNvbnN0IGVzY2FwZWRNYXJrZXIgPSBlc2NhcGVSZWdFeHAobWFya2VyKTtcblx0cmV0dXJuIG5ldyBSZWdFeHAoYF52YXJcXFxcKFxcXFxzKiR7ZXNjYXBlZE1hcmtlcn1cXFxccypcXFxcKSRgKS50ZXN0KGNzc1ZhbHVlLnRyaW0oKSk7XG59O1xudmFyIHNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZSA9IChyYXcsIHVuaXQpID0+IHtcblx0bGV0IHZhbHVlID0gcmF3O1xuXHRpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHZhbHVlICYmICEodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50KSkgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHJldHVybiB1bml0ID8gYDAke3VuaXR9YCA6IFwiMFwiO1xuXHRpZiAodW5pdCAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfSR7dW5pdH1gO1xuXHRyZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn07XG52YXIgaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QgPSAoY3NzVmFsdWUsIG1hcmtlciwgdW5pdCkgPT4ge1xuXHRpZiAoIXVuaXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgZXNjYXBlZE1hcmtlciA9IGVzY2FwZVJlZ0V4cChtYXJrZXIpO1xuXHRjb25zdCBlc2NhcGVkVW5pdCA9IGVzY2FwZVJlZ0V4cCh1bml0KTtcblx0cmV0dXJuIG5ldyBSZWdFeHAoYF5jYWxjXFxcXChcXFxccyp2YXJcXFxcKFxcXFxzKiR7ZXNjYXBlZE1hcmtlcn1cXFxccypcXFxcKVxcXFxzKlxcXFwqXFxcXHMqMSR7ZXNjYXBlZFVuaXR9XFxcXHMqXFxcXCkkYCwgXCJpXCIpLnRlc3QoY3NzVmFsdWUudHJpbSgpKTtcbn07XG52YXIgc2V0UGFyc2VkVHlwZWRWYWx1ZSA9IChzdHlsZU1hcCwgQ1NTU3R5bGVWYWx1ZUN0b3IsIHByb3BlcnR5LCBjc3NWYWx1ZSkgPT4ge1xuXHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yPy5wYXJzZUFsbCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gQ1NTU3R5bGVWYWx1ZUN0b3IucGFyc2VBbGwocHJvcGVydHksIGNzc1ZhbHVlKTtcblx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIC4uLnZhbHVlcyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICh0eXBlb2YgQ1NTU3R5bGVWYWx1ZUN0b3I/LnBhcnNlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIENTU1N0eWxlVmFsdWVDdG9yLnBhcnNlKHByb3BlcnR5LCBjc3NWYWx1ZSkpO1xuXHRcdHJldHVybjtcblx0fVxuXHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGNzc1ZhbHVlKTtcbn07XG52YXIgdG9rZW5pemVOdW1lcmljQ1NTID0gKHNvdXJjZSkgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSBbXTtcblx0bGV0IGN1cnNvciA9IDA7XG5cdHdoaWxlIChjdXJzb3IgPCBzb3VyY2UubGVuZ3RoKSB7XG5cdFx0Y29uc3QgcmVzdCA9IHNvdXJjZS5zbGljZShjdXJzb3IpO1xuXHRcdGNvbnN0IHdoaXRlc3BhY2UgPSAvXlxccysvLmV4ZWMocmVzdCk7XG5cdFx0aWYgKHdoaXRlc3BhY2UpIHtcblx0XHRcdGN1cnNvciArPSB3aGl0ZXNwYWNlWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYWJsZSA9IC9edmFyXFwoXFxzKigtLVthLXpBLVowLTlfLV0rKVxccypcXCkvLmV4ZWMocmVzdCk7XG5cdFx0aWYgKHZhcmlhYmxlKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwidmFyaWFibGVcIixcblx0XHRcdFx0bWFya2VyOiB2YXJpYWJsZVsxXVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gdmFyaWFibGVbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IG51bWJlciA9IC9eKD86XFxkKlxcLlxcZCt8XFxkK1xcLj9cXGQqKSg/OltlRV1bKy1dP1xcZCspPy8uZXhlYyhyZXN0KTtcblx0XHRpZiAobnVtYmVyKSB7XG5cdFx0XHRjdXJzb3IgKz0gbnVtYmVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnN0IHVuaXRNYXRjaCA9IC9eKCV8W2EtekEtWl0rKS8uZXhlYyhzb3VyY2Uuc2xpY2UoY3Vyc29yKSk7XG5cdFx0XHRjb25zdCB1bml0ID0gdW5pdE1hdGNoPy5bMF0gPz8gbnVsbDtcblx0XHRcdGlmICh1bml0TWF0Y2gpIGN1cnNvciArPSB1bml0TWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcIm51bWJlclwiLFxuXHRcdFx0XHR2YWx1ZTogTnVtYmVyKG51bWJlclswXSksXG5cdFx0XHRcdHVuaXQ6IHVuaXQgPT0gbnVsbCA/IG51bGwgOiB1bml0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSAvXlthLXpBLVpfXVthLXpBLVowLTlfLV0qLy5leGVjKHJlc3QpO1xuXHRcdGlmIChpZGVudGlmaWVyKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwiaWRlbnRpZmllclwiLFxuXHRcdFx0XHR2YWx1ZTogaWRlbnRpZmllclswXS50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvciArPSBpZGVudGlmaWVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBzeW1ib2wgPSByZXN0WzBdO1xuXHRcdGlmIChzeW1ib2wgPT09IFwiK1wiIHx8IHN5bWJvbCA9PT0gXCItXCIgfHwgc3ltYm9sID09PSBcIipcIiB8fCBzeW1ib2wgPT09IFwiL1wiIHx8IHN5bWJvbCA9PT0gXCIoXCIgfHwgc3ltYm9sID09PSBcIilcIiB8fCBzeW1ib2wgPT09IFwiLFwiKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwic3ltYm9sXCIsXG5cdFx0XHRcdHZhbHVlOiBzeW1ib2xcblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yKys7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBUeXBlZCBPTSBudW1lcmljIHRva2VuIG5lYXIgXCIke3Jlc3R9XCJgKTtcblx0fVxuXHRyZXR1cm4gdG9rZW5zO1xufTtcbnZhciBOdW1lcmljVHlwZWRPTVBhcnNlciA9IGNsYXNzIHtcblx0dG9rZW5zO1xuXHR3aW47XG5cdHJlYWN0aXZlQnlNYXJrZXI7XG5cdHR5cGVkQnlNYXJrZXI7XG5cdGluZGV4ID0gMDtcblx0bGVhdmVzID0gW107XG5cdGNvbnN0cnVjdG9yKHRva2Vucywgd2luLCByZWFjdGl2ZUJ5TWFya2VyLCB0eXBlZEJ5TWFya2VyKSB7XG5cdFx0dGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy53aW4gPSB3aW47XG5cdFx0dGhpcy5yZWFjdGl2ZUJ5TWFya2VyID0gcmVhY3RpdmVCeU1hcmtlcjtcblx0XHR0aGlzLnR5cGVkQnlNYXJrZXIgPSB0eXBlZEJ5TWFya2VyO1xuXHR9XG5cdHBhcnNlKCkge1xuXHRcdGNvbnN0IHJvb3QgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0aWYgKHRoaXMuaW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCB0cmFpbGluZyBUeXBlZCBPTSBleHByZXNzaW9uXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyb290LFxuXHRcdFx0bGVhdmVzOiB0aGlzLmxlYXZlc1xuXHRcdH07XG5cdH1cblx0Y3VycmVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdH1cblx0Y29uc3VtZSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIFR5cGVkIE9NIGV4cHJlc3Npb25cIik7XG5cdFx0dGhpcy5pbmRleCsrO1xuXHRcdHJldHVybiB0b2tlbjtcblx0fVxuXHRjb25zdW1lU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwic3ltYm9sXCIgfHwgdG9rZW4udmFsdWUgIT09IHN5bWJvbCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBFeHBlY3RlZCBcIiR7c3ltYm9sfVwiYCk7XG5cdH1cblx0bWF0Y2hlc1N5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudCgpO1xuXHRcdHJldHVybiB0b2tlbj8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gc3ltYm9sO1xuXHR9XG5cdGNyZWF0ZU1hdGgobmFtZSwgLi4udmFsdWVzKSB7XG5cdFx0Y29uc3QgQ29uc3RydWN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih0aGlzLndpbiwgbmFtZSk7XG5cdFx0aWYgKHR5cGVvZiBDb25zdHJ1Y3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRyZXR1cm4gbmV3IENvbnN0cnVjdG9yKC4uLnZhbHVlcyk7XG5cdH1cblx0cGFyc2VTdW0oKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlUHJvZHVjdCgpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLmtpbmQgIT09IFwic3ltYm9sXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgc3VtIG9wZXJhdG9yXCIpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLnZhbHVlID09PSBcIitcIikgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCByaWdodCk7XG5cdFx0XHRlbHNlIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFN1bVwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE5lZ2F0ZVwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VQcm9kdWN0KCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VVbmFyeSgpO1xuXHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIqXCIpIHx8IHRoaXMubWF0Y2hlc1N5bWJvbChcIi9cIikpIHtcblx0XHRcdGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0XHRjb25zdCByaWdodCA9IHRoaXMucGFyc2VVbmFyeSgpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLmtpbmQgIT09IFwic3ltYm9sXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgcHJvZHVjdCBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIqXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aEludmVydFwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VVbmFyeSgpIHtcblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHRoaXMucGFyc2VVbmFyeSgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cdH1cblx0cGFyc2VQcmltYXJ5KCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwibnVtYmVyXCIpIHJldHVybiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgdG9rZW4udW5pdCA/PyBcIm51bWJlclwiLCB0b2tlbi52YWx1ZSk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwidmFyaWFibGVcIikge1xuXHRcdFx0Y29uc3QgcmVhY3RpdmUgPSB0aGlzLnJlYWN0aXZlQnlNYXJrZXIuZ2V0KHRva2VuLm1hcmtlcik7XG5cdFx0XHRpZiAocmVhY3RpdmUpIHtcblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikpIHtcblx0XHRcdFx0XHRjb25zdCBjaGVja3BvaW50ID0gdGhpcy5pbmRleDtcblx0XHRcdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdFx0XHRjb25zdCByaHMgPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRcdFx0XHRpZiAocmhzPy5raW5kID09PSBcIm51bWJlclwiICYmIHJocy52YWx1ZSA9PT0gMSAmJiB0eXBlb2YgcmhzLnVuaXQgPT09IFwic3RyaW5nXCIgJiYgKCFyZWFjdGl2ZS5tdWx0aXBsaWVkQnlVbml0IHx8IHJlYWN0aXZlLm11bHRpcGxpZWRCeVVuaXQgPT09IHJocy51bml0LnRvTG93ZXJDYXNlKCkpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxlYWYgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgcmhzLnVuaXQudG9Mb3dlckNhc2UoKSwgcmVhZFJlYWN0aXZlTnVtYmVyKHJlYWN0aXZlKSk7XG5cdFx0XHRcdFx0XHR0aGlzLmxlYXZlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c2xvdDogcmVhY3RpdmUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBsZWFmXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBsZWFmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmluZGV4ID0gY2hlY2twb2ludDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBsZWFmID0gY3JlYXRlVHlwZWRVbml0VmFsdWUodGhpcy53aW4sIFwibnVtYmVyXCIsIHJlYWRSZWFjdGl2ZU51bWJlcihyZWFjdGl2ZSkpO1xuXHRcdFx0XHR0aGlzLmxlYXZlcy5wdXNoKHtcblx0XHRcdFx0XHRzbG90OiByZWFjdGl2ZSxcblx0XHRcdFx0XHR2YWx1ZTogbGVhZlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGxlYWY7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0eXBlZCA9IHRoaXMudHlwZWRCeU1hcmtlci5nZXQodG9rZW4ubWFya2VyKTtcblx0XHRcdGlmICh0eXBlZCkgcmV0dXJuIHR5cGVkLnZhbHVlO1xuXHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbmtub3duIHN0eWxlIHNsb3QgXCIke3Rva2VuLm1hcmtlcn1cImApO1xuXHRcdH1cblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKHRva2VuLnZhbHVlKTtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIFR5cGVkIE9NIG51bWVyaWMgdmFsdWVcIik7XG5cdH1cblx0cGFyc2VGdW5jdGlvbihuYW1lKSB7XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJjYWxjXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVzID0gW107XG5cdFx0aWYgKCF0aGlzLm1hdGNoZXNTeW1ib2woXCIpXCIpKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIixcIikpIHtcblx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwibWluXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtaW4oKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNaW5cIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWF4XCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtYXgoKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNYXhcIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwiY2xhbXBcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcImNsYW1wKCkgcmVxdWlyZXMgdGhyZWUgdmFsdWVzXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhDbGFtcFwiLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBUeXBlZCBPTSBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHR9XG59O1xudmFyIGJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlID0gKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpID0+IHtcblx0Y29uc3QgcmVhY3RpdmVCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHR5cGVkQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgcmVhY3RpdmVTbG90cykgcmVhY3RpdmVCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgdHlwZWRTbG90cykgdHlwZWRCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRyZXR1cm4gbmV3IE51bWVyaWNUeXBlZE9NUGFyc2VyKHRva2VuaXplTnVtZXJpY0NTUyhjc3NWYWx1ZSksIHdpbiwgcmVhY3RpdmVCeU1hcmtlciwgdHlwZWRCeU1hcmtlcikucGFyc2UoKTtcbn07XG52YXIgaXNUcmFuc2Zvcm1TdHlsZVByb3BlcnR5ID0gKHByb3BlcnR5KSA9PiB7XG5cdHJldHVybiBwcm9wZXJ0eS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cmFuc2Zvcm1cIjtcbn07XG52YXIgYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZSA9IChjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IHRva2VuaXplTnVtZXJpY0NTUyhjc3NWYWx1ZSk7XG5cdGNvbnN0IGxlYXZlcyA9IFtdO1xuXHRjb25zdCBjb21wb25lbnRzID0gW107XG5cdGNvbnN0IHJlYWN0aXZlQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCB0eXBlZEJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHJlYWN0aXZlU2xvdHMpIHJlYWN0aXZlQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHR5cGVkU2xvdHMpIHR5cGVkQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0Y29uc3QgemVyb1B4ID0gKCkgPT4gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcInB4XCIsIDApO1xuXHRjb25zdCBvbmVOdW1iZXIgPSAoKSA9PiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDEpO1xuXHRsZXQgaW5kZXggPSAwO1xuXHRjb25zdCBjdXJyZW50ID0gKCkgPT4gdG9rZW5zW2luZGV4XTtcblx0Y29uc3QgY29uc3VtZSA9ICgpID0+IHtcblx0XHRjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF07XG5cdFx0aWYgKCF0b2tlbikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgdHJhbnNmb3JtIGV4cHJlc3Npb25cIik7XG5cdFx0aW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH07XG5cdGNvbnN0IGNvbnN1bWVTeW1ib2wgPSAoc3ltYm9sKSA9PiB7XG5cdFx0Y29uc3QgdG9rZW4gPSBjb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwic3ltYm9sXCIgfHwgdG9rZW4udmFsdWUgIT09IHN5bWJvbCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBFeHBlY3RlZCBcIiR7c3ltYm9sfVwiYCk7XG5cdH07XG5cdGNvbnN0IHBhcnNlQXJndW1lbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnQgPSBpbmRleDtcblx0XHRsZXQgZGVwdGggPSAwO1xuXHRcdHdoaWxlIChpbmRleCA8IHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XTtcblx0XHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIihcIikge1xuXHRcdFx0XHRkZXB0aCsrO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIilcIikge1xuXHRcdFx0XHRpZiAoZGVwdGggPT09IDApIGJyZWFrO1xuXHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIixcIiAmJiBkZXB0aCA9PT0gMCkgYnJlYWs7XG5cdFx0XHRpbmRleCsrO1xuXHRcdH1cblx0XHRjb25zdCBzbGljZSA9IHRva2Vucy5zbGljZShzdGFydCwgaW5kZXgpO1xuXHRcdGlmIChzbGljZS5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkVtcHR5IHRyYW5zZm9ybSBmdW5jdGlvbiBhcmd1bWVudFwiKTtcblx0XHRjb25zdCB0cmVlID0gbmV3IE51bWVyaWNUeXBlZE9NUGFyc2VyKHNsaWNlLCB3aW4sIHJlYWN0aXZlQnlNYXJrZXIsIHR5cGVkQnlNYXJrZXIpLnBhcnNlKCk7XG5cdFx0bGVhdmVzLnB1c2goLi4udHJlZS5sZWF2ZXMpO1xuXHRcdHJldHVybiB0cmVlLnJvb3Q7XG5cdH07XG5cdGNvbnN0IHBhcnNlQXJndW1lbnRMaXN0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGFyZ3MgPSBbXTtcblx0XHRjb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAoIShjdXJyZW50KCk/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgY3VycmVudCgpPy52YWx1ZSA9PT0gXCIpXCIpKSB7XG5cdFx0XHRhcmdzLnB1c2gocGFyc2VBcmd1bWVudCgpKTtcblx0XHRcdHdoaWxlIChjdXJyZW50KCk/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgY3VycmVudCgpPy52YWx1ZSA9PT0gXCIsXCIpIHtcblx0XHRcdFx0Y29uc3VtZSgpO1xuXHRcdFx0XHRhcmdzLnB1c2gocGFyc2VBcmd1bWVudCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0cmV0dXJuIGFyZ3M7XG5cdH07XG5cdGNvbnN0IGNyZWF0ZUNvbXBvbmVudCA9IChuYW1lLCBhcmdzKSA9PiB7XG5cdFx0Y29uc3QgY3RvciA9IChjbGFzc05hbWUpID0+IHtcblx0XHRcdGNvbnN0IEN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIGNsYXNzTmFtZSk7XG5cdFx0XHRpZiAodHlwZW9mIEN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtjbGFzc05hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybiBDdG9yO1xuXHRcdH07XG5cdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRlXCI6IHtcblx0XHRcdFx0Y29uc3QgVHJhbnNsYXRlID0gY3RvcihcIkNTU1RyYW5zbGF0ZVwiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFRyYW5zbGF0ZShhcmdzWzBdLCB6ZXJvUHgoKSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMikgcmV0dXJuIG5ldyBUcmFuc2xhdGUoYXJnc1swXSwgYXJnc1sxXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMykgcmV0dXJuIG5ldyBUcmFuc2xhdGUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInRyYW5zbGF0ZSgpIGV4cGVjdHMgMS4uMyBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZXhcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoYXJnc1swXSwgemVyb1B4KCkpO1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZXlcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoemVyb1B4KCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZXpcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoemVyb1B4KCksIHplcm9QeCgpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGUzZFwiOlxuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcInRyYW5zbGF0ZTNkKCkgZXhwZWN0cyAzIGFyZ3NcIik7XG5cdFx0XHRcdHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0Y2FzZSBcInNjYWxlXCI6IHtcblx0XHRcdFx0Y29uc3QgU2NhbGUgPSBjdG9yKFwiQ1NTU2NhbGVcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBTY2FsZShhcmdzWzBdLCBhcmdzWzBdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAyKSByZXR1cm4gbmV3IFNjYWxlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDMpIHJldHVybiBuZXcgU2NhbGUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInNjYWxlKCkgZXhwZWN0cyAxLi4zIGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwic2NhbGV4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkoYXJnc1swXSwgb25lTnVtYmVyKCkpO1xuXHRcdFx0Y2FzZSBcInNjYWxleVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKG9uZU51bWJlcigpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJzY2FsZXpcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShvbmVOdW1iZXIoKSwgb25lTnVtYmVyKCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInNjYWxlM2RcIjpcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJzY2FsZTNkKCkgZXhwZWN0cyAzIGFyZ3NcIik7XG5cdFx0XHRcdHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRjYXNlIFwicm90YXRlXCI6IHtcblx0XHRcdFx0Y29uc3QgUm90YXRlID0gY3RvcihcIkNTU1JvdGF0ZVwiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFJvdGF0ZShhcmdzWzBdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSA0KSByZXR1cm4gbmV3IFJvdGF0ZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwicm90YXRlKCkgZXhwZWN0cyAxIG9yIDQgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJyb3RhdGV4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKG9uZU51bWJlcigpLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGV5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIG9uZU51bWJlcigpLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGV6XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIG9uZU51bWJlcigpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGUzZFwiOlxuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggIT09IDQpIHRocm93IG5ldyBTeW50YXhFcnJvcihcInJvdGF0ZTNkKCkgZXhwZWN0cyA0IGFyZ3NcIik7XG5cdFx0XHRcdHJldHVybiBuZXcgKGN0b3IoXCJDU1NSb3RhdGVcIikpKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuXHRcdFx0Y2FzZSBcInNrZXdcIjoge1xuXHRcdFx0XHRjb25zdCBTa2V3ID0gY3RvcihcIkNTU1NrZXdcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBTa2V3KGFyZ3NbMF0sIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJkZWdcIiwgMCkpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDIpIHJldHVybiBuZXcgU2tldyhhcmdzWzBdLCBhcmdzWzFdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwic2tldygpIGV4cGVjdHMgMS4uMiBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInNrZXd4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTa2V3WFwiKSkoYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwic2tld3lcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NrZXdZXCIpKShhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJwZXJzcGVjdGl2ZVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUGVyc3BlY3RpdmVcIikpKGFyZ3NbMF0pO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2Zvcm0gZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0XHR9XG5cdH07XG5cdHdoaWxlIChpbmRleCA8IHRva2Vucy5sZW5ndGgpIHtcblx0XHRjb25zdCB0b2tlbiA9IGNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJpZGVudGlmaWVyXCIpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIG5hbWVcIik7XG5cdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRMaXN0KCk7XG5cdFx0Y29tcG9uZW50cy5wdXNoKGNyZWF0ZUNvbXBvbmVudCh0b2tlbi52YWx1ZSwgYXJncykpO1xuXHR9XG5cdGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRW1wdHkgdHJhbnNmb3JtIGxpc3RcIik7XG5cdGNvbnN0IENTU1RyYW5zZm9ybVZhbHVlQ3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgXCJDU1NUcmFuc2Zvcm1WYWx1ZVwiKTtcblx0aWYgKHR5cGVvZiBDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNTU1RyYW5zZm9ybVZhbHVlIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG5cdHJldHVybiB7XG5cdFx0cm9vdDogbmV3IENTU1RyYW5zZm9ybVZhbHVlQ3Rvcihjb21wb25lbnRzKSxcblx0XHRsZWF2ZXNcblx0fTtcbn07XG52YXIgYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZSA9IChwcm9wZXJ0eSwgY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cykgPT4ge1xuXHRpZiAoaXNUcmFuc2Zvcm1TdHlsZVByb3BlcnR5KHByb3BlcnR5KSkgcmV0dXJuIGJ1aWxkVHJhbnNmb3JtVHlwZWRPTVRyZWUoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cyk7XG5cdHJldHVybiBidWlsZE51bWVyaWNUeXBlZE9NVHJlZShjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKTtcbn07XG52YXIgYWRkTXV0YWJsZUxlYXZlcyA9ICh0YXJnZXQsIGxlYXZlcykgPT4ge1xuXHRmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRhcmdldC5nZXQobGVhZi5zbG90Lm1hcmtlcik7XG5cdFx0aWYgKGN1cnJlbnQpIGN1cnJlbnQucHVzaChsZWFmKTtcblx0XHRlbHNlIHRhcmdldC5zZXQobGVhZi5zbG90Lm1hcmtlciwgW2xlYWZdKTtcblx0fVxufTtcbnZhciBhdHRhY2hMZWFmVGFyZ2V0cyA9IChsZWF2ZXMsIHByb3BlcnR5LCByb290KSA9PiB7XG5cdHJldHVybiBsZWF2ZXMubWFwKChsZWFmKSA9PiAoe1xuXHRcdHNsb3Q6IGxlYWYuc2xvdCxcblx0XHR2YWx1ZTogbGVhZi52YWx1ZSxcblx0XHRwcm9wZXJ0eSxcblx0XHRyb290XG5cdH0pKTtcbn07XG52YXIgYXBwbHlTdHlsZVRlbXBsYXRlID0gKGVsZW1lbnQsIGNzc1RleHQsIHR5cGVkU2xvdHMsIHJlYWN0aXZlU2xvdHMsIHZhcmlhYmxlcywgYW5pbWF0YWJsZVNsb3RzKSA9PiB7XG5cdGNvbnN0IHByb2JlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRwcm9iZS5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcblx0YXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUoZWxlbWVudCwgXCJcIik7XG5cdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQ7XG5cdGNvbnN0IHN0eWxlTWFwID0gdGFyZ2V0LmF0dHJpYnV0ZVN0eWxlTWFwID8/IHRhcmdldC5zdHlsZU1hcDtcblx0Y29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdGNvbnN0IENTU1N0eWxlVmFsdWVDdG9yID0gd2luPy5DU1NTdHlsZVZhbHVlID8/IGdsb2JhbFRoaXMuQ1NTU3R5bGVWYWx1ZTtcblx0Y29uc3QgbXV0YWJsZUxlYXZlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlcXVpcmVkQ1NTVmFyaWFibGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3Qgc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRjb25zdCBwcm9wZXJ0eU1vZGVPd25lZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiBhbmltYXRhYmxlU2xvdHMpIHtcblx0XHRsZXQgcGxhbiA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9iZS5zdHlsZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9iZS5zdHlsZS5pdGVtKGkpO1xuXHRcdFx0Y29uc3QgcGFyc2VkVmFsdWUgPSBwcm9iZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcblx0XHRcdGlmIChpc0RpcmVjdFNsb3RWYWx1ZShwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIpKSB7XG5cdFx0XHRcdHBsYW4gPSB7XG5cdFx0XHRcdFx0bW9kZTogXCJwcm9wZXJ0eVwiLFxuXHRcdFx0XHRcdHRhcmdldDogcHJvcGVydHlcblx0XHRcdFx0fTtcblx0XHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgc2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlKHNsb3QudmFsdWUudmFsdWUpKTtcblx0XHRcdFx0cHJvcGVydHlNb2RlT3duZWQuYWRkKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyLCBzbG90Lm11bHRpcGxpZWRCeVVuaXQpKSB7XG5cdFx0XHRcdHBsYW4gPSB7XG5cdFx0XHRcdFx0bW9kZTogXCJwcm9wZXJ0eVwiLFxuXHRcdFx0XHRcdHRhcmdldDogcHJvcGVydHksXG5cdFx0XHRcdFx0dW5pdDogc2xvdC5tdWx0aXBsaWVkQnlVbml0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZShzbG90LnZhbHVlLnZhbHVlLCBzbG90Lm11bHRpcGxpZWRCeVVuaXQpKTtcblx0XHRcdFx0cHJvcGVydHlNb2RlT3duZWQuYWRkKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghcGxhbikge1xuXHRcdFx0Y29uc3QgaW5pdGlhbE51bWJlciA9IE51bWJlcihzbG90LnZhbHVlLnZhbHVlKSB8fCAwO1xuXHRcdFx0ZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5KHdpbiwgc2xvdC5tYXJrZXIsIGluaXRpYWxOdW1iZXIpO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzbG90Lm1hcmtlciwgU3RyaW5nKGluaXRpYWxOdW1iZXIpKTtcblx0XHRcdHBsYW4gPSB7XG5cdFx0XHRcdG1vZGU6IFwiY3VzdG9tLXByb3BlcnR5XCIsXG5cdFx0XHRcdHRhcmdldDogc2xvdC5tYXJrZXJcblx0XHRcdH07XG5cdFx0fVxuXHRcdHN1YnNjcmlwdGlvbnMucHVzaChzbG90LnZhbHVlLmF0dGFjaChlbGVtZW50LCBwbGFuKSk7XG5cdH1cblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHByb2JlLnN0eWxlLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvYmUuc3R5bGUuaXRlbShpbmRleCk7XG5cdFx0aWYgKHByb3BlcnR5TW9kZU93bmVkLmhhcyhwcm9wZXJ0eSkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHBhcnNlZFZhbHVlID0gcHJvYmUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgcHJpb3JpdHkgPSBwcm9iZS5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5KTtcblx0XHRjb25zdCB1c2VkVHlwZWRTbG90cyA9IHR5cGVkU2xvdHMuZmlsdGVyKChzbG90KSA9PiBjb250YWluc01hcmtlcihwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIpKTtcblx0XHRjb25zdCB1c2VkUmVhY3RpdmVTbG90cyA9IHJlYWN0aXZlU2xvdHMuZmlsdGVyKChzbG90KSA9PiBjb250YWluc01hcmtlcihwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIpKTtcblx0XHRpZiAodXNlZFR5cGVkU2xvdHMubGVuZ3RoID09PSAwICYmIHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgcGFyc2VkVmFsdWUsIHByaW9yaXR5KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBjYW5Vc2VUeXBlZE9NID0gc3R5bGVNYXA/LnNldCAmJiAhcHJpb3JpdHkgJiYgIXByb3BlcnR5LnN0YXJ0c1dpdGgoXCItLVwiKTtcblx0XHRsZXQgYXBwbGllZFRocm91Z2hUeXBlZE9NID0gZmFsc2U7XG5cdFx0aWYgKGNhblVzZVR5cGVkT00gJiYgdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID4gMCkgdHJ5IHtcblx0XHRcdGNvbnN0IGRpcmVjdFNsb3QgPSB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPT09IDEgJiYgdXNlZFR5cGVkU2xvdHMubGVuZ3RoID09PSAwID8gdXNlZFJlYWN0aXZlU2xvdHNbMF0gOiBudWxsO1xuXHRcdFx0aWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQpKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZFZhbHVlID0gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQsIHJlYWRSZWFjdGl2ZU51bWJlcihkaXJlY3RTbG90KSk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgbGlua2VkVmFsdWUpO1xuXHRcdFx0XHRhZGRNdXRhYmxlTGVhdmVzKG11dGFibGVMZWF2ZXMsIGF0dGFjaExlYWZUYXJnZXRzKFt7XG5cdFx0XHRcdFx0c2xvdDogZGlyZWN0U2xvdCxcblx0XHRcdFx0XHR2YWx1ZTogbGlua2VkVmFsdWVcblx0XHRcdFx0fV0sIHByb3BlcnR5LCBsaW5rZWRWYWx1ZSkpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFZhbHVlKHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlcikpIHtcblx0XHRcdFx0Y29uc3QgbGlua2VkVmFsdWUgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIHJlYWRSZWFjdGl2ZU51bWJlcihkaXJlY3RTbG90KSk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgbGlua2VkVmFsdWUpO1xuXHRcdFx0XHRhZGRNdXRhYmxlTGVhdmVzKG11dGFibGVMZWF2ZXMsIGF0dGFjaExlYWZUYXJnZXRzKFt7XG5cdFx0XHRcdFx0c2xvdDogZGlyZWN0U2xvdCxcblx0XHRcdFx0XHR2YWx1ZTogbGlua2VkVmFsdWVcblx0XHRcdFx0fV0sIHByb3BlcnR5LCBsaW5rZWRWYWx1ZSkpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUocHJvcGVydHksIHBhcnNlZFZhbHVlLCB3aW4sIHVzZWRSZWFjdGl2ZVNsb3RzLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgdHJlZS5yb290KTtcblx0XHRcdFx0YWRkTXV0YWJsZUxlYXZlcyhtdXRhYmxlTGVhdmVzLCBhdHRhY2hMZWFmVGFyZ2V0cyh0cmVlLmxlYXZlcywgcHJvcGVydHksIHRyZWUucm9vdCkpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge31cblx0XHRpZiAoYXBwbGllZFRocm91Z2hUeXBlZE9NKSBjb250aW51ZTtcblx0XHRpZiAoY2FuVXNlVHlwZWRPTSAmJiB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPT09IDAgJiYgdXNlZFR5cGVkU2xvdHMubGVuZ3RoID4gMCkgdHJ5IHtcblx0XHRcdGNvbnN0IGRpcmVjdFNsb3QgPSB1c2VkVHlwZWRTbG90cy5sZW5ndGggPT09IDEgPyB1c2VkVHlwZWRTbG90c1swXSA6IG51bGw7XG5cdFx0XHRpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RWYWx1ZShwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIpKSB7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgZGlyZWN0U2xvdC52YWx1ZSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQpKSB7XG5cdFx0XHRcdGNvbnN0IENTU01hdGhQcm9kdWN0Q3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgXCJDU1NNYXRoUHJvZHVjdFwiKTtcblx0XHRcdFx0aWYgKHR5cGVvZiBDU1NNYXRoUHJvZHVjdEN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNTU01hdGhQcm9kdWN0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHRcdGNvbnN0IHByb2R1Y3QgPSBuZXcgQ1NTTWF0aFByb2R1Y3RDdG9yKGRpcmVjdFNsb3QudmFsdWUsIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0LCAxKSk7XG5cdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgcHJvZHVjdCk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHRyZWUgPSBidWlsZFR5cGVkT01TdHlsZVZhbHVlKHByb3BlcnR5LCBwYXJzZWRWYWx1ZSwgd2luLCBbXSwgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdFx0XHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgdHJlZS5yb290KTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Y29uc3QgcmVjb25zdHJ1Y3RlZCA9IHJlcGxhY2VUeXBlZE1hcmtlcnMocGFyc2VkVmFsdWUsIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRcdFx0XHRzZXRQYXJzZWRUeXBlZFZhbHVlKHN0eWxlTWFwLCBDU1NTdHlsZVZhbHVlQ3RvciwgcHJvcGVydHksIHJlY29uc3RydWN0ZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7fVxuXHRcdGlmIChhcHBsaWVkVGhyb3VnaFR5cGVkT00pIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHJlY29uc3RydWN0ZWQgPSByZXBsYWNlVHlwZWRNYXJrZXJzKHBhcnNlZFZhbHVlLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgcmVjb25zdHJ1Y3RlZCwgcHJpb3JpdHkpO1xuXHRcdGZvciAoY29uc3Qgc2xvdCBvZiB1c2VkUmVhY3RpdmVTbG90cykgcmVxdWlyZWRDU1NWYXJpYWJsZXMuYWRkKHNsb3QubWFya2VyKTtcblx0fVxuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgcmVhY3RpdmVTbG90cykge1xuXHRcdGNvbnN0IGxlYXZlcyA9IG11dGFibGVMZWF2ZXMuZ2V0KHNsb3QubWFya2VyKSA/PyBbXTtcblx0XHRjb25zdCBuZWVkc0NTU1ZhcmlhYmxlID0gcmVxdWlyZWRDU1NWYXJpYWJsZXMuaGFzKHNsb3QubWFya2VyKTtcblx0XHRpZiAobGVhdmVzLmxlbmd0aCA9PT0gMCAmJiAhbmVlZHNDU1NWYXJpYWJsZSkgY29udGludWU7XG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uID0gYmluZFdpdGgoZWxlbWVudCwgc2xvdC5tYXJrZXIsIHNsb3QudmFsdWUsIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0XHRcdGlmIChsZWF2ZXMubGVuZ3RoID4gMCkgdHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dFZhbHVlID0gcmVhZFJlYWN0aXZlTnVtYmVyKHNsb3QpO1xuXHRcdFx0XHRjb25zdCBkaXJ0eVJvb3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuXHRcdFx0XHRcdGxlYWYudmFsdWUudmFsdWUgPSBuZXh0VmFsdWU7XG5cdFx0XHRcdFx0ZGlydHlSb290cy5zZXQobGVhZi5wcm9wZXJ0eSwgbGVhZi5yb290KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc3R5bGVNYXA/LnNldCkgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCByb290XSBvZiBkaXJ0eVJvb3RzKSBzdHlsZU1hcC5zZXQocHJvcGVydHlOYW1lLCByb290KTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdGlmIChuZWVkc0NTU1ZhcmlhYmxlKSBoYW5kbGVTdHlsZUNoYW5nZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9KTtcblx0XHRzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblx0fVxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgcmVxdWlyZWRDU1NWYXJpYWJsZXMpIHtcblx0XHRpZiAocmVhY3RpdmVTbG90cy5zb21lKChzbG90KSA9PiBzbG90Lm1hcmtlciA9PT0gbmFtZSkpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFyaWFibGVzLmdldChuYW1lKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG5cdFx0c3Vic2NyaXB0aW9ucy5wdXNoKGJpbmRXaXRoKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBoYW5kbGVTdHlsZUNoYW5nZSkpO1xuXHR9XG5cdHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZShlbGVtZW50KTtcblx0cmV0dXJuICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zKSBzdWJzY3JpcHRpb24/LigpO1xuXHR9O1xufTtcbnZhciBjb21wbGlsZVN0YXRpY0NTU1RleHQgPSAoZm9yUmV0dXJuKSA9PiB7XG5cdGNvbnN0IFthcHBseSwgcHJvcGVydGllcywgdmFyaWFibGVzXSA9IGZvclJldHVybjtcblx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdGFwcGx5KGVsZW1lbnQpO1xuXHRyZXR1cm4gZWxlbWVudC5zdHlsZS5jc3NUZXh0O1xufTtcbnZhciBTID0gKHN0cmluZ3MsIC4uLnZhbHVlcykgPT4ge1xuXHRjb25zdCB0ZW1wbGF0ZUlkID0gc3R5bGVUZW1wbGF0ZUlkKys7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcblx0Y29uc3QgdmFyaWFibGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgdHlwZWRTbG90cyA9IFtdO1xuXHRjb25zdCByZWFjdGl2ZVNsb3RzID0gW107XG5cdGNvbnN0IHBhcnRzID0gW107XG5cdGNvbnN0IGFuaW1hdGFibGVTbG90cyA9IFtdO1xuXHRjb25zdCBjb25zdW1lZCA9IG5ldyBBcnJheShzdHJpbmdzLmxlbmd0aCkuZmlsbCgwKTtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHN0cmluZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0cGFydHMucHVzaChzdHJpbmdzW2luZGV4XS5zbGljZShjb25zdW1lZFtpbmRleF0pKTtcblx0XHRpZiAoaW5kZXggPj0gdmFsdWVzLmxlbmd0aCkgY29udGludWU7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdO1xuXHRcdGNvbnN0IG5leHRUZXh0ID0gc3RyaW5nc1tpbmRleCArIDFdID8/IFwiXCI7XG5cdFx0Y29uc3QgYXR0YWNoZWRVbml0ID0gcmVhZEF0dGFjaGVkQ1NTVW5pdChuZXh0VGV4dCk7XG5cdFx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IG1hcmtlciA9IGAtLWZlc3QtdHlwZWQtJHt0ZW1wbGF0ZUlkfS0ke3R5cGVkU2xvdHMubGVuZ3RofWA7XG5cdFx0XHR0eXBlZFNsb3RzLnB1c2goe1xuXHRcdFx0XHRtYXJrZXIsXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRtdWx0aXBsaWVkQnlVbml0OiBhdHRhY2hlZFVuaXQ/Lm5vcm1hbGl6ZWRcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGF0dGFjaGVkVW5pdCkge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGBjYWxjKHZhcigke21hcmtlcn0pICogMSR7YXR0YWNoZWRVbml0LmF1dGhvcmVkfSlgKTtcblx0XHRcdFx0Y29uc3VtZWRbaW5kZXggKyAxXSArPSBhdHRhY2hlZFVuaXQubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHBhcnRzLnB1c2goYHZhcigke21hcmtlcn0pYCk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKGlzQW5pbWF0YWJsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgbWFya2VyID0gYC0tZmVzdC1hbmltLSR7dGVtcGxhdGVJZH0tJHthbmltYXRhYmxlU2xvdHMubGVuZ3RofWA7XG5cdFx0XHRpZiAoYXR0YWNoZWRVbml0KSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYGNhbGModmFyKCR7bWFya2VyfSkgKiAxJHthdHRhY2hlZFVuaXQuYXV0aG9yZWR9KWApO1xuXHRcdFx0XHRjb25zdW1lZFtpbmRleCArIDFdICs9IGF0dGFjaGVkVW5pdC5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgcGFydHMucHVzaChgdmFyKCR7bWFya2VyfSlgKTtcblx0XHRcdHByb3BlcnRpZXMucHVzaChgQHByb3BlcnR5ICR7bWFya2VyfSB7IHN5bnRheDogXCI8bnVtYmVyPlwiOyBpbml0aWFsLXZhbHVlOiAke051bWJlcih2YWx1ZS52YWx1ZSkgfHwgMH07IGluaGVyaXRzOiBmYWxzZTsgfTtgKTtcblx0XHRcdGFuaW1hdGFibGVTbG90cy5wdXNoKHtcblx0XHRcdFx0bWFya2VyLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bXVsdGlwbGllZEJ5VW5pdDogYXR0YWNoZWRVbml0Py5ub3JtYWxpemVkXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRjb25zdCBtYXJrZXIgPSBgLS1mZXN0LXJlZi0ke3RlbXBsYXRlSWR9LSR7cmVhY3RpdmVTbG90cy5sZW5ndGh9YDtcblx0XHRcdHJlYWN0aXZlU2xvdHMucHVzaCh7XG5cdFx0XHRcdG1hcmtlcixcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdG11bHRpcGxpZWRCeVVuaXQ6IGF0dGFjaGVkVW5pdD8ubm9ybWFsaXplZFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYXR0YWNoZWRVbml0KSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYGNhbGModmFyKCR7bWFya2VyfSkgKiAxJHthdHRhY2hlZFVuaXQuYXV0aG9yZWR9KWApO1xuXHRcdFx0XHRjb25zdW1lZFtpbmRleCArIDFdICs9IGF0dGFjaGVkVW5pdC5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgcGFydHMucHVzaChgdmFyKCR7bWFya2VyfSlgKTtcblx0XHRcdGNvbnN0IGluaXRpYWxWYWx1ZSA9IGdldFJlYWN0aXZlSW5pdGlhbE51bWJlcih2YWx1ZSk7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYEBwcm9wZXJ0eSAke21hcmtlcn0geyBzeW50YXg6IFwiPG51bWJlcj5cIjsgaW5pdGlhbC12YWx1ZTogJHtpbml0aWFsVmFsdWV9OyBpbmhlcml0czogdHJ1ZTsgfTtgKTtcblx0XHRcdHZhcmlhYmxlcy5zZXQobWFya2VyLCB2YWx1ZSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZSAhPSBudWxsICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpICE9PSBcIlwiKSBwYXJ0cy5wdXNoKFN0cmluZyh2YWx1ZSkpO1xuXHR9XG5cdGNvbnN0IGZvclJldHVybiA9IFtcblx0XHQoZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIGFwcGx5U3R5bGVUZW1wbGF0ZShlbGVtZW50LCBwYXJ0cy5qb2luKFwiXCIpLCB0eXBlZFNsb3RzLCByZWFjdGl2ZVNsb3RzLCB2YXJpYWJsZXMsIGFuaW1hdGFibGVTbG90cyk7XG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzLFxuXHRcdHZhcmlhYmxlc1xuXHRdO1xuXHRmb3JSZXR1cm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRmb3JSZXR1cm5bU3ltYm9sLnRvUHJpbWl0aXZlXSA9ICh0eXBlKSA9PiB7XG5cdFx0aWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHJldHVybiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0XHRyZXR1cm4gZm9yUmV0dXJuWzBdO1xuXHR9O1xuXHRmb3JSZXR1cm4udG9TdHJpbmcgPSAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0Zm9yUmV0dXJuLnZhbHVlT2YgPSAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZvclJldHVybiwgXCJjc3NUZXh0XCIsIHtcblx0XHRnZXQ6ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pLFxuXHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInNldCBjc3NUZXh0XCIsIHZhbHVlKTtcblx0XHRcdGNvbnN0IFthcHBseSwgcHJvcGVydGllcywgdmFyaWFibGVzXSA9IGZvclJldHVybjtcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0YXBwbHkoZWxlbWVudCk7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSB2YWx1ZTtcblx0XHR9LFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiB0cnVlXG5cdH0pO1xuXHRyZXR1cm4gZm9yUmV0dXJuO1xufTtcbnZhciBjc3MgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdHJldHVybiBTKHN0cmluZ3MsIC4uLnZhbHVlcyk7XG59O1xudmFyIHNwbGl0SW5saW5lU3R5bGVQbGFjZWhvbGRlcnMgPSAoc291cmNlLCBhdHRyaWJ1dGVzKSA9PiB7XG5cdGNvbnN0IHN0cmluZ3MgPSBbXTtcblx0Y29uc3QgdmFsdWVzID0gW107XG5cdGNvbnN0IHBhdHRlcm4gPSAvI1xceyhcXGQrKVxcfS9nO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0bGV0IG1hdGNoO1xuXHR3aGlsZSAoKG1hdGNoID0gcGF0dGVybi5leGVjKHNvdXJjZSkpICE9IG51bGwpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVJbmRleCA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSwgMTApO1xuXHRcdGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoYXR0cmlidXRlSW5kZXgpIHx8IGF0dHJpYnV0ZUluZGV4IDwgMCkgY29udGludWU7XG5cdFx0c3RyaW5ncy5wdXNoKHNvdXJjZS5zbGljZShjdXJzb3IsIG1hdGNoLmluZGV4KSk7XG5cdFx0dmFsdWVzLnB1c2goYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pO1xuXHRcdGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXHR9XG5cdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0c3RyaW5ncy5wdXNoKHNvdXJjZS5zbGljZShjdXJzb3IpKTtcblx0cmV0dXJuIHtcblx0XHRzdHJpbmdzLFxuXHRcdHZhbHVlc1xuXHR9O1xufTtcbnZhciBqb2luU3RhdGljSW5saW5lU3R5bGUgPSAoc3RyaW5ncywgdmFsdWVzKSA9PiB7XG5cdGxldCByZXN1bHQgPSBzdHJpbmdzWzBdID8/IFwiXCI7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdO1xuXHRcdGlmICh2YWx1ZSAhPSBudWxsKSByZXN1bHQgKz0gU3RyaW5nKHZhbHVlKTtcblx0XHRyZXN1bHQgKz0gc3RyaW5nc1tpbmRleCArIDFdID8/IFwiXCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG52YXIgY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlID0gKHNvdXJjZSwgYXR0cmlidXRlcykgPT4ge1xuXHRjb25zdCBwYXJzZWQgPSBzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzKHNvdXJjZSwgYXR0cmlidXRlcyk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgeyBzdHJpbmdzLCB2YWx1ZXMgfSA9IHBhcnNlZDtcblx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgKHN0cmluZ3NbMF0gPz8gXCJcIikudHJpbSgpID09PSBcIlwiICYmIChzdHJpbmdzWzFdID8/IFwiXCIpLnRyaW0oKSA9PT0gXCJcIiAmJiAhaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24odmFsdWVzWzBdKSAmJiAhaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlc1swXSkpIHtcblx0XHRpZiAoaXNTdHlsZUJpbmRpbmcodmFsdWVzWzBdKSkgcmV0dXJuIHtcblx0XHRcdGtpbmQ6IFwidGVtcGxhdGVcIixcblx0XHRcdGJpbmRpbmc6IHZhbHVlc1swXVxuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtpbmQ6IFwiZGlyZWN0XCIsXG5cdFx0XHR2YWx1ZTogdmFsdWVzWzBdXG5cdFx0fTtcblx0fVxuXHRpZiAodmFsdWVzLnNvbWUoKHZhbHVlKSA9PiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkgfHwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkpIHJldHVybiB7XG5cdFx0a2luZDogXCJ0ZW1wbGF0ZVwiLFxuXHRcdGJpbmRpbmc6IFMoc3RyaW5ncywgLi4udmFsdWVzKVxuXHR9O1xuXHRpZiAodmFsdWVzLmV2ZXJ5KGlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uKSkgcmV0dXJuIHtcblx0XHRraW5kOiBcInN0YXRpY1wiLFxuXHRcdGNzc1RleHQ6IGpvaW5TdGF0aWNJbmxpbmVTdHlsZShzdHJpbmdzLCB2YWx1ZXMpXG5cdH07XG5cdHJldHVybiB7XG5cdFx0a2luZDogXCJ0ZW1wbGF0ZVwiLFxuXHRcdGJpbmRpbmc6IFMoc3RyaW5ncywgLi4udmFsdWVzKVxuXHR9O1xufTtcbnZhciBiaW5kU3R5bGUgPSAoZWxlbWVudCwgc3R5bGVkKSA9PiB7XG5cdGNvbnN0IGFwcGx5ID0gQXJyYXkuaXNBcnJheShzdHlsZWQpID8gc3R5bGVkWzBdIDogc3R5bGVkO1xuXHRpZiAodHlwZW9mIGFwcGx5ICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiAoKSA9PiB7fTtcblx0Y29uc3QgcmVzdWx0ID0gYXBwbHkoZWxlbWVudCk7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmVzdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJlc3VsdD8udW5iaW5kPy4oKTtcblx0fTtcbn07XG52YXIgZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5ID0gKHdpbiwgbmFtZSwgaW5pdGlhbFZhbHVlKSA9PiB7XG5cdGlmIChyZWdpc3RlcmVkUHJvcGVydGllcy5oYXMobmFtZSkpIHJldHVybjtcblx0cmVnaXN0ZXJlZFByb3BlcnRpZXMuYWRkKG5hbWUpO1xuXHR0cnkge1xuXHRcdCh3aW4/LkNTUyA/PyBDU1MpPy5yZWdpc3RlclByb3BlcnR5Py4oe1xuXHRcdFx0bmFtZSxcblx0XHRcdHN5bnRheDogXCI8bnVtYmVyPlwiLFxuXHRcdFx0aW5pdGlhbFZhbHVlOiBTdHJpbmcoaW5pdGlhbFZhbHVlKSxcblx0XHRcdGluaGVyaXRzOiBmYWxzZVxuXHRcdH0pO1xuXHR9IGNhdGNoIHt9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvQW5pbWF0ZS50c1xudmFyIHBhcnNlUHJvcGVydHlMaXN0ID0gKG9wdGlvbnMpID0+IHtcblx0Y29uc3QgZnJvbVN0cmluZyA9IFtdO1xuXHRpZiAodHlwZW9mIG9wdGlvbnMucHJvcGVydGllcyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y29uc3QgcHJvcHMgPSBvcHRpb25zLnByb3BlcnRpZXM/LnRyaW0/LigpPy5zcGxpdD8uKFwiO1wiKTtcblx0XHRmcm9tU3RyaW5nLnB1c2goLi4uQXJyYXkuZnJvbShwcm9wcyB8fCBbXSk/Lm1hcD8uKCgkcGFpcikgPT4ge1xuXHRcdFx0aWYgKCRwYWlyPy5pbmNsdWRlcz8uKFwiOlwiKSkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9ICgkcGFpcj8uc3BsaXQ/LihcIjpcIikgPz8gW10pPy5zbGljZT8uKDEsIC0xKT8uam9pbj8uKFwiOlwiKTtcblx0XHRcdFx0cmV0dXJuIHsgWygkcGFpcj8uWzBdKT8udHJpbT8uKCldOiB2YWx1ZT8udHJpbT8uKCkgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pPy5maWx0ZXI/LigoYSkgPT4gYSAhPSBudWxsKSB8fCBbXSk7XG5cdH1cblx0cmV0dXJuIEFycmF5LmZyb20oQXJyYXkuaXNBcnJheShvcHRpb25zLnByb3BlcnRpZXMpID8gb3B0aW9ucy5wcm9wZXJ0aWVzIDogZnJvbVN0cmluZyk7XG59O1xudmFyIHBhcnNlQW5pbWF0aW9uVGVtcGxhdGUgPSAoc3RyaW5ncywgdmFsdWVzKSA9PiB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRsZXQgZnVsbFRleHQgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRmdWxsVGV4dCArPSBzdHJpbmdzW2ldO1xuXHRcdGlmIChpIDwgdmFsdWVzLmxlbmd0aCkgZnVsbFRleHQgKz0gYF9fU0xPVF8ke2l9X19gO1xuXHR9XG5cdGNvbnN0IGRlY2xhcmF0aW9ucyA9IGZ1bGxUZXh0LnNwbGl0KFwiO1wiKS5tYXAoKHMpID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG5cdGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgZGVjbGFyYXRpb25zKSB7XG5cdFx0Y29uc3QgY29sb25JbmRleCA9IGRlY2xhcmF0aW9uLmluZGV4T2YoXCI6XCIpO1xuXHRcdGlmIChjb2xvbkluZGV4ID09PSAtMSkgY29udGludWU7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5zbGljZSgwLCBjb2xvbkluZGV4KS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWVUZXh0ID0gZGVjbGFyYXRpb24uc2xpY2UoY29sb25JbmRleCArIDEpLnRyaW0oKTtcblx0XHRjb25zdCBzbG90TWF0Y2ggPSAvX19TTE9UXyhcXGQrKV9fLy5leGVjKHZhbHVlVGV4dCk7XG5cdFx0aWYgKCFzbG90TWF0Y2gpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHNsb3RWYWx1ZSA9IHZhbHVlc1twYXJzZUludChzbG90TWF0Y2hbMV0sIDEwKV07XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHNsb3RWYWx1ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoYEFcXGAke3Byb3BlcnR5fVxcYCBleHBlY3RzIGFuIGFycmF5IG9mIHZhbHVlcywgZ290ICR7dHlwZW9mIHNsb3RWYWx1ZX1gKTtcblx0XHRwcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwge1xuXHRcdFx0cHJvcGVydHksXG5cdFx0XHR2YWx1ZXM6IHNsb3RWYWx1ZVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7IHByb3BlcnRpZXMgfTtcbn07XG52YXIgcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyA9ICh2YWx1ZXMpID0+IHtcblx0Y29uc3QgcmVzb2x2ZWQgPSBbXTtcblx0Y29uc3QgcmVhY3RpdmVJbmRpY2VzID0gW107XG5cdGxldCBoYXNSZWFjdGl2ZSA9IGZhbHNlO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuXHRcdGlmIChpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGhhc1JlYWN0aXZlID0gdHJ1ZTtcblx0XHRcdHJlYWN0aXZlSW5kaWNlcy5wdXNoKGkpO1xuXHRcdFx0cmVzb2x2ZWQucHVzaCh2YWx1ZS52YWx1ZSk7XG5cdFx0fSBlbHNlIGlmIChpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSByZXNvbHZlZC5wdXNoKHZhbHVlKTtcblx0XHRlbHNlIHJlc29sdmVkLnB1c2godmFsdWUpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0cmVzb2x2ZWQsXG5cdFx0aGFzUmVhY3RpdmUsXG5cdFx0cmVhY3RpdmVJbmRpY2VzXG5cdH07XG59O1xudmFyIGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzID0gKG9wdGlvbnMpID0+IHtcblx0Y29uc3QgZ2xvYmFsT2Zmc2V0cyA9IG9wdGlvbnM/Lm9mZnNldHM7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMpO1xuXHRpZiAocHJvcGVydHlMaXN0Lmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gYW5pbWF0YWJsZSBwcm9wZXJ0aWVzIGZvdW5kIGluIEEgdGVtcGxhdGVcIik7XG5cdGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLnByb3BlcnR5TGlzdC5tYXAoKHApID0+IHAudmFsdWVzLmxlbmd0aCkpO1xuXHRjb25zdCBvZmZzZXRzID0gKGdsb2JhbE9mZnNldHM/Lmxlbmd0aCA+IDEgPyBnbG9iYWxPZmZzZXRzIDogbnVsbCkgfHwgQXJyYXkuZnJvbSh7IGxlbmd0aDogbWF4TGVuZ3RoIH0sIChfLCBpKSA9PiBpIC8gKG1heExlbmd0aCAtIDEpKTtcblx0Y29uc3QgZnJhbWVzID0gW107XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBmcmFtZSA9IHsgb2Zmc2V0OiBvZmZzZXRzW2ldID8/IGkgLyAobWF4TGVuZ3RoIC0gMSkgfTtcblx0XHRmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydHlMaXN0KSB7XG5cdFx0XHRjb25zdCB7IHJlc29sdmVkIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRcdGNvbnN0IGtlYmFiUHJvcCA9IGNhbWVsVG9LZWJhYihwcm9wLnByb3BlcnR5KTtcblx0XHRcdGxldCB2YWx1ZSA9IHJlc29sdmVkW01hdGgubWluKGksIHJlc29sdmVkLmxlbmd0aCAtIDEpXTtcblx0XHRcdGlmIChpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRmcmFtZVtrZWJhYlByb3BdID0gdmFsdWU7XG5cdFx0fVxuXHRcdGZyYW1lcy5wdXNoKGZyYW1lKTtcblx0fVxuXHRyZXR1cm4gZnJhbWVzO1xufTtcbnZhciBidWlsZEFuaW1hdGlvblRpbWluZyA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGR1cmF0aW9uID0gcGFyc2VUaW1lKG9wdGlvbnMuZHVyYXRpb24gPz8gMzAwKTtcblx0Y29uc3QgZGVsYXkgPSBwYXJzZVRpbWUob3B0aW9ucy5kZWxheSA/PyAwKTtcblx0Y29uc3QgaXRlcmF0aW9ucyA9IG5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50KG9wdGlvbnMuaXRlcmF0aW9uQ291bnQpO1xuXHRyZXR1cm4ge1xuXHRcdGR1cmF0aW9uLFxuXHRcdGRlbGF5LFxuXHRcdGNvbXBvc2l0ZTogb3B0aW9ucy5jb21wb3NpdGUgfHwgXCJyZXBsYWNlXCIsXG5cdFx0aXRlcmF0aW9uczogaXRlcmF0aW9ucyA9PT0gXCJJbmZpbml0eVwiID8gSW5maW5pdHkgOiBpdGVyYXRpb25zLFxuXHRcdGZpbGw6IG9wdGlvbnMuZmlsbE1vZGUgPz8gXCJub25lXCIsXG5cdFx0ZGlyZWN0aW9uOiBvcHRpb25zLmRpcmVjdGlvbiA/PyBcIm5vcm1hbFwiLFxuXHRcdGVhc2luZzogdHlwZW9mIG9wdGlvbnMuZWFzaW5nID09PSBcInN0cmluZ1wiID8gb3B0aW9ucy5lYXNpbmcgOiBcImxpbmVhclwiLFxuXHRcdHRpbWVsaW5lOiBvcHRpb25zLnRpbWVsaW5lXG5cdH07XG59O1xudmFyIGNyZWF0ZVJlYWN0aXZlQW5pbWF0aW9uID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcGVydHlMaXN0ID0gcGFyc2VQcm9wZXJ0eUxpc3Qob3B0aW9ucyk7XG5cdGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBbXTtcblx0Y29uc3QgZnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMob3B0aW9ucyk7XG5cdGNvbnN0IHRpbWluZyA9IGJ1aWxkQW5pbWF0aW9uVGltaW5nKG9wdGlvbnMpO1xuXHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUoZnJhbWVzLCB0aW1pbmcpO1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydHlMaXN0KSB7XG5cdFx0Y29uc3QgeyBoYXNSZWFjdGl2ZSwgcmVhY3RpdmVJbmRpY2VzIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRpZiAoIWhhc1JlYWN0aXZlKSBjb250aW51ZTtcblx0XHRmb3IgKGNvbnN0IGluZGV4IG9mIHJlYWN0aXZlSW5kaWNlcykge1xuXHRcdFx0Y29uc3QgcmVhY3RpdmVWYWx1ZSA9IHByb3AudmFsdWVzW2luZGV4XTtcblx0XHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IGJpbmRXaXRoKGVsZW1lbnQsIGAtLWFuaW0tJHtwcm9wLnByb3BlcnR5fS0ke2luZGV4fWAsIHJlYWN0aXZlVmFsdWUsICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3RnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMob3B0aW9ucyk7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRUaW1lID0gYW5pbWF0aW9uLmN1cnJlbnRUaW1lO1xuXHRcdFx0XHRhbmltYXRpb24uZWZmZWN0ID0gbmV3IEtleWZyYW1lRWZmZWN0KGVsZW1lbnQsIG5ld0ZyYW1lcywgdGltaW5nKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRUaW1lICE9PSBudWxsKSBhbmltYXRpb24uY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcblx0XHRcdH0pO1xuXHRcdFx0c3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG5cdFx0YW5pbWF0aW9uLmNhbmNlbCgpO1xuXHRcdHN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIoKSk7XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YW5pbWF0aW9uLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgQSA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcblx0cmV0dXJuIHBhcnNlQW5pbWF0aW9uVGVtcGxhdGUoc3RyaW5ncywgdmFsdWVzKTtcbn07XG52YXIgZG9BbmltYXRpb24gPSAoZWxlbWVudCwgY29uZmlnLCBrZXlmcmFtZXMpID0+IHtcblx0aWYgKHBhcnNlUHJvcGVydHlMaXN0KGNvbmZpZykuc29tZSgocHJvcCkgPT4ge1xuXHRcdGNvbnN0IHsgaGFzUmVhY3RpdmUgfSA9IHByb2Nlc3NBbmltYXRpb25WYWx1ZXMocHJvcC52YWx1ZXMpO1xuXHRcdHJldHVybiBoYXNSZWFjdGl2ZTtcblx0fSkpIHJldHVybiBjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbihlbGVtZW50LCBjb25maWcpO1xuXHRjb25zdCBmcmFtZXMgPSBidWlsZFdlYkFuaW1hdGlvbktleWZyYW1lcyhjb25maWcpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhjb25maWcpO1xuXHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUoZnJhbWVzLCB0aW1pbmcpO1xuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRhbmltYXRpb24sXG5cdFx0Y2xlYW51cFxuXHR9O1xufTtcbnZhciBhbmltYXRlID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcGVydGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3QgW3Byb3BlcnR5LCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMucHJvcGVydGllcykpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgYW5pbWF0ZSgpIGV4cGVjdHMgYXJyYXlzIG9mIHZhbHVlcywgZ290ICR7dHlwZW9mIHZhbHVlc30gZm9yICR7cHJvcGVydHl9YCk7XG5cdFx0cHJvcGVydGllcy5zZXQocHJvcGVydHksIHtcblx0XHRcdHByb3BlcnR5LFxuXHRcdFx0dmFsdWVzXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGRvQW5pbWF0aW9uKGVsZW1lbnQsIHsgLi4ub3B0aW9ucyB9LCBwcm9wZXJ0aWVzKTtcbn07XG52YXIgZGVmaW5lQW5pbWF0aW9uID0gKG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIChlbGVtZW50KSA9PiB7XG5cdFx0cmV0dXJuIGRvQW5pbWF0aW9uKGVsZW1lbnQsIG9wdGlvbnMpO1xuXHR9O1xufTtcbnZhciBzZXF1ZW5jZUFuaW1hdGlvbnMgPSBhc3luYyAoZWxlbWVudCwgc2VxdWVuY2UpID0+IHtcblx0Zm9yIChjb25zdCBjb25maWcgb2Ygc2VxdWVuY2UpIHtcblx0XHRjb25zdCB7IGFuaW1hdGlvbiB9ID0gZG9BbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0XHRhd2FpdCBhbmltYXRpb24uZmluaXNoZWQ7XG5cdH1cbn07XG52YXIgcGFyYWxsZWxBbmltYXRpb25zID0gKGVsZW1lbnQsIGFuaW1hdGlvbnMpID0+IHtcblx0Y29uc3QgcmVzdWx0cyA9IGFuaW1hdGlvbnMubWFwKChjb25maWcpID0+IGRvQW5pbWF0aW9uKGVsZW1lbnQsIGNvbmZpZykpO1xuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdHJlc3VsdHMuZm9yRWFjaCgocikgPT4gci5jbGVhbnVwKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbnM6IHJlc3VsdHMubWFwKChyKSA9PiByLmFuaW1hdGlvbiksXG5cdFx0Y2xlYW51cFxuXHR9O1xufTtcbnZhciBzdGFnZ2VyQW5pbWF0aW9uID0gKGVsZW1lbnRzLCBvcHRpb25zLCBzdGFnZ2VyRGVsYXkgPSAxMDApID0+IHtcblx0cmV0dXJuIGVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBkZWxheSA9IHBhcnNlVGltZShvcHRpb25zPy5kZWxheSA/PyAwKSArIGluZGV4ICogc3RhZ2dlckRlbGF5O1xuXHRcdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCB7XG5cdFx0XHQuLi5vcHRpb25zLFxuXHRcdFx0ZGVsYXlcblx0XHR9KTtcblx0fSk7XG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEEsIEFOSU1BVEFCTEVfQlJBTkQsIEFuaW1hdGFibGVWYWx1ZSwgQkFLRV9DQVRFR09SSUVTLCBCQUtFX0xBWUVSLCBCQUtFX1NDUkVFTl9BTFNPLCBCQUtFX1NDUkVFTl9BTFNPX0VYUExPUkVSLCBCQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTLCBCQUtFX1NDUkVFTl9DSFJPTUUsIEJBS0VfU0NSRUVOX01FRElBLCBDU1NfQ09MT1JfUFJPUEVSVElFUywgQ1NTX0RJTUVOU0lPTl9VTklUUywgQ1NTX0RJTUVOU0lPTl9VTklUU19MSVNULCBDU1NfTU9USU9OX1BST1BFUlRJRVMsIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMsIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUywgQ1NTX1VOSVRfVE9LRU5fUkUsIERFRkFVTFRfQ0FDSEVfTVMsIERFRkFVTFRfQ0FURUdPUklFUywgSE9TVF9DU1NfRkFMTEJBQ0ssIExBWUVSX05BTUUsIExBWUVSX09QRU4sIE9XTkVSLCBTLCBTVFlMRV9USEVNRV9BVFRSUywgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUywgVVhfSE9TVF9MQVlFUlMsIFVYX1BSRUxPQURfSE9TVF9DU1MsIFZFRUxBX0NBU0NBREVfTEFZRVJTLCBWSUVXRVJfQ1NTX0xBWUVSX09SREVSLCBWSUVXRVJfUlVOVElNRV9MQVlFUlMsIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCwgYWRvcHRlZEFwcGxpZWRUZXh0LCBhZG9wdGVkQmxvYk1hcCwgYWRvcHRlZEZpbGxlZCwgYWRvcHRlZExheWVyTWFwLCBhZG9wdGVkTWFwLCBhZG9wdGVkU2VsZWN0b3JNYXAsIGFkb3B0ZWRTaGFkb3dMYXllck1hcCwgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLCBhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSwgYW5pbWF0YWJsZSwgYW5pbWF0ZSwgYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUsIGJha2VBbHNvUXVlcmllc0ZvciwgYmFrZUNvbXB1dGVkU3R5bGUsIGJha2VTY3JlZW5Db2xvcnMsIGJha2VUaGVtZUZpbmdlcnByaW50LCBiYWtlZENhY2hlLCBiYWtlZEZvbGxvd2VycywgYmFrZWRMaXZlLCBiYWtlZFN0eWxlcywgYmluZFN0eWxlLCBibG9iVVJMTWFwLCBidWlsZEJha2VkQ3NzVGV4dCwgY2FjaGVCbG9iQ29udGVudE1hcCwgY2FjaGVDb250ZW50TWFwLCBjYWNoZU1hcCwgY29sbGVjdEJha2VBbHNvSG9zdHMsIGNvbGxlY3RCYWtlU2NyZWVuSG9zdHMsIGNvbGxlY3RCYWtlZERlY2xhcmF0aW9ucywgY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlLCBjb250YWluc01hcmtlciwgY3JlYXRlU3R5bGVJZCwgY3JlYXRlVHlwZWRVbml0VmFsdWUsIGNzcywgY3NzRW1wdHlMYXllclJ1bGUsIGNzc0ltcG9ydFdpdGhMYXllciwgY3NzTGF5ZXJCbG9jaywgY3NzTGF5ZXJPcmRlciwgY3NzVGV4dEZvckFkb3B0ZWRTaGVldCwgY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50LCBjc3NVbml0Q29uc3RydWN0b3JOYW1lLCBjc3NVbml0RmFjdG9yeU5hbWUsIGRlZmluZUFuaW1hdGlvbiwgZG9BbmltYXRpb24sIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQsIGVuc3VyZUhvc3RTdHlsZXMsIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciwgZXNjYXBlQ1NTSWRlbnRpZmllciwgZXNjYXBlUmVnRXhwLCBmZXRjaEFuZENhY2hlLCBmZXRjaEFzSW5saW5lLCBnZXRBZG9wdGVkU3R5bGVSdWxlLCBnZXRCYWtlZFN0eWxlLCBnZXRFbGVtZW50Wm9vbSwgZ2V0T3JDcmVhdGVMYXllclJ1bGUsIGdldFBhZGRpbmcsIGdldFByb3BlcnR5VmFsdWUsIGdldFB4VmFsdWUsIGdldFN0eWxlTGF5ZXIsIGdldFN0eWxlUnVsZSwgZ2V0VHJhbnNmb3JtLCBnZXRUcmFuc2Zvcm1PcmlnaW4sIGdldFdpbmRvd0NvbnN0cnVjdG9yLCBoYXNUeXBlZE9NLCBoYXNoLCBpbnZhbGlkYXRlQmFrZWRTdHlsZXMsIGlzQWRvcHRlZFNoZWV0RW1wdHksIGlzQW5pbWF0YWJsZVZhbHVlLCBpc0NvbG9yVG9rZW4sIGlzQ3NzRWxlbWVudCwgaXNDc3NMYXllck5hbWUsIGlzRG9jdW1lbnQsIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCwgaXNFbGVtZW50VmlzaWJsZSwgaXNMYXllckJsb2NrUnVsZSwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlLCBpc1JlYWN0aXZlU3R5bGVWYWx1ZSwgaXNTY3JvbGxEcml2ZW4sIGlzU2hhZG93Um9vdCwgaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24sIGlzU3R5bGVCaW5kaW5nLCBpc1N0eWxlSG9zdCwgaXNTdHlsZVZhbHVlLCBpc1VuaXRWYWx1ZSwgaXNWaWV3RHJpdmVuLCBsYXllckNvdW50ZXIsIGxvYWRBc0Fkb3B0ZWQsIGxvYWRCbG9iU3R5bGUsIGxvYWRDYWNoZWRTdHlsZXMsIGxvYWRJbmxpbmVTdHlsZSwgbG9hZFN0eWxlU2hlZXQsIG1ha2VIb3N0TGF5ZXJPcmRlciwgbm9ybWFsaXplQ3NzRm9yTGF5ZXIsIG5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50LCBub3JtYWxpemVJdGVyYXRpb25zLCBub3RpZnlTdHlsZVRyZWVIb3N0cywgb2JzZXJ2ZVN0eWxlVHJlZSwgb25TY3JvbGwsIG9uVmlldywgcGFyYWxsZWxBbmltYXRpb25zLCBwYXJzZUxlbmd0aCwgcGFyc2VPcmlnaW4sIHBhcnNlVGltZSwgcHJlbG9hZFN0eWxlLCBwcm9taXNlT3JEaXJlY3QsIHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSwgcXVlcnlGaXJzdERlZXAsIHJlYWRBdHRhY2hlZENTU1VuaXQsIHJlYWRTaGVldFJ1bGVDb3VudCwgcmViYWtlQmF0Y2gsIHJlYmFrZUNvbXB1dGVkU3R5bGUsIHJlZ2lzdGVyU3R5bGVUcmVlSG9vaywgcmVnaXN0ZXJlZFByb3BlcnRpZXMsIHJlaHlkcmF0ZUFkb3B0ZWRTdHlsZVNoZWV0cywgcmVoeWRyYXRlQ29uc3RydWN0YWJsZVNoZWV0cywgcmVtb3ZlQWRvcHRlZCwgc2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzLCBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMsIHNlcXVlbmNlQW5pbWF0aW9ucywgc2V0UHJvcGVydHksIHNldFN0eWxlSW5SdWxlLCBzZXRTdHlsZVByb3BlcnR5LCBzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2ssIHNldFN0eWxlUHJvcGVydHlUeXBlZCwgc2V0U3R5bGVSdWxlLCBzZXRTdHlsZVJ1bGVzLCBzZXRTdHlsZVVSTCwgc3RhZ2dlckFuaW1hdGlvbiwgc3RyaXBDc3NQcmVhbWJsZSwgc3R5bGVDYWNoZSwgc3R5bGVFbGVtZW50Q2FjaGUsIHN0eWxlRmx1c2hQZW5kaW5nLCBzdHlsZVRyZWVIb29rcywgc3R5bGVUcmVlT2JzZXJ2ZWQsIHN0eWxlVHJlZVJvb3RzLCBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0LCB1bmJha2VDb21wdXRlZFN0eWxlLCB1bmJha2VTY3JlZW5Db2xvcnMsIHVud3JhcENzc0xheWVyLCB1cmxDYW5QYXJzZSwgdmVlbGFDYXNjYWRlT3JkZXIsIHdyYXBDc3NMYXllciB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsYUFBQUMsSUFBVyxnQkFBQUMsSUFBYyxTQUFBQyxJQUFPLHVCQUFBQyxJQUFxQixZQUFBQyxJQUFVLFNBQUFDLElBQU8sZUFBQUMsSUFBYSxTQUFBQyxJQUFPLHFCQUFBQyxVQUF5QjtBQUMzSSxTQUFTLGtCQUFBQyxJQUFnQixZQUFBQyxVQUFnQjtBQUd6QyxJQUFJQyxJQUFTLENBQUNDLEdBQUtDLE1BQVcsV0FBVyxPQUFPLElBQUlELENBQUcsQ0FBQyxNQUFNQyxFQUFPLEdBQ2pFQyxJQUFhSCxFQUFPLHFCQUFxQixNQUFzQixvQkFBSSxRQUFRLENBQUMsR0FDNUVJLElBQVdKLEVBQU8sbUJBQW1CLE1BQXNCLG9CQUFJLElBQUksQ0FBQyxHQUNwRUssSUFBa0JMLEVBQU8sMEJBQTBCLE1BQXNCLG9CQUFJLElBQUksQ0FB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LENBQU07QUFDakQsVUFBTXRLLEVBQVU7QUFBQSxFQUNqQjtBQUNELEdBQ0k0SyxLQUFxQixDQUFDNWdCLEdBQVM2Z0IsTUFBZTtBQUNqRCxRQUFNQyxJQUFVRCxFQUFXLElBQUksQ0FBQ1AsTUFBV0QsR0FBWXJnQixHQUFTc2dCLENBQU0sQ0FBQyxHQUNqRVMsSUFBVSxNQUFNO0FBQ3JCLElBQUFELEVBQVEsUUFBUSxDQUFDdFQsTUFBTUEsRUFBRSxRQUFRLENBQUM7QUFBQSxFQUNuQztBQUNBLFNBQU87QUFBQSxJQUNOLFlBQVlzVCxFQUFRLElBQUksQ0FBQ3RULE1BQU1BLEVBQUUsU0FBUztBQUFBLElBQzFDLFNBQUF1VDtBQUFBLEVBQ0Q7QUFDRCxHQUNJQyxLQUFtQixDQUFDQyxHQUFVM1AsR0FBUzRQLElBQWUsUUFDbERELEVBQVMsSUFBSSxDQUFDamhCLEdBQVN1YSxNQUFVO0FBQ3ZDLFFBQU1zRixJQUFRM2YsRUFBVW9SLEdBQVMsU0FBUyxDQUFDLElBQUlpSixJQUFRMkc7QUFDdkQsU0FBT2IsR0FBWXJnQixHQUFTO0FBQUEsSUFDM0IsR0FBR3NSO0FBQUEsSUFDSCxPQUFBdU87QUFBQSxFQUNELENBQUM7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyIkYXZvaWRUcmlnZ2VyIiwgIiRnZXRWYWx1ZSIsICJjYW1lbFRvS2ViYWIiLCAiZGVyZWYiLCAiZ2V0T3JJbnNlcnRDb21wdXRlZCIsICJoYXNWYWx1ZSIsICJpc1ZhbCIsICJpc1ZhbHVlVW5pdCIsICJ0b1JlZiIsICJ0cnlTdHJpbmdBc051bWJlciIsICJhZGRUb0NhbGxDaGFpbiIsICJhZmZlY3RlZCIsICJzaGFyZWQiLCAia2V5IiwgImNyZWF0ZSIsICJibG9iVVJMTWFwIiwgImNhY2hlTWFwIiwgImNhY2hlQ29udGVudE1hcCIsICJjYWNoZUJsb2JDb250ZW50TWFwIiwgImFkb3B0ZWRTZWxlY3Rvck1hcCIsICJhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAiLCAiYWRvcHRlZExheWVyTWFwIiwgImFkb3B0ZWRTaGFkb3dMYXllck1hcCIsICJhZG9wdGVkTWFwIiwgImFkb3B0ZWRCbG9iTWFwIiwgImFkb3B0ZWRBcHBsaWVkVGV4dCIsICJhZG9wdGVkRmlsbGVkIiwgImxheWVyQ291bnRlciIsICJzdHlsZVRyZWVIb29rcyIsICJzdHlsZVRyZWVPYnNlcnZlZCIsICJzdHlsZVRyZWVSb290cyIsICJiYWtlZFN0eWxlcyIsICJiYWtlZExpdmUiLCAiYmFrZWRDYWNoZSIsICJyZWJha2VCYXRjaCIsICJiYWtlZEZvbGxvd2VycyIsICJhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSIsICJzdHlsZUNhY2hlIiwgInN0eWxlRWxlbWVudENhY2hlIiwgInN0eWxlRmx1c2hQZW5kaW5nIiwgInJlZ2lzdGVyZWRQcm9wZXJ0aWVzIiwgIkNTU19ESU1FTlNJT05fVU5JVFNfTElTVCIsICJDU1NfRElNRU5TSU9OX1VOSVRTIiwgIkNTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyIsICJDU1NfVU5JVF9UT0tFTl9SRSIsICJDU1NfQ09MT1JfUFJPUEVSVElFUyIsICJDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTIiwgIkNTU19NT1RJT05fUFJPUEVSVElFUyIsICJTVFlMRV9USEVNRV9BVFRSUyIsICJTVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTIiwgIkJBS0VfQ0FURUdPUklFUyIsICJWRUVMQV9DQVNDQURFX0xBWUVSUyIsICJVWF9IT1NUX0xBWUVSUyIsICJWSUVXRVJfUlVOVElNRV9MQVlFUlMiLCAiVklFV0VSX0NTU19MQVlFUl9PUkRFUiIsICJMQVlFUl9OQU1FIiwgIkxBWUVSX09QRU4iLCAiT1dORVIiLCAiSE9TVF9DU1NfRkFMTEJBQ0siLCAiQkFLRV9MQVlFUiIsICJERUZBVUxUX0NBVEVHT1JJRVMiLCAiREVGQVVMVF9DQUNIRV9NUyIsICJCQUtFX1NDUkVFTl9NRURJQSIsICJCQUtFX1NDUkVFTl9DSFJPTUUiLCAiQkFLRV9TQ1JFRU5fQUxTT19FWFBMT1JFUiIsICJCQUtFX1NDUkVFTl9BTFNPX1NFVFRJTkdTIiwgIkJBS0VfU0NSRUVOX0FMU08iLCAiQU5JTUFUQUJMRV9CUkFORCIsICJoYXNUeXBlZE9NIiwgImNzc1VuaXRGYWN0b3J5TmFtZSIsICJ1bml0IiwgImNzc1VuaXRDb25zdHJ1Y3Rvck5hbWUiLCAiaXNDc3NMYXllck5hbWUiLCAibmFtZSIsICJjc3NFbXB0eUxheWVyUnVsZSIsICJsYXllck5hbWUiLCAic3RyaXBDc3NQcmVhbWJsZSIsICJjc3MiLCAib3V0IiwgImkiLCAibmV4dCIsICJpc0xheWVyQmxvY2tSdWxlIiwgInJ1bGUiLCAic3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCIsICJjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQiLCAicHJvbWlzZU9yRGlyZWN0IiwgInByb21pc2UiLCAiY2IiLCAiaXNTaGFkb3dSb290IiwgInZhbHVlIiwgImlzRG9jdW1lbnQiLCAiaXNDc3NFbGVtZW50IiwgImVzY2FwZUNTU0lkZW50aWZpZXIiLCAiY2hhciIsICJzdHlsZUlkQ291bnRlciIsICJjcmVhdGVTdHlsZUlkIiwgInVybENhblBhcnNlIiwgImhhc2giLCAic3RyaW5nIiwgImhhc2hCdWZmZXIiLCAicGFyc2VMZW5ndGgiLCAic2l6ZSIsICJwYXJzZU9yaWdpbiIsICJvcmlnaW4iLCAiZWxlbWVudCIsICJ2YWx1ZXMiLCAicGFyc2VUaW1lIiwgInYiLCAiZmFsbGJhY2siLCAidCIsICJub3JtYWxpemVJdGVyYXRpb25Db3VudCIsICJjb3VudCIsICJub3JtYWxpemVJdGVyYXRpb25zIiwgIm4iLCAiaXNTY3JvbGxEcml2ZW4iLCAiaXNWaWV3RHJpdmVuIiwgImlzU3R5bGVIb3N0IiwgIm5vZGUiLCAicmVhZFNoZWV0UnVsZUNvdW50IiwgInNoZWV0IiwgImlzQWRvcHRlZFNoZWV0RW1wdHkiLCAiaXNDb2xvclRva2VuIiwgImlzRWxlbWVudFZpc2libGUiLCAiZWwiLCAiaXNTdHlsZUJpbmRpbmciLCAic3R5bGVzIiwgImlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCIsICJjc3NUZXh0IiwgInNvdXJjZSIsICJjaHVuayIsICJkZWNsYXJhdGlvbiIsICJjb2xvbkluZGV4IiwgInBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSIsICJyYXciLCAiYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUiLCAiaXNOYXRpdmVDU1NTdHlsZVZhbHVlIiwgIkNTU1N0eWxlVmFsdWVDdG9yIiwgInByb3RvdHlwZSIsICJpc1JlYWN0aXZlU3R5bGVWYWx1ZSIsICJpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbiIsICJlc2NhcGVSZWdFeHAiLCAiY29udGFpbnNNYXJrZXIiLCAiY3NzVmFsdWUiLCAibWFya2VyIiwgInJlYWRBdHRhY2hlZENTU1VuaXQiLCAidGV4dCIsICJtYXRjaCIsICJhdXRob3JlZCIsICJub3JtYWxpemVkIiwgImdldFdpbmRvd0NvbnN0cnVjdG9yIiwgIndpbiIsICJjcmVhdGVUeXBlZFVuaXRWYWx1ZSIsICJDU1NOYW1lc3BhY2UiLCAiZmFjdG9yeU5hbWUiLCAiZmFjdG9yeSIsICJDU1NVbml0VmFsdWVDdG9yIiwgImlzU3R5bGVWYWx1ZSIsICJ2YWwiLCAiaXNVbml0VmFsdWUiLCAicXVlcnlGaXJzdERlZXAiLCAicm9vdCIsICJzZWxlY3RvciIsICJkaXJlY3QiLCAic2NvcGUiLCAiaGl0IiwgImlubmVyIiwgImNzc0xheWVyT3JkZXIiLCAiZ3JvdXBzIiwgInNlZW4iLCAibmFtZXMiLCAiZ3JvdXAiLCAibGlzdCIsICJ2ZWVsYUNhc2NhZGVPcmRlciIsICJtYWtlSG9zdExheWVyT3JkZXIiLCAiZXh0cmEiLCAiY3NzTGF5ZXJCbG9jayIsICJib2R5IiwgIndyYXBDc3NMYXllciIsICJub3JtYWxpemVDc3NGb3JMYXllciIsICJ0cmltbWVkIiwgInVud3JhcE91dGVyTGF5ZXJCbG9jayIsICJleHBlY3RlZE5hbWUiLCAib3BlbiIsICJkZXB0aCIsICJjaCIsICJ1bndyYXBDc3NMYXllciIsICJzdHJpcHBlZCIsICJjc3NJbXBvcnRXaXRoTGF5ZXIiLCAidXJsIiwgImxheWVyIiwgIlVYX1BSRUxPQURfSE9TVF9DU1MiLCAiZ2V0T3JDcmVhdGVMYXllclJ1bGUiLCAicnVsZXMiLCAiZXhpc3RpbmciLCAicnVsZUluZGV4IiwgImNyZWF0ZWQiLCAidG9rZW5pemVOdW1lcmljQ1NTJDEiLCAidG9rZW5zIiwgImN1cnNvciIsICJyZXN0IiwgIndoaXRlc3BhY2UiLCAibnVtYmVyIiwgInVuaXRNYXRjaCIsICJpZGVudGlmaWVyIiwgInN5bWJvbCIsICJOdW1lcmljVHlwZWRPTVBhcnNlciQxIiwgInRva2VuIiwgIkNvbnN0cnVjdG9yIiwgIm9wZXJhdG9yIiwgInJpZ2h0IiwgInBhcnNlVG9UeXBlZE9NIiwgInNldFByb3BlcnR5SWZOb3RFcXVhbCIsICJzdHlsZVJlZiIsICJrZWJhYiIsICJpbXBvcnRhbmNlIiwgInNldFN0eWxlUHJvcGVydHlUeXBlZCIsICJzdHlsZU1hcFJlZiIsICJzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2siLCAib2xkIiwgIm5ld1ZhbCIsICJwYXJzZWQiLCAibWF5YmVOdW0iLCAic2V0U3R5bGVQcm9wZXJ0eSIsICJoYW5kbGVTdHlsZUNoYW5nZSIsICJwcm9wIiwgInNldFN0eWxlSW5SdWxlIiwgImdldFN0eWxlUnVsZSIsICJzZXRTdHlsZVJ1bGUiLCAicHJvcE5hbWUiLCAicHJvcFZhbHVlIiwgImxvYWRTdHlsZVNoZWV0IiwgImlubGluZSIsICJiYXNlIiwgImludGVncml0eSIsICJsb2FkIiwgImZldGNoQW5kQ2FjaGUiLCAic2V0U3R5bGVVUkwiLCAicmVzIiwgImVycm9yIiwgImxvYWRCbG9iU3R5bGUiLCAic3R5bGUiLCAibG9hZElubGluZVN0eWxlIiwgInJvb3RFbGVtZW50IiwgIlBMQUNFIiwgInNldFByb3BlcnR5IiwgInRhcmdldCIsICJwcmVsb2FkU3R5bGUiLCAibG9hZEFzQWRvcHRlZCIsICJyZW1lbWJlckFkb3B0ZWRUZXh0IiwgImNzc1RleHRGb3JBZG9wdGVkU2hlZXQiLCAic3RvcmVkIiwgIm1hcHBlZCIsICJlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50IiwgImFwcGx5QWRvcHRlZFN0eWxlVGV4dCIsICJtZXNzYWdlIiwgInNoZWV0Rm9yQmxvYiIsICJibG9iIiwgImxvYWRBc0Fkb3B0ZWRVbnNhZmUiLCAiY2FjaGVkIiwgImFwcGxpZWQiLCAibGF5ZXJXcmFwcGVkIiwgInJlbW92ZUFkb3B0ZWQiLCAiZmV0Y2hBc0lubGluZSIsICJjb2xsZWN0U3R5bGVIb3N0cyIsICJpbnRvIiwgImNoaWxkIiwgIm5vdGlmeVN0eWxlVHJlZUhvc3RzIiwgImhvc3RzIiwgInJlYXNvbiIsICJmbiIsICJyZWdpc3RlclN0eWxlVHJlZUhvb2siLCAib2JzZXJ2ZVN0eWxlVHJlZSIsICJvYnNlcnZlciIsICJyZWNvcmRzIiwgInJlYyIsICJzaGVldHMiLCAicmVoeWRyYXRlQ29uc3RydWN0YWJsZVNoZWV0cyIsICJjYW5QYXJzZSIsICJpZHgiLCAiZ2V0VHJhbnNmb3JtIiwgIm1hdHJpeCIsICJnZXRUcmFuc2Zvcm1PcmlnaW4iLCAiY3NzT3JpZ2luIiwgImdldFByb3BlcnR5VmFsdWUiLCAic3JjIiwgImNzIiwgImdldEVsZW1lbnRab29tIiwgInpvb20iLCAiY3VycmVudEVsZW1lbnQiLCAiY3VycmVudENTU1pvb20iLCAiZ2V0UHhWYWx1ZSIsICJnZXRQYWRkaW5nIiwgImF4aXMiLCAic3R5bGVFbGVtZW50IiwgInNldFN0eWxlUnVsZXMiLCAiY2xhc3NlcyIsICJhcmdzIiwgImdldFN0eWxlTGF5ZXIiLCAiZW5zdXJlU3R5bGVTY29wZVNlbGVjdG9yIiwgInN0eWxlSWQiLCAiam9pblNjb3BlZFNlbGVjdG9yIiwgImZpbmRTdHlsZVJ1bGUiLCAiZnVsbFNlbGVjdG9yIiwgImV4cGVjdGVkIiwgInJlcXVlc3RlZCIsICJhY3R1YWwiLCAiYmFzaXMiLCAiYmFzaXNFbGVtZW50IiwgInN0eWxlRWxlbWVudEdsb2JhbCIsICJydWxlSWQiLCAiYnVybCIsICJwcm9taXNlZCIsICJnZXRBZG9wdGVkU3R5bGVSdWxlIiwgImluU2hhZG93IiwgInRhcmdldEFkb3B0ZWRTaGVldHMiLCAic2VsZWN0b3JLZXkiLCAic2hhZG93TWFwIiwgImxheWVyUnVsZSIsICJzaGFkb3dMYXllck1hcCIsICJsYXllclJ1bGVJbmRleCIsICJyIiwgImludmFsaWRhdGlvblJlYWR5IiwgImxhc3RGaW5nZXJwcmludCIsICJyZWJha2VRdWV1ZWQiLCAibm9ybWFsaXplQ2F0ZWdvcmllcyIsICJjYXRlZ29yaWVzIiwgImNhY2hlS2V5Rm9yIiwgIm1lZGlhIiwgImJha2VUaGVtZUZpbmdlcnByaW50IiwgInBhcnRzIiwgImxvY2FsIiwgInRha2VQcm9wIiwgIkNPTE9SX1BST1BfU0VUIiwgImJha2VEZWNsUmFuayIsICJjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMiLCAic2V0IiwgImJ1aWxkQmFrZWRDc3NUZXh0IiwgImRlY2xhcmF0aW9ucyIsICJyb3dzIiwgImEiLCAiYiIsICJiYWtlZCIsICJjb2xsZWN0QmFrZVNjcmVlbkhvc3RzIiwgImNocm9tZSIsICJiYWtlQWxzb1F1ZXJpZXNGb3IiLCAiY29sbGVjdEJha2VBbHNvSG9zdHMiLCAicXVlcmllcyIsICJwaWVyY2VTaGFkb3ciLCAicm9vdFNlbCIsICJmaW5kIiwgInNlbCIsICJncm91cGVkIiwgInF1ZXJ5IiwgInEiLCAic2VscyIsICJhZG9wdGVkTGlzdCIsICJhc3NpZ25BZG9wdGVkIiwgImFkb3B0U2hlZXQiLCAidW5hZG9wdFNoZWV0IiwgIndyaXRlQmFrZWRDc3MiLCAicmVtZW1iZXJDYWNoZSIsICJjYWNoZU1zIiwgInByZXYiLCAiZW50cnkiLCAiZHJvcENhY2hlIiwgImNhY2hlS2V5IiwgImNsZWFyQWxsQ2FjaGUiLCAicGFya0Jha2VkIiwgInJlc3VtZUJha2VkIiwgImZpbmdlcnByaW50IiwgImJha2VDb21wdXRlZFN0eWxlIiwgImJha2VJTyIsICJlbnN1cmVCYWtlSU8iLCAiZW50cmllcyIsICJlbnN1cmVCYWtlZFJlY29yZCIsICJjYW5Db25zdHJ1Y3QiLCAiZmx1c2hSZWJha2UiLCAiYmF0Y2giLCAic2NoZWR1bGVSZWJha2UiLCAiaW52YWxpZGF0ZUJha2VkU3R5bGVzIiwgImVuc3VyZUJha2VJbnZhbGlkYXRpb24iLCAiaG9zdCIsICJvcHRpb25zIiwgInVuYmFrZUNvbXB1dGVkU3R5bGUiLCAia2VlcENhY2hlIiwgInJlYmFrZUNvbXB1dGVkU3R5bGUiLCAiZ2V0QmFrZWRTdHlsZSIsICJiYWtlU2NyZWVuQ29sb3JzIiwgIm9wdHMiLCAiZXh0cmFzIiwgImZvbGxvd2VycyIsICJ1bmJha2VTY3JlZW5Db2xvcnMiLCAic2NoZWR1bGVCYWtlU2NyZWVuQ29sb3JzIiwgInJ1biIsICJyZXRyeU1pc3MiLCAicGllcmNlIiwgInN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3ciLCAiYlRvIiwgImFkb3B0ZWRTaGVldHMiLCAibGl2ZSIsICJzIiwgImFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCIsICJlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayIsICJyZWh5ZHJhdGVBZG9wdGVkU3R5bGVTaGVldHMiLCAicmVzdG9yZSIsICJob3N0Q3NzVGV4dCIsICJ2aXNpdCIsICJjaGlsZHJlbiIsICJlbnN1cmVIb3N0U3R5bGVzIiwgImxvYWRDYWNoZWRTdHlsZXMiLCAic3R5bGVGbHVzaEJhdGNoIiwgInN0eWxlRmx1c2hTY2hlZHVsZWQiLCAic2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzIiwgInJlc29sdmVkU3JjIiwgIndlYWsiLCAiZSIsICJyZXN1bHQiLCAiYWRvcHRlZCIsICJhZGRBZG9wdGVkU2hlZXQiLCAidmFycyIsICJwcm9wcyIsICJpc0xpbmtlckxpa2UiLCAiYmluZFdpdGgiLCAiaGFuZGxlciIsICJsaW5rZXIiLCAid2VsIiwgInd2IiwgInVuIiwgImN1cnIiLCAiZWxlbWVudFJlZiIsICJ2YWx1ZVJlZiIsICJ1bnN1YiIsICJhbmltYXRhYmxlSWQiLCAib25TY3JvbGwiLCAibyIsICJvblZpZXciLCAiQW5pbWF0YWJsZVZhbHVlIiwgIiNzdGVwcyIsICIjb3B0aW9ucyIsICIjY3VycmVudCIsICIjc3Vic2NyaWJlcnMiLCAiI2F0dGFjaG1lbnRzIiwgIiNyZXNvbHZlRWxlbWVudFJlZiIsICJzZWxmIiwgIiNmaW5kTmVhcmVzdFNjcm9sbGVyIiwgIiNjcmVhdGVUaW1lbGluZSIsICJ0cmlnZ2VyIiwgIlNjcm9sbFRpbWVsaW5lQ3RvciIsICJWaWV3VGltZWxpbmVDdG9yIiwgIiNzdGFydFRpbWVsaW5lRHJpdmVuIiwgImF0dGFjaG1lbnQiLCAicGxhbiIsICJ0aW1lbGluZSIsICIjc3RhcnRUaW1lbGluZUZhbGxiYWNrIiwgInRpbWluZyIsICIjYnVpbGRUaW1pbmciLCAiYW5pbWF0aW9uIiwgIiNidWlsZEtleWZyYW1lcyIsICJzdGVwcyIsICIjcmVzb2x2ZVN0ZXAiLCAic2Nyb2xsZXIiLCAicmFmSWQiLCAiY29tcHV0ZVByb2dyZXNzIiwgInZwIiwgInJlY3QiLCAidG90YWwiLCAibWF4IiwgImxpc3RlblRhcmdldCIsICJoaW50IiwgInN0ZXAiLCAib2Zmc2V0cyIsICJlYXNpbmciLCAiZnJhbWUiLCAic3RhcnQiLCAiI3RyYWNrUHJvZ3Jlc3MiLCAiI3dpcmVUcmlnZ2VyIiwgImxhc3QiLCAicmV2ZXJzZU9uRXhpdCIsICJwbGF5Rm9yd2FyZCIsICJwbGF5QmFja3dhcmQiLCAiZW50ZXIiLCAibGVhdmUiLCAib25FbnRlciIsICJvbkxlYXZlIiwgImZvcndhcmQiLCAib25DbGljayIsICJhcHBseSIsICJ1bnN1YnNjcmliZSIsICIjZWFjaCIsICJhdCIsICJyYXRlIiwgImFuaW1hdGFibGUiLCAiaXNBbmltYXRhYmxlVmFsdWUiLCAic3R5bGVUZW1wbGF0ZUlkIiwgInJlYWRSZWFjdGl2ZU51bWJlciIsICJzbG90IiwgImN1cnJlbnQiLCAiZ2V0UmVhY3RpdmVJbml0aWFsTnVtYmVyIiwgInJlcGxhY2VUeXBlZE1hcmtlcnMiLCAic2xvdHMiLCAiaXNEaXJlY3RTbG90VmFsdWUiLCAiZXNjYXBlZE1hcmtlciIsICJzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUiLCAiaXNEaXJlY3RTbG90VW5pdFByb2R1Y3QiLCAiZXNjYXBlZFVuaXQiLCAic2V0UGFyc2VkVHlwZWRWYWx1ZSIsICJzdHlsZU1hcCIsICJwcm9wZXJ0eSIsICJ0b2tlbml6ZU51bWVyaWNDU1MiLCAidmFyaWFibGUiLCAiTnVtZXJpY1R5cGVkT01QYXJzZXIiLCAicmVhY3RpdmVCeU1hcmtlciIsICJ0eXBlZEJ5TWFya2VyIiwgInJlYWN0aXZlIiwgImNoZWNrcG9pbnQiLCAicmhzIiwgImxlYWYiLCAidHlwZWQiLCAiYnVpbGROdW1lcmljVHlwZWRPTVRyZWUiLCAicmVhY3RpdmVTbG90cyIsICJ0eXBlZFNsb3RzIiwgImlzVHJhbnNmb3JtU3R5bGVQcm9wZXJ0eSIsICJidWlsZFRyYW5zZm9ybVR5cGVkT01UcmVlIiwgImxlYXZlcyIsICJjb21wb25lbnRzIiwgInplcm9QeCIsICJvbmVOdW1iZXIiLCAiaW5kZXgiLCAiY29uc3VtZSIsICJjb25zdW1lU3ltYm9sIiwgInBhcnNlQXJndW1lbnQiLCAic2xpY2UiLCAidHJlZSIsICJwYXJzZUFyZ3VtZW50TGlzdCIsICJjcmVhdGVDb21wb25lbnQiLCAiY3RvciIsICJjbGFzc05hbWUiLCAiQ3RvciIsICJUcmFuc2xhdGUiLCAiU2NhbGUiLCAiUm90YXRlIiwgIlNrZXciLCAiQ1NTVHJhbnNmb3JtVmFsdWVDdG9yIiwgImJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUiLCAiYWRkTXV0YWJsZUxlYXZlcyIsICJhdHRhY2hMZWFmVGFyZ2V0cyIsICJhcHBseVN0eWxlVGVtcGxhdGUiLCAidmFyaWFibGVzIiwgImFuaW1hdGFibGVTbG90cyIsICJwcm9iZSIsICJtdXRhYmxlTGVhdmVzIiwgInJlcXVpcmVkQ1NTVmFyaWFibGVzIiwgInN1YnNjcmlwdGlvbnMiLCAicHJvcGVydHlNb2RlT3duZWQiLCAicGFyc2VkVmFsdWUiLCAiaW5pdGlhbE51bWJlciIsICJlbnN1cmVSZWdpc3RlcmVkTnVtYmVyUHJvcGVydHkiLCAicHJpb3JpdHkiLCAidXNlZFR5cGVkU2xvdHMiLCAidXNlZFJlYWN0aXZlU2xvdHMiLCAiY2FuVXNlVHlwZWRPTSIsICJhcHBsaWVkVGhyb3VnaFR5cGVkT00iLCAiZGlyZWN0U2xvdCIsICJsaW5rZWRWYWx1ZSIsICJDU1NNYXRoUHJvZHVjdEN0b3IiLCAicHJvZHVjdCIsICJyZWNvbnN0cnVjdGVkIiwgIm5lZWRzQ1NTVmFyaWFibGUiLCAic3Vic2NyaXB0aW9uIiwgIm5leHRWYWx1ZSIsICJkaXJ0eVJvb3RzIiwgInByb3BlcnR5TmFtZSIsICJjb21wbGlsZVN0YXRpY0NTU1RleHQiLCAiZm9yUmV0dXJuIiwgInByb3BlcnRpZXMiLCAiUyIsICJzdHJpbmdzIiwgInRlbXBsYXRlSWQiLCAiY29uc3VtZWQiLCAibmV4dFRleHQiLCAiYXR0YWNoZWRVbml0IiwgImluaXRpYWxWYWx1ZSIsICJ0eXBlIiwgInNwbGl0SW5saW5lU3R5bGVQbGFjZWhvbGRlcnMiLCAiYXR0cmlidXRlcyIsICJwYXR0ZXJuIiwgImF0dHJpYnV0ZUluZGV4IiwgImpvaW5TdGF0aWNJbmxpbmVTdHlsZSIsICJjb21waWxlSW5saW5lU3R5bGVBdHRyaWJ1dGUiLCAiYmluZFN0eWxlIiwgInN0eWxlZCIsICJwYXJzZVByb3BlcnR5TGlzdCIsICJmcm9tU3RyaW5nIiwgIiRwYWlyIiwgInBhcnNlQW5pbWF0aW9uVGVtcGxhdGUiLCAiZnVsbFRleHQiLCAidmFsdWVUZXh0IiwgInNsb3RNYXRjaCIsICJzbG90VmFsdWUiLCAicHJvY2Vzc0FuaW1hdGlvblZhbHVlcyIsICJyZXNvbHZlZCIsICJyZWFjdGl2ZUluZGljZXMiLCAiaGFzUmVhY3RpdmUiLCAiYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMiLCAiZ2xvYmFsT2Zmc2V0cyIsICJwcm9wZXJ0eUxpc3QiLCAibWF4TGVuZ3RoIiwgInAiLCAiXyIsICJmcmFtZXMiLCAia2ViYWJQcm9wIiwgImJ1aWxkQW5pbWF0aW9uVGltaW5nIiwgImR1cmF0aW9uIiwgImRlbGF5IiwgIml0ZXJhdGlvbnMiLCAiY3JlYXRlUmVhY3RpdmVBbmltYXRpb24iLCAicmVhY3RpdmVWYWx1ZSIsICJuZXdGcmFtZXMiLCAiY3VycmVudFRpbWUiLCAic3ViIiwgIkEiLCAiZG9BbmltYXRpb24iLCAiY29uZmlnIiwgImtleWZyYW1lcyIsICJhbmltYXRlIiwgImRlZmluZUFuaW1hdGlvbiIsICJzZXF1ZW5jZUFuaW1hdGlvbnMiLCAic2VxdWVuY2UiLCAicGFyYWxsZWxBbmltYXRpb25zIiwgImFuaW1hdGlvbnMiLCAicmVzdWx0cyIsICJjbGVhbnVwIiwgInN0YWdnZXJBbmltYXRpb24iLCAiZWxlbWVudHMiLCAic3RhZ2dlckRlbGF5Il0KfQo=