@adobe/helix-rum-enhancer 2.50.0 → 2.50.1

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.
@@ -9,287 +9,395 @@
9
9
  * OF ANY KIND, either express or implied. See the License for the specific language
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
- (function (e) {
12
+ (function (t) {
13
13
 
14
- let t = -1;
15
- const n = e => {
16
- addEventListener("pageshow", n => {
17
- n.persisted && (t = n.timeStamp, e(n));
14
+ let n = -1;
15
+ const e = () => n,
16
+ i = t => {
17
+ addEventListener("pageshow", e => {
18
+ e.persisted && (n = e.timeStamp, t(e));
18
19
  }, true);
19
20
  },
20
- i = (e, t, n, i) => {
21
- let s, o;
22
- return r => {
23
- t.value >= 0 && (r || i) && (o = t.value - (s ?? 0), (o || void 0 === s) && (s = t.value, t.delta = o, t.rating = ((e, t) => e > t[1] ? "poor" : e > t[0] ? "needs-improvement" : "good")(t.value, n), e(t)));
21
+ o = (t, n, e, i) => {
22
+ let o, s;
23
+ return a => {
24
+ n.value >= 0 && (a || i) && (s = n.value - (o ?? 0), (s || void 0 === o) && (o = n.value, n.delta = s, n.rating = ((t, n) => t > n[1] ? "poor" : t > n[0] ? "needs-improvement" : "good")(n.value, e), t(n)));
24
25
  };
25
26
  },
26
- s = e => {
27
- requestAnimationFrame(() => requestAnimationFrame(e));
27
+ s = t => {
28
+ requestAnimationFrame(() => requestAnimationFrame(() => t()));
28
29
  },
29
- o = () => {
30
- const e = performance.getEntriesByType("navigation")[0];
31
- if (e && e.responseStart > 0 && e.responseStart < performance.now()) return e;
30
+ a = () => {
31
+ const t = performance.getEntriesByType("navigation")[0];
32
+ if (t && t.responseStart > 0 && t.responseStart < performance.now()) return t;
32
33
  },
33
- r = () => o()?.activationStart ?? 0,
34
- c = (e, n = -1) => {
35
- const i = o();
36
- let s = "navigate";
37
- t >= 0 ? s = "back-forward-cache" : i && (document.prerendering || r() > 0 ? s = "prerender" : document.wasDiscarded ? s = "restore" : i.type && (s = i.type.replace(/_/g, "-")));
34
+ r = () => a()?.activationStart ?? 0;
35
+ let c = -1;
36
+ const f = new Set(),
37
+ h = () => "hidden" !== document.visibilityState || document.prerendering ? 1 / 0 : 0,
38
+ d = t => {
39
+ if ("hidden" === document.visibilityState) {
40
+ if ("visibilitychange" === t.type) for (const t of f) t();
41
+ isFinite(c) || (c = "visibilitychange" === t.type ? t.timeStamp : 0, removeEventListener("prerenderingchange", d, true));
42
+ }
43
+ },
44
+ l = (t = false) => {
45
+ if (t && (c = 1 / 0), c < 0) {
46
+ const t = r(),
47
+ n = document.prerendering ? void 0 : globalThis.performance.getEntriesByType("visibility-state").find(n => "hidden" === n.name && n.startTime >= t)?.startTime;
48
+ c = n ?? h(), addEventListener("visibilitychange", d, true), addEventListener("prerenderingchange", d, true), i(() => {
49
+ setTimeout(() => {
50
+ c = h();
51
+ });
52
+ });
53
+ }
38
54
  return {
39
- name: e,
55
+ get firstHiddenTime() {
56
+ return c;
57
+ },
58
+ onHidden(t) {
59
+ f.add(t);
60
+ }
61
+ };
62
+ },
63
+ g = (t, n = -1, i, o = 0, s, c, f) => {
64
+ const h = a(),
65
+ d = h?.navigationId || 0;
66
+ let l = "navigate";
67
+ i ? l = i : e() >= 0 ? l = "back-forward-cache" : h && (document.prerendering || r() > 0 ? l = "prerender" : document.wasDiscarded ? l = "restore" : h.type && (l = h.type.replace(/_/g, "-")));
68
+ return {
69
+ name: t,
40
70
  value: n,
41
71
  rating: "good",
42
72
  delta: 0,
43
73
  entries: [],
44
- id: `v5-${Date.now()}-${Math.floor(8999999999999 * Math.random()) + 1e12}`,
45
- navigationType: s
74
+ id: `v6-${Date.now()}-${Math.floor(8999999999999 * Math.random()) + 1e12}`,
75
+ navigationType: l,
76
+ navigationId: o || d,
77
+ navigationInteractionId: s,
78
+ navigationURL: c || h?.name,
79
+ navigationStartTime: f || 0
46
80
  };
47
81
  },
48
- a = new WeakMap();
49
- function d(e, t) {
50
- let n = a.get(t);
51
- return n || (n = new WeakMap(), a.set(t, n)), n.get(e) || n.set(e, new t()), n.get(e);
82
+ u = new WeakMap();
83
+ function v(t, n) {
84
+ let e = u.get(n);
85
+ return e || (e = new WeakMap(), u.set(n, e)), e.get(t) || e.set(t, new n()), e.get(t);
52
86
  }
53
- class h {
87
+ class m {
54
88
  t;
55
89
  i = 0;
56
90
  o = [];
57
- h(e) {
58
- if (e.hadRecentInput) return;
59
- const t = this.o[0],
60
- n = this.o.at(-1);
61
- this.i && t && n && e.startTime - n.startTime < 1e3 && e.startTime - t.startTime < 5e3 ? (this.i += e.value, this.o.push(e)) : (this.i = e.value, this.o = [e]), this.t?.(e);
91
+ h(t) {
92
+ if (t.hadRecentInput) return;
93
+ const n = this.o[0],
94
+ e = this.o.at(-1);
95
+ this.i && n && e && t.startTime - e.startTime < 1e3 && t.startTime - n.startTime < 5e3 ? (this.i += t.value, this.o.push(t)) : (this.i = t.value, this.o = [t]), this.t?.(t);
62
96
  }
63
97
  }
64
- const f = (e, t, n = {}) => {
98
+ const p = (t, n, e = {}) => {
65
99
  try {
66
- if (PerformanceObserver.supportedEntryTypes.includes(e)) {
67
- const i = new PerformanceObserver(e => {
100
+ const i = t.filter(t => PerformanceObserver.supportedEntryTypes.includes(t));
101
+ if (i.length > 0) {
102
+ const t = new PerformanceObserver(t => {
68
103
  queueMicrotask(() => {
69
- t(e.getEntries());
104
+ const e = t.getEntries();
105
+ i.length > 1 && e.sort((t, n) => t.startTime + t.duration - (n.startTime + n.duration)), n(e);
70
106
  });
71
107
  });
72
- return i.observe({
73
- type: e,
108
+ for (const n of i) t.observe({
109
+ type: n,
74
110
  buffered: !0,
75
- ...n
76
- }), i;
111
+ ...e
112
+ });
113
+ return t;
77
114
  }
78
115
  } catch {}
79
116
  },
80
- l = e => {
81
- let t = false;
82
- return () => {
83
- t || (e(), t = true);
84
- };
85
- };
86
- let u = -1;
87
- const m = new Set(),
88
- g = () => "hidden" !== document.visibilityState || document.prerendering ? 1 / 0 : 0,
89
- p = e => {
90
- if ("hidden" === document.visibilityState) {
91
- if ("visibilitychange" === e.type) for (const e of m) e();
92
- isFinite(u) || (u = "visibilitychange" === e.type ? e.timeStamp : 0, removeEventListener("prerenderingchange", p, true));
117
+ b = t => globalThis.PerformanceObserver?.supportedEntryTypes?.includes("soft-navigation") && "function" == typeof globalThis.PerformanceSoftNavigation?.prototype?.getLargestInteractionContentfulPaint && t && t.reportSoftNavs,
118
+ T = (t, n) => {
119
+ if (t.set(n.navigationId, n), t.size > 2) {
120
+ const n = t.keys().next().value;
121
+ void 0 !== n && t.delete(n);
93
122
  }
94
123
  },
95
- v = () => {
96
- if (u < 0) {
97
- const e = r(),
98
- t = document.prerendering ? void 0 : globalThis.performance.getEntriesByType("visibility-state").find(t => "hidden" === t.name && t.startTime >= e)?.startTime;
99
- u = t ?? g(), addEventListener("visibilitychange", p, true), addEventListener("prerenderingchange", p, true), n(() => {
100
- setTimeout(() => {
101
- u = g();
102
- });
103
- });
104
- }
105
- return {
106
- get firstHiddenTime() {
107
- return u;
108
- },
109
- onHidden(e) {
110
- m.add(e);
111
- }
124
+ y = t => {
125
+ let n = false;
126
+ return () => {
127
+ n || (t(), n = true);
112
128
  };
129
+ };
130
+ class _ {
131
+ l;
132
+ }
133
+ const E = t => {
134
+ document.prerendering ? addEventListener("prerenderingchange", t, true) : t();
113
135
  },
114
- y = e => {
115
- document.prerendering ? addEventListener("prerenderingchange", e, true) : e();
116
- },
117
- T = [1800, 3e3],
118
- b = (e, t = {}) => {
119
- y(() => {
120
- const o = v();
121
- let a,
122
- d = c("FCP");
123
- const h = f("paint", e => {
124
- for (const t of e) "first-contentful-paint" === t.name && (h.disconnect(), t.startTime < o.firstHiddenTime && (d.value = Math.max(t.startTime - r(), 0), d.entries.push(t), a(true)));
136
+ M = [1800, 3e3],
137
+ L = (t, n = {}) => {
138
+ const a = b(n);
139
+ E(() => {
140
+ const c = v(n, _),
141
+ f = l();
142
+ let h,
143
+ d = g("FCP");
144
+ const u = p(["paint"], t => {
145
+ for (const n of t) "first-contentful-paint" === n.name && (u.disconnect(), n.startTime < f.firstHiddenTime && (d.value = Math.max(n.startTime - r(), 0), d.entries.push(n), d.navigationId = n.navigationId || d.navigationId, h(true)));
125
146
  });
126
- h && (a = i(e, d, T, t.reportAllChanges), n(n => {
127
- d = c("FCP"), a = i(e, d, T, t.reportAllChanges), s(() => {
128
- d.value = performance.now() - n.timeStamp, a(true);
147
+ if (u && (h = o(t, d, M, n.reportAllChanges), i(i => {
148
+ d = g("FCP", -1, "back-forward-cache", d.navigationId, d.navigationInteractionId, d.navigationURL, e()), h = o(t, d, M, n.reportAllChanges), s(() => {
149
+ d.value = performance.now() - i.timeStamp, h(true);
129
150
  });
130
- }));
151
+ })), a) {
152
+ p(["soft-navigation"], e => {
153
+ e.forEach(e => {
154
+ c.l && e.navigationId && T(c.l, e);
155
+ const i = Math.max((e.presentationTime || e.paintTime || 0) - e.startTime, 0);
156
+ d = g("FCP", i, "soft-navigation", e.navigationId, e.interactionId, e.name, e.startTime), h = o(t, d, M, n.reportAllChanges), h(true);
157
+ });
158
+ }, n);
159
+ }
131
160
  });
132
161
  },
133
- E = [.1, .25];
134
- let L = 0,
135
- P = 1 / 0,
136
- _ = 0;
137
- const M = e => {
138
- for (const t of e) t.interactionId && (P = Math.min(P, t.interactionId), _ = Math.max(_, t.interactionId), L = _ ? (_ - P) / 7 + 1 : 0);
162
+ w = [.1, .25];
163
+ let P = 0,
164
+ I = 1 / 0,
165
+ k = 0;
166
+ const C = t => {
167
+ for (const n of t) n.interactionId && (I = Math.min(I, n.interactionId), k = Math.max(k, n.interactionId), P = k ? (k - I) / 7 + 1 : 0);
139
168
  };
140
- let w;
141
- const C = () => w ? L : performance.interactionCount ?? 0,
142
- I = () => {
143
- "interactionCount" in performance || w || (w = f("event", M, {
169
+ let F;
170
+ const N = () => F ? P : performance.interactionCount ?? 0,
171
+ B = () => {
172
+ "interactionCount" in performance || F || (F = p(["event"], C, {
144
173
  durationThreshold: 0
145
174
  }));
146
175
  };
147
- let F = 0;
148
- class k {
149
- l = [];
150
- u = new Map();
151
- m;
176
+ class S {
177
+ u = 0;
178
+ v = [];
179
+ m = new Map();
152
180
  p;
153
- v() {
154
- F = C(), this.l.length = 0, this.u.clear();
181
+ T;
182
+ _() {
183
+ return N() - this.u;
155
184
  }
156
- T() {
157
- const e = Math.min(this.l.length - 1, Math.floor((C() - F) / 50));
158
- return this.l[e];
185
+ M() {
186
+ this.u = N(), this.v.length = 0, this.m.clear();
159
187
  }
160
- h(e) {
161
- if (this.m?.(e), !e.interactionId && "first-input" !== e.entryType) return;
162
- const t = this.l.at(-1);
163
- let n = this.u.get(e.interactionId);
164
- if (n || this.l.length < 10 || e.duration > t.L) {
165
- if (n ? e.duration > n.L ? (n.entries = [e], n.L = e.duration) : e.duration === n.L && e.startTime === n.entries[0].startTime && n.entries.push(e) : (n = {
166
- id: e.interactionId,
167
- entries: [e],
168
- L: e.duration
169
- }, this.u.set(n.id, n), this.l.push(n)), this.l.sort((e, t) => t.L - e.L), this.l.length > 10) {
170
- const e = this.l.splice(10);
171
- for (const t of e) this.u.delete(t.id);
188
+ L(t) {
189
+ const n = this._(),
190
+ e = Math.min(this.v.length - 1, Math.floor(n / 50));
191
+ return !n || -1 !== e || "soft-navigation" !== t && "back-forward-cache" !== t ? this.v[e] : {
192
+ P: 8,
193
+ id: -1,
194
+ entries: []
195
+ };
196
+ }
197
+ h(t) {
198
+ if (this.p?.(t), !t.interactionId) return;
199
+ const n = this.v.at(-1);
200
+ let e = this.m.get(t.interactionId);
201
+ if (e || this.v.length < 10 || t.duration > n.P) {
202
+ if (e ? t.duration > e.P ? (e.entries = [t], e.P = t.duration) : t.duration === e.P && t.startTime === e.entries[0].startTime && e.entries.push(t) : (e = {
203
+ id: t.interactionId,
204
+ entries: [t],
205
+ P: t.duration
206
+ }, this.m.set(e.id, e), this.v.push(e)), this.v.sort((t, n) => n.P - t.P), this.v.length > 10) {
207
+ const t = this.v.splice(10);
208
+ for (const n of t) this.m.delete(n.id);
172
209
  }
173
- this.p?.(n);
210
+ this.T?.(e);
174
211
  }
175
212
  }
176
213
  }
177
- const A = e => {
178
- const t = globalThis.requestIdleCallback || setTimeout,
179
- n = globalThis.cancelIdleCallback || clearTimeout;
180
- if ("hidden" === document.visibilityState) e();else {
181
- const i = l(e);
214
+ const q = t => {
215
+ const n = "requestIdleCallback" in globalThis ? 1e3 : 0,
216
+ e = globalThis.requestIdleCallback || setTimeout,
217
+ i = globalThis.cancelIdleCallback || clearTimeout;
218
+ if ("hidden" === document.visibilityState) t();else {
219
+ const o = y(t);
182
220
  let s = -1;
183
- const o = () => {
184
- n(s), i();
221
+ const a = () => {
222
+ i(s), o();
185
223
  };
186
- addEventListener("visibilitychange", o, {
224
+ addEventListener("visibilitychange", a, {
187
225
  once: true,
188
226
  capture: true
189
- }), s = t(() => {
190
- removeEventListener("visibilitychange", o, {
227
+ }), s = e(() => {
228
+ removeEventListener("visibilitychange", a, {
191
229
  capture: true
192
- }), i();
230
+ }), o();
231
+ }, {
232
+ timeout: n
193
233
  });
194
234
  }
195
235
  },
196
- B = [200, 500];
197
- class S {
198
- m;
199
- h(e) {
200
- this.m?.(e);
236
+ A = [200, 500];
237
+ class H {
238
+ p;
239
+ l;
240
+ h(t) {
241
+ this.p?.(t);
201
242
  }
202
243
  }
203
- const q = [2500, 4e3],
204
- N = [800, 1800],
205
- H = e => {
206
- document.prerendering ? y(() => H(e)) : "complete" !== document.readyState ? addEventListener("load", () => H(e), true) : setTimeout(e);
244
+ const O = [2500, 4e3],
245
+ U = [800, 1800],
246
+ V = t => {
247
+ document.prerendering ? E(() => V(t)) : "complete" !== document.readyState ? addEventListener("load", () => V(t), true) : setTimeout(t);
207
248
  };
208
- return e.CLSThresholds = E, e.FCPThresholds = T, e.INPThresholds = B, e.LCPThresholds = q, e.TTFBThresholds = N, e.onCLS = (e, t = {}) => {
209
- const o = v();
210
- b(l(() => {
249
+ return t.CLSThresholds = w, t.FCPThresholds = M, t.INPThresholds = A, t.LCPThresholds = O, t.TTFBThresholds = U, t.onCLS = (t, n = {}) => {
250
+ const a = l();
251
+ L(y(() => {
211
252
  let r,
212
- a = c("CLS", 0);
213
- const l = d(t, h),
214
- u = e => {
215
- for (const t of e) l.h(t);
216
- l.i > a.value && (a.value = l.i, a.entries = l.o, r());
253
+ c = g("CLS", 0);
254
+ const f = v(n, m),
255
+ h = (e, i, s, a, h) => {
256
+ c = g("CLS", 0, e, i, s, a, h), f.i = 0, r = o(t, c, w, n.reportAllChanges);
257
+ },
258
+ d = (t = false) => {
259
+ f.i > c.value && (c.value = f.i, c.entries = f.o), r(t);
260
+ },
261
+ l = t => {
262
+ d(true), h("soft-navigation", t.navigationId, t.interactionId, t.name, t.startTime);
263
+ },
264
+ u = t => {
265
+ for (const n of t) "soft-navigation" !== n.entryType ? f.h(n) : l(n);
266
+ d();
217
267
  },
218
- m = f("layout-shift", u);
219
- m && (r = i(e, a, E, t.reportAllChanges), o.onHidden(() => {
220
- u(m.takeRecords()), r(true);
221
- }), n(() => {
222
- l.i = 0, a = c("CLS", 0), r = i(e, a, E, t.reportAllChanges), s(r);
268
+ T = ["layout-shift"];
269
+ b(n) && T.push("soft-navigation");
270
+ const y = p(T, u);
271
+ y && (r = o(t, c, w, n.reportAllChanges), a.onHidden(() => {
272
+ u(y.takeRecords()), r(true);
273
+ }), i(() => {
274
+ h("back-forward-cache", c.navigationId, c.navigationInteractionId, c.navigationURL, e()), s(r);
223
275
  }), setTimeout(r));
224
276
  }));
225
- }, e.onFCP = b, e.onINP = (e, t = {}) => {
277
+ }, t.onFCP = L, t.onINP = (t, n = {}) => {
226
278
  if (!globalThis.PerformanceEventTiming || !("interactionId" in PerformanceEventTiming.prototype)) return;
227
- const s = v();
228
- y(() => {
229
- I();
230
- let o,
231
- r = c("INP");
232
- const a = d(t, k),
233
- h = e => {
234
- A(() => {
235
- for (const t of e) a.h(t);
236
- const t = a.T();
237
- t && t.L !== r.value && (r.value = t.L, r.entries = t.entries, o());
279
+ const s = l();
280
+ E(() => {
281
+ B();
282
+ let a,
283
+ r = g("INP");
284
+ const c = v(n, S),
285
+ f = (e, i, s, f, h) => {
286
+ c.M(), r = g("INP", -1, e, i, s, f, h), a = o(t, r, A, n.reportAllChanges);
287
+ },
288
+ h = () => {
289
+ const t = c.L(r.navigationType);
290
+ t && t.P !== r.value && (r.value = t.P, r.entries = t.entries, a());
291
+ },
292
+ d = t => {
293
+ h(), a(true), f("soft-navigation", t.navigationId, t.interactionId, t.name, t.startTime);
294
+ },
295
+ l = (t, n = false) => {
296
+ q(() => {
297
+ for (const n of t) "soft-navigation" !== n.entryType ? c.h(n) : d(n);
298
+ h(), n && a(true);
238
299
  });
239
300
  },
240
- l = f("event", h, {
241
- durationThreshold: t.durationThreshold ?? 40
242
- });
243
- o = i(e, r, B, t.reportAllChanges), l && (l.observe({
244
- type: "first-input",
245
- buffered: true
246
- }), s.onHidden(() => {
247
- h(l.takeRecords()), o(true);
248
- }), n(() => {
249
- a.v(), r = c("INP"), o = i(e, r, B, t.reportAllChanges);
301
+ u = ["event", "first-input"];
302
+ b(n) && u.push("soft-navigation");
303
+ const m = p(u, l, {
304
+ ...n,
305
+ durationThreshold: n.durationThreshold ?? 40
306
+ });
307
+ a = o(t, r, A, n.reportAllChanges), m && (s.onHidden(() => {
308
+ l(m.takeRecords(), true);
309
+ }), i(() => {
310
+ f("back-forward-cache", r.navigationId, r.navigationInteractionId, r.navigationURL, e());
250
311
  }));
251
312
  });
252
- }, e.onLCP = (e, t = {}) => {
253
- y(() => {
254
- const o = v();
255
- let a,
256
- h = c("LCP");
257
- const u = d(t, S),
258
- m = e => {
259
- t.reportAllChanges || (e = e.slice(-1));
260
- for (const t of e) u.h(t), t.startTime < o.firstHiddenTime && (h.value = Math.max(t.startTime - r(), 0), h.entries = [t], a());
313
+ }, t.onLCP = (t, n = {}) => {
314
+ let a = false;
315
+ const c = b(n);
316
+ E(() => {
317
+ let f,
318
+ h = l(),
319
+ d = g("LCP");
320
+ const u = v(n, H),
321
+ m = (e, i, s, r, c) => {
322
+ d = g("LCP", -1, e, i, s, r, c), f = o(t, d, O, n.reportAllChanges), a = false, "soft-navigation" === e && (h = l(true));
323
+ },
324
+ b = t => {
325
+ u.l && t.navigationId && T(u.l, t), a || f(true), m("soft-navigation", t.navigationId, t.interactionId, t.name, t.startTime);
326
+ const n = t.getLargestInteractionContentfulPaint?.();
327
+ n && y([n]);
328
+ },
329
+ y = t => {
330
+ n.reportAllChanges || c || (t = t.slice(-1));
331
+ for (const n of t) {
332
+ if (!n) continue;
333
+ if ("soft-navigation" === n.entryType) {
334
+ b(n);
335
+ continue;
336
+ }
337
+ let t = 0,
338
+ e = [],
339
+ i = n.startTime;
340
+ if ("largest-contentful-paint" === n.entryType) t = Math.max(n.startTime - r(), 0), u.h(n), e = [n];else if ("interaction-contentful-paint" === n.entryType) {
341
+ const o = n;
342
+ if (!d.navigationId) continue;
343
+ if ("interactionId" in o && o.interactionId != d.navigationInteractionId) continue;
344
+ i = o.largestContentfulPaint?.renderTime || 0, t = Math.max(i - n.startTime, 0), o.largestContentfulPaint && (u.h(o.largestContentfulPaint), e = [o.largestContentfulPaint]);
345
+ }
346
+ i < h.firstHiddenTime && (d.value = t, d.entries = e, f());
347
+ }
261
348
  },
262
- g = f("largest-contentful-paint", m);
263
- if (g) {
264
- a = i(e, h, q, t.reportAllChanges);
265
- const o = l(() => {
266
- m(g.takeRecords()), g.disconnect(), a(true);
267
- }),
268
- r = e => {
269
- e.isTrusted && (A(o), removeEventListener(e.type, r, {
270
- capture: true
271
- }));
349
+ _ = ["largest-contentful-paint"];
350
+ c && _.push("interaction-contentful-paint", "soft-navigation");
351
+ const E = p(_, y);
352
+ if (E) {
353
+ f = o(t, d, O, n.reportAllChanges);
354
+ const r = ["keydown", "click", "visibilitychange"],
355
+ h = t => {
356
+ if (t.isTrusted && !a) {
357
+ const t = d.id;
358
+ q(() => {
359
+ if (!a) {
360
+ if (!c) {
361
+ E.disconnect();
362
+ for (const t of r) removeEventListener(t, h, {
363
+ capture: true
364
+ });
365
+ }
366
+ t === d.id && (a = true, f(true));
367
+ }
368
+ });
369
+ }
272
370
  };
273
- for (const e of ["keydown", "click", "visibilitychange"]) addEventListener(e, r, {
371
+ for (const t of r) addEventListener(t, h, {
274
372
  capture: true
275
373
  });
276
- n(n => {
277
- h = c("LCP"), a = i(e, h, q, t.reportAllChanges), s(() => {
278
- h.value = performance.now() - n.timeStamp, a(true);
374
+ i(i => {
375
+ m("back-forward-cache", d.navigationId, d.navigationInteractionId, d.navigationURL, e()), f = o(t, d, O, n.reportAllChanges), s(() => {
376
+ d.value = performance.now() - i.timeStamp, a = true, f(true);
279
377
  });
280
378
  });
281
379
  }
282
380
  });
283
- }, e.onTTFB = (e, t = {}) => {
284
- let s = c("TTFB"),
285
- a = i(e, s, N, t.reportAllChanges);
286
- H(() => {
287
- const d = o();
288
- d && (s.value = Math.max(d.responseStart - r(), 0), s.entries = [d], a(true), n(() => {
289
- s = c("TTFB", 0), a = i(e, s, N, t.reportAllChanges), a(true);
290
- }));
381
+ }, t.onTTFB = (t, n = {}) => {
382
+ const s = b(n);
383
+ let c = g("TTFB"),
384
+ f = o(t, c, U, n.reportAllChanges);
385
+ V(() => {
386
+ const h = a();
387
+ if (h) {
388
+ const a = h.responseStart;
389
+ if (c.value = Math.max(a - r(), 0), c.entries = [h], f(true), i(() => {
390
+ c = g("TTFB", 0, "back-forward-cache", c.navigationId, c.navigationInteractionId, c.navigationURL, e()), f = o(t, c, U, n.reportAllChanges), f(true);
391
+ }), s) {
392
+ p(["soft-navigation"], e => {
393
+ e.forEach(e => {
394
+ e.navigationId && (c = g("TTFB", 0, "soft-navigation", e.navigationId, e.interactionId, e.name, e.startTime), c.entries = [e], f = o(t, c, U, n.reportAllChanges), f(true));
395
+ });
396
+ }, n);
397
+ }
398
+ }
291
399
  });
292
- }, e;
400
+ }, t;
293
401
  })({});
294
402
 
295
403
  function addCWVTracking({
@@ -348,4 +456,4 @@ function addCWVTracking({
348
456
  }
349
457
 
350
458
  export { addCWVTracking as default };
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3d2Lm1hcC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL3dlYi12aXRhbHMvZGlzdC93ZWItdml0YWxzLmlpZmUuanMiLCIuLi8uLi9wbHVnaW5zL2N3di5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgd2ViVml0YWxzPWZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2xldCB0PS0xO2NvbnN0IG49ZT0+e2FkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLG49PntuLnBlcnNpc3RlZCYmKHQ9bi50aW1lU3RhbXAsZShuKSl9LCEwKX0saT0oZSx0LG4saSk9PntsZXQgcyxvO3JldHVybiByPT57dC52YWx1ZT49MCYmKHJ8fGkpJiYobz10LnZhbHVlLShzPz8wKSwob3x8dm9pZCAwPT09cykmJihzPXQudmFsdWUsdC5kZWx0YT1vLHQucmF0aW5nPSgoZSx0KT0+ZT50WzFdP1wicG9vclwiOmU+dFswXT9cIm5lZWRzLWltcHJvdmVtZW50XCI6XCJnb29kXCIpKHQudmFsdWUsbiksZSh0KSkpfX0scz1lPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpfSxvPSgpPT57Y29uc3QgZT1wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibmF2aWdhdGlvblwiKVswXTtpZihlJiZlLnJlc3BvbnNlU3RhcnQ+MCYmZS5yZXNwb25zZVN0YXJ0PHBlcmZvcm1hbmNlLm5vdygpKXJldHVybiBlfSxyPSgpPT5vKCk/LmFjdGl2YXRpb25TdGFydD8/MCxjPShlLG49LTEpPT57Y29uc3QgaT1vKCk7bGV0IHM9XCJuYXZpZ2F0ZVwiO3Q+PTA/cz1cImJhY2stZm9yd2FyZC1jYWNoZVwiOmkmJihkb2N1bWVudC5wcmVyZW5kZXJpbmd8fHIoKT4wP3M9XCJwcmVyZW5kZXJcIjpkb2N1bWVudC53YXNEaXNjYXJkZWQ/cz1cInJlc3RvcmVcIjppLnR5cGUmJihzPWkudHlwZS5yZXBsYWNlKC9fL2csXCItXCIpKSk7cmV0dXJue25hbWU6ZSx2YWx1ZTpuLHJhdGluZzpcImdvb2RcIixkZWx0YTowLGVudHJpZXM6W10saWQ6YHY1LSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKDg5OTk5OTk5OTk5OTkqTWF0aC5yYW5kb20oKSkrMWUxMn1gLG5hdmlnYXRpb25UeXBlOnN9fSxhPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGQoZSx0KXtsZXQgbj1hLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsYS5zZXQodCxuKSksbi5nZXQoZSl8fG4uc2V0KGUsbmV3IHQpLG4uZ2V0KGUpfWNsYXNzIGh7dDtpPTA7bz1bXTtoKGUpe2lmKGUuaGFkUmVjZW50SW5wdXQpcmV0dXJuO2NvbnN0IHQ9dGhpcy5vWzBdLG49dGhpcy5vLmF0KC0xKTt0aGlzLmkmJnQmJm4mJmUuc3RhcnRUaW1lLW4uc3RhcnRUaW1lPDFlMyYmZS5zdGFydFRpbWUtdC5zdGFydFRpbWU8NWUzPyh0aGlzLmkrPWUudmFsdWUsdGhpcy5vLnB1c2goZSkpOih0aGlzLmk9ZS52YWx1ZSx0aGlzLm89W2VdKSx0aGlzLnQ/LihlKX19Y29uc3QgZj0oZSx0LG49e30pPT57dHJ5e2lmKFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyhlKSl7Y29uc3QgaT1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihlPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0KGUuZ2V0RW50cmllcygpKX0pfSk7cmV0dXJuIGkub2JzZXJ2ZSh7dHlwZTplLGJ1ZmZlcmVkOiEwLC4uLm59KSxpfX1jYXRjaHt9fSxsPWU9PntsZXQgdD0hMTtyZXR1cm4oKT0+e3R8fChlKCksdD0hMCl9fTtsZXQgdT0tMTtjb25zdCBtPW5ldyBTZXQsZz0oKT0+XCJoaWRkZW5cIiE9PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZXx8ZG9jdW1lbnQucHJlcmVuZGVyaW5nPzEvMDowLHA9ZT0+e2lmKFwiaGlkZGVuXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpe2lmKFwidmlzaWJpbGl0eWNoYW5nZVwiPT09ZS50eXBlKWZvcihjb25zdCBlIG9mIG0pZSgpO2lzRmluaXRlKHUpfHwodT1cInZpc2liaWxpdHljaGFuZ2VcIj09PWUudHlwZT9lLnRpbWVTdGFtcDowLHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwcmVyZW5kZXJpbmdjaGFuZ2VcIixwLCEwKSl9fSx2PSgpPT57aWYodTwwKXtjb25zdCBlPXIoKSx0PWRvY3VtZW50LnByZXJlbmRlcmluZz92b2lkIDA6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwidmlzaWJpbGl0eS1zdGF0ZVwiKS5maW5kKHQ9PlwiaGlkZGVuXCI9PT10Lm5hbWUmJnQuc3RhcnRUaW1lPj1lKT8uc3RhcnRUaW1lO3U9dD8/ZygpLGFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIscCwhMCksYWRkRXZlbnRMaXN0ZW5lcihcInByZXJlbmRlcmluZ2NoYW5nZVwiLHAsITApLG4oKCk9PntzZXRUaW1lb3V0KCgpPT57dT1nKCl9KX0pfXJldHVybntnZXQgZmlyc3RIaWRkZW5UaW1lKCl7cmV0dXJuIHV9LG9uSGlkZGVuKGUpe20uYWRkKGUpfX19LHk9ZT0+e2RvY3VtZW50LnByZXJlbmRlcmluZz9hZGRFdmVudExpc3RlbmVyKFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsZSwhMCk6ZSgpfSxUPVsxODAwLDNlM10sYj0oZSx0PXt9KT0+e3koKCk9Pntjb25zdCBvPXYoKTtsZXQgYSxkPWMoXCJGQ1BcIik7Y29uc3QgaD1mKFwicGFpbnRcIixlPT57Zm9yKGNvbnN0IHQgb2YgZSlcImZpcnN0LWNvbnRlbnRmdWwtcGFpbnRcIj09PXQubmFtZSYmKGguZGlzY29ubmVjdCgpLHQuc3RhcnRUaW1lPG8uZmlyc3RIaWRkZW5UaW1lJiYoZC52YWx1ZT1NYXRoLm1heCh0LnN0YXJ0VGltZS1yKCksMCksZC5lbnRyaWVzLnB1c2godCksYSghMCkpKX0pO2gmJihhPWkoZSxkLFQsdC5yZXBvcnRBbGxDaGFuZ2VzKSxuKG49PntkPWMoXCJGQ1BcIiksYT1pKGUsZCxULHQucmVwb3J0QWxsQ2hhbmdlcykscygoKT0+e2QudmFsdWU9cGVyZm9ybWFuY2Uubm93KCktbi50aW1lU3RhbXAsYSghMCl9KX0pKX0pfSxFPVsuMSwuMjVdO2xldCBMPTAsUD0xLzAsXz0wO2NvbnN0IE09ZT0+e2Zvcihjb25zdCB0IG9mIGUpdC5pbnRlcmFjdGlvbklkJiYoUD1NYXRoLm1pbihQLHQuaW50ZXJhY3Rpb25JZCksXz1NYXRoLm1heChfLHQuaW50ZXJhY3Rpb25JZCksTD1fPyhfLVApLzcrMTowKX07bGV0IHc7Y29uc3QgQz0oKT0+dz9MOnBlcmZvcm1hbmNlLmludGVyYWN0aW9uQ291bnQ/PzAsST0oKT0+e1wiaW50ZXJhY3Rpb25Db3VudFwiaW4gcGVyZm9ybWFuY2V8fHd8fCh3PWYoXCJldmVudFwiLE0se2R1cmF0aW9uVGhyZXNob2xkOjB9KSl9O2xldCBGPTA7Y2xhc3Mga3tsPVtdO3U9bmV3IE1hcDttO3A7digpe0Y9QygpLHRoaXMubC5sZW5ndGg9MCx0aGlzLnUuY2xlYXIoKX1UKCl7Y29uc3QgZT1NYXRoLm1pbih0aGlzLmwubGVuZ3RoLTEsTWF0aC5mbG9vcigoQygpLUYpLzUwKSk7cmV0dXJuIHRoaXMubFtlXX1oKGUpe2lmKHRoaXMubT8uKGUpLCFlLmludGVyYWN0aW9uSWQmJlwiZmlyc3QtaW5wdXRcIiE9PWUuZW50cnlUeXBlKXJldHVybjtjb25zdCB0PXRoaXMubC5hdCgtMSk7bGV0IG49dGhpcy51LmdldChlLmludGVyYWN0aW9uSWQpO2lmKG58fHRoaXMubC5sZW5ndGg8MTB8fGUuZHVyYXRpb24+dC5MKXtpZihuP2UuZHVyYXRpb24+bi5MPyhuLmVudHJpZXM9W2VdLG4uTD1lLmR1cmF0aW9uKTplLmR1cmF0aW9uPT09bi5MJiZlLnN0YXJ0VGltZT09PW4uZW50cmllc1swXS5zdGFydFRpbWUmJm4uZW50cmllcy5wdXNoKGUpOihuPXtpZDplLmludGVyYWN0aW9uSWQsZW50cmllczpbZV0sTDplLmR1cmF0aW9ufSx0aGlzLnUuc2V0KG4uaWQsbiksdGhpcy5sLnB1c2gobikpLHRoaXMubC5zb3J0KChlLHQpPT50LkwtZS5MKSx0aGlzLmwubGVuZ3RoPjEwKXtjb25zdCBlPXRoaXMubC5zcGxpY2UoMTApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy51LmRlbGV0ZSh0LmlkKX10aGlzLnA/LihuKX19fWNvbnN0IEE9ZT0+e2NvbnN0IHQ9Z2xvYmFsVGhpcy5yZXF1ZXN0SWRsZUNhbGxiYWNrfHxzZXRUaW1lb3V0LG49Z2xvYmFsVGhpcy5jYW5jZWxJZGxlQ2FsbGJhY2t8fGNsZWFyVGltZW91dDtpZihcImhpZGRlblwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKWUoKTtlbHNle2NvbnN0IGk9bChlKTtsZXQgcz0tMTtjb25zdCBvPSgpPT57bihzKSxpKCl9O2FkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsbyx7b25jZTohMCxjYXB0dXJlOiEwfSkscz10KCgpPT57cmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixvLHtjYXB0dXJlOiEwfSksaSgpfSl9fSxCPVsyMDAsNTAwXTtjbGFzcyBTe207aChlKXt0aGlzLm0/LihlKX19Y29uc3QgcT1bMjUwMCw0ZTNdLE49WzgwMCwxODAwXSxIPWU9Pntkb2N1bWVudC5wcmVyZW5kZXJpbmc/eSgoKT0+SChlKSk6XCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCgpPT5IKGUpLCEwKTpzZXRUaW1lb3V0KGUpfTtyZXR1cm4gZS5DTFNUaHJlc2hvbGRzPUUsZS5GQ1BUaHJlc2hvbGRzPVQsZS5JTlBUaHJlc2hvbGRzPUIsZS5MQ1BUaHJlc2hvbGRzPXEsZS5UVEZCVGhyZXNob2xkcz1OLGUub25DTFM9KGUsdD17fSk9Pntjb25zdCBvPXYoKTtiKGwoKCk9PntsZXQgcixhPWMoXCJDTFNcIiwwKTtjb25zdCBsPWQodCxoKSx1PWU9Pntmb3IoY29uc3QgdCBvZiBlKWwuaCh0KTtsLmk+YS52YWx1ZSYmKGEudmFsdWU9bC5pLGEuZW50cmllcz1sLm8scigpKX0sbT1mKFwibGF5b3V0LXNoaWZ0XCIsdSk7bSYmKHI9aShlLGEsRSx0LnJlcG9ydEFsbENoYW5nZXMpLG8ub25IaWRkZW4oKCk9Pnt1KG0udGFrZVJlY29yZHMoKSkscighMCl9KSxuKCgpPT57bC5pPTAsYT1jKFwiQ0xTXCIsMCkscj1pKGUsYSxFLHQucmVwb3J0QWxsQ2hhbmdlcykscyhyKX0pLHNldFRpbWVvdXQocikpfSkpfSxlLm9uRkNQPWIsZS5vbklOUD0oZSx0PXt9KT0+e2lmKCFnbG9iYWxUaGlzLlBlcmZvcm1hbmNlRXZlbnRUaW1pbmd8fCEoXCJpbnRlcmFjdGlvbklkXCJpbiBQZXJmb3JtYW5jZUV2ZW50VGltaW5nLnByb3RvdHlwZSkpcmV0dXJuO2NvbnN0IHM9digpO3koKCk9PntJKCk7bGV0IG8scj1jKFwiSU5QXCIpO2NvbnN0IGE9ZCh0LGspLGg9ZT0+e0EoKCk9Pntmb3IoY29uc3QgdCBvZiBlKWEuaCh0KTtjb25zdCB0PWEuVCgpO3QmJnQuTCE9PXIudmFsdWUmJihyLnZhbHVlPXQuTCxyLmVudHJpZXM9dC5lbnRyaWVzLG8oKSl9KX0sbD1mKFwiZXZlbnRcIixoLHtkdXJhdGlvblRocmVzaG9sZDp0LmR1cmF0aW9uVGhyZXNob2xkPz80MH0pO289aShlLHIsQix0LnJlcG9ydEFsbENoYW5nZXMpLGwmJihsLm9ic2VydmUoe3R5cGU6XCJmaXJzdC1pbnB1dFwiLGJ1ZmZlcmVkOiEwfSkscy5vbkhpZGRlbigoKT0+e2gobC50YWtlUmVjb3JkcygpKSxvKCEwKX0pLG4oKCk9PnthLnYoKSxyPWMoXCJJTlBcIiksbz1pKGUscixCLHQucmVwb3J0QWxsQ2hhbmdlcyl9KSl9KX0sZS5vbkxDUD0oZSx0PXt9KT0+e3koKCk9Pntjb25zdCBvPXYoKTtsZXQgYSxoPWMoXCJMQ1BcIik7Y29uc3QgdT1kKHQsUyksbT1lPT57dC5yZXBvcnRBbGxDaGFuZ2VzfHwoZT1lLnNsaWNlKC0xKSk7Zm9yKGNvbnN0IHQgb2YgZSl1LmgodCksdC5zdGFydFRpbWU8by5maXJzdEhpZGRlblRpbWUmJihoLnZhbHVlPU1hdGgubWF4KHQuc3RhcnRUaW1lLXIoKSwwKSxoLmVudHJpZXM9W3RdLGEoKSl9LGc9ZihcImxhcmdlc3QtY29udGVudGZ1bC1wYWludFwiLG0pO2lmKGcpe2E9aShlLGgscSx0LnJlcG9ydEFsbENoYW5nZXMpO2NvbnN0IG89bCgoKT0+e20oZy50YWtlUmVjb3JkcygpKSxnLmRpc2Nvbm5lY3QoKSxhKCEwKX0pLHI9ZT0+e2UuaXNUcnVzdGVkJiYoQShvKSxyZW1vdmVFdmVudExpc3RlbmVyKGUudHlwZSxyLHtjYXB0dXJlOiEwfSkpfTtmb3IoY29uc3QgZSBvZltcImtleWRvd25cIixcImNsaWNrXCIsXCJ2aXNpYmlsaXR5Y2hhbmdlXCJdKWFkZEV2ZW50TGlzdGVuZXIoZSxyLHtjYXB0dXJlOiEwfSk7bihuPT57aD1jKFwiTENQXCIpLGE9aShlLGgscSx0LnJlcG9ydEFsbENoYW5nZXMpLHMoKCk9PntoLnZhbHVlPXBlcmZvcm1hbmNlLm5vdygpLW4udGltZVN0YW1wLGEoITApfSl9KX19KX0sZS5vblRURkI9KGUsdD17fSk9PntsZXQgcz1jKFwiVFRGQlwiKSxhPWkoZSxzLE4sdC5yZXBvcnRBbGxDaGFuZ2VzKTtIKCgpPT57Y29uc3QgZD1vKCk7ZCYmKHMudmFsdWU9TWF0aC5tYXgoZC5yZXNwb25zZVN0YXJ0LXIoKSwwKSxzLmVudHJpZXM9W2RdLGEoITApLG4oKCk9PntzPWMoXCJUVEZCXCIsMCksYT1pKGUscyxOLHQucmVwb3J0QWxsQ2hhbmdlcyksYSghMCl9KSl9KX0sZX0oe30pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDI0IEFkb2JlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXJcbiAqIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OU1xuICogT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlXG4gKiBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXJlbGF0aXZlLXBhY2thZ2VzLCBuby11bnVzZWQtdmFyc1xuaW1wb3J0ICogYXMgd2ViVml0YWxzIGZyb20gJy4uL25vZGVfbW9kdWxlcy93ZWItdml0YWxzL2Rpc3Qvd2ViLXZpdGFscy5paWZlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ1dWVHJhY2tpbmcoe1xuICBzYW1wbGVSVU0sIHNvdXJjZVNlbGVjdG9yLCB0YXJnZXRTZWxlY3RvciwgZmZsYWdzLFxufSkge1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3d2U2NyaXB0ID0gbmV3IFVSTCgnLnJ1bS93ZWItdml0YWxzL2Rpc3Qvd2ViLXZpdGFscy5paWZlLmpzJywgc2FtcGxlUlVNLmJhc2VVUkwpLmhyZWY7XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7Y3d2U2NyaXB0fVwiXWApKSB7XG4gICAgICAgIC8vIHdlYiB2aXRhbHMgc2NyaXB0IGhhcyBiZWVuIGxvYWRlZCBhbHJlYWR5XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9IGN3dlNjcmlwdDtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlQ1dWID0gKG1lYXN1cmVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHsgY3d2OiB7fSB9O1xuICAgICAgICAgIGRhdGEuY3d2W21lYXN1cmVtZW50Lm5hbWVdID0gbWVhc3VyZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKG1lYXN1cmVtZW50Lm5hbWUgPT09ICdMQ1AnICYmIG1lYXN1cmVtZW50LmVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgeyBlbGVtZW50IH0gPSBtZWFzdXJlbWVudC5lbnRyaWVzLnBvcCgpO1xuICAgICAgICAgICAgZGF0YS50YXJnZXQgPSB0YXJnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgICAgICAgIGRhdGEuc291cmNlID0gc291cmNlU2VsZWN0b3IoZWxlbWVudCkgfHwgKGVsZW1lbnQgJiYgZWxlbWVudC5vdXRlckhUTUwuc2xpY2UoMCwgMzApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1lYXN1cmVtZW50Lm5hbWUgPT09ICdDTFMnICYmIG1lYXN1cmVtZW50LmVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gQXR0cmlidXRlIENMUyB0byB0aGUgZWxlbWVudCBvZiB0aGUgc2luZ2xlIGxhcmdlc3QgbGF5b3V0IHNoaWZ0XG4gICAgICAgICAgICAvLyAobWlycm9ycyB3ZWItdml0YWxzJyBgbGFyZ2VzdFNoaWZ0VGFyZ2V0YCwgZGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCBlbnRyaWVzKS5cbiAgICAgICAgICAgIGNvbnN0IGxhcmdlc3QgPSBtZWFzdXJlbWVudC5lbnRyaWVzXG4gICAgICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IChiLnZhbHVlID4gKGEgPyBhLnZhbHVlIDogMCkgPyBiIDogYSksIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbGFyZ2VzdCAmJiBsYXJnZXN0LnNvdXJjZXNcbiAgICAgICAgICAgICAgJiYgbGFyZ2VzdC5zb3VyY2VzLm1hcCgocykgPT4gcy5ub2RlKS5maW5kKChuKSA9PiBuICYmIG4ubm9kZVR5cGUgPT09IDEpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgZGF0YS5zb3VyY2UgPSBzb3VyY2VTZWxlY3Rvcihub2RlKSB8fCBub2RlLm91dGVySFRNTC5zbGljZSgwLCAzMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNhbXBsZVJVTSgnY3d2JywgZGF0YSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNFYWdlciA9IChtZXRyaWMpID0+IFsnQ0xTJywgJ0xDUCddLmluY2x1ZGVzKG1ldHJpYyk7XG5cbiAgICAgICAgLy8gV2hlbiBsb2FkaW5nIGB3ZWItdml0YWxzYCB1c2luZyBhIGNsYXNzaWMgc2NyaXB0LCBhbGwgdGhlIHB1YmxpY1xuICAgICAgICAvLyBtZXRob2RzIGNhbiBiZSBmb3VuZCBvbiB0aGUgYHdlYlZpdGFsc2AgZ2xvYmFsIG5hbWVzcGFjZS5cbiAgICAgICAgWydJTlAnLCAnVFRGQicsICdDTFMnLCAnTENQJ10uZm9yRWFjaCgobWV0cmljKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0cmljRm4gPSB3aW5kb3cud2ViVml0YWxzW2BvbiR7bWV0cmljfWBdO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWV0cmljRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGxldCBvcHRzID0ge307XG4gICAgICAgICAgICBmZmxhZ3MuZW5hYmxlZCgnZWFnZXJjd3YnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIG9wdHMgPSB7IHJlcG9ydEFsbENoYW5nZXM6IGlzRWFnZXIobWV0cmljKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtZXRyaWNGbihzdG9yZUNXViwgb3B0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICB9LCAyMDAwKTsgLy8gd2FpdCBmb3IgZGVsYXllZFxufVxuIl0sIm5hbWVzIjpbImUiLCJ0IiwibiIsImFkZEV2ZW50TGlzdGVuZXIiLCJwZXJzaXN0ZWQiLCJ0aW1lU3RhbXAiLCJpIiwicyIsIm8iLCJyIiwidmFsdWUiLCJkZWx0YSIsInJhdGluZyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlcmZvcm1hbmNlIiwiZ2V0RW50cmllc0J5VHlwZSIsInJlc3BvbnNlU3RhcnQiLCJub3ciLCJhY3RpdmF0aW9uU3RhcnQiLCJjIiwiZG9jdW1lbnQiLCJwcmVyZW5kZXJpbmciLCJ3YXNEaXNjYXJkZWQiLCJ0eXBlIiwicmVwbGFjZSIsIm5hbWUiLCJlbnRyaWVzIiwiaWQiLCJEYXRlIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwibmF2aWdhdGlvblR5cGUiLCJhIiwiV2Vha01hcCIsImQiLCJnZXQiLCJzZXQiLCJoIiwiaGFkUmVjZW50SW5wdXQiLCJhdCIsInN0YXJ0VGltZSIsInB1c2giLCJmIiwiUGVyZm9ybWFuY2VPYnNlcnZlciIsInN1cHBvcnRlZEVudHJ5VHlwZXMiLCJpbmNsdWRlcyIsInF1ZXVlTWljcm90YXNrIiwiZ2V0RW50cmllcyIsIm9ic2VydmUiLCJidWZmZXJlZCIsImwiLCJ1IiwibSIsIlNldCIsImciLCJ2aXNpYmlsaXR5U3RhdGUiLCJwIiwiaXNGaW5pdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidiIsImdsb2JhbFRoaXMiLCJmaW5kIiwic2V0VGltZW91dCIsImZpcnN0SGlkZGVuVGltZSIsIm9uSGlkZGVuIiwiYWRkIiwieSIsIlQiLCJiIiwiZGlzY29ubmVjdCIsIm1heCIsInJlcG9ydEFsbENoYW5nZXMiLCJFIiwiTCIsIlAiLCJfIiwiTSIsImludGVyYWN0aW9uSWQiLCJtaW4iLCJ3IiwiQyIsImludGVyYWN0aW9uQ291bnQiLCJJIiwiZHVyYXRpb25UaHJlc2hvbGQiLCJGIiwiayIsIk1hcCIsImxlbmd0aCIsImNsZWFyIiwiZW50cnlUeXBlIiwiZHVyYXRpb24iLCJzb3J0Iiwic3BsaWNlIiwiZGVsZXRlIiwiQSIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJjYW5jZWxJZGxlQ2FsbGJhY2siLCJjbGVhclRpbWVvdXQiLCJvbmNlIiwiY2FwdHVyZSIsIkIiLCJTIiwicSIsIk4iLCJIIiwicmVhZHlTdGF0ZSIsIkNMU1RocmVzaG9sZHMiLCJGQ1BUaHJlc2hvbGRzIiwiSU5QVGhyZXNob2xkcyIsIkxDUFRocmVzaG9sZHMiLCJUVEZCVGhyZXNob2xkcyIsIm9uQ0xTIiwidGFrZVJlY29yZHMiLCJvbkZDUCIsIm9uSU5QIiwiUGVyZm9ybWFuY2VFdmVudFRpbWluZyIsInByb3RvdHlwZSIsIm9uTENQIiwic2xpY2UiLCJpc1RydXN0ZWQiLCJvblRURkIiLCJhZGRDV1ZUcmFja2luZyIsInNhbXBsZVJVTSIsInNvdXJjZVNlbGVjdG9yIiwidGFyZ2V0U2VsZWN0b3IiLCJmZmxhZ3MiLCJjd3ZTY3JpcHQiLCJVUkwiLCJiYXNlVVJMIiwiaHJlZiIsInF1ZXJ5U2VsZWN0b3IiLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwib25sb2FkIiwic3RvcmVDV1YiLCJtZWFzdXJlbWVudCIsImRhdGEiLCJjd3YiLCJlbGVtZW50IiwicG9wIiwidGFyZ2V0Iiwic291cmNlIiwib3V0ZXJIVE1MIiwibGFyZ2VzdCIsInJlZHVjZSIsInVuZGVmaW5lZCIsIm5vZGUiLCJzb3VyY2VzIiwibWFwIiwibm9kZVR5cGUiLCJpc0VhZ2VyIiwibWV0cmljIiwiZm9yRWFjaCIsIm1ldHJpY0ZuIiwid2luZG93Iiwid2ViVml0YWxzIiwib3B0cyIsImVuYWJsZWQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Q0FBYyxVQUFTQSxDQUFDLEVBQUM7O0VBQWMsSUFBSUMsQ0FBQyxHQUFDLEVBQUU7RUFBQyxNQUFNQyxDQUFDLEdBQUNGLENBQUMsSUFBRTtBQUFDRyxNQUFBQSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUNELENBQUMsSUFBRTtBQUFDQSxRQUFBQSxDQUFDLENBQUNFLFNBQVMsS0FBR0gsQ0FBQyxHQUFDQyxDQUFDLENBQUNHLFNBQVMsRUFBQ0wsQ0FBQyxDQUFDRSxDQUFDLENBQUMsQ0FBQztNQUFBLENBQUMsRUFBQyxJQUFFLENBQUM7SUFBQSxDQUFDO0lBQUNJLENBQUMsR0FBQ0EsQ0FBQ04sQ0FBQyxFQUFDQyxDQUFDLEVBQUNDLENBQUMsRUFBQ0ksQ0FBQyxLQUFHO01BQUMsSUFBSUMsQ0FBQyxFQUFDQyxDQUFDO0FBQUMsTUFBQSxPQUFPQyxDQUFDLElBQUU7QUFBQ1IsUUFBQUEsQ0FBQyxDQUFDUyxLQUFLLElBQUUsQ0FBQyxLQUFHRCxDQUFDLElBQUVILENBQUMsQ0FBQyxLQUFHRSxDQUFDLEdBQUNQLENBQUMsQ0FBQ1MsS0FBSyxJQUFFSCxDQUFDLElBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQ0MsQ0FBQyxJQUFFLE1BQU0sS0FBR0QsQ0FBQyxNQUFJQSxDQUFDLEdBQUNOLENBQUMsQ0FBQ1MsS0FBSyxFQUFDVCxDQUFDLENBQUNVLEtBQUssR0FBQ0gsQ0FBQyxFQUFDUCxDQUFDLENBQUNXLE1BQU0sR0FBQyxDQUFDLENBQUNaLENBQUMsRUFBQ0MsQ0FBQyxLQUFHRCxDQUFDLEdBQUNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLEdBQUNELENBQUMsR0FBQ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLG1CQUFtQixHQUFDLE1BQU0sRUFBRUEsQ0FBQyxDQUFDUyxLQUFLLEVBQUNSLENBQUMsQ0FBQyxFQUFDRixDQUFDLENBQUNDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFBQSxDQUFDO0lBQUEsQ0FBQztJQUFDTSxDQUFDLEdBQUNQLENBQUMsSUFBRTtBQUFDYSxNQUFBQSxxQkFBcUIsQ0FBQyxNQUFJQSxxQkFBcUIsQ0FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQUNRLENBQUMsR0FBQ0EsTUFBSTtNQUFDLE1BQU1SLENBQUMsR0FBQ2MsV0FBVyxDQUFDQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQyxNQUFBLElBQUdmLENBQUMsSUFBRUEsQ0FBQyxDQUFDZ0IsYUFBYSxHQUFDLENBQUMsSUFBRWhCLENBQUMsQ0FBQ2dCLGFBQWEsR0FBQ0YsV0FBVyxDQUFDRyxHQUFHLEVBQUUsRUFBQyxPQUFPakIsQ0FBQztJQUFBLENBQUM7SUFBQ1MsQ0FBQyxHQUFDQSxNQUFJRCxDQUFDLEVBQUUsRUFBRVUsZUFBZSxJQUFFLENBQUM7SUFBQ0MsQ0FBQyxHQUFDQSxDQUFDbkIsQ0FBQyxFQUFDRSxDQUFDLEdBQUMsRUFBRSxLQUFHO0FBQUMsTUFBQSxNQUFNSSxDQUFDLEdBQUNFLENBQUMsRUFBRTtNQUFDLElBQUlELENBQUMsR0FBQyxVQUFVO01BQUNOLENBQUMsSUFBRSxDQUFDLEdBQUNNLENBQUMsR0FBQyxvQkFBb0IsR0FBQ0QsQ0FBQyxLQUFHYyxRQUFRLENBQUNDLFlBQVksSUFBRVosQ0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFDRixDQUFDLEdBQUMsV0FBVyxHQUFDYSxRQUFRLENBQUNFLFlBQVksR0FBQ2YsQ0FBQyxHQUFDLFNBQVMsR0FBQ0QsQ0FBQyxDQUFDaUIsSUFBSSxLQUFHaEIsQ0FBQyxHQUFDRCxDQUFDLENBQUNpQixJQUFJLENBQUNDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUFDLE9BQU07QUFBQ0MsUUFBQUEsSUFBSSxFQUFDekIsQ0FBQztBQUFDVSxRQUFBQSxLQUFLLEVBQUNSLENBQUM7QUFBQ1UsUUFBQUEsTUFBTSxFQUFDLE1BQU07QUFBQ0QsUUFBQUEsS0FBSyxFQUFDLENBQUM7QUFBQ2UsUUFBQUEsT0FBTyxFQUFDLEVBQUU7UUFBQ0MsRUFBRSxFQUFDLE1BQU1DLElBQUksQ0FBQ1gsR0FBRyxFQUFFLENBQUEsQ0FBQSxFQUFJWSxJQUFJLENBQUNDLEtBQUssQ0FBQyxhQUFhLEdBQUNELElBQUksQ0FBQ0UsTUFBTSxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUEsQ0FBRTtBQUFDQyxRQUFBQSxjQUFjLEVBQUN6QjtPQUFFO0lBQUEsQ0FBQztBQUFDMEIsSUFBQUEsQ0FBQyxHQUFDLElBQUlDLE9BQU8sRUFBQTtBQUFDLEVBQUEsU0FBU0MsQ0FBQ0EsQ0FBQ25DLENBQUMsRUFBQ0MsQ0FBQyxFQUFDO0FBQUMsSUFBQSxJQUFJQyxDQUFDLEdBQUMrQixDQUFDLENBQUNHLEdBQUcsQ0FBQ25DLENBQUMsQ0FBQztBQUFDLElBQUEsT0FBT0MsQ0FBQyxLQUFHQSxDQUFDLEdBQUMsSUFBSWdDLE9BQU8sRUFBQSxFQUFDRCxDQUFDLENBQUNJLEdBQUcsQ0FBQ3BDLENBQUMsRUFBQ0MsQ0FBQyxDQUFDLENBQUMsRUFBQ0EsQ0FBQyxDQUFDa0MsR0FBRyxDQUFDcEMsQ0FBQyxDQUFDLElBQUVFLENBQUMsQ0FBQ21DLEdBQUcsQ0FBQ3JDLENBQUMsRUFBQyxJQUFJQyxDQUFDLEVBQUEsQ0FBQyxFQUFDQyxDQUFDLENBQUNrQyxHQUFHLENBQUNwQyxDQUFDLENBQUM7QUFBQSxFQUFBO0FBQUMsRUFBQSxNQUFNc0MsQ0FBQyxDQUFBO0lBQUNyQyxDQUFDO0FBQUNLLElBQUFBLENBQUMsR0FBQyxDQUFDO0FBQUNFLElBQUFBLENBQUMsR0FBQyxFQUFFO0lBQUM4QixDQUFDQSxDQUFDdEMsQ0FBQyxFQUFDO01BQUMsSUFBR0EsQ0FBQyxDQUFDdUMsY0FBYyxFQUFDO0FBQU8sTUFBQSxNQUFNdEMsQ0FBQyxHQUFDLElBQUksQ0FBQ08sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDTixDQUFDLEdBQUMsSUFBSSxDQUFDTSxDQUFDLENBQUNnQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQUMsTUFBQSxJQUFJLENBQUNsQyxDQUFDLElBQUVMLENBQUMsSUFBRUMsQ0FBQyxJQUFFRixDQUFDLENBQUN5QyxTQUFTLEdBQUN2QyxDQUFDLENBQUN1QyxTQUFTLEdBQUMsR0FBRyxJQUFFekMsQ0FBQyxDQUFDeUMsU0FBUyxHQUFDeEMsQ0FBQyxDQUFDd0MsU0FBUyxHQUFDLEdBQUcsSUFBRSxJQUFJLENBQUNuQyxDQUFDLElBQUVOLENBQUMsQ0FBQ1UsS0FBSyxFQUFDLElBQUksQ0FBQ0YsQ0FBQyxDQUFDa0MsSUFBSSxDQUFDMUMsQ0FBQyxDQUFDLEtBQUcsSUFBSSxDQUFDTSxDQUFDLEdBQUNOLENBQUMsQ0FBQ1UsS0FBSyxFQUFDLElBQUksQ0FBQ0YsQ0FBQyxHQUFDLENBQUNSLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDQyxDQUFDLEdBQUdELENBQUMsQ0FBQztBQUFBLElBQUE7QUFBQztFQUFDLE1BQU0yQyxDQUFDLEdBQUNBLENBQUMzQyxDQUFDLEVBQUNDLENBQUMsRUFBQ0MsQ0FBQyxHQUFDLEVBQUUsS0FBRztNQUFDLElBQUc7UUFBQyxJQUFHMEMsbUJBQW1CLENBQUNDLG1CQUFtQixDQUFDQyxRQUFRLENBQUM5QyxDQUFDLENBQUMsRUFBQztBQUFDLFVBQUEsTUFBTU0sQ0FBQyxHQUFDLElBQUlzQyxtQkFBbUIsQ0FBQzVDLENBQUMsSUFBRTtBQUFDK0MsWUFBQUEsY0FBYyxDQUFDLE1BQUk7QUFBQzlDLGNBQUFBLENBQUMsQ0FBQ0QsQ0FBQyxDQUFDZ0QsVUFBVSxFQUFFLENBQUM7QUFBQSxZQUFBLENBQUMsQ0FBQztBQUFBLFVBQUEsQ0FBQyxDQUFDO1VBQUMsT0FBTzFDLENBQUMsQ0FBQzJDLE9BQU8sQ0FBQztBQUFDMUIsWUFBQUEsSUFBSSxFQUFDdkIsQ0FBQztZQUFDa0QsUUFBUSxFQUFDLENBQUMsQ0FBQztZQUFDLEdBQUdoRDtXQUFFLENBQUMsRUFBQ0ksQ0FBQztBQUFBLFFBQUE7QUFBQyxNQUFBLENBQUMsT0FBSyxDQUFDO0lBQUMsQ0FBQztJQUFDNkMsQ0FBQyxHQUFDbkQsQ0FBQyxJQUFFO01BQUMsSUFBSUMsQ0FBQyxHQUFDLEtBQUU7QUFBQyxNQUFBLE9BQU0sTUFBSTtRQUFDQSxDQUFDLEtBQUdELENBQUMsRUFBRSxFQUFDQyxDQUFDLEdBQUMsSUFBRSxDQUFDO01BQUEsQ0FBQztJQUFBLENBQUM7RUFBQyxJQUFJbUQsQ0FBQyxHQUFDLEVBQUU7QUFBQyxFQUFBLE1BQU1DLENBQUMsR0FBQyxJQUFJQyxHQUFHLEVBQUE7QUFBQ0MsSUFBQUEsQ0FBQyxHQUFDQSxNQUFJLFFBQVEsS0FBR25DLFFBQVEsQ0FBQ29DLGVBQWUsSUFBRXBDLFFBQVEsQ0FBQ0MsWUFBWSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztJQUFDb0MsQ0FBQyxHQUFDekQsQ0FBQyxJQUFFO0FBQUMsTUFBQSxJQUFHLFFBQVEsS0FBR29CLFFBQVEsQ0FBQ29DLGVBQWUsRUFBQztBQUFDLFFBQUEsSUFBRyxrQkFBa0IsS0FBR3hELENBQUMsQ0FBQ3VCLElBQUksRUFBQyxLQUFJLE1BQU12QixDQUFDLElBQUlxRCxDQUFDLEVBQUNyRCxDQUFDLEVBQUU7UUFBQzBELFFBQVEsQ0FBQ04sQ0FBQyxDQUFDLEtBQUdBLENBQUMsR0FBQyxrQkFBa0IsS0FBR3BELENBQUMsQ0FBQ3VCLElBQUksR0FBQ3ZCLENBQUMsQ0FBQ0ssU0FBUyxHQUFDLENBQUMsRUFBQ3NELG1CQUFtQixDQUFDLG9CQUFvQixFQUFDRixDQUFDLEVBQUMsSUFBRSxDQUFDLENBQUM7QUFBQSxNQUFBO0lBQUMsQ0FBQztJQUFDRyxDQUFDLEdBQUNBLE1BQUk7TUFBQyxJQUFHUixDQUFDLEdBQUMsQ0FBQyxFQUFDO0FBQUMsUUFBQSxNQUFNcEQsQ0FBQyxHQUFDUyxDQUFDLEVBQUU7QUFBQ1IsVUFBQUEsQ0FBQyxHQUFDbUIsUUFBUSxDQUFDQyxZQUFZLEdBQUMsTUFBTSxHQUFDd0MsVUFBVSxDQUFDL0MsV0FBVyxDQUFDQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDK0MsSUFBSSxDQUFDN0QsQ0FBQyxJQUFFLFFBQVEsS0FBR0EsQ0FBQyxDQUFDd0IsSUFBSSxJQUFFeEIsQ0FBQyxDQUFDd0MsU0FBUyxJQUFFekMsQ0FBQyxDQUFDLEVBQUV5QyxTQUFTO0FBQUNXLFFBQUFBLENBQUMsR0FBQ25ELENBQUMsSUFBRXNELENBQUMsRUFBRSxFQUFDcEQsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUNzRCxDQUFDLEVBQUMsSUFBRSxDQUFDLEVBQUN0RCxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBQ3NELENBQUMsRUFBQyxJQUFFLENBQUMsRUFBQ3ZELENBQUMsQ0FBQyxNQUFJO0FBQUM2RCxVQUFBQSxVQUFVLENBQUMsTUFBSTtZQUFDWCxDQUFDLEdBQUNHLENBQUMsRUFBRTtBQUFBLFVBQUEsQ0FBQyxDQUFDO0FBQUEsUUFBQSxDQUFDLENBQUM7QUFBQSxNQUFBO01BQUMsT0FBTTtRQUFDLElBQUlTLGVBQWVBLEdBQUU7QUFBQyxVQUFBLE9BQU9aLENBQUM7UUFBQSxDQUFDO1FBQUNhLFFBQVFBLENBQUNqRSxDQUFDLEVBQUM7QUFBQ3FELFVBQUFBLENBQUMsQ0FBQ2EsR0FBRyxDQUFDbEUsQ0FBQyxDQUFDO0FBQUEsUUFBQTtPQUFFO0lBQUEsQ0FBQztJQUFDbUUsQ0FBQyxHQUFDbkUsQ0FBQyxJQUFFO0FBQUNvQixNQUFBQSxRQUFRLENBQUNDLFlBQVksR0FBQ2xCLGdCQUFnQixDQUFDLG9CQUFvQixFQUFDSCxDQUFDLEVBQUMsSUFBRSxDQUFDLEdBQUNBLENBQUMsRUFBRTtJQUFBLENBQUM7QUFBQ29FLElBQUFBLENBQUMsR0FBQyxDQUFDLElBQUksRUFBQyxHQUFHLENBQUM7SUFBQ0MsQ0FBQyxHQUFDQSxDQUFDckUsQ0FBQyxFQUFDQyxDQUFDLEdBQUMsRUFBRSxLQUFHO0FBQUNrRSxNQUFBQSxDQUFDLENBQUMsTUFBSTtBQUFDLFFBQUEsTUFBTTNELENBQUMsR0FBQ29ELENBQUMsRUFBRTtBQUFDLFFBQUEsSUFBSTNCLENBQUM7QUFBQ0UsVUFBQUEsQ0FBQyxHQUFDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUFDLFFBQUEsTUFBTW1CLENBQUMsR0FBQ0ssQ0FBQyxDQUFDLE9BQU8sRUFBQzNDLENBQUMsSUFBRTtVQUFDLEtBQUksTUFBTUMsQ0FBQyxJQUFJRCxDQUFDLEVBQUMsd0JBQXdCLEtBQUdDLENBQUMsQ0FBQ3dCLElBQUksS0FBR2EsQ0FBQyxDQUFDZ0MsVUFBVSxFQUFFLEVBQUNyRSxDQUFDLENBQUN3QyxTQUFTLEdBQUNqQyxDQUFDLENBQUN3RCxlQUFlLEtBQUc3QixDQUFDLENBQUN6QixLQUFLLEdBQUNtQixJQUFJLENBQUMwQyxHQUFHLENBQUN0RSxDQUFDLENBQUN3QyxTQUFTLEdBQUNoQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQzBCLENBQUMsQ0FBQ1QsT0FBTyxDQUFDZ0IsSUFBSSxDQUFDekMsQ0FBQyxDQUFDLEVBQUNnQyxDQUFDLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQztBQUFBLFFBQUEsQ0FBQyxDQUFDO0FBQUNLLFFBQUFBLENBQUMsS0FBR0wsQ0FBQyxHQUFDM0IsQ0FBQyxDQUFDTixDQUFDLEVBQUNtQyxDQUFDLEVBQUNpQyxDQUFDLEVBQUNuRSxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDdEUsQ0FBQyxDQUFDQSxDQUFDLElBQUU7VUFBQ2lDLENBQUMsR0FBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQ2MsQ0FBQyxHQUFDM0IsQ0FBQyxDQUFDTixDQUFDLEVBQUNtQyxDQUFDLEVBQUNpQyxDQUFDLEVBQUNuRSxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDakUsQ0FBQyxDQUFDLE1BQUk7QUFBQzRCLFlBQUFBLENBQUMsQ0FBQ3pCLEtBQUssR0FBQ0ksV0FBVyxDQUFDRyxHQUFHLEVBQUUsR0FBQ2YsQ0FBQyxDQUFDRyxTQUFTLEVBQUM0QixDQUFDLENBQUMsSUFBRSxDQUFDO0FBQUEsVUFBQSxDQUFDLENBQUM7QUFBQSxRQUFBLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFBQSxDQUFDLENBQUM7SUFBQSxDQUFDO0FBQUN3QyxJQUFBQSxDQUFDLEdBQUMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxDQUFDO0VBQUMsSUFBSUMsQ0FBQyxHQUFDLENBQUM7SUFBQ0MsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO0FBQUNDLElBQUFBLENBQUMsR0FBQyxDQUFDO0VBQUMsTUFBTUMsQ0FBQyxHQUFDN0UsQ0FBQyxJQUFFO0lBQUMsS0FBSSxNQUFNQyxDQUFDLElBQUlELENBQUMsRUFBQ0MsQ0FBQyxDQUFDNkUsYUFBYSxLQUFHSCxDQUFDLEdBQUM5QyxJQUFJLENBQUNrRCxHQUFHLENBQUNKLENBQUMsRUFBQzFFLENBQUMsQ0FBQzZFLGFBQWEsQ0FBQyxFQUFDRixDQUFDLEdBQUMvQyxJQUFJLENBQUMwQyxHQUFHLENBQUNLLENBQUMsRUFBQzNFLENBQUMsQ0FBQzZFLGFBQWEsQ0FBQyxFQUFDSixDQUFDLEdBQUNFLENBQUMsR0FBQyxDQUFDQSxDQUFDLEdBQUNELENBQUMsSUFBRSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQztFQUFBLENBQUM7QUFBQyxFQUFBLElBQUlLLENBQUM7QUFBQyxFQUFBLE1BQU1DLENBQUMsR0FBQ0EsTUFBSUQsQ0FBQyxHQUFDTixDQUFDLEdBQUM1RCxXQUFXLENBQUNvRSxnQkFBZ0IsSUFBRSxDQUFDO0lBQUNDLENBQUMsR0FBQ0EsTUFBSTtBQUFDLE1BQUEsa0JBQWtCLElBQUdyRSxXQUFXLElBQUVrRSxDQUFDLEtBQUdBLENBQUMsR0FBQ3JDLENBQUMsQ0FBQyxPQUFPLEVBQUNrQyxDQUFDLEVBQUM7QUFBQ08sUUFBQUEsaUJBQWlCLEVBQUM7QUFBQyxPQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7RUFBQyxJQUFJQyxDQUFDLEdBQUMsQ0FBQztBQUFDLEVBQUEsTUFBTUMsQ0FBQyxDQUFBO0FBQUNuQyxJQUFBQSxDQUFDLEdBQUMsRUFBRTtBQUFDQyxJQUFBQSxDQUFDLEdBQUMsSUFBSW1DLEdBQUcsRUFBQTtJQUFDbEMsQ0FBQztJQUFDSSxDQUFDO0FBQUNHLElBQUFBLENBQUNBLEdBQUU7QUFBQ3lCLE1BQUFBLENBQUMsR0FBQ0osQ0FBQyxFQUFFLEVBQUMsSUFBSSxDQUFDOUIsQ0FBQyxDQUFDcUMsTUFBTSxHQUFDLENBQUMsRUFBQyxJQUFJLENBQUNwQyxDQUFDLENBQUNxQyxLQUFLLEVBQUU7QUFBQSxJQUFBO0FBQUNyQixJQUFBQSxDQUFDQSxHQUFFO01BQUMsTUFBTXBFLENBQUMsR0FBQzZCLElBQUksQ0FBQ2tELEdBQUcsQ0FBQyxJQUFJLENBQUM1QixDQUFDLENBQUNxQyxNQUFNLEdBQUMsQ0FBQyxFQUFDM0QsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQ21ELENBQUMsRUFBRSxHQUFDSSxDQUFDLElBQUUsRUFBRSxDQUFDLENBQUM7QUFBQyxNQUFBLE9BQU8sSUFBSSxDQUFDbEMsQ0FBQyxDQUFDbkQsQ0FBQyxDQUFDO0FBQUEsSUFBQTtJQUFDc0MsQ0FBQ0EsQ0FBQ3RDLENBQUMsRUFBQztBQUFDLE1BQUEsSUFBRyxJQUFJLENBQUNxRCxDQUFDLEdBQUdyRCxDQUFDLENBQUMsRUFBQyxDQUFDQSxDQUFDLENBQUM4RSxhQUFhLElBQUUsYUFBYSxLQUFHOUUsQ0FBQyxDQUFDMEYsU0FBUyxFQUFDO01BQU8sTUFBTXpGLENBQUMsR0FBQyxJQUFJLENBQUNrRCxDQUFDLENBQUNYLEVBQUUsQ0FBQyxFQUFFLENBQUM7TUFBQyxJQUFJdEMsQ0FBQyxHQUFDLElBQUksQ0FBQ2tELENBQUMsQ0FBQ2hCLEdBQUcsQ0FBQ3BDLENBQUMsQ0FBQzhFLGFBQWEsQ0FBQztBQUFDLE1BQUEsSUFBRzVFLENBQUMsSUFBRSxJQUFJLENBQUNpRCxDQUFDLENBQUNxQyxNQUFNLEdBQUMsRUFBRSxJQUFFeEYsQ0FBQyxDQUFDMkYsUUFBUSxHQUFDMUYsQ0FBQyxDQUFDeUUsQ0FBQyxFQUFDO1FBQUMsSUFBR3hFLENBQUMsR0FBQ0YsQ0FBQyxDQUFDMkYsUUFBUSxHQUFDekYsQ0FBQyxDQUFDd0UsQ0FBQyxJQUFFeEUsQ0FBQyxDQUFDd0IsT0FBTyxHQUFDLENBQUMxQixDQUFDLENBQUMsRUFBQ0UsQ0FBQyxDQUFDd0UsQ0FBQyxHQUFDMUUsQ0FBQyxDQUFDMkYsUUFBUSxJQUFFM0YsQ0FBQyxDQUFDMkYsUUFBUSxLQUFHekYsQ0FBQyxDQUFDd0UsQ0FBQyxJQUFFMUUsQ0FBQyxDQUFDeUMsU0FBUyxLQUFHdkMsQ0FBQyxDQUFDd0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDZSxTQUFTLElBQUV2QyxDQUFDLENBQUN3QixPQUFPLENBQUNnQixJQUFJLENBQUMxQyxDQUFDLENBQUMsSUFBRUUsQ0FBQyxHQUFDO1VBQUN5QixFQUFFLEVBQUMzQixDQUFDLENBQUM4RSxhQUFhO1VBQUNwRCxPQUFPLEVBQUMsQ0FBQzFCLENBQUMsQ0FBQztVQUFDMEUsQ0FBQyxFQUFDMUUsQ0FBQyxDQUFDMkY7U0FBUyxFQUFDLElBQUksQ0FBQ3ZDLENBQUMsQ0FBQ2YsR0FBRyxDQUFDbkMsQ0FBQyxDQUFDeUIsRUFBRSxFQUFDekIsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDaUQsQ0FBQyxDQUFDVCxJQUFJLENBQUN4QyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQ2lELENBQUMsQ0FBQ3lDLElBQUksQ0FBQyxDQUFDNUYsQ0FBQyxFQUFDQyxDQUFDLEtBQUdBLENBQUMsQ0FBQ3lFLENBQUMsR0FBQzFFLENBQUMsQ0FBQzBFLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQ3ZCLENBQUMsQ0FBQ3FDLE1BQU0sR0FBQyxFQUFFLEVBQUM7VUFBQyxNQUFNeEYsQ0FBQyxHQUFDLElBQUksQ0FBQ21ELENBQUMsQ0FBQzBDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFBQyxVQUFBLEtBQUksTUFBTTVGLENBQUMsSUFBSUQsQ0FBQyxFQUFDLElBQUksQ0FBQ29ELENBQUMsQ0FBQzBDLE1BQU0sQ0FBQzdGLENBQUMsQ0FBQzBCLEVBQUUsQ0FBQztBQUFBLFFBQUE7QUFBQyxRQUFBLElBQUksQ0FBQzhCLENBQUMsR0FBR3ZELENBQUMsQ0FBQztBQUFBLE1BQUE7QUFBQyxJQUFBO0FBQUM7RUFBQyxNQUFNNkYsQ0FBQyxHQUFDL0YsQ0FBQyxJQUFFO0FBQUMsTUFBQSxNQUFNQyxDQUFDLEdBQUM0RCxVQUFVLENBQUNtQyxtQkFBbUIsSUFBRWpDLFVBQVU7QUFBQzdELFFBQUFBLENBQUMsR0FBQzJELFVBQVUsQ0FBQ29DLGtCQUFrQixJQUFFQyxZQUFZO01BQUMsSUFBRyxRQUFRLEtBQUc5RSxRQUFRLENBQUNvQyxlQUFlLEVBQUN4RCxDQUFDLEVBQUUsQ0FBQyxLQUFJO0FBQUMsUUFBQSxNQUFNTSxDQUFDLEdBQUM2QyxDQUFDLENBQUNuRCxDQUFDLENBQUM7UUFBQyxJQUFJTyxDQUFDLEdBQUMsRUFBRTtRQUFDLE1BQU1DLENBQUMsR0FBQ0EsTUFBSTtBQUFDTixVQUFBQSxDQUFDLENBQUNLLENBQUMsQ0FBQyxFQUFDRCxDQUFDLEVBQUU7UUFBQSxDQUFDO0FBQUNILFFBQUFBLGdCQUFnQixDQUFDLGtCQUFrQixFQUFDSyxDQUFDLEVBQUM7VUFBQzJGLElBQUksRUFBQyxJQUFFO0FBQUNDLFVBQUFBLE9BQU8sRUFBQztBQUFFLFNBQUMsQ0FBQyxFQUFDN0YsQ0FBQyxHQUFDTixDQUFDLENBQUMsTUFBSTtBQUFDMEQsVUFBQUEsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUNuRCxDQUFDLEVBQUM7QUFBQzRGLFlBQUFBLE9BQU8sRUFBQztBQUFFLFdBQUMsQ0FBQyxFQUFDOUYsQ0FBQyxFQUFFO0FBQUEsUUFBQSxDQUFDLENBQUM7QUFBQSxNQUFBO0lBQUMsQ0FBQztBQUFDK0YsSUFBQUEsQ0FBQyxHQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFDLEVBQUEsTUFBTUMsQ0FBQyxDQUFBO0lBQUNqRCxDQUFDO0lBQUNmLENBQUNBLENBQUN0QyxDQUFDLEVBQUM7QUFBQyxNQUFBLElBQUksQ0FBQ3FELENBQUMsR0FBR3JELENBQUMsQ0FBQztBQUFBLElBQUE7QUFBQztBQUFDLEVBQUEsTUFBTXVHLENBQUMsR0FBQyxDQUFDLElBQUksRUFBQyxHQUFHLENBQUM7QUFBQ0MsSUFBQUEsQ0FBQyxHQUFDLENBQUMsR0FBRyxFQUFDLElBQUksQ0FBQztJQUFDQyxDQUFDLEdBQUN6RyxDQUFDLElBQUU7QUFBQ29CLE1BQUFBLFFBQVEsQ0FBQ0MsWUFBWSxHQUFDOEMsQ0FBQyxDQUFDLE1BQUlzQyxDQUFDLENBQUN6RyxDQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsS0FBR29CLFFBQVEsQ0FBQ3NGLFVBQVUsR0FBQ3ZHLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxNQUFJc0csQ0FBQyxDQUFDekcsQ0FBQyxDQUFDLEVBQUMsSUFBRSxDQUFDLEdBQUMrRCxVQUFVLENBQUMvRCxDQUFDLENBQUM7SUFBQSxDQUFDO0FBQUMsRUFBQSxPQUFPQSxDQUFDLENBQUMyRyxhQUFhLEdBQUNsQyxDQUFDLEVBQUN6RSxDQUFDLENBQUM0RyxhQUFhLEdBQUN4QyxDQUFDLEVBQUNwRSxDQUFDLENBQUM2RyxhQUFhLEdBQUNSLENBQUMsRUFBQ3JHLENBQUMsQ0FBQzhHLGFBQWEsR0FBQ1AsQ0FBQyxFQUFDdkcsQ0FBQyxDQUFDK0csY0FBYyxHQUFDUCxDQUFDLEVBQUN4RyxDQUFDLENBQUNnSCxLQUFLLEdBQUMsQ0FBQ2hILENBQUMsRUFBQ0MsQ0FBQyxHQUFDLEVBQUUsS0FBRztBQUFDLElBQUEsTUFBTU8sQ0FBQyxHQUFDb0QsQ0FBQyxFQUFFO0lBQUNTLENBQUMsQ0FBQ2xCLENBQUMsQ0FBQyxNQUFJO0FBQUMsTUFBQSxJQUFJMUMsQ0FBQztBQUFDd0IsUUFBQUEsQ0FBQyxHQUFDZCxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztBQUFDLE1BQUEsTUFBTWdDLENBQUMsR0FBQ2hCLENBQUMsQ0FBQ2xDLENBQUMsRUFBQ3FDLENBQUMsQ0FBQztRQUFDYyxDQUFDLEdBQUNwRCxDQUFDLElBQUU7VUFBQyxLQUFJLE1BQU1DLENBQUMsSUFBSUQsQ0FBQyxFQUFDbUQsQ0FBQyxDQUFDYixDQUFDLENBQUNyQyxDQUFDLENBQUM7VUFBQ2tELENBQUMsQ0FBQzdDLENBQUMsR0FBQzJCLENBQUMsQ0FBQ3ZCLEtBQUssS0FBR3VCLENBQUMsQ0FBQ3ZCLEtBQUssR0FBQ3lDLENBQUMsQ0FBQzdDLENBQUMsRUFBQzJCLENBQUMsQ0FBQ1AsT0FBTyxHQUFDeUIsQ0FBQyxDQUFDM0MsQ0FBQyxFQUFDQyxDQUFDLEVBQUUsQ0FBQztRQUFBLENBQUM7QUFBQzRDLFFBQUFBLENBQUMsR0FBQ1YsQ0FBQyxDQUFDLGNBQWMsRUFBQ1MsQ0FBQyxDQUFDO01BQUNDLENBQUMsS0FBRzVDLENBQUMsR0FBQ0gsQ0FBQyxDQUFDTixDQUFDLEVBQUNpQyxDQUFDLEVBQUN3QyxDQUFDLEVBQUN4RSxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDaEUsQ0FBQyxDQUFDeUQsUUFBUSxDQUFDLE1BQUk7QUFBQ2IsUUFBQUEsQ0FBQyxDQUFDQyxDQUFDLENBQUM0RCxXQUFXLEVBQUUsQ0FBQyxFQUFDeEcsQ0FBQyxDQUFDLElBQUUsQ0FBQztBQUFBLE1BQUEsQ0FBQyxDQUFDLEVBQUNQLENBQUMsQ0FBQyxNQUFJO0FBQUNpRCxRQUFBQSxDQUFDLENBQUM3QyxDQUFDLEdBQUMsQ0FBQyxFQUFDMkIsQ0FBQyxHQUFDZCxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFDVixDQUFDLEdBQUNILENBQUMsQ0FBQ04sQ0FBQyxFQUFDaUMsQ0FBQyxFQUFDd0MsQ0FBQyxFQUFDeEUsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUMsRUFBQ2pFLENBQUMsQ0FBQ0UsQ0FBQyxDQUFDO0FBQUEsTUFBQSxDQUFDLENBQUMsRUFBQ3NELFVBQVUsQ0FBQ3RELENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFBQSxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQUEsQ0FBQyxFQUFDVCxDQUFDLENBQUNrSCxLQUFLLEdBQUM3QyxDQUFDLEVBQUNyRSxDQUFDLENBQUNtSCxLQUFLLEdBQUMsQ0FBQ25ILENBQUMsRUFBQ0MsQ0FBQyxHQUFDLEVBQUUsS0FBRztBQUFDLElBQUEsSUFBRyxDQUFDNEQsVUFBVSxDQUFDdUQsc0JBQXNCLElBQUUsRUFBRSxlQUFlLElBQUdBLHNCQUFzQixDQUFDQyxTQUFTLENBQUMsRUFBQztBQUFPLElBQUEsTUFBTTlHLENBQUMsR0FBQ3FELENBQUMsRUFBRTtBQUFDTyxJQUFBQSxDQUFDLENBQUMsTUFBSTtBQUFDZ0IsTUFBQUEsQ0FBQyxFQUFFO0FBQUMsTUFBQSxJQUFJM0UsQ0FBQztBQUFDQyxRQUFBQSxDQUFDLEdBQUNVLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFBQyxNQUFBLE1BQU1jLENBQUMsR0FBQ0UsQ0FBQyxDQUFDbEMsQ0FBQyxFQUFDcUYsQ0FBQyxDQUFDO1FBQUNoRCxDQUFDLEdBQUN0QyxDQUFDLElBQUU7QUFBQytGLFVBQUFBLENBQUMsQ0FBQyxNQUFJO1lBQUMsS0FBSSxNQUFNOUYsQ0FBQyxJQUFJRCxDQUFDLEVBQUNpQyxDQUFDLENBQUNLLENBQUMsQ0FBQ3JDLENBQUMsQ0FBQztBQUFDLFlBQUEsTUFBTUEsQ0FBQyxHQUFDZ0MsQ0FBQyxDQUFDbUMsQ0FBQyxFQUFFO0FBQUNuRSxZQUFBQSxDQUFDLElBQUVBLENBQUMsQ0FBQ3lFLENBQUMsS0FBR2pFLENBQUMsQ0FBQ0MsS0FBSyxLQUFHRCxDQUFDLENBQUNDLEtBQUssR0FBQ1QsQ0FBQyxDQUFDeUUsQ0FBQyxFQUFDakUsQ0FBQyxDQUFDaUIsT0FBTyxHQUFDekIsQ0FBQyxDQUFDeUIsT0FBTyxFQUFDbEIsQ0FBQyxFQUFFLENBQUM7QUFBQSxVQUFBLENBQUMsQ0FBQztRQUFBLENBQUM7QUFBQzJDLFFBQUFBLENBQUMsR0FBQ1IsQ0FBQyxDQUFDLE9BQU8sRUFBQ0wsQ0FBQyxFQUFDO0FBQUM4QyxVQUFBQSxpQkFBaUIsRUFBQ25GLENBQUMsQ0FBQ21GLGlCQUFpQixJQUFFO0FBQUUsU0FBQyxDQUFDO0FBQUM1RSxNQUFBQSxDQUFDLEdBQUNGLENBQUMsQ0FBQ04sQ0FBQyxFQUFDUyxDQUFDLEVBQUM0RixDQUFDLEVBQUNwRyxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDckIsQ0FBQyxLQUFHQSxDQUFDLENBQUNGLE9BQU8sQ0FBQztBQUFDMUIsUUFBQUEsSUFBSSxFQUFDLGFBQWE7QUFBQzJCLFFBQUFBLFFBQVEsRUFBQztBQUFFLE9BQUMsQ0FBQyxFQUFDM0MsQ0FBQyxDQUFDMEQsUUFBUSxDQUFDLE1BQUk7QUFBQzNCLFFBQUFBLENBQUMsQ0FBQ2EsQ0FBQyxDQUFDOEQsV0FBVyxFQUFFLENBQUMsRUFBQ3pHLENBQUMsQ0FBQyxJQUFFLENBQUM7QUFBQSxNQUFBLENBQUMsQ0FBQyxFQUFDTixDQUFDLENBQUMsTUFBSTtRQUFDK0IsQ0FBQyxDQUFDMkIsQ0FBQyxFQUFFLEVBQUNuRCxDQUFDLEdBQUNVLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQ1gsQ0FBQyxHQUFDRixDQUFDLENBQUNOLENBQUMsRUFBQ1MsQ0FBQyxFQUFDNEYsQ0FBQyxFQUFDcEcsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUM7QUFBQSxNQUFBLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFBQSxDQUFDLENBQUM7QUFBQSxFQUFBLENBQUMsRUFBQ3hFLENBQUMsQ0FBQ3NILEtBQUssR0FBQyxDQUFDdEgsQ0FBQyxFQUFDQyxDQUFDLEdBQUMsRUFBRSxLQUFHO0FBQUNrRSxJQUFBQSxDQUFDLENBQUMsTUFBSTtBQUFDLE1BQUEsTUFBTTNELENBQUMsR0FBQ29ELENBQUMsRUFBRTtBQUFDLE1BQUEsSUFBSTNCLENBQUM7QUFBQ0ssUUFBQUEsQ0FBQyxHQUFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUFDLE1BQUEsTUFBTWlDLENBQUMsR0FBQ2pCLENBQUMsQ0FBQ2xDLENBQUMsRUFBQ3FHLENBQUMsQ0FBQztRQUFDakQsQ0FBQyxHQUFDckQsQ0FBQyxJQUFFO0FBQUNDLFVBQUFBLENBQUMsQ0FBQ3VFLGdCQUFnQixLQUFHeEUsQ0FBQyxHQUFDQSxDQUFDLENBQUN1SCxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7VUFBQyxLQUFJLE1BQU10SCxDQUFDLElBQUlELENBQUMsRUFBQ29ELENBQUMsQ0FBQ2QsQ0FBQyxDQUFDckMsQ0FBQyxDQUFDLEVBQUNBLENBQUMsQ0FBQ3dDLFNBQVMsR0FBQ2pDLENBQUMsQ0FBQ3dELGVBQWUsS0FBRzFCLENBQUMsQ0FBQzVCLEtBQUssR0FBQ21CLElBQUksQ0FBQzBDLEdBQUcsQ0FBQ3RFLENBQUMsQ0FBQ3dDLFNBQVMsR0FBQ2hDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDNkIsQ0FBQyxDQUFDWixPQUFPLEdBQUMsQ0FBQ3pCLENBQUMsQ0FBQyxFQUFDZ0MsQ0FBQyxFQUFFLENBQUM7UUFBQSxDQUFDO0FBQUNzQixRQUFBQSxDQUFDLEdBQUNaLENBQUMsQ0FBQywwQkFBMEIsRUFBQ1UsQ0FBQyxDQUFDO0FBQUMsTUFBQSxJQUFHRSxDQUFDLEVBQUM7QUFBQ3RCLFFBQUFBLENBQUMsR0FBQzNCLENBQUMsQ0FBQ04sQ0FBQyxFQUFDc0MsQ0FBQyxFQUFDaUUsQ0FBQyxFQUFDdEcsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUM7QUFBQyxRQUFBLE1BQU1oRSxDQUFDLEdBQUMyQyxDQUFDLENBQUMsTUFBSTtBQUFDRSxZQUFBQSxDQUFDLENBQUNFLENBQUMsQ0FBQzBELFdBQVcsRUFBRSxDQUFDLEVBQUMxRCxDQUFDLENBQUNlLFVBQVUsRUFBRSxFQUFDckMsQ0FBQyxDQUFDLElBQUUsQ0FBQztBQUFBLFVBQUEsQ0FBQyxDQUFDO1VBQUN4QixDQUFDLEdBQUNULENBQUMsSUFBRTtBQUFDQSxZQUFBQSxDQUFDLENBQUN3SCxTQUFTLEtBQUd6QixDQUFDLENBQUN2RixDQUFDLENBQUMsRUFBQ21ELG1CQUFtQixDQUFDM0QsQ0FBQyxDQUFDdUIsSUFBSSxFQUFDZCxDQUFDLEVBQUM7QUFBQzJGLGNBQUFBLE9BQU8sRUFBQztBQUFFLGFBQUMsQ0FBQyxDQUFDO1VBQUEsQ0FBQztBQUFDLFFBQUEsS0FBSSxNQUFNcEcsQ0FBQyxJQUFHLENBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxrQkFBa0IsQ0FBQyxFQUFDRyxnQkFBZ0IsQ0FBQ0gsQ0FBQyxFQUFDUyxDQUFDLEVBQUM7QUFBQzJGLFVBQUFBLE9BQU8sRUFBQztBQUFFLFNBQUMsQ0FBQztRQUFDbEcsQ0FBQyxDQUFDQSxDQUFDLElBQUU7VUFBQ29DLENBQUMsR0FBQ25CLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQ2MsQ0FBQyxHQUFDM0IsQ0FBQyxDQUFDTixDQUFDLEVBQUNzQyxDQUFDLEVBQUNpRSxDQUFDLEVBQUN0RyxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDakUsQ0FBQyxDQUFDLE1BQUk7QUFBQytCLFlBQUFBLENBQUMsQ0FBQzVCLEtBQUssR0FBQ0ksV0FBVyxDQUFDRyxHQUFHLEVBQUUsR0FBQ2YsQ0FBQyxDQUFDRyxTQUFTLEVBQUM0QixDQUFDLENBQUMsSUFBRSxDQUFDO0FBQUEsVUFBQSxDQUFDLENBQUM7QUFBQSxRQUFBLENBQUMsQ0FBQztBQUFBLE1BQUE7QUFBQyxJQUFBLENBQUMsQ0FBQztBQUFBLEVBQUEsQ0FBQyxFQUFDakMsQ0FBQyxDQUFDeUgsTUFBTSxHQUFDLENBQUN6SCxDQUFDLEVBQUNDLENBQUMsR0FBQyxFQUFFLEtBQUc7QUFBQyxJQUFBLElBQUlNLENBQUMsR0FBQ1ksQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUFDYyxNQUFBQSxDQUFDLEdBQUMzQixDQUFDLENBQUNOLENBQUMsRUFBQ08sQ0FBQyxFQUFDaUcsQ0FBQyxFQUFDdkcsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUM7QUFBQ2lDLElBQUFBLENBQUMsQ0FBQyxNQUFJO0FBQUMsTUFBQSxNQUFNdEUsQ0FBQyxHQUFDM0IsQ0FBQyxFQUFFO0FBQUMyQixNQUFBQSxDQUFDLEtBQUc1QixDQUFDLENBQUNHLEtBQUssR0FBQ21CLElBQUksQ0FBQzBDLEdBQUcsQ0FBQ3BDLENBQUMsQ0FBQ25CLGFBQWEsR0FBQ1AsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUNGLENBQUMsQ0FBQ21CLE9BQU8sR0FBQyxDQUFDUyxDQUFDLENBQUMsRUFBQ0YsQ0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDL0IsQ0FBQyxDQUFDLE1BQUk7UUFBQ0ssQ0FBQyxHQUFDWSxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxFQUFDYyxDQUFDLEdBQUMzQixDQUFDLENBQUNOLENBQUMsRUFBQ08sQ0FBQyxFQUFDaUcsQ0FBQyxFQUFDdkcsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUMsRUFBQ3ZDLENBQUMsQ0FBQyxJQUFFLENBQUM7QUFBQSxNQUFBLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFBQSxDQUFDLENBQUM7QUFBQSxFQUFBLENBQUMsRUFBQ2pDLENBQUM7QUFBQSxFQUFDLENBQUMsRUFBRTs7QUNlOXVMLFNBQVMwSCxjQUFjQSxDQUFDO0VBQ3JDQyxTQUFTO0VBQUVDLGNBQWM7RUFBRUMsY0FBYztBQUFFQyxFQUFBQTtBQUM3QyxDQUFDLEVBQUU7QUFDRC9ELEVBQUFBLFVBQVUsQ0FBQyxNQUFNO0lBQ2YsSUFBSTtBQUNGLE1BQUEsTUFBTWdFLFNBQVMsR0FBRyxJQUFJQyxHQUFHLENBQUMseUNBQXlDLEVBQUVMLFNBQVMsQ0FBQ00sT0FBTyxDQUFDLENBQUNDLElBQUk7TUFFNUYsSUFBSTlHLFFBQVEsQ0FBQytHLGFBQWEsQ0FBQyxlQUFlSixTQUFTLENBQUEsRUFBQSxDQUFJLENBQUMsRUFBRTtBQUV4RCxRQUFBO0FBQ0YsTUFBQTtBQUNBLE1BQUEsTUFBTUssTUFBTSxHQUFHaEgsUUFBUSxDQUFDaUgsYUFBYSxDQUFDLFFBQVEsQ0FBQztNQUMvQ0QsTUFBTSxDQUFDRSxHQUFHLEdBQUdQLFNBQVM7TUFDdEJLLE1BQU0sQ0FBQ0csTUFBTSxHQUFHLE1BQU07UUFDcEIsTUFBTUMsUUFBUSxHQUFJQyxXQUFXLElBQUs7QUFDaEMsVUFBQSxNQUFNQyxJQUFJLEdBQUc7QUFBRUMsWUFBQUEsR0FBRyxFQUFFO1dBQUk7VUFDeEJELElBQUksQ0FBQ0MsR0FBRyxDQUFDRixXQUFXLENBQUNoSCxJQUFJLENBQUMsR0FBR2dILFdBQVcsQ0FBQy9ILEtBQUs7QUFDOUMsVUFBQSxJQUFJK0gsV0FBVyxDQUFDaEgsSUFBSSxLQUFLLEtBQUssSUFBSWdILFdBQVcsQ0FBQy9HLE9BQU8sQ0FBQzhELE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEUsTUFBTTtBQUFFb0QsY0FBQUE7QUFBUSxhQUFDLEdBQUdILFdBQVcsQ0FBQy9HLE9BQU8sQ0FBQ21ILEdBQUcsRUFBRTtBQUM3Q0gsWUFBQUEsSUFBSSxDQUFDSSxNQUFNLEdBQUdqQixjQUFjLENBQUNlLE9BQU8sQ0FBQztBQUNyQ0YsWUFBQUEsSUFBSSxDQUFDSyxNQUFNLEdBQUduQixjQUFjLENBQUNnQixPQUFPLENBQUMsSUFBS0EsT0FBTyxJQUFJQSxPQUFPLENBQUNJLFNBQVMsQ0FBQ3pCLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFFO0FBQ3RGLFVBQUE7QUFDQSxVQUFBLElBQUlrQixXQUFXLENBQUNoSCxJQUFJLEtBQUssS0FBSyxJQUFJZ0gsV0FBVyxDQUFDL0csT0FBTyxDQUFDOEQsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUdoRSxZQUFBLE1BQU15RCxPQUFPLEdBQUdSLFdBQVcsQ0FBQy9HLE9BQU8sQ0FDaEN3SCxNQUFNLENBQUMsQ0FBQ2pILENBQUMsRUFBRW9DLENBQUMsS0FBTUEsQ0FBQyxDQUFDM0QsS0FBSyxJQUFJdUIsQ0FBQyxHQUFHQSxDQUFDLENBQUN2QixLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcyRCxDQUFDLEdBQUdwQyxDQUFFLEVBQUVrSCxTQUFTLENBQUM7QUFDckUsWUFBQSxNQUFNQyxJQUFJLEdBQUdILE9BQU8sSUFBSUEsT0FBTyxDQUFDSSxPQUFPLElBQ2xDSixPQUFPLENBQUNJLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFL0ksQ0FBQyxJQUFLQSxDQUFDLENBQUM2SSxJQUFJLENBQUMsQ0FBQ3RGLElBQUksQ0FBRTVELENBQUMsSUFBS0EsQ0FBQyxJQUFJQSxDQUFDLENBQUNxSixRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQzFFLFlBQUEsSUFBSUgsSUFBSSxFQUFFO0FBQ1JWLGNBQUFBLElBQUksQ0FBQ0ssTUFBTSxHQUFHbkIsY0FBYyxDQUFDd0IsSUFBSSxDQUFDLElBQUlBLElBQUksQ0FBQ0osU0FBUyxDQUFDekIsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbkUsWUFBQTtBQUNGLFVBQUE7QUFDQUksVUFBQUEsU0FBUyxDQUFDLEtBQUssRUFBRWUsSUFBSSxDQUFDO1FBQ3hCLENBQUM7QUFFRCxRQUFBLE1BQU1jLE9BQU8sR0FBSUMsTUFBTSxJQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDM0csUUFBUSxDQUFDMkcsTUFBTSxDQUFDO0FBSTNELFFBQUEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQ0MsT0FBTyxDQUFFRCxNQUFNLElBQUs7VUFDaEQsTUFBTUUsUUFBUSxHQUFHQyxNQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFBLEVBQUEsRUFBS0osTUFBTSxDQUFBLENBQUUsQ0FBQztBQUNoRCxVQUFBLElBQUksT0FBT0UsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUNsQyxJQUFJRyxJQUFJLEdBQUcsRUFBRTtBQUNiaEMsWUFBQUEsTUFBTSxDQUFDaUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNO0FBQy9CRCxjQUFBQSxJQUFJLEdBQUc7Z0JBQUV0RixnQkFBZ0IsRUFBRWdGLE9BQU8sQ0FBQ0MsTUFBTTtlQUFHO0FBQzlDLFlBQUEsQ0FBQyxDQUFDO0FBQ0ZFLFlBQUFBLFFBQVEsQ0FBQ25CLFFBQVEsRUFBRXNCLElBQUksQ0FBQztBQUMxQixVQUFBO0FBQ0YsUUFBQSxDQUFDLENBQUM7TUFDSixDQUFDO0FBQ0QxSSxNQUFBQSxRQUFRLENBQUM0SSxJQUFJLENBQUNDLFdBQVcsQ0FBQzdCLE1BQU0sQ0FBQztBQUVuQyxJQUFBLENBQUMsQ0FBQyxPQUFPOEIsS0FBSyxFQUFFLENBRWhCO0VBQ0YsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNWOzs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXX0=
459
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3d2Lm1hcC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL3dlYi12aXRhbHMvZGlzdC93ZWItdml0YWxzLmlpZmUuanMiLCIuLi8uLi9wbHVnaW5zL2N3di5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgd2ViVml0YWxzPWZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2xldCBuPS0xO2NvbnN0IGU9KCk9Pm4saT10PT57YWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsZT0+e2UucGVyc2lzdGVkJiYobj1lLnRpbWVTdGFtcCx0KGUpKX0sITApfSxvPSh0LG4sZSxpKT0+e2xldCBvLHM7cmV0dXJuIGE9PntuLnZhbHVlPj0wJiYoYXx8aSkmJihzPW4udmFsdWUtKG8/PzApLChzfHx2b2lkIDA9PT1vKSYmKG89bi52YWx1ZSxuLmRlbHRhPXMsbi5yYXRpbmc9KCh0LG4pPT50Pm5bMV0/XCJwb29yXCI6dD5uWzBdP1wibmVlZHMtaW1wcm92ZW1lbnRcIjpcImdvb2RcIikobi52YWx1ZSxlKSx0KG4pKSl9fSxzPXQ9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dCgpKSl9LGE9KCk9Pntjb25zdCB0PXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJuYXZpZ2F0aW9uXCIpWzBdO2lmKHQmJnQucmVzcG9uc2VTdGFydD4wJiZ0LnJlc3BvbnNlU3RhcnQ8cGVyZm9ybWFuY2Uubm93KCkpcmV0dXJuIHR9LHI9KCk9PmEoKT8uYWN0aXZhdGlvblN0YXJ0Pz8wO2xldCBjPS0xO2NvbnN0IGY9bmV3IFNldCxoPSgpPT5cImhpZGRlblwiIT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlfHxkb2N1bWVudC5wcmVyZW5kZXJpbmc/MS8wOjAsZD10PT57aWYoXCJoaWRkZW5cIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSl7aWYoXCJ2aXNpYmlsaXR5Y2hhbmdlXCI9PT10LnR5cGUpZm9yKGNvbnN0IHQgb2YgZil0KCk7aXNGaW5pdGUoYyl8fChjPVwidmlzaWJpbGl0eWNoYW5nZVwiPT09dC50eXBlP3QudGltZVN0YW1wOjAscmVtb3ZlRXZlbnRMaXN0ZW5lcihcInByZXJlbmRlcmluZ2NoYW5nZVwiLGQsITApKX19LGw9KHQ9ITEpPT57aWYodCYmKGM9MS8wKSxjPDApe2NvbnN0IHQ9cigpLG49ZG9jdW1lbnQucHJlcmVuZGVyaW5nP3ZvaWQgMDpnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJ2aXNpYmlsaXR5LXN0YXRlXCIpLmZpbmQobj0+XCJoaWRkZW5cIj09PW4ubmFtZSYmbi5zdGFydFRpbWU+PXQpPy5zdGFydFRpbWU7Yz1uPz9oKCksYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixkLCEwKSxhZGRFdmVudExpc3RlbmVyKFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsZCwhMCksaSgoKT0+e3NldFRpbWVvdXQoKCk9PntjPWgoKX0pfSl9cmV0dXJue2dldCBmaXJzdEhpZGRlblRpbWUoKXtyZXR1cm4gY30sb25IaWRkZW4odCl7Zi5hZGQodCl9fX0sZz0odCxuPS0xLGksbz0wLHMsYyxmKT0+e2NvbnN0IGg9YSgpLGQ9aD8ubmF2aWdhdGlvbklkfHwwO2xldCBsPVwibmF2aWdhdGVcIjtpP2w9aTplKCk+PTA/bD1cImJhY2stZm9yd2FyZC1jYWNoZVwiOmgmJihkb2N1bWVudC5wcmVyZW5kZXJpbmd8fHIoKT4wP2w9XCJwcmVyZW5kZXJcIjpkb2N1bWVudC53YXNEaXNjYXJkZWQ/bD1cInJlc3RvcmVcIjpoLnR5cGUmJihsPWgudHlwZS5yZXBsYWNlKC9fL2csXCItXCIpKSk7cmV0dXJue25hbWU6dCx2YWx1ZTpuLHJhdGluZzpcImdvb2RcIixkZWx0YTowLGVudHJpZXM6W10saWQ6YHY2LSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKDg5OTk5OTk5OTk5OTkqTWF0aC5yYW5kb20oKSkrMWUxMn1gLG5hdmlnYXRpb25UeXBlOmwsbmF2aWdhdGlvbklkOm98fGQsbmF2aWdhdGlvbkludGVyYWN0aW9uSWQ6cyxuYXZpZ2F0aW9uVVJMOmN8fGg/Lm5hbWUsbmF2aWdhdGlvblN0YXJ0VGltZTpmfHwwfX0sdT1uZXcgV2Vha01hcDtmdW5jdGlvbiB2KHQsbil7bGV0IGU9dS5nZXQobik7cmV0dXJuIGV8fChlPW5ldyBXZWFrTWFwLHUuc2V0KG4sZSkpLGUuZ2V0KHQpfHxlLnNldCh0LG5ldyBuKSxlLmdldCh0KX1jbGFzcyBte3Q7aT0wO289W107aCh0KXtpZih0LmhhZFJlY2VudElucHV0KXJldHVybjtjb25zdCBuPXRoaXMub1swXSxlPXRoaXMuby5hdCgtMSk7dGhpcy5pJiZuJiZlJiZ0LnN0YXJ0VGltZS1lLnN0YXJ0VGltZTwxZTMmJnQuc3RhcnRUaW1lLW4uc3RhcnRUaW1lPDVlMz8odGhpcy5pKz10LnZhbHVlLHRoaXMuby5wdXNoKHQpKToodGhpcy5pPXQudmFsdWUsdGhpcy5vPVt0XSksdGhpcy50Py4odCl9fWNvbnN0IHA9KHQsbixlPXt9KT0+e3RyeXtjb25zdCBpPXQuZmlsdGVyKHQ9PlBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyh0KSk7aWYoaS5sZW5ndGg+MCl7Y29uc3QgdD1uZXcgUGVyZm9ybWFuY2VPYnNlcnZlcih0PT57cXVldWVNaWNyb3Rhc2soKCk9Pntjb25zdCBlPXQuZ2V0RW50cmllcygpO2kubGVuZ3RoPjEmJmUuc29ydCgodCxuKT0+dC5zdGFydFRpbWUrdC5kdXJhdGlvbi0obi5zdGFydFRpbWUrbi5kdXJhdGlvbikpLG4oZSl9KX0pO2Zvcihjb25zdCBuIG9mIGkpdC5vYnNlcnZlKHt0eXBlOm4sYnVmZmVyZWQ6ITAsLi4uZX0pO3JldHVybiB0fX1jYXRjaHt9fSxiPXQ9Pmdsb2JhbFRoaXMuUGVyZm9ybWFuY2VPYnNlcnZlcj8uc3VwcG9ydGVkRW50cnlUeXBlcz8uaW5jbHVkZXMoXCJzb2Z0LW5hdmlnYXRpb25cIikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGdsb2JhbFRoaXMuUGVyZm9ybWFuY2VTb2Z0TmF2aWdhdGlvbj8ucHJvdG90eXBlPy5nZXRMYXJnZXN0SW50ZXJhY3Rpb25Db250ZW50ZnVsUGFpbnQmJnQmJnQucmVwb3J0U29mdE5hdnMsVD0odCxuKT0+e2lmKHQuc2V0KG4ubmF2aWdhdGlvbklkLG4pLHQuc2l6ZT4yKXtjb25zdCBuPXQua2V5cygpLm5leHQoKS52YWx1ZTt2b2lkIDAhPT1uJiZ0LmRlbGV0ZShuKX19LHk9dD0+e2xldCBuPSExO3JldHVybigpPT57bnx8KHQoKSxuPSEwKX19O2NsYXNzIF97bH1jb25zdCBFPXQ9Pntkb2N1bWVudC5wcmVyZW5kZXJpbmc/YWRkRXZlbnRMaXN0ZW5lcihcInByZXJlbmRlcmluZ2NoYW5nZVwiLHQsITApOnQoKX0sTT1bMTgwMCwzZTNdLEw9KHQsbj17fSk9Pntjb25zdCBhPWIobik7RSgoKT0+e2NvbnN0IGM9dihuLF8pLGY9bCgpO2xldCBoLGQ9ZyhcIkZDUFwiKTtjb25zdCB1PXAoW1wicGFpbnRcIl0sdD0+e2Zvcihjb25zdCBuIG9mIHQpXCJmaXJzdC1jb250ZW50ZnVsLXBhaW50XCI9PT1uLm5hbWUmJih1LmRpc2Nvbm5lY3QoKSxuLnN0YXJ0VGltZTxmLmZpcnN0SGlkZGVuVGltZSYmKGQudmFsdWU9TWF0aC5tYXgobi5zdGFydFRpbWUtcigpLDApLGQuZW50cmllcy5wdXNoKG4pLGQubmF2aWdhdGlvbklkPW4ubmF2aWdhdGlvbklkfHxkLm5hdmlnYXRpb25JZCxoKCEwKSkpfSk7aWYodSYmKGg9byh0LGQsTSxuLnJlcG9ydEFsbENoYW5nZXMpLGkoaT0+e2Q9ZyhcIkZDUFwiLC0xLFwiYmFjay1mb3J3YXJkLWNhY2hlXCIsZC5uYXZpZ2F0aW9uSWQsZC5uYXZpZ2F0aW9uSW50ZXJhY3Rpb25JZCxkLm5hdmlnYXRpb25VUkwsZSgpKSxoPW8odCxkLE0sbi5yZXBvcnRBbGxDaGFuZ2VzKSxzKCgpPT57ZC52YWx1ZT1wZXJmb3JtYW5jZS5ub3coKS1pLnRpbWVTdGFtcCxoKCEwKX0pfSkpLGEpe3AoW1wic29mdC1uYXZpZ2F0aW9uXCJdLGU9PntlLmZvckVhY2goZT0+e2MubCYmZS5uYXZpZ2F0aW9uSWQmJlQoYy5sLGUpO2NvbnN0IGk9TWF0aC5tYXgoKGUucHJlc2VudGF0aW9uVGltZXx8ZS5wYWludFRpbWV8fDApLWUuc3RhcnRUaW1lLDApO2Q9ZyhcIkZDUFwiLGksXCJzb2Z0LW5hdmlnYXRpb25cIixlLm5hdmlnYXRpb25JZCxlLmludGVyYWN0aW9uSWQsZS5uYW1lLGUuc3RhcnRUaW1lKSxoPW8odCxkLE0sbi5yZXBvcnRBbGxDaGFuZ2VzKSxoKCEwKX0pfSxuKX19KX0sdz1bLjEsLjI1XTtsZXQgUD0wLEk9MS8wLGs9MDtjb25zdCBDPXQ9Pntmb3IoY29uc3QgbiBvZiB0KW4uaW50ZXJhY3Rpb25JZCYmKEk9TWF0aC5taW4oSSxuLmludGVyYWN0aW9uSWQpLGs9TWF0aC5tYXgoayxuLmludGVyYWN0aW9uSWQpLFA9az8oay1JKS83KzE6MCl9O2xldCBGO2NvbnN0IE49KCk9PkY/UDpwZXJmb3JtYW5jZS5pbnRlcmFjdGlvbkNvdW50Pz8wLEI9KCk9PntcImludGVyYWN0aW9uQ291bnRcImluIHBlcmZvcm1hbmNlfHxGfHwoRj1wKFtcImV2ZW50XCJdLEMse2R1cmF0aW9uVGhyZXNob2xkOjB9KSl9O2NsYXNzIFN7dT0wO3Y9W107bT1uZXcgTWFwO3A7VDtfKCl7cmV0dXJuIE4oKS10aGlzLnV9TSgpe3RoaXMudT1OKCksdGhpcy52Lmxlbmd0aD0wLHRoaXMubS5jbGVhcigpfUwodCl7Y29uc3Qgbj10aGlzLl8oKSxlPU1hdGgubWluKHRoaXMudi5sZW5ndGgtMSxNYXRoLmZsb29yKG4vNTApKTtyZXR1cm4hbnx8LTEhPT1lfHxcInNvZnQtbmF2aWdhdGlvblwiIT09dCYmXCJiYWNrLWZvcndhcmQtY2FjaGVcIiE9PXQ/dGhpcy52W2VdOntQOjgsaWQ6LTEsZW50cmllczpbXX19aCh0KXtpZih0aGlzLnA/Lih0KSwhdC5pbnRlcmFjdGlvbklkKXJldHVybjtjb25zdCBuPXRoaXMudi5hdCgtMSk7bGV0IGU9dGhpcy5tLmdldCh0LmludGVyYWN0aW9uSWQpO2lmKGV8fHRoaXMudi5sZW5ndGg8MTB8fHQuZHVyYXRpb24+bi5QKXtpZihlP3QuZHVyYXRpb24+ZS5QPyhlLmVudHJpZXM9W3RdLGUuUD10LmR1cmF0aW9uKTp0LmR1cmF0aW9uPT09ZS5QJiZ0LnN0YXJ0VGltZT09PWUuZW50cmllc1swXS5zdGFydFRpbWUmJmUuZW50cmllcy5wdXNoKHQpOihlPXtpZDp0LmludGVyYWN0aW9uSWQsZW50cmllczpbdF0sUDp0LmR1cmF0aW9ufSx0aGlzLm0uc2V0KGUuaWQsZSksdGhpcy52LnB1c2goZSkpLHRoaXMudi5zb3J0KCh0LG4pPT5uLlAtdC5QKSx0aGlzLnYubGVuZ3RoPjEwKXtjb25zdCB0PXRoaXMudi5zcGxpY2UoMTApO2Zvcihjb25zdCBuIG9mIHQpdGhpcy5tLmRlbGV0ZShuLmlkKX10aGlzLlQ/LihlKX19fWNvbnN0IHE9dD0+e2NvbnN0IG49XCJyZXF1ZXN0SWRsZUNhbGxiYWNrXCJpbiBnbG9iYWxUaGlzPzFlMzowLGU9Z2xvYmFsVGhpcy5yZXF1ZXN0SWRsZUNhbGxiYWNrfHxzZXRUaW1lb3V0LGk9Z2xvYmFsVGhpcy5jYW5jZWxJZGxlQ2FsbGJhY2t8fGNsZWFyVGltZW91dDtpZihcImhpZGRlblwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKXQoKTtlbHNle2NvbnN0IG89eSh0KTtsZXQgcz0tMTtjb25zdCBhPSgpPT57aShzKSxvKCl9O2FkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsYSx7b25jZTohMCxjYXB0dXJlOiEwfSkscz1lKCgpPT57cmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixhLHtjYXB0dXJlOiEwfSksbygpfSx7dGltZW91dDpufSl9fSxBPVsyMDAsNTAwXTtjbGFzcyBIe3A7bDtoKHQpe3RoaXMucD8uKHQpfX1jb25zdCBPPVsyNTAwLDRlM10sVT1bODAwLDE4MDBdLFY9dD0+e2RvY3VtZW50LnByZXJlbmRlcmluZz9FKCgpPT5WKHQpKTpcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP2FkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsKCk9PlYodCksITApOnNldFRpbWVvdXQodCl9O3JldHVybiB0LkNMU1RocmVzaG9sZHM9dyx0LkZDUFRocmVzaG9sZHM9TSx0LklOUFRocmVzaG9sZHM9QSx0LkxDUFRocmVzaG9sZHM9Tyx0LlRURkJUaHJlc2hvbGRzPVUsdC5vbkNMUz0odCxuPXt9KT0+e2NvbnN0IGE9bCgpO0woeSgoKT0+e2xldCByLGM9ZyhcIkNMU1wiLDApO2NvbnN0IGY9dihuLG0pLGg9KGUsaSxzLGEsaCk9PntjPWcoXCJDTFNcIiwwLGUsaSxzLGEsaCksZi5pPTAscj1vKHQsYyx3LG4ucmVwb3J0QWxsQ2hhbmdlcyl9LGQ9KHQ9ITEpPT57Zi5pPmMudmFsdWUmJihjLnZhbHVlPWYuaSxjLmVudHJpZXM9Zi5vKSxyKHQpfSxsPXQ9PntkKCEwKSxoKFwic29mdC1uYXZpZ2F0aW9uXCIsdC5uYXZpZ2F0aW9uSWQsdC5pbnRlcmFjdGlvbklkLHQubmFtZSx0LnN0YXJ0VGltZSl9LHU9dD0+e2Zvcihjb25zdCBuIG9mIHQpXCJzb2Z0LW5hdmlnYXRpb25cIiE9PW4uZW50cnlUeXBlP2YuaChuKTpsKG4pO2QoKX0sVD1bXCJsYXlvdXQtc2hpZnRcIl07YihuKSYmVC5wdXNoKFwic29mdC1uYXZpZ2F0aW9uXCIpO2NvbnN0IHk9cChULHUpO3kmJihyPW8odCxjLHcsbi5yZXBvcnRBbGxDaGFuZ2VzKSxhLm9uSGlkZGVuKCgpPT57dSh5LnRha2VSZWNvcmRzKCkpLHIoITApfSksaSgoKT0+e2goXCJiYWNrLWZvcndhcmQtY2FjaGVcIixjLm5hdmlnYXRpb25JZCxjLm5hdmlnYXRpb25JbnRlcmFjdGlvbklkLGMubmF2aWdhdGlvblVSTCxlKCkpLHMocil9KSxzZXRUaW1lb3V0KHIpKX0pKX0sdC5vbkZDUD1MLHQub25JTlA9KHQsbj17fSk9PntpZighZ2xvYmFsVGhpcy5QZXJmb3JtYW5jZUV2ZW50VGltaW5nfHwhKFwiaW50ZXJhY3Rpb25JZFwiaW4gUGVyZm9ybWFuY2VFdmVudFRpbWluZy5wcm90b3R5cGUpKXJldHVybjtjb25zdCBzPWwoKTtFKCgpPT57QigpO2xldCBhLHI9ZyhcIklOUFwiKTtjb25zdCBjPXYobixTKSxmPShlLGkscyxmLGgpPT57Yy5NKCkscj1nKFwiSU5QXCIsLTEsZSxpLHMsZixoKSxhPW8odCxyLEEsbi5yZXBvcnRBbGxDaGFuZ2VzKX0saD0oKT0+e2NvbnN0IHQ9Yy5MKHIubmF2aWdhdGlvblR5cGUpO3QmJnQuUCE9PXIudmFsdWUmJihyLnZhbHVlPXQuUCxyLmVudHJpZXM9dC5lbnRyaWVzLGEoKSl9LGQ9dD0+e2goKSxhKCEwKSxmKFwic29mdC1uYXZpZ2F0aW9uXCIsdC5uYXZpZ2F0aW9uSWQsdC5pbnRlcmFjdGlvbklkLHQubmFtZSx0LnN0YXJ0VGltZSl9LGw9KHQsbj0hMSk9PntxKCgpPT57Zm9yKGNvbnN0IG4gb2YgdClcInNvZnQtbmF2aWdhdGlvblwiIT09bi5lbnRyeVR5cGU/Yy5oKG4pOmQobik7aCgpLG4mJmEoITApfSl9LHU9W1wiZXZlbnRcIixcImZpcnN0LWlucHV0XCJdO2IobikmJnUucHVzaChcInNvZnQtbmF2aWdhdGlvblwiKTtjb25zdCBtPXAodSxsLHsuLi5uLGR1cmF0aW9uVGhyZXNob2xkOm4uZHVyYXRpb25UaHJlc2hvbGQ/PzQwfSk7YT1vKHQscixBLG4ucmVwb3J0QWxsQ2hhbmdlcyksbSYmKHMub25IaWRkZW4oKCk9PntsKG0udGFrZVJlY29yZHMoKSwhMCl9KSxpKCgpPT57ZihcImJhY2stZm9yd2FyZC1jYWNoZVwiLHIubmF2aWdhdGlvbklkLHIubmF2aWdhdGlvbkludGVyYWN0aW9uSWQsci5uYXZpZ2F0aW9uVVJMLGUoKSl9KSl9KX0sdC5vbkxDUD0odCxuPXt9KT0+e2xldCBhPSExO2NvbnN0IGM9YihuKTtFKCgpPT57bGV0IGYsaD1sKCksZD1nKFwiTENQXCIpO2NvbnN0IHU9dihuLEgpLG09KGUsaSxzLHIsYyk9PntkPWcoXCJMQ1BcIiwtMSxlLGkscyxyLGMpLGY9byh0LGQsTyxuLnJlcG9ydEFsbENoYW5nZXMpLGE9ITEsXCJzb2Z0LW5hdmlnYXRpb25cIj09PWUmJihoPWwoITApKX0sYj10PT57dS5sJiZ0Lm5hdmlnYXRpb25JZCYmVCh1LmwsdCksYXx8ZighMCksbShcInNvZnQtbmF2aWdhdGlvblwiLHQubmF2aWdhdGlvbklkLHQuaW50ZXJhY3Rpb25JZCx0Lm5hbWUsdC5zdGFydFRpbWUpO2NvbnN0IG49dC5nZXRMYXJnZXN0SW50ZXJhY3Rpb25Db250ZW50ZnVsUGFpbnQ/LigpO24mJnkoW25dKX0seT10PT57bi5yZXBvcnRBbGxDaGFuZ2VzfHxjfHwodD10LnNsaWNlKC0xKSk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoIW4pY29udGludWU7aWYoXCJzb2Z0LW5hdmlnYXRpb25cIj09PW4uZW50cnlUeXBlKXtiKG4pO2NvbnRpbnVlfWxldCB0PTAsZT1bXSxpPW4uc3RhcnRUaW1lO2lmKFwibGFyZ2VzdC1jb250ZW50ZnVsLXBhaW50XCI9PT1uLmVudHJ5VHlwZSl0PU1hdGgubWF4KG4uc3RhcnRUaW1lLXIoKSwwKSx1LmgobiksZT1bbl07ZWxzZSBpZihcImludGVyYWN0aW9uLWNvbnRlbnRmdWwtcGFpbnRcIj09PW4uZW50cnlUeXBlKXtjb25zdCBvPW47aWYoIWQubmF2aWdhdGlvbklkKWNvbnRpbnVlO2lmKFwiaW50ZXJhY3Rpb25JZFwiaW4gbyYmby5pbnRlcmFjdGlvbklkIT1kLm5hdmlnYXRpb25JbnRlcmFjdGlvbklkKWNvbnRpbnVlO2k9by5sYXJnZXN0Q29udGVudGZ1bFBhaW50Py5yZW5kZXJUaW1lfHwwLHQ9TWF0aC5tYXgoaS1uLnN0YXJ0VGltZSwwKSxvLmxhcmdlc3RDb250ZW50ZnVsUGFpbnQmJih1Lmgoby5sYXJnZXN0Q29udGVudGZ1bFBhaW50KSxlPVtvLmxhcmdlc3RDb250ZW50ZnVsUGFpbnRdKX1pPGguZmlyc3RIaWRkZW5UaW1lJiYoZC52YWx1ZT10LGQuZW50cmllcz1lLGYoKSl9fSxfPVtcImxhcmdlc3QtY29udGVudGZ1bC1wYWludFwiXTtjJiZfLnB1c2goXCJpbnRlcmFjdGlvbi1jb250ZW50ZnVsLXBhaW50XCIsXCJzb2Z0LW5hdmlnYXRpb25cIik7Y29uc3QgRT1wKF8seSk7aWYoRSl7Zj1vKHQsZCxPLG4ucmVwb3J0QWxsQ2hhbmdlcyk7Y29uc3Qgcj1bXCJrZXlkb3duXCIsXCJjbGlja1wiLFwidmlzaWJpbGl0eWNoYW5nZVwiXSxoPXQ9PntpZih0LmlzVHJ1c3RlZCYmIWEpe2NvbnN0IHQ9ZC5pZDtxKCgpPT57aWYoIWEpe2lmKCFjKXtFLmRpc2Nvbm5lY3QoKTtmb3IoY29uc3QgdCBvZiByKXJlbW92ZUV2ZW50TGlzdGVuZXIodCxoLHtjYXB0dXJlOiEwfSl9dD09PWQuaWQmJihhPSEwLGYoITApKX19KX19O2Zvcihjb25zdCB0IG9mIHIpYWRkRXZlbnRMaXN0ZW5lcih0LGgse2NhcHR1cmU6ITB9KTtpKGk9PnttKFwiYmFjay1mb3J3YXJkLWNhY2hlXCIsZC5uYXZpZ2F0aW9uSWQsZC5uYXZpZ2F0aW9uSW50ZXJhY3Rpb25JZCxkLm5hdmlnYXRpb25VUkwsZSgpKSxmPW8odCxkLE8sbi5yZXBvcnRBbGxDaGFuZ2VzKSxzKCgpPT57ZC52YWx1ZT1wZXJmb3JtYW5jZS5ub3coKS1pLnRpbWVTdGFtcCxhPSEwLGYoITApfSl9KX19KX0sdC5vblRURkI9KHQsbj17fSk9Pntjb25zdCBzPWIobik7bGV0IGM9ZyhcIlRURkJcIiksZj1vKHQsYyxVLG4ucmVwb3J0QWxsQ2hhbmdlcyk7VigoKT0+e2NvbnN0IGg9YSgpO2lmKGgpe2NvbnN0IGE9aC5yZXNwb25zZVN0YXJ0O2lmKGMudmFsdWU9TWF0aC5tYXgoYS1yKCksMCksYy5lbnRyaWVzPVtoXSxmKCEwKSxpKCgpPT57Yz1nKFwiVFRGQlwiLDAsXCJiYWNrLWZvcndhcmQtY2FjaGVcIixjLm5hdmlnYXRpb25JZCxjLm5hdmlnYXRpb25JbnRlcmFjdGlvbklkLGMubmF2aWdhdGlvblVSTCxlKCkpLGY9byh0LGMsVSxuLnJlcG9ydEFsbENoYW5nZXMpLGYoITApfSkscyl7cChbXCJzb2Z0LW5hdmlnYXRpb25cIl0sZT0+e2UuZm9yRWFjaChlPT57ZS5uYXZpZ2F0aW9uSWQmJihjPWcoXCJUVEZCXCIsMCxcInNvZnQtbmF2aWdhdGlvblwiLGUubmF2aWdhdGlvbklkLGUuaW50ZXJhY3Rpb25JZCxlLm5hbWUsZS5zdGFydFRpbWUpLGMuZW50cmllcz1bZV0sZj1vKHQsYyxVLG4ucmVwb3J0QWxsQ2hhbmdlcyksZighMCkpfSl9LG4pfX19KX0sdH0oe30pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViLXZpdGFscy5paWZlLmpzLm1hcFxuIiwiLypcbiAqIENvcHlyaWdodCAyMDI0IEFkb2JlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXJcbiAqIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OU1xuICogT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlXG4gKiBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXJlbGF0aXZlLXBhY2thZ2VzLCBuby11bnVzZWQtdmFyc1xuaW1wb3J0ICogYXMgd2ViVml0YWxzIGZyb20gJy4uL25vZGVfbW9kdWxlcy93ZWItdml0YWxzL2Rpc3Qvd2ViLXZpdGFscy5paWZlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ1dWVHJhY2tpbmcoe1xuICBzYW1wbGVSVU0sIHNvdXJjZVNlbGVjdG9yLCB0YXJnZXRTZWxlY3RvciwgZmZsYWdzLFxufSkge1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3d2U2NyaXB0ID0gbmV3IFVSTCgnLnJ1bS93ZWItdml0YWxzL2Rpc3Qvd2ViLXZpdGFscy5paWZlLmpzJywgc2FtcGxlUlVNLmJhc2VVUkwpLmhyZWY7XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7Y3d2U2NyaXB0fVwiXWApKSB7XG4gICAgICAgIC8vIHdlYiB2aXRhbHMgc2NyaXB0IGhhcyBiZWVuIGxvYWRlZCBhbHJlYWR5XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9IGN3dlNjcmlwdDtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlQ1dWID0gKG1lYXN1cmVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHsgY3d2OiB7fSB9O1xuICAgICAgICAgIGRhdGEuY3d2W21lYXN1cmVtZW50Lm5hbWVdID0gbWVhc3VyZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKG1lYXN1cmVtZW50Lm5hbWUgPT09ICdMQ1AnICYmIG1lYXN1cmVtZW50LmVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgeyBlbGVtZW50IH0gPSBtZWFzdXJlbWVudC5lbnRyaWVzLnBvcCgpO1xuICAgICAgICAgICAgZGF0YS50YXJnZXQgPSB0YXJnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgICAgICAgIGRhdGEuc291cmNlID0gc291cmNlU2VsZWN0b3IoZWxlbWVudCkgfHwgKGVsZW1lbnQgJiYgZWxlbWVudC5vdXRlckhUTUwuc2xpY2UoMCwgMzApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1lYXN1cmVtZW50Lm5hbWUgPT09ICdDTFMnICYmIG1lYXN1cmVtZW50LmVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gQXR0cmlidXRlIENMUyB0byB0aGUgZWxlbWVudCBvZiB0aGUgc2luZ2xlIGxhcmdlc3QgbGF5b3V0IHNoaWZ0XG4gICAgICAgICAgICAvLyAobWlycm9ycyB3ZWItdml0YWxzJyBgbGFyZ2VzdFNoaWZ0VGFyZ2V0YCwgZGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCBlbnRyaWVzKS5cbiAgICAgICAgICAgIGNvbnN0IGxhcmdlc3QgPSBtZWFzdXJlbWVudC5lbnRyaWVzXG4gICAgICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IChiLnZhbHVlID4gKGEgPyBhLnZhbHVlIDogMCkgPyBiIDogYSksIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbGFyZ2VzdCAmJiBsYXJnZXN0LnNvdXJjZXNcbiAgICAgICAgICAgICAgJiYgbGFyZ2VzdC5zb3VyY2VzLm1hcCgocykgPT4gcy5ub2RlKS5maW5kKChuKSA9PiBuICYmIG4ubm9kZVR5cGUgPT09IDEpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgZGF0YS5zb3VyY2UgPSBzb3VyY2VTZWxlY3Rvcihub2RlKSB8fCBub2RlLm91dGVySFRNTC5zbGljZSgwLCAzMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNhbXBsZVJVTSgnY3d2JywgZGF0YSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNFYWdlciA9IChtZXRyaWMpID0+IFsnQ0xTJywgJ0xDUCddLmluY2x1ZGVzKG1ldHJpYyk7XG5cbiAgICAgICAgLy8gV2hlbiBsb2FkaW5nIGB3ZWItdml0YWxzYCB1c2luZyBhIGNsYXNzaWMgc2NyaXB0LCBhbGwgdGhlIHB1YmxpY1xuICAgICAgICAvLyBtZXRob2RzIGNhbiBiZSBmb3VuZCBvbiB0aGUgYHdlYlZpdGFsc2AgZ2xvYmFsIG5hbWVzcGFjZS5cbiAgICAgICAgWydJTlAnLCAnVFRGQicsICdDTFMnLCAnTENQJ10uZm9yRWFjaCgobWV0cmljKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0cmljRm4gPSB3aW5kb3cud2ViVml0YWxzW2BvbiR7bWV0cmljfWBdO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWV0cmljRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGxldCBvcHRzID0ge307XG4gICAgICAgICAgICBmZmxhZ3MuZW5hYmxlZCgnZWFnZXJjd3YnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIG9wdHMgPSB7IHJlcG9ydEFsbENoYW5nZXM6IGlzRWFnZXIobWV0cmljKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtZXRyaWNGbihzdG9yZUNXViwgb3B0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICB9LCAyMDAwKTsgLy8gd2FpdCBmb3IgZGVsYXllZFxufVxuIl0sIm5hbWVzIjpbIm4iLCJlIiwiaSIsInQiLCJhZGRFdmVudExpc3RlbmVyIiwicGVyc2lzdGVkIiwidGltZVN0YW1wIiwiYWRkQ1dWVHJhY2tpbmciLCJzYW1wbGVSVU0iLCJzb3VyY2VTZWxlY3RvciIsInRhcmdldFNlbGVjdG9yIiwiZmZsYWdzIiwic2V0VGltZW91dCIsImN3dlNjcmlwdCIsIlVSTCIsImJhc2VVUkwiLCJocmVmIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsInNyYyIsIm9ubG9hZCIsInN0b3JlQ1dWIiwibWVhc3VyZW1lbnQiLCJkYXRhIiwiY3d2IiwibmFtZSIsInZhbHVlIiwiZW50cmllcyIsImxlbmd0aCIsImVsZW1lbnQiLCJwb3AiLCJ0YXJnZXQiLCJzb3VyY2UiLCJvdXRlckhUTUwiLCJzbGljZSIsImxhcmdlc3QiLCJyZWR1Y2UiLCJhIiwiYiIsInVuZGVmaW5lZCIsIm5vZGUiLCJzb3VyY2VzIiwibWFwIiwicyIsImZpbmQiLCJub2RlVHlwZSIsImlzRWFnZXIiLCJtZXRyaWMiLCJpbmNsdWRlcyIsImZvckVhY2giLCJtZXRyaWNGbiIsIndpbmRvdyIsIndlYlZpdGFscyIsIm9wdHMiLCJlbmFibGVkIiwicmVwb3J0QWxsQ2hhbmdlcyIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBb0JBLEVBQUEsSUFBSUEsQ0FBQSxHQUFBLEVBQXFCO0FBRWxCLEVBQUEsTUFBTUMsQ0FBQSxHQUF3QkEsTUFBTUQsQ0FBQTtBQUU5QkUsSUFBQUEsQ0FBQSxHQUFvQkMsQ0FBQSxJQUFBO01BQy9CQyxnQkFBQSxDQUNFLFlBQ0NILENBQUEsSUFBQTtRQUNLQSxDQUFBLENBQU1JLFNBQUEsS0FDUkwsQ0FBQSxHQUFxQkMsQ0FBQSxDQUFNSyxTQUFBLEVBQzNCSCxDQUFBLENBQUdGLENBQUEsQ0FBQSxDQUFB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