@getopenpay/openpay-js-react 0.5.15 → 0.5.16

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 (36) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/Resource-D6e1SVqp-BeOAe8CK.js +176 -0
  3. package/dist/SimpleSpanProcessor-B5oeCAH_-CNwRvldN.js +910 -0
  4. package/dist/detect-resources-D-FR6I1M-DgVqsro8.js +862 -0
  5. package/dist/{diag-api-DbLQG6Cy-7Q64bfX9.js → diag-api-7f_bGNCd-CpEfr1jK.js} +2 -2
  6. package/dist/index-BFik66y9-BRo2pwAy.js +1012 -0
  7. package/dist/index-Bk9VFx-5-BeIAJsOs.js +127 -0
  8. package/dist/index-C1R5n4f5-BEiNGyPJ.js +430 -0
  9. package/dist/{index-B2hBQXxN-CgWoAORq.js → index-CfN_T6km-BTbU3RrT.js} +2 -2
  10. package/dist/index-Ck97EOCA-Zm6JWqpV.js +1613 -0
  11. package/dist/index-DjSIi8qA-DbNOQoO0.js +147 -0
  12. package/dist/{index-CDEhufnp-CDtO0j1l.js → index-SfjGhwLd-D8Gzvy7d.js} +2 -2
  13. package/dist/index-Zrl0yXaO-DZcZ2j3o.js +6718 -0
  14. package/dist/index-ghrKKt8-.js +9352 -0
  15. package/dist/{index-BJ3-FtuX-DlTusXVc.js → index-uguPxhWW-DM-QuCEc.js} +5 -5
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/metrics-api-Db6Frex7-qndTY0vL.js +160 -0
  19. package/dist/{suppress-tracing-i166ZvAf-D2QqEK4Q.js → suppress-tracing-CDURENlV-rNvzoerf.js} +2 -2
  20. package/dist/url-CIe6o1oH-CoerVU9o.js +798 -0
  21. package/dist/{utils-BFjwGsZE-dHVj8huE.js → utils-BhSCC4TN-CdIRB2pa.js} +2 -2
  22. package/dist/utils-cMYN_8r4-CH-hT-iy.js +270 -0
  23. package/package.json +1 -1
  24. package/dist/Resource-C_JyOUi0-DCzIGxs8.js +0 -176
  25. package/dist/SimpleSpanProcessor-DsaymkqA-CtD-GEtk.js +0 -910
  26. package/dist/detect-resources-WIF4Hgfd-BW23wWaP.js +0 -862
  27. package/dist/index-0_SuCli2-B5_tBBpx.js +0 -430
  28. package/dist/index-3-QFb-PY-DJRVxNSq.js +0 -127
  29. package/dist/index-CV8wT6Y2-Bh-lYVds.js +0 -6718
  30. package/dist/index-DIoaqP4_-Cs74t_lP.js +0 -1012
  31. package/dist/index-DJhVQsLX-BiIZL-r4.js +0 -147
  32. package/dist/index-Din5I5pT-Be1fPmsi.js +0 -1613
  33. package/dist/index-nPWqtn7T.js +0 -9357
  34. package/dist/metrics-api-B_K2nQRV-Be59r2AI.js +0 -160
  35. package/dist/url-D2-xNTDs-BLiqCwPG.js +0 -798
  36. package/dist/utils-Blz-BInC-461m4Gx4.js +0 -270
@@ -1,1613 +0,0 @@
1
- import { Q as Xe } from "./index-nPWqtn7T.js";
2
- function At(I) {
3
- return I === void 0 && (I = {}), typeof I.addEventListener == "function" && typeof I.removeEventListener == "function";
4
- }
5
- var dt = "OT_ZONE_CONTEXT", Gt = (
6
- /** @class */
7
- function() {
8
- function I() {
9
- this._enabled = !1, this._zoneCounter = 0;
10
- }
11
- return I.prototype._activeContextFromZone = function(C) {
12
- return C && C.get(dt) || Xe;
13
- }, I.prototype._bindFunction = function(C, V) {
14
- var H = this, ee = function() {
15
- for (var te = this, ae = [], he = 0; he < arguments.length; he++)
16
- ae[he] = arguments[he];
17
- return H.with(C, function() {
18
- return V.apply(te, ae);
19
- });
20
- };
21
- return Object.defineProperty(ee, "length", {
22
- enumerable: !1,
23
- configurable: !0,
24
- writable: !1,
25
- value: V.length
26
- }), ee;
27
- }, I.prototype._bindListener = function(C, V) {
28
- var H = V;
29
- return H.__ot_listeners !== void 0 || (H.__ot_listeners = {}, typeof H.addEventListener == "function" && (H.addEventListener = this._patchAddEventListener(H, H.addEventListener, C)), typeof H.removeEventListener == "function" && (H.removeEventListener = this._patchRemoveEventListener(H, H.removeEventListener))), V;
30
- }, I.prototype._createZoneName = function() {
31
- this._zoneCounter++;
32
- var C = Math.random();
33
- return this._zoneCounter + "-" + C;
34
- }, I.prototype._createZone = function(C, V) {
35
- var H;
36
- return Zone.current.fork({
37
- name: C,
38
- properties: (H = {}, H[dt] = V, H)
39
- });
40
- }, I.prototype._getActiveZone = function() {
41
- return Zone.current;
42
- }, I.prototype._patchAddEventListener = function(C, V, H) {
43
- var ee = this;
44
- return function(te, ae, he) {
45
- C.__ot_listeners === void 0 && (C.__ot_listeners = {});
46
- var Te = C.__ot_listeners[te];
47
- Te === void 0 && (Te = /* @__PURE__ */ new WeakMap(), C.__ot_listeners[te] = Te);
48
- var be = ee.bind(H, ae);
49
- return Te.set(ae, be), V.call(this, te, be, he);
50
- };
51
- }, I.prototype._patchRemoveEventListener = function(C, V) {
52
- return function(H, ee) {
53
- if (C.__ot_listeners === void 0 || C.__ot_listeners[H] === void 0)
54
- return V.call(this, H, ee);
55
- var te = C.__ot_listeners[H], ae = te.get(ee);
56
- return te.delete(ee), V.call(this, H, ae || ee);
57
- };
58
- }, I.prototype.active = function() {
59
- if (!this._enabled)
60
- return Xe;
61
- var C = this._getActiveZone(), V = this._activeContextFromZone(C);
62
- return V || Xe;
63
- }, I.prototype.bind = function(C, V) {
64
- return C === void 0 && (C = this.active()), typeof V == "function" ? this._bindFunction(C, V) : (At(V) && this._bindListener(C, V), V);
65
- }, I.prototype.disable = function() {
66
- return this._enabled = !1, this;
67
- }, I.prototype.enable = function() {
68
- return this._enabled = !0, this;
69
- }, I.prototype.with = function(C, V, H) {
70
- for (var ee = [], te = 3; te < arguments.length; te++)
71
- ee[te - 3] = arguments[te];
72
- var ae = this._createZoneName(), he = this._createZone(ae, C);
73
- return he.run(V, H, ee);
74
- }, I;
75
- }()
76
- ), kt = {}, mt;
77
- function xt() {
78
- if (mt) return kt;
79
- mt = 1;
80
- /**
81
- * @license Angular v<unknown>
82
- * (c) 2010-2025 Google LLC. https://angular.io/
83
- * License: MIT
84
- */
85
- const I = globalThis;
86
- function C(e) {
87
- return (I.__Zone_symbol_prefix || "__zone_symbol__") + e;
88
- }
89
- function V() {
90
- const e = I.performance;
91
- function n(L) {
92
- e && e.mark && e.mark(L);
93
- }
94
- function c(L, a) {
95
- e && e.measure && e.measure(L, a);
96
- }
97
- n("Zone");
98
- class t {
99
- static __symbol__ = C;
100
- static assertZonePatched() {
101
- if (I.Promise !== O.ZoneAwarePromise)
102
- throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)");
103
- }
104
- static get root() {
105
- let a = t.current;
106
- for (; a.parent; )
107
- a = a.parent;
108
- return a;
109
- }
110
- static get current() {
111
- return E.zone;
112
- }
113
- static get currentTask() {
114
- return S;
115
- }
116
- static __load_patch(a, s, r = !1) {
117
- if (O.hasOwnProperty(a)) {
118
- const T = I[C("forceDuplicateZoneCheck")] === !0;
119
- if (!r && T)
120
- throw Error("Already loaded patch: " + a);
121
- } else if (!I["__Zone_disable_" + a]) {
122
- const T = "Zone:" + a;
123
- n(T), O[a] = s(I, t, D), c(T, T);
124
- }
125
- }
126
- get parent() {
127
- return this._parent;
128
- }
129
- get name() {
130
- return this._name;
131
- }
132
- _parent;
133
- _name;
134
- _properties;
135
- _zoneDelegate;
136
- constructor(a, s) {
137
- this._parent = a, this._name = s ? s.name || "unnamed" : "<root>", this._properties = s && s.properties || {}, this._zoneDelegate = new u(this, this._parent && this._parent._zoneDelegate, s);
138
- }
139
- get(a) {
140
- const s = this.getZoneWith(a);
141
- if (s)
142
- return s._properties[a];
143
- }
144
- getZoneWith(a) {
145
- let s = this;
146
- for (; s; ) {
147
- if (s._properties.hasOwnProperty(a))
148
- return s;
149
- s = s._parent;
150
- }
151
- return null;
152
- }
153
- fork(a) {
154
- if (!a)
155
- throw new Error("ZoneSpec required!");
156
- return this._zoneDelegate.fork(this, a);
157
- }
158
- wrap(a, s) {
159
- if (typeof a != "function")
160
- throw new Error("Expecting function got: " + a);
161
- const r = this._zoneDelegate.intercept(this, a, s), T = this;
162
- return function() {
163
- return T.runGuarded(r, this, arguments, s);
164
- };
165
- }
166
- run(a, s, r, T) {
167
- E = { parent: E, zone: this };
168
- try {
169
- return this._zoneDelegate.invoke(this, a, s, r, T);
170
- } finally {
171
- E = E.parent;
172
- }
173
- }
174
- runGuarded(a, s = null, r, T) {
175
- E = { parent: E, zone: this };
176
- try {
177
- try {
178
- return this._zoneDelegate.invoke(this, a, s, r, T);
179
- } catch (U) {
180
- if (this._zoneDelegate.handleError(this, U))
181
- throw U;
182
- }
183
- } finally {
184
- E = E.parent;
185
- }
186
- }
187
- runTask(a, s, r) {
188
- if (a.zone != this)
189
- throw new Error("A task can only be run in the zone of creation! (Creation: " + (a.zone || re).name + "; Execution: " + this.name + ")");
190
- const T = a, { type: U, data: { isPeriodic: ie = !1, isRefreshable: N = !1 } = {} } = a;
191
- if (a.state === K && (U === B || U === k))
192
- return;
193
- const me = a.state != A;
194
- me && T._transitionTo(A, p);
195
- const ve = S;
196
- S = T, E = { parent: E, zone: this };
197
- try {
198
- U == k && a.data && !ie && !N && (a.cancelFn = void 0);
199
- try {
200
- return this._zoneDelegate.invokeTask(this, T, s, r);
201
- } catch (se) {
202
- if (this._zoneDelegate.handleError(this, se))
203
- throw se;
204
- }
205
- } finally {
206
- const se = a.state;
207
- if (se !== K && se !== J)
208
- if (U == B || ie || N && se === v)
209
- me && T._transitionTo(p, A, v);
210
- else {
211
- const we = T._zoneDelegates;
212
- this._updateTaskCount(T, -1), me && T._transitionTo(K, A, K), N && (T._zoneDelegates = we);
213
- }
214
- E = E.parent, S = ve;
215
- }
216
- }
217
- scheduleTask(a) {
218
- if (a.zone && a.zone !== this) {
219
- let r = this;
220
- for (; r; ) {
221
- if (r === a.zone)
222
- throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${a.zone.name}`);
223
- r = r.parent;
224
- }
225
- }
226
- a._transitionTo(v, K);
227
- const s = [];
228
- a._zoneDelegates = s, a._zone = this;
229
- try {
230
- a = this._zoneDelegate.scheduleTask(this, a);
231
- } catch (r) {
232
- throw a._transitionTo(J, v, K), this._zoneDelegate.handleError(this, r), r;
233
- }
234
- return a._zoneDelegates === s && this._updateTaskCount(a, 1), a.state == v && a._transitionTo(p, v), a;
235
- }
236
- scheduleMicroTask(a, s, r, T) {
237
- return this.scheduleTask(new d($, a, s, r, T, void 0));
238
- }
239
- scheduleMacroTask(a, s, r, T, U) {
240
- return this.scheduleTask(new d(k, a, s, r, T, U));
241
- }
242
- scheduleEventTask(a, s, r, T, U) {
243
- return this.scheduleTask(new d(B, a, s, r, T, U));
244
- }
245
- cancelTask(a) {
246
- if (a.zone != this)
247
- throw new Error("A task can only be cancelled in the zone of creation! (Creation: " + (a.zone || re).name + "; Execution: " + this.name + ")");
248
- if (!(a.state !== p && a.state !== A)) {
249
- a._transitionTo(G, p, A);
250
- try {
251
- this._zoneDelegate.cancelTask(this, a);
252
- } catch (s) {
253
- throw a._transitionTo(J, G), this._zoneDelegate.handleError(this, s), s;
254
- }
255
- return this._updateTaskCount(a, -1), a._transitionTo(K, G), a.runCount = -1, a;
256
- }
257
- }
258
- _updateTaskCount(a, s) {
259
- const r = a._zoneDelegates;
260
- s == -1 && (a._zoneDelegates = null);
261
- for (let T = 0; T < r.length; T++)
262
- r[T]._updateTaskCount(a.type, s);
263
- }
264
- }
265
- const i = {
266
- name: "",
267
- onHasTask: (L, a, s, r) => L.hasTask(s, r),
268
- onScheduleTask: (L, a, s, r) => L.scheduleTask(s, r),
269
- onInvokeTask: (L, a, s, r, T, U) => L.invokeTask(s, r, T, U),
270
- onCancelTask: (L, a, s, r) => L.cancelTask(s, r)
271
- };
272
- class u {
273
- get zone() {
274
- return this._zone;
275
- }
276
- _zone;
277
- _taskCounts = {
278
- microTask: 0,
279
- macroTask: 0,
280
- eventTask: 0
281
- };
282
- _parentDelegate;
283
- _forkDlgt;
284
- _forkZS;
285
- _forkCurrZone;
286
- _interceptDlgt;
287
- _interceptZS;
288
- _interceptCurrZone;
289
- _invokeDlgt;
290
- _invokeZS;
291
- _invokeCurrZone;
292
- _handleErrorDlgt;
293
- _handleErrorZS;
294
- _handleErrorCurrZone;
295
- _scheduleTaskDlgt;
296
- _scheduleTaskZS;
297
- _scheduleTaskCurrZone;
298
- _invokeTaskDlgt;
299
- _invokeTaskZS;
300
- _invokeTaskCurrZone;
301
- _cancelTaskDlgt;
302
- _cancelTaskZS;
303
- _cancelTaskCurrZone;
304
- _hasTaskDlgt;
305
- _hasTaskDlgtOwner;
306
- _hasTaskZS;
307
- _hasTaskCurrZone;
308
- constructor(a, s, r) {
309
- this._zone = a, this._parentDelegate = s, this._forkZS = r && (r && r.onFork ? r : s._forkZS), this._forkDlgt = r && (r.onFork ? s : s._forkDlgt), this._forkCurrZone = r && (r.onFork ? this._zone : s._forkCurrZone), this._interceptZS = r && (r.onIntercept ? r : s._interceptZS), this._interceptDlgt = r && (r.onIntercept ? s : s._interceptDlgt), this._interceptCurrZone = r && (r.onIntercept ? this._zone : s._interceptCurrZone), this._invokeZS = r && (r.onInvoke ? r : s._invokeZS), this._invokeDlgt = r && (r.onInvoke ? s : s._invokeDlgt), this._invokeCurrZone = r && (r.onInvoke ? this._zone : s._invokeCurrZone), this._handleErrorZS = r && (r.onHandleError ? r : s._handleErrorZS), this._handleErrorDlgt = r && (r.onHandleError ? s : s._handleErrorDlgt), this._handleErrorCurrZone = r && (r.onHandleError ? this._zone : s._handleErrorCurrZone), this._scheduleTaskZS = r && (r.onScheduleTask ? r : s._scheduleTaskZS), this._scheduleTaskDlgt = r && (r.onScheduleTask ? s : s._scheduleTaskDlgt), this._scheduleTaskCurrZone = r && (r.onScheduleTask ? this._zone : s._scheduleTaskCurrZone), this._invokeTaskZS = r && (r.onInvokeTask ? r : s._invokeTaskZS), this._invokeTaskDlgt = r && (r.onInvokeTask ? s : s._invokeTaskDlgt), this._invokeTaskCurrZone = r && (r.onInvokeTask ? this._zone : s._invokeTaskCurrZone), this._cancelTaskZS = r && (r.onCancelTask ? r : s._cancelTaskZS), this._cancelTaskDlgt = r && (r.onCancelTask ? s : s._cancelTaskDlgt), this._cancelTaskCurrZone = r && (r.onCancelTask ? this._zone : s._cancelTaskCurrZone), this._hasTaskZS = null, this._hasTaskDlgt = null, this._hasTaskDlgtOwner = null, this._hasTaskCurrZone = null;
310
- const T = r && r.onHasTask, U = s && s._hasTaskZS;
311
- (T || U) && (this._hasTaskZS = T ? r : i, this._hasTaskDlgt = s, this._hasTaskDlgtOwner = this, this._hasTaskCurrZone = this._zone, r.onScheduleTask || (this._scheduleTaskZS = i, this._scheduleTaskDlgt = s, this._scheduleTaskCurrZone = this._zone), r.onInvokeTask || (this._invokeTaskZS = i, this._invokeTaskDlgt = s, this._invokeTaskCurrZone = this._zone), r.onCancelTask || (this._cancelTaskZS = i, this._cancelTaskDlgt = s, this._cancelTaskCurrZone = this._zone));
312
- }
313
- fork(a, s) {
314
- return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, a, s) : new t(a, s);
315
- }
316
- intercept(a, s, r) {
317
- return this._interceptZS ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, a, s, r) : s;
318
- }
319
- invoke(a, s, r, T, U) {
320
- return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, a, s, r, T, U) : s.apply(r, T);
321
- }
322
- handleError(a, s) {
323
- return this._handleErrorZS ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, a, s) : !0;
324
- }
325
- scheduleTask(a, s) {
326
- let r = s;
327
- if (this._scheduleTaskZS)
328
- this._hasTaskZS && r._zoneDelegates.push(this._hasTaskDlgtOwner), r = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, a, s), r || (r = s);
329
- else if (s.scheduleFn)
330
- s.scheduleFn(s);
331
- else if (s.type == $)
332
- X(s);
333
- else
334
- throw new Error("Task is missing scheduleFn.");
335
- return r;
336
- }
337
- invokeTask(a, s, r, T) {
338
- return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, a, s, r, T) : s.callback.apply(r, T);
339
- }
340
- cancelTask(a, s) {
341
- let r;
342
- if (this._cancelTaskZS)
343
- r = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, a, s);
344
- else {
345
- if (!s.cancelFn)
346
- throw Error("Task is not cancelable");
347
- r = s.cancelFn(s);
348
- }
349
- return r;
350
- }
351
- hasTask(a, s) {
352
- try {
353
- this._hasTaskZS && this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, a, s);
354
- } catch (r) {
355
- this.handleError(a, r);
356
- }
357
- }
358
- _updateTaskCount(a, s) {
359
- const r = this._taskCounts, T = r[a], U = r[a] = T + s;
360
- if (U < 0)
361
- throw new Error("More tasks executed then were scheduled.");
362
- if (T == 0 || U == 0) {
363
- const ie = {
364
- microTask: r.microTask > 0,
365
- macroTask: r.macroTask > 0,
366
- eventTask: r.eventTask > 0,
367
- change: a
368
- };
369
- this.hasTask(this._zone, ie);
370
- }
371
- }
372
- }
373
- class d {
374
- type;
375
- source;
376
- invoke;
377
- callback;
378
- data;
379
- scheduleFn;
380
- cancelFn;
381
- _zone = null;
382
- runCount = 0;
383
- _zoneDelegates = null;
384
- _state = "notScheduled";
385
- constructor(a, s, r, T, U, ie) {
386
- if (this.type = a, this.source = s, this.data = T, this.scheduleFn = U, this.cancelFn = ie, !r)
387
- throw new Error("callback is not defined");
388
- this.callback = r;
389
- const N = this;
390
- a === B && T && T.useG ? this.invoke = d.invokeTask : this.invoke = function() {
391
- return d.invokeTask.call(I, N, this, arguments);
392
- };
393
- }
394
- static invokeTask(a, s, r) {
395
- a || (a = this), oe++;
396
- try {
397
- return a.runCount++, a.zone.runTask(a, s, r);
398
- } finally {
399
- oe == 1 && ne(), oe--;
400
- }
401
- }
402
- get zone() {
403
- return this._zone;
404
- }
405
- get state() {
406
- return this._state;
407
- }
408
- cancelScheduleRequest() {
409
- this._transitionTo(K, v);
410
- }
411
- _transitionTo(a, s, r) {
412
- if (this._state === s || this._state === r)
413
- this._state = a, a == K && (this._zoneDelegates = null);
414
- else
415
- throw new Error(`${this.type} '${this.source}': can not transition to '${a}', expecting state '${s}'${r ? " or '" + r + "'" : ""}, was '${this._state}'.`);
416
- }
417
- toString() {
418
- return this.data && typeof this.data.handleId < "u" ? this.data.handleId.toString() : Object.prototype.toString.call(this);
419
- }
420
- // add toJSON method to prevent cyclic error when
421
- // call JSON.stringify(zoneTask)
422
- toJSON() {
423
- return {
424
- type: this.type,
425
- state: this.state,
426
- source: this.source,
427
- zone: this.zone.name,
428
- runCount: this.runCount
429
- };
430
- }
431
- }
432
- const g = C("setTimeout"), y = C("Promise"), w = C("then");
433
- let _ = [], R = !1, j;
434
- function x(L) {
435
- if (j || I[y] && (j = I[y].resolve(0)), j) {
436
- let a = j[w];
437
- a || (a = j.then), a.call(j, L);
438
- } else
439
- I[g](L, 0);
440
- }
441
- function X(L) {
442
- oe === 0 && _.length === 0 && x(ne), L && _.push(L);
443
- }
444
- function ne() {
445
- if (!R) {
446
- for (R = !0; _.length; ) {
447
- const L = _;
448
- _ = [];
449
- for (let a = 0; a < L.length; a++) {
450
- const s = L[a];
451
- try {
452
- s.zone.runTask(s, null, null);
453
- } catch (r) {
454
- D.onUnhandledError(r);
455
- }
456
- }
457
- }
458
- D.microtaskDrainDone(), R = !1;
459
- }
460
- }
461
- const re = { name: "NO ZONE" }, K = "notScheduled", v = "scheduling", p = "scheduled", A = "running", G = "canceling", J = "unknown", $ = "microTask", k = "macroTask", B = "eventTask", O = {}, D = {
462
- symbol: C,
463
- currentZoneFrame: () => E,
464
- onUnhandledError: Y,
465
- microtaskDrainDone: Y,
466
- scheduleMicroTask: X,
467
- showUncaughtError: () => !t[C("ignoreConsoleErrorUncaughtError")],
468
- patchEventTarget: () => [],
469
- patchOnProperties: Y,
470
- patchMethod: () => Y,
471
- bindArguments: () => [],
472
- patchThen: () => Y,
473
- patchMacroTask: () => Y,
474
- patchEventPrototype: () => Y,
475
- isIEOrEdge: () => !1,
476
- getGlobalObjects: () => {
477
- },
478
- ObjectDefineProperty: () => Y,
479
- ObjectGetOwnPropertyDescriptor: () => {
480
- },
481
- ObjectCreate: () => {
482
- },
483
- ArraySlice: () => [],
484
- patchClass: () => Y,
485
- wrapWithCurrentZone: () => Y,
486
- filterProperties: () => [],
487
- attachOriginToPatched: () => Y,
488
- _redefineProperty: () => Y,
489
- patchCallbacks: () => Y,
490
- nativeScheduleMicroTask: x
491
- };
492
- let E = { parent: null, zone: new t(null, null) }, S = null, oe = 0;
493
- function Y() {
494
- }
495
- return c("Zone", "Zone"), t;
496
- }
497
- function H() {
498
- const e = globalThis, n = e[C("forceDuplicateZoneCheck")] === !0;
499
- if (e.Zone && (n || typeof e.Zone.__symbol__ != "function"))
500
- throw new Error("Zone already loaded.");
501
- return e.Zone ??= V(), e.Zone;
502
- }
503
- const ee = Object.getOwnPropertyDescriptor, te = Object.defineProperty, ae = Object.getPrototypeOf, he = Object.create, Te = Array.prototype.slice, be = "addEventListener", Ne = "removeEventListener", Ie = C(be), Fe = C(Ne), _e = "true", ge = "false", Se = C("");
504
- function Ae(e, n) {
505
- return Zone.current.wrap(e, n);
506
- }
507
- function xe(e, n, c, t, i) {
508
- return Zone.current.scheduleMacroTask(e, n, c, t, i);
509
- }
510
- const F = C, Pe = typeof window < "u", Ce = Pe ? window : void 0, Q = Pe && Ce || globalThis, yt = "removeAttribute";
511
- function He(e, n) {
512
- for (let c = e.length - 1; c >= 0; c--)
513
- typeof e[c] == "function" && (e[c] = Ae(e[c], n + "_" + c));
514
- return e;
515
- }
516
- function vt(e, n) {
517
- const c = e.constructor.name;
518
- for (let t = 0; t < n.length; t++) {
519
- const i = n[t], u = e[i];
520
- if (u) {
521
- const d = ee(e, i);
522
- if (!$e(d))
523
- continue;
524
- e[i] = ((g) => {
525
- const y = function() {
526
- return g.apply(this, He(arguments, c + "." + i));
527
- };
528
- return ke(y, g), y;
529
- })(u);
530
- }
531
- }
532
- }
533
- function $e(e) {
534
- return e ? e.writable === !1 ? !1 : !(typeof e.get == "function" && typeof e.set > "u") : !0;
535
- }
536
- const Be = typeof WorkerGlobalScope < "u" && self instanceof WorkerGlobalScope, Re = !("nw" in Q) && typeof Q.process < "u" && Q.process.toString() === "[object process]", Ge = !Re && !Be && !!(Pe && Ce.HTMLElement), Ye = typeof Q.process < "u" && Q.process.toString() === "[object process]" && !Be && !!(Pe && Ce.HTMLElement), je = {}, Tt = F("enable_beforeunload"), Ke = function(e) {
537
- if (e = e || Q.event, !e)
538
- return;
539
- let n = je[e.type];
540
- n || (n = je[e.type] = F("ON_PROPERTY" + e.type));
541
- const c = this || e.target || Q, t = c[n];
542
- let i;
543
- if (Ge && c === Ce && e.type === "error") {
544
- const u = e;
545
- i = t && t.call(this, u.message, u.filename, u.lineno, u.colno, u.error), i === !0 && e.preventDefault();
546
- } else
547
- i = t && t.apply(this, arguments), // https://github.com/angular/angular/issues/47579
548
- // https://www.w3.org/TR/2011/WD-html5-20110525/history.html#beforeunloadevent
549
- // This is the only specific case we should check for. The spec defines that the
550
- // `returnValue` attribute represents the message to show the user. When the event
551
- // is created, this attribute must be set to the empty string.
552
- e.type === "beforeunload" && // To prevent any breaking changes resulting from this change, given that
553
- // it was already causing a significant number of failures in G3, we have hidden
554
- // that behavior behind a global configuration flag. Consumers can enable this
555
- // flag explicitly if they want the `beforeunload` event to be handled as defined
556
- // in the specification.
557
- Q[Tt] && // The IDL event definition is `attribute DOMString returnValue`, so we check whether
558
- // `typeof result` is a string.
559
- typeof i == "string" ? e.returnValue = i : i != null && !i && e.preventDefault();
560
- return i;
561
- };
562
- function Je(e, n, c) {
563
- let t = ee(e, n);
564
- if (!t && c && ee(c, n) && (t = { enumerable: !0, configurable: !0 }), !t || !t.configurable)
565
- return;
566
- const i = F("on" + n + "patched");
567
- if (e.hasOwnProperty(i) && e[i])
568
- return;
569
- delete t.writable, delete t.value;
570
- const u = t.get, d = t.set, g = n.slice(2);
571
- let y = je[g];
572
- y || (y = je[g] = F("ON_PROPERTY" + g)), t.set = function(w) {
573
- let _ = this;
574
- !_ && e === Q && (_ = Q), _ && (typeof _[y] == "function" && _.removeEventListener(g, Ke), d?.call(_, null), _[y] = w, typeof w == "function" && _.addEventListener(g, Ke, !1));
575
- }, t.get = function() {
576
- let w = this;
577
- if (!w && e === Q && (w = Q), !w)
578
- return null;
579
- const _ = w[y];
580
- if (_)
581
- return _;
582
- if (u) {
583
- let R = u.call(this);
584
- if (R)
585
- return t.set.call(this, R), typeof w[yt] == "function" && w.removeAttribute(n), R;
586
- }
587
- return null;
588
- }, te(e, n, t), e[i] = !0;
589
- }
590
- function Qe(e, n, c) {
591
- if (n)
592
- for (let t = 0; t < n.length; t++)
593
- Je(e, "on" + n[t], c);
594
- else {
595
- const t = [];
596
- for (const i in e)
597
- i.slice(0, 2) == "on" && t.push(i);
598
- for (let i = 0; i < t.length; i++)
599
- Je(e, t[i], c);
600
- }
601
- }
602
- const le = F("originalInstance");
603
- function Oe(e) {
604
- const n = Q[e];
605
- if (!n)
606
- return;
607
- Q[F(e)] = n, Q[e] = function() {
608
- const i = He(arguments, e);
609
- switch (i.length) {
610
- case 0:
611
- this[le] = new n();
612
- break;
613
- case 1:
614
- this[le] = new n(i[0]);
615
- break;
616
- case 2:
617
- this[le] = new n(i[0], i[1]);
618
- break;
619
- case 3:
620
- this[le] = new n(i[0], i[1], i[2]);
621
- break;
622
- case 4:
623
- this[le] = new n(i[0], i[1], i[2], i[3]);
624
- break;
625
- default:
626
- throw new Error("Arg list too long.");
627
- }
628
- }, ke(Q[e], n);
629
- const c = new n(function() {
630
- });
631
- let t;
632
- for (t in c)
633
- e === "XMLHttpRequest" && t === "responseBlob" || function(i) {
634
- typeof c[i] == "function" ? Q[e].prototype[i] = function() {
635
- return this[le][i].apply(this[le], arguments);
636
- } : te(Q[e].prototype, i, {
637
- set: function(u) {
638
- typeof u == "function" ? (this[le][i] = Ae(u, e + "." + i), ke(this[le][i], u)) : this[le][i] = u;
639
- },
640
- get: function() {
641
- return this[le][i];
642
- }
643
- });
644
- }(t);
645
- for (t in n)
646
- t !== "prototype" && n.hasOwnProperty(t) && (Q[e][t] = n[t]);
647
- }
648
- function de(e, n, c) {
649
- let t = e;
650
- for (; t && !t.hasOwnProperty(n); )
651
- t = ae(t);
652
- !t && e[n] && (t = e);
653
- const i = F(n);
654
- let u = null;
655
- if (t && (!(u = t[i]) || !t.hasOwnProperty(i))) {
656
- u = t[i] = t[n];
657
- const d = t && ee(t, n);
658
- if ($e(d)) {
659
- const g = c(u, i, n);
660
- t[n] = function() {
661
- return g(this, arguments);
662
- }, ke(t[n], u);
663
- }
664
- }
665
- return u;
666
- }
667
- function bt(e, n, c) {
668
- let t = null;
669
- function i(u) {
670
- const d = u.data;
671
- return d.args[d.cbIdx] = function() {
672
- u.invoke.apply(this, arguments);
673
- }, t.apply(d.target, d.args), u;
674
- }
675
- t = de(e, n, (u) => function(d, g) {
676
- const y = c(d, g);
677
- return y.cbIdx >= 0 && typeof g[y.cbIdx] == "function" ? xe(y.name, g[y.cbIdx], y, i) : u.apply(d, g);
678
- });
679
- }
680
- function ke(e, n) {
681
- e[F("OriginalDelegate")] = n;
682
- }
683
- let et = !1, Ue = !1;
684
- function Et() {
685
- if (et)
686
- return Ue;
687
- et = !0;
688
- try {
689
- const e = Ce.navigator.userAgent;
690
- (e.indexOf("MSIE ") !== -1 || e.indexOf("Trident/") !== -1 || e.indexOf("Edge/") !== -1) && (Ue = !0);
691
- } catch {
692
- }
693
- return Ue;
694
- }
695
- function tt(e) {
696
- return typeof e == "function";
697
- }
698
- function nt(e) {
699
- return typeof e == "number";
700
- }
701
- const wt = {
702
- useG: !0
703
- }, ce = {}, rt = {}, ot = new RegExp("^" + Se + "(\\w+)(true|false)$"), st = F("propagationStopped");
704
- function at(e, n) {
705
- const c = (n ? n(e) : e) + ge, t = (n ? n(e) : e) + _e, i = Se + c, u = Se + t;
706
- ce[e] = {}, ce[e][ge] = i, ce[e][_e] = u;
707
- }
708
- function Zt(e, n, c, t) {
709
- const i = t && t.add || be, u = t && t.rm || Ne, d = t && t.listeners || "eventListeners", g = t && t.rmAll || "removeAllListeners", y = F(i), w = "." + i + ":", _ = "prependListener", R = "." + _ + ":", j = function(v, p, A) {
710
- if (v.isRemoved)
711
- return;
712
- const G = v.callback;
713
- typeof G == "object" && G.handleEvent && (v.callback = (k) => G.handleEvent(k), v.originalDelegate = G);
714
- let J;
715
- try {
716
- v.invoke(v, p, [A]);
717
- } catch (k) {
718
- J = k;
719
- }
720
- const $ = v.options;
721
- if ($ && typeof $ == "object" && $.once) {
722
- const k = v.originalDelegate ? v.originalDelegate : v.callback;
723
- p[u].call(p, A.type, k, $);
724
- }
725
- return J;
726
- };
727
- function x(v, p, A) {
728
- if (p = p || e.event, !p)
729
- return;
730
- const G = v || p.target || e, J = G[ce[p.type][A ? _e : ge]];
731
- if (J) {
732
- const $ = [];
733
- if (J.length === 1) {
734
- const k = j(J[0], G, p);
735
- k && $.push(k);
736
- } else {
737
- const k = J.slice();
738
- for (let B = 0; B < k.length && !(p && p[st] === !0); B++) {
739
- const O = j(k[B], G, p);
740
- O && $.push(O);
741
- }
742
- }
743
- if ($.length === 1)
744
- throw $[0];
745
- for (let k = 0; k < $.length; k++) {
746
- const B = $[k];
747
- n.nativeScheduleMicroTask(() => {
748
- throw B;
749
- });
750
- }
751
- }
752
- }
753
- const X = function(v) {
754
- return x(this, v, !1);
755
- }, ne = function(v) {
756
- return x(this, v, !0);
757
- };
758
- function re(v, p) {
759
- if (!v)
760
- return !1;
761
- let A = !0;
762
- p && p.useG !== void 0 && (A = p.useG);
763
- const G = p && p.vh;
764
- let J = !0;
765
- p && p.chkDup !== void 0 && (J = p.chkDup);
766
- let $ = !1;
767
- p && p.rt !== void 0 && ($ = p.rt);
768
- let k = v;
769
- for (; k && !k.hasOwnProperty(i); )
770
- k = ae(k);
771
- if (!k && v[i] && (k = v), !k || k[y])
772
- return !1;
773
- const B = p && p.eventNameToString, O = {}, D = k[y] = k[i], E = k[F(u)] = k[u], S = k[F(d)] = k[d], oe = k[F(g)] = k[g];
774
- let Y;
775
- p && p.prepend && (Y = k[F(p.prepend)] = k[p.prepend]);
776
- function L(o, h) {
777
- return h ? typeof o == "boolean" ? { capture: o, passive: !0 } : o ? typeof o == "object" && o.passive !== !1 ? { ...o, passive: !0 } : o : { passive: !0 } : o;
778
- }
779
- const a = function(o) {
780
- if (!O.isExisting)
781
- return D.call(O.target, O.eventName, O.capture ? ne : X, O.options);
782
- }, s = function(o) {
783
- if (!o.isRemoved) {
784
- const h = ce[o.eventName];
785
- let b;
786
- h && (b = h[o.capture ? _e : ge]);
787
- const Z = b && o.target[b];
788
- if (Z) {
789
- for (let m = 0; m < Z.length; m++)
790
- if (Z[m] === o) {
791
- Z.splice(m, 1), o.isRemoved = !0, o.removeAbortListener && (o.removeAbortListener(), o.removeAbortListener = null), Z.length === 0 && (o.allRemoved = !0, o.target[b] = null);
792
- break;
793
- }
794
- }
795
- }
796
- if (o.allRemoved)
797
- return E.call(o.target, o.eventName, o.capture ? ne : X, o.options);
798
- }, r = function(o) {
799
- return D.call(O.target, O.eventName, o.invoke, O.options);
800
- }, T = function(o) {
801
- return Y.call(O.target, O.eventName, o.invoke, O.options);
802
- }, U = function(o) {
803
- return E.call(o.target, o.eventName, o.invoke, o.options);
804
- }, ie = A ? a : r, N = A ? s : U, me = function(o, h) {
805
- const b = typeof h;
806
- return b === "function" && o.callback === h || b === "object" && o.originalDelegate === h;
807
- }, ve = p?.diff || me, se = Zone[F("UNPATCHED_EVENTS")], we = e[F("PASSIVE_EVENTS")];
808
- function f(o) {
809
- if (typeof o == "object" && o !== null) {
810
- const h = { ...o };
811
- return o.signal && (h.signal = o.signal), h;
812
- }
813
- return o;
814
- }
815
- const l = function(o, h, b, Z, m = !1, z = !1) {
816
- return function() {
817
- const M = this || e;
818
- let P = arguments[0];
819
- p && p.transferEventName && (P = p.transferEventName(P));
820
- let W = arguments[1];
821
- if (!W)
822
- return o.apply(this, arguments);
823
- if (Re && P === "uncaughtException")
824
- return o.apply(this, arguments);
825
- let q = !1;
826
- if (typeof W != "function") {
827
- if (!W.handleEvent)
828
- return o.apply(this, arguments);
829
- q = !0;
830
- }
831
- if (G && !G(o, W, M, arguments))
832
- return;
833
- const ye = !!we && we.indexOf(P) !== -1, fe = f(L(arguments[2], ye)), Ze = fe?.signal;
834
- if (Ze?.aborted)
835
- return;
836
- if (se) {
837
- for (let pe = 0; pe < se.length; pe++)
838
- if (P === se[pe])
839
- return ye ? o.call(M, P, W, fe) : o.apply(this, arguments);
840
- }
841
- const qe = fe ? typeof fe == "boolean" ? !0 : fe.capture : !1, ht = fe && typeof fe == "object" ? fe.once : !1, Ft = Zone.current;
842
- let Ve = ce[P];
843
- Ve || (at(P, B), Ve = ce[P]);
844
- const ft = Ve[qe ? _e : ge];
845
- let De = M[ft], pt = !1;
846
- if (De) {
847
- if (pt = !0, J) {
848
- for (let pe = 0; pe < De.length; pe++)
849
- if (ve(De[pe], W))
850
- return;
851
- }
852
- } else
853
- De = M[ft] = [];
854
- let Me;
855
- const _t = M.constructor.name, gt = rt[_t];
856
- gt && (Me = gt[P]), Me || (Me = _t + h + (B ? B(P) : P)), O.options = fe, ht && (O.options.once = !1), O.target = M, O.capture = qe, O.eventName = P, O.isExisting = pt;
857
- const ze = A ? wt : void 0;
858
- ze && (ze.taskData = O), Ze && (O.options.signal = void 0);
859
- const ue = Ft.scheduleEventTask(Me, W, ze, b, Z);
860
- if (Ze) {
861
- O.options.signal = Ze;
862
- const pe = () => ue.zone.cancelTask(ue);
863
- o.call(Ze, "abort", pe, { once: !0 }), ue.removeAbortListener = () => Ze.removeEventListener("abort", pe);
864
- }
865
- if (O.target = null, ze && (ze.taskData = null), ht && (O.options.once = !0), typeof ue.options != "boolean" && (ue.options = fe), ue.target = M, ue.capture = qe, ue.eventName = P, q && (ue.originalDelegate = W), z ? De.unshift(ue) : De.push(ue), m)
866
- return M;
867
- };
868
- };
869
- return k[i] = l(D, w, ie, N, $), Y && (k[_] = l(Y, R, T, N, $, !0)), k[u] = function() {
870
- const o = this || e;
871
- let h = arguments[0];
872
- p && p.transferEventName && (h = p.transferEventName(h));
873
- const b = arguments[2], Z = b ? typeof b == "boolean" ? !0 : b.capture : !1, m = arguments[1];
874
- if (!m)
875
- return E.apply(this, arguments);
876
- if (G && !G(E, m, o, arguments))
877
- return;
878
- const z = ce[h];
879
- let M;
880
- z && (M = z[Z ? _e : ge]);
881
- const P = M && o[M];
882
- if (P)
883
- for (let W = 0; W < P.length; W++) {
884
- const q = P[W];
885
- if (ve(q, m)) {
886
- if (P.splice(W, 1), q.isRemoved = !0, P.length === 0 && (q.allRemoved = !0, o[M] = null, !Z && typeof h == "string")) {
887
- const ye = Se + "ON_PROPERTY" + h;
888
- o[ye] = null;
889
- }
890
- return q.zone.cancelTask(q), $ ? o : void 0;
891
- }
892
- }
893
- return E.apply(this, arguments);
894
- }, k[d] = function() {
895
- const o = this || e;
896
- let h = arguments[0];
897
- p && p.transferEventName && (h = p.transferEventName(h));
898
- const b = [], Z = it(o, B ? B(h) : h);
899
- for (let m = 0; m < Z.length; m++) {
900
- const z = Z[m];
901
- let M = z.originalDelegate ? z.originalDelegate : z.callback;
902
- b.push(M);
903
- }
904
- return b;
905
- }, k[g] = function() {
906
- const o = this || e;
907
- let h = arguments[0];
908
- if (h) {
909
- p && p.transferEventName && (h = p.transferEventName(h));
910
- const b = ce[h];
911
- if (b) {
912
- const Z = b[ge], m = b[_e], z = o[Z], M = o[m];
913
- if (z) {
914
- const P = z.slice();
915
- for (let W = 0; W < P.length; W++) {
916
- const q = P[W];
917
- let ye = q.originalDelegate ? q.originalDelegate : q.callback;
918
- this[u].call(this, h, ye, q.options);
919
- }
920
- }
921
- if (M) {
922
- const P = M.slice();
923
- for (let W = 0; W < P.length; W++) {
924
- const q = P[W];
925
- let ye = q.originalDelegate ? q.originalDelegate : q.callback;
926
- this[u].call(this, h, ye, q.options);
927
- }
928
- }
929
- }
930
- } else {
931
- const b = Object.keys(o);
932
- for (let Z = 0; Z < b.length; Z++) {
933
- const m = b[Z], z = ot.exec(m);
934
- let M = z && z[1];
935
- M && M !== "removeListener" && this[g].call(this, M);
936
- }
937
- this[g].call(this, "removeListener");
938
- }
939
- if ($)
940
- return this;
941
- }, ke(k[i], D), ke(k[u], E), oe && ke(k[g], oe), S && ke(k[d], S), !0;
942
- }
943
- let K = [];
944
- for (let v = 0; v < c.length; v++)
945
- K[v] = re(c[v], t);
946
- return K;
947
- }
948
- function it(e, n) {
949
- if (!n) {
950
- const u = [];
951
- for (let d in e) {
952
- const g = ot.exec(d);
953
- let y = g && g[1];
954
- if (y && (!n || y === n)) {
955
- const w = e[d];
956
- if (w)
957
- for (let _ = 0; _ < w.length; _++)
958
- u.push(w[_]);
959
- }
960
- }
961
- return u;
962
- }
963
- let c = ce[n];
964
- c || (at(n), c = ce[n]);
965
- const t = e[c[ge]], i = e[c[_e]];
966
- return t ? i ? t.concat(i) : t.slice() : i ? i.slice() : [];
967
- }
968
- function Dt(e, n) {
969
- const c = e.Event;
970
- c && c.prototype && n.patchMethod(c.prototype, "stopImmediatePropagation", (t) => function(i, u) {
971
- i[st] = !0, t && t.apply(i, u);
972
- });
973
- }
974
- function St(e, n) {
975
- n.patchMethod(e, "queueMicrotask", (c) => function(t, i) {
976
- Zone.current.scheduleMicroTask("queueMicrotask", i[0]);
977
- });
978
- }
979
- const Le = F("zoneTask");
980
- function Ee(e, n, c, t) {
981
- let i = null, u = null;
982
- n += t, c += t;
983
- const d = {};
984
- function g(w) {
985
- const _ = w.data;
986
- _.args[0] = function() {
987
- return w.invoke.apply(this, arguments);
988
- };
989
- const R = i.apply(e, _.args);
990
- return nt(R) ? _.handleId = R : (_.handle = R, _.isRefreshable = tt(R.refresh)), w;
991
- }
992
- function y(w) {
993
- const { handle: _, handleId: R } = w.data;
994
- return u.call(e, _ ?? R);
995
- }
996
- i = de(e, n, (w) => function(_, R) {
997
- if (tt(R[0])) {
998
- const j = {
999
- isRefreshable: !1,
1000
- isPeriodic: t === "Interval",
1001
- delay: t === "Timeout" || t === "Interval" ? R[1] || 0 : void 0,
1002
- args: R
1003
- }, x = R[0];
1004
- R[0] = function() {
1005
- try {
1006
- return x.apply(this, arguments);
1007
- } finally {
1008
- const { handle: p, handleId: A, isPeriodic: G, isRefreshable: J } = j;
1009
- !G && !J && (A ? delete d[A] : p && (p[Le] = null));
1010
- }
1011
- };
1012
- const X = xe(n, R[0], j, g, y);
1013
- if (!X)
1014
- return X;
1015
- const { handleId: ne, handle: re, isRefreshable: K, isPeriodic: v } = X.data;
1016
- if (ne)
1017
- d[ne] = X;
1018
- else if (re && (re[Le] = X, K && !v)) {
1019
- const p = re.refresh;
1020
- re.refresh = function() {
1021
- const { zone: A, state: G } = X;
1022
- return G === "notScheduled" ? (X._state = "scheduled", A._updateTaskCount(X, 1)) : G === "running" && (X._state = "scheduling"), p.call(this);
1023
- };
1024
- }
1025
- return re ?? ne ?? X;
1026
- } else
1027
- return w.apply(e, R);
1028
- }), u = de(e, c, (w) => function(_, R) {
1029
- const j = R[0];
1030
- let x;
1031
- nt(j) ? (x = d[j], delete d[j]) : (x = j?.[Le], x ? j[Le] = null : x = j), x?.type ? x.cancelFn && x.zone.cancelTask(x) : w.apply(e, R);
1032
- });
1033
- }
1034
- function Ct(e, n) {
1035
- const { isBrowser: c, isMix: t } = n.getGlobalObjects();
1036
- if (!c && !t || !e.customElements || !("customElements" in e))
1037
- return;
1038
- const i = [
1039
- "connectedCallback",
1040
- "disconnectedCallback",
1041
- "adoptedCallback",
1042
- "attributeChangedCallback",
1043
- "formAssociatedCallback",
1044
- "formDisabledCallback",
1045
- "formResetCallback",
1046
- "formStateRestoreCallback"
1047
- ];
1048
- n.patchCallbacks(n, e.customElements, "customElements", "define", i);
1049
- }
1050
- function Ot(e, n) {
1051
- if (Zone[n.symbol("patchEventTarget")])
1052
- return;
1053
- const { eventNames: c, zoneSymbolEventNames: t, TRUE_STR: i, FALSE_STR: u, ZONE_SYMBOL_PREFIX: d } = n.getGlobalObjects();
1054
- for (let y = 0; y < c.length; y++) {
1055
- const w = c[y], _ = w + u, R = w + i, j = d + _, x = d + R;
1056
- t[w] = {}, t[w][u] = j, t[w][i] = x;
1057
- }
1058
- const g = e.EventTarget;
1059
- if (!(!g || !g.prototype))
1060
- return n.patchEventTarget(e, n, [g && g.prototype]), !0;
1061
- }
1062
- function zt(e, n) {
1063
- n.patchEventPrototype(e, n);
1064
- }
1065
- function ct(e, n, c) {
1066
- if (!c || c.length === 0)
1067
- return n;
1068
- const t = c.filter((u) => u.target === e);
1069
- if (t.length === 0)
1070
- return n;
1071
- const i = t[0].ignoreProperties;
1072
- return n.filter((u) => i.indexOf(u) === -1);
1073
- }
1074
- function lt(e, n, c, t) {
1075
- if (!e)
1076
- return;
1077
- const i = ct(e, n, c);
1078
- Qe(e, i, t);
1079
- }
1080
- function We(e) {
1081
- return Object.getOwnPropertyNames(e).filter((n) => n.startsWith("on") && n.length > 2).map((n) => n.substring(2));
1082
- }
1083
- function Pt(e, n) {
1084
- if (Re && !Ye || Zone[e.symbol("patchEvents")])
1085
- return;
1086
- const c = n.__Zone_ignore_on_properties;
1087
- let t = [];
1088
- if (Ge) {
1089
- const i = window;
1090
- t = t.concat([
1091
- "Document",
1092
- "SVGElement",
1093
- "Element",
1094
- "HTMLElement",
1095
- "HTMLBodyElement",
1096
- "HTMLMediaElement",
1097
- "HTMLFrameSetElement",
1098
- "HTMLFrameElement",
1099
- "HTMLIFrameElement",
1100
- "HTMLMarqueeElement",
1101
- "Worker"
1102
- ]);
1103
- const u = [];
1104
- lt(i, We(i), c && c.concat(u), ae(i));
1105
- }
1106
- t = t.concat([
1107
- "XMLHttpRequest",
1108
- "XMLHttpRequestEventTarget",
1109
- "IDBIndex",
1110
- "IDBRequest",
1111
- "IDBOpenDBRequest",
1112
- "IDBDatabase",
1113
- "IDBTransaction",
1114
- "IDBCursor",
1115
- "WebSocket"
1116
- ]);
1117
- for (let i = 0; i < t.length; i++) {
1118
- const u = n[t[i]];
1119
- u?.prototype && lt(u.prototype, We(u.prototype), c);
1120
- }
1121
- }
1122
- function Rt(e) {
1123
- e.__load_patch("legacy", (n) => {
1124
- const c = n[e.__symbol__("legacyPatch")];
1125
- c && c();
1126
- }), e.__load_patch("timers", (n) => {
1127
- const c = "clear";
1128
- Ee(n, "set", c, "Timeout"), Ee(n, "set", c, "Interval"), Ee(n, "set", c, "Immediate");
1129
- }), e.__load_patch("requestAnimationFrame", (n) => {
1130
- Ee(n, "request", "cancel", "AnimationFrame"), Ee(n, "mozRequest", "mozCancel", "AnimationFrame"), Ee(n, "webkitRequest", "webkitCancel", "AnimationFrame");
1131
- }), e.__load_patch("blocking", (n, c) => {
1132
- const t = ["alert", "prompt", "confirm"];
1133
- for (let i = 0; i < t.length; i++) {
1134
- const u = t[i];
1135
- de(n, u, (d, g, y) => function(w, _) {
1136
- return c.current.run(d, n, _, y);
1137
- });
1138
- }
1139
- }), e.__load_patch("EventTarget", (n, c, t) => {
1140
- zt(n, t), Ot(n, t);
1141
- const i = n.XMLHttpRequestEventTarget;
1142
- i && i.prototype && t.patchEventTarget(n, t, [i.prototype]);
1143
- }), e.__load_patch("MutationObserver", (n, c, t) => {
1144
- Oe("MutationObserver"), Oe("WebKitMutationObserver");
1145
- }), e.__load_patch("IntersectionObserver", (n, c, t) => {
1146
- Oe("IntersectionObserver");
1147
- }), e.__load_patch("FileReader", (n, c, t) => {
1148
- Oe("FileReader");
1149
- }), e.__load_patch("on_property", (n, c, t) => {
1150
- Pt(t, n);
1151
- }), e.__load_patch("customElements", (n, c, t) => {
1152
- Ct(n, t);
1153
- }), e.__load_patch("XHR", (n, c) => {
1154
- w(n);
1155
- const t = F("xhrTask"), i = F("xhrSync"), u = F("xhrListener"), d = F("xhrScheduled"), g = F("xhrURL"), y = F("xhrErrorBeforeScheduled");
1156
- function w(_) {
1157
- const R = _.XMLHttpRequest;
1158
- if (!R)
1159
- return;
1160
- const j = R.prototype;
1161
- function x(D) {
1162
- return D[t];
1163
- }
1164
- let X = j[Ie], ne = j[Fe];
1165
- if (!X) {
1166
- const D = _.XMLHttpRequestEventTarget;
1167
- if (D) {
1168
- const E = D.prototype;
1169
- X = E[Ie], ne = E[Fe];
1170
- }
1171
- }
1172
- const re = "readystatechange", K = "scheduled";
1173
- function v(D) {
1174
- const E = D.data, S = E.target;
1175
- S[d] = !1, S[y] = !1;
1176
- const oe = S[u];
1177
- X || (X = S[Ie], ne = S[Fe]), oe && ne.call(S, re, oe);
1178
- const Y = S[u] = () => {
1179
- if (S.readyState === S.DONE)
1180
- if (!E.aborted && S[d] && D.state === K) {
1181
- const L = S[c.__symbol__("loadfalse")];
1182
- if (S.status !== 0 && L && L.length > 0) {
1183
- const a = D.invoke;
1184
- D.invoke = function() {
1185
- const s = S[c.__symbol__("loadfalse")];
1186
- for (let r = 0; r < s.length; r++)
1187
- s[r] === D && s.splice(r, 1);
1188
- !E.aborted && D.state === K && a.call(D);
1189
- }, L.push(D);
1190
- } else
1191
- D.invoke();
1192
- } else !E.aborted && S[d] === !1 && (S[y] = !0);
1193
- };
1194
- return X.call(S, re, Y), S[t] || (S[t] = D), B.apply(S, E.args), S[d] = !0, D;
1195
- }
1196
- function p() {
1197
- }
1198
- function A(D) {
1199
- const E = D.data;
1200
- return E.aborted = !0, O.apply(E.target, E.args);
1201
- }
1202
- const G = de(j, "open", () => function(D, E) {
1203
- return D[i] = E[2] == !1, D[g] = E[1], G.apply(D, E);
1204
- }), J = "XMLHttpRequest.send", $ = F("fetchTaskAborting"), k = F("fetchTaskScheduling"), B = de(j, "send", () => function(D, E) {
1205
- if (c.current[k] === !0 || D[i])
1206
- return B.apply(D, E);
1207
- {
1208
- const S = {
1209
- target: D,
1210
- url: D[g],
1211
- isPeriodic: !1,
1212
- args: E,
1213
- aborted: !1
1214
- }, oe = xe(J, p, S, v, A);
1215
- D && D[y] === !0 && !S.aborted && oe.state === K && oe.invoke();
1216
- }
1217
- }), O = de(j, "abort", () => function(D, E) {
1218
- const S = x(D);
1219
- if (S && typeof S.type == "string") {
1220
- if (S.cancelFn == null || S.data && S.data.aborted)
1221
- return;
1222
- S.zone.cancelTask(S);
1223
- } else if (c.current[$] === !0)
1224
- return O.apply(D, E);
1225
- });
1226
- }
1227
- }), e.__load_patch("geolocation", (n) => {
1228
- n.navigator && n.navigator.geolocation && vt(n.navigator.geolocation, ["getCurrentPosition", "watchPosition"]);
1229
- }), e.__load_patch("PromiseRejectionEvent", (n, c) => {
1230
- function t(i) {
1231
- return function(u) {
1232
- it(n, i).forEach((d) => {
1233
- const g = n.PromiseRejectionEvent;
1234
- if (g) {
1235
- const y = new g(i, {
1236
- promise: u.promise,
1237
- reason: u.rejection
1238
- });
1239
- d.invoke(y);
1240
- }
1241
- });
1242
- };
1243
- }
1244
- n.PromiseRejectionEvent && (c[F("unhandledPromiseRejectionHandler")] = t("unhandledrejection"), c[F("rejectionHandledHandler")] = t("rejectionhandled"));
1245
- }), e.__load_patch("queueMicrotask", (n, c, t) => {
1246
- St(n, t);
1247
- });
1248
- }
1249
- function jt(e) {
1250
- e.__load_patch("ZoneAwarePromise", (n, c, t) => {
1251
- const i = Object.getOwnPropertyDescriptor, u = Object.defineProperty;
1252
- function d(f) {
1253
- return f && f.toString === Object.prototype.toString ? (f.constructor && f.constructor.name || "") + ": " + JSON.stringify(f) : f ? f.toString() : Object.prototype.toString.call(f);
1254
- }
1255
- const g = t.symbol, y = [], w = n[g("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")] !== !1, _ = g("Promise"), R = g("then"), j = "__creationTrace__";
1256
- t.onUnhandledError = (f) => {
1257
- if (t.showUncaughtError()) {
1258
- const l = f && f.rejection;
1259
- l ? console.error("Unhandled Promise rejection:", l instanceof Error ? l.message : l, "; Zone:", f.zone.name, "; Task:", f.task && f.task.source, "; Value:", l, l instanceof Error ? l.stack : void 0) : console.error(f);
1260
- }
1261
- }, t.microtaskDrainDone = () => {
1262
- for (; y.length; ) {
1263
- const f = y.shift();
1264
- try {
1265
- f.zone.runGuarded(() => {
1266
- throw f.throwOriginal ? f.rejection : f;
1267
- });
1268
- } catch (l) {
1269
- X(l);
1270
- }
1271
- }
1272
- };
1273
- const x = g("unhandledPromiseRejectionHandler");
1274
- function X(f) {
1275
- t.onUnhandledError(f);
1276
- try {
1277
- const l = c[x];
1278
- typeof l == "function" && l.call(this, f);
1279
- } catch {
1280
- }
1281
- }
1282
- function ne(f) {
1283
- return f && typeof f.then == "function";
1284
- }
1285
- function re(f) {
1286
- return f;
1287
- }
1288
- function K(f) {
1289
- return N.reject(f);
1290
- }
1291
- const v = g("state"), p = g("value"), A = g("finally"), G = g("parentPromiseValue"), J = g("parentPromiseState"), $ = "Promise.then", k = null, B = !0, O = !1, D = 0;
1292
- function E(f, l) {
1293
- return (o) => {
1294
- try {
1295
- L(f, l, o);
1296
- } catch (h) {
1297
- L(f, !1, h);
1298
- }
1299
- };
1300
- }
1301
- const S = function() {
1302
- let f = !1;
1303
- return function(l) {
1304
- return function() {
1305
- f || (f = !0, l.apply(null, arguments));
1306
- };
1307
- };
1308
- }, oe = "Promise resolved with itself", Y = g("currentTaskTrace");
1309
- function L(f, l, o) {
1310
- const h = S();
1311
- if (f === o)
1312
- throw new TypeError(oe);
1313
- if (f[v] === k) {
1314
- let b = null;
1315
- try {
1316
- (typeof o == "object" || typeof o == "function") && (b = o && o.then);
1317
- } catch (Z) {
1318
- return h(() => {
1319
- L(f, !1, Z);
1320
- })(), f;
1321
- }
1322
- if (l !== O && o instanceof N && o.hasOwnProperty(v) && o.hasOwnProperty(p) && o[v] !== k)
1323
- s(o), L(f, o[v], o[p]);
1324
- else if (l !== O && typeof b == "function")
1325
- try {
1326
- b.call(o, h(E(f, l)), h(E(f, !1)));
1327
- } catch (Z) {
1328
- h(() => {
1329
- L(f, !1, Z);
1330
- })();
1331
- }
1332
- else {
1333
- f[v] = l;
1334
- const Z = f[p];
1335
- if (f[p] = o, f[A] === A && l === B && (f[v] = f[J], f[p] = f[G]), l === O && o instanceof Error) {
1336
- const m = c.currentTask && c.currentTask.data && c.currentTask.data[j];
1337
- m && u(o, Y, {
1338
- configurable: !0,
1339
- enumerable: !1,
1340
- writable: !0,
1341
- value: m
1342
- });
1343
- }
1344
- for (let m = 0; m < Z.length; )
1345
- r(f, Z[m++], Z[m++], Z[m++], Z[m++]);
1346
- if (Z.length == 0 && l == O) {
1347
- f[v] = D;
1348
- let m = o;
1349
- try {
1350
- throw new Error("Uncaught (in promise): " + d(o) + (o && o.stack ? `
1351
- ` + o.stack : ""));
1352
- } catch (z) {
1353
- m = z;
1354
- }
1355
- w && (m.throwOriginal = !0), m.rejection = o, m.promise = f, m.zone = c.current, m.task = c.currentTask, y.push(m), t.scheduleMicroTask();
1356
- }
1357
- }
1358
- }
1359
- return f;
1360
- }
1361
- const a = g("rejectionHandledHandler");
1362
- function s(f) {
1363
- if (f[v] === D) {
1364
- try {
1365
- const l = c[a];
1366
- l && typeof l == "function" && l.call(this, { rejection: f[p], promise: f });
1367
- } catch {
1368
- }
1369
- f[v] = O;
1370
- for (let l = 0; l < y.length; l++)
1371
- f === y[l].promise && y.splice(l, 1);
1372
- }
1373
- }
1374
- function r(f, l, o, h, b) {
1375
- s(f);
1376
- const Z = f[v], m = Z ? typeof h == "function" ? h : re : typeof b == "function" ? b : K;
1377
- l.scheduleMicroTask($, () => {
1378
- try {
1379
- const z = f[p], M = !!o && A === o[A];
1380
- M && (o[G] = z, o[J] = Z);
1381
- const P = l.run(m, void 0, M && m !== K && m !== re ? [] : [z]);
1382
- L(o, !0, P);
1383
- } catch (z) {
1384
- L(o, !1, z);
1385
- }
1386
- }, o);
1387
- }
1388
- const T = "function ZoneAwarePromise() { [native code] }", U = function() {
1389
- }, ie = n.AggregateError;
1390
- class N {
1391
- static toString() {
1392
- return T;
1393
- }
1394
- static resolve(l) {
1395
- return l instanceof N ? l : L(new this(null), B, l);
1396
- }
1397
- static reject(l) {
1398
- return L(new this(null), O, l);
1399
- }
1400
- static withResolvers() {
1401
- const l = {};
1402
- return l.promise = new N((o, h) => {
1403
- l.resolve = o, l.reject = h;
1404
- }), l;
1405
- }
1406
- static any(l) {
1407
- if (!l || typeof l[Symbol.iterator] != "function")
1408
- return Promise.reject(new ie([], "All promises were rejected"));
1409
- const o = [];
1410
- let h = 0;
1411
- try {
1412
- for (let m of l)
1413
- h++, o.push(N.resolve(m));
1414
- } catch {
1415
- return Promise.reject(new ie([], "All promises were rejected"));
1416
- }
1417
- if (h === 0)
1418
- return Promise.reject(new ie([], "All promises were rejected"));
1419
- let b = !1;
1420
- const Z = [];
1421
- return new N((m, z) => {
1422
- for (let M = 0; M < o.length; M++)
1423
- o[M].then((P) => {
1424
- b || (b = !0, m(P));
1425
- }, (P) => {
1426
- Z.push(P), h--, h === 0 && (b = !0, z(new ie(Z, "All promises were rejected")));
1427
- });
1428
- });
1429
- }
1430
- static race(l) {
1431
- let o, h, b = new this((z, M) => {
1432
- o = z, h = M;
1433
- });
1434
- function Z(z) {
1435
- o(z);
1436
- }
1437
- function m(z) {
1438
- h(z);
1439
- }
1440
- for (let z of l)
1441
- ne(z) || (z = this.resolve(z)), z.then(Z, m);
1442
- return b;
1443
- }
1444
- static all(l) {
1445
- return N.allWithCallback(l);
1446
- }
1447
- static allSettled(l) {
1448
- return (this && this.prototype instanceof N ? this : N).allWithCallback(l, {
1449
- thenCallback: (o) => ({ status: "fulfilled", value: o }),
1450
- errorCallback: (o) => ({ status: "rejected", reason: o })
1451
- });
1452
- }
1453
- static allWithCallback(l, o) {
1454
- let h, b, Z = new this((P, W) => {
1455
- h = P, b = W;
1456
- }), m = 2, z = 0;
1457
- const M = [];
1458
- for (let P of l) {
1459
- ne(P) || (P = this.resolve(P));
1460
- const W = z;
1461
- try {
1462
- P.then((q) => {
1463
- M[W] = o ? o.thenCallback(q) : q, m--, m === 0 && h(M);
1464
- }, (q) => {
1465
- o ? (M[W] = o.errorCallback(q), m--, m === 0 && h(M)) : b(q);
1466
- });
1467
- } catch (q) {
1468
- b(q);
1469
- }
1470
- m++, z++;
1471
- }
1472
- return m -= 2, m === 0 && h(M), Z;
1473
- }
1474
- constructor(l) {
1475
- const o = this;
1476
- if (!(o instanceof N))
1477
- throw new Error("Must be an instanceof Promise.");
1478
- o[v] = k, o[p] = [];
1479
- try {
1480
- const h = S();
1481
- l && l(h(E(o, B)), h(E(o, O)));
1482
- } catch (h) {
1483
- L(o, !1, h);
1484
- }
1485
- }
1486
- get [Symbol.toStringTag]() {
1487
- return "Promise";
1488
- }
1489
- get [Symbol.species]() {
1490
- return N;
1491
- }
1492
- then(l, o) {
1493
- let h = this.constructor?.[Symbol.species];
1494
- (!h || typeof h != "function") && (h = this.constructor || N);
1495
- const b = new h(U), Z = c.current;
1496
- return this[v] == k ? this[p].push(Z, b, l, o) : r(this, Z, b, l, o), b;
1497
- }
1498
- catch(l) {
1499
- return this.then(null, l);
1500
- }
1501
- finally(l) {
1502
- let o = this.constructor?.[Symbol.species];
1503
- (!o || typeof o != "function") && (o = N);
1504
- const h = new o(U);
1505
- h[A] = A;
1506
- const b = c.current;
1507
- return this[v] == k ? this[p].push(b, h, l, l) : r(this, b, h, l, l), h;
1508
- }
1509
- }
1510
- N.resolve = N.resolve, N.reject = N.reject, N.race = N.race, N.all = N.all;
1511
- const me = n[_] = n.Promise;
1512
- n.Promise = N;
1513
- const ve = g("thenPatched");
1514
- function se(f) {
1515
- const l = f.prototype, o = i(l, "then");
1516
- if (o && (o.writable === !1 || !o.configurable))
1517
- return;
1518
- const h = l.then;
1519
- l[R] = h, f.prototype.then = function(b, Z) {
1520
- return new N((m, z) => {
1521
- h.call(this, m, z);
1522
- }).then(b, Z);
1523
- }, f[ve] = !0;
1524
- }
1525
- t.patchThen = se;
1526
- function we(f) {
1527
- return function(l, o) {
1528
- let h = f.apply(l, o);
1529
- if (h instanceof N)
1530
- return h;
1531
- let b = h.constructor;
1532
- return b[ve] || se(b), h;
1533
- };
1534
- }
1535
- return me && (se(me), de(n, "fetch", (f) => we(f))), Promise[c.__symbol__("uncaughtPromiseErrors")] = y, N;
1536
- });
1537
- }
1538
- function Lt(e) {
1539
- e.__load_patch("toString", (n) => {
1540
- const c = Function.prototype.toString, t = F("OriginalDelegate"), i = F("Promise"), u = F("Error"), d = function() {
1541
- if (typeof this == "function") {
1542
- const w = this[t];
1543
- if (w)
1544
- return typeof w == "function" ? c.call(w) : Object.prototype.toString.call(w);
1545
- if (this === Promise) {
1546
- const _ = n[i];
1547
- if (_)
1548
- return c.call(_);
1549
- }
1550
- if (this === Error) {
1551
- const _ = n[u];
1552
- if (_)
1553
- return c.call(_);
1554
- }
1555
- }
1556
- return c.call(this);
1557
- };
1558
- d[t] = c, Function.prototype.toString = d;
1559
- const g = Object.prototype.toString, y = "[object Promise]";
1560
- Object.prototype.toString = function() {
1561
- return typeof Promise == "function" && this instanceof Promise ? y : g.call(this);
1562
- };
1563
- });
1564
- }
1565
- function Mt(e, n, c, t, i) {
1566
- const u = Zone.__symbol__(t);
1567
- if (n[u])
1568
- return;
1569
- const d = n[u] = n[t];
1570
- n[t] = function(g, y, w) {
1571
- return y && y.prototype && i.forEach(function(_) {
1572
- const R = `${c}.${t}::` + _, j = y.prototype;
1573
- try {
1574
- if (j.hasOwnProperty(_)) {
1575
- const x = e.ObjectGetOwnPropertyDescriptor(j, _);
1576
- x && x.value ? (x.value = e.wrapWithCurrentZone(x.value, R), e._redefineProperty(y.prototype, _, x)) : j[_] && (j[_] = e.wrapWithCurrentZone(j[_], R));
1577
- } else j[_] && (j[_] = e.wrapWithCurrentZone(j[_], R));
1578
- } catch {
1579
- }
1580
- }), d.call(n, g, y, w);
1581
- }, e.attachOriginToPatched(n[t], d);
1582
- }
1583
- function Nt(e) {
1584
- e.__load_patch("util", (n, c, t) => {
1585
- const i = We(n);
1586
- t.patchOnProperties = Qe, t.patchMethod = de, t.bindArguments = He, t.patchMacroTask = bt;
1587
- const u = c.__symbol__("BLACK_LISTED_EVENTS"), d = c.__symbol__("UNPATCHED_EVENTS");
1588
- n[d] && (n[u] = n[d]), n[u] && (c[u] = c[d] = n[u]), t.patchEventPrototype = Dt, t.patchEventTarget = Zt, t.isIEOrEdge = Et, t.ObjectDefineProperty = te, t.ObjectGetOwnPropertyDescriptor = ee, t.ObjectCreate = he, t.ArraySlice = Te, t.patchClass = Oe, t.wrapWithCurrentZone = Ae, t.filterProperties = ct, t.attachOriginToPatched = ke, t._redefineProperty = Object.defineProperty, t.patchCallbacks = Mt, t.getGlobalObjects = () => ({
1589
- globalSources: rt,
1590
- zoneSymbolEventNames: ce,
1591
- eventNames: i,
1592
- isBrowser: Ge,
1593
- isMix: Ye,
1594
- isNode: Re,
1595
- TRUE_STR: _e,
1596
- FALSE_STR: ge,
1597
- ZONE_SYMBOL_PREFIX: Se,
1598
- ADD_EVENT_LISTENER_STR: be,
1599
- REMOVE_EVENT_LISTENER_STR: Ne
1600
- });
1601
- });
1602
- }
1603
- function It(e) {
1604
- jt(e), Lt(e), Nt(e);
1605
- }
1606
- const ut = H();
1607
- return It(ut), Rt(ut), kt;
1608
- }
1609
- xt();
1610
- export {
1611
- Gt as ZoneContextManager
1612
- };
1613
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtRGluNUk1cFQtIX57MDBkfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFEgYXMgUWkgfSBmcm9tICcuL2luZGV4LSF+ezAwN31+LmpzJztcblxuZnVuY3Rpb24geHQoaikge1xuICByZXR1cm4gaiA9PT0gdm9pZCAwICYmIChqID0ge30pLCB0eXBlb2Ygai5hZGRFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygai5yZW1vdmVFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIjtcbn1cbnZhciBFdCA9IFwiT1RfWk9ORV9DT05URVhUXCIsIHp0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGooKSB7XG4gICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2UsIHRoaXMuX3pvbmVDb3VudGVyID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGoucHJvdG90eXBlLl9hY3RpdmVDb250ZXh0RnJvbVpvbmUgPSBmdW5jdGlvbihTKSB7XG4gICAgICByZXR1cm4gUyAmJiBTLmdldChFdCkgfHwgUWk7XG4gICAgfSwgai5wcm90b3R5cGUuX2JpbmRGdW5jdGlvbiA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHZhciB6ID0gdGhpcywgZWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgdGUgPSB0aGlzLCBpZSA9IFtdLCBmZSA9IDA7IGZlIDwgYXJndW1lbnRzLmxlbmd0aDsgZmUrKylcbiAgICAgICAgICBpZVtmZV0gPSBhcmd1bWVudHNbZmVdO1xuICAgICAgICByZXR1cm4gei53aXRoKFMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBCLmFwcGx5KHRlLCBpZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsIFwibGVuZ3RoXCIsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogQi5sZW5ndGhcbiAgICAgIH0pLCBlZTtcbiAgICB9LCBqLnByb3RvdHlwZS5fYmluZExpc3RlbmVyID0gZnVuY3Rpb24oUywgQikge1xuICAgICAgdmFyIHogPSBCO1xuICAgICAgcmV0dXJuIHouX19vdF9saXN0ZW5lcnMgIT09IHZvaWQgMCB8fCAoei5fX290X2xpc3RlbmVycyA9IHt9LCB0eXBlb2Ygei5hZGRFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiAoei5hZGRFdmVudExpc3RlbmVyID0gdGhpcy5fcGF0Y2hBZGRFdmVudExpc3RlbmVyKHosIHouYWRkRXZlbnRMaXN0ZW5lciwgUykpLCB0eXBlb2Ygei5yZW1vdmVFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIiAmJiAoei5yZW1vdmVFdmVudExpc3RlbmVyID0gdGhpcy5fcGF0Y2hSZW1vdmVFdmVudExpc3RlbmVyKHosIHoucmVtb3ZlRXZlbnRMaXN0ZW5lcikpKSwgQjtcbiAgICB9LCBqLnByb3RvdHlwZS5fY3JlYXRlWm9uZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3pvbmVDb3VudGVyKys7XG4gICAgICB2YXIgUyA9IE1hdGgucmFuZG9tKCk7XG4gICAgICByZXR1cm4gdGhpcy5fem9uZUNvdW50ZXIgKyBcIi1cIiArIFM7XG4gICAgfSwgai5wcm90b3R5cGUuX2NyZWF0ZVpvbmUgPSBmdW5jdGlvbihTLCBCKSB7XG4gICAgICB2YXIgejtcbiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuZm9yayh7XG4gICAgICAgIG5hbWU6IFMsXG4gICAgICAgIHByb3BlcnRpZXM6ICh6ID0ge30sIHpbRXRdID0gQiwgeilcbiAgICAgIH0pO1xuICAgIH0sIGoucHJvdG90eXBlLl9nZXRBY3RpdmVab25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gWm9uZS5jdXJyZW50O1xuICAgIH0sIGoucHJvdG90eXBlLl9wYXRjaEFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihTLCBCLCB6KSB7XG4gICAgICB2YXIgZWUgPSB0aGlzO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRlLCBpZSwgZmUpIHtcbiAgICAgICAgUy5fX290X2xpc3RlbmVycyA9PT0gdm9pZCAwICYmIChTLl9fb3RfbGlzdGVuZXJzID0ge30pO1xuICAgICAgICB2YXIga2UgPSBTLl9fb3RfbGlzdGVuZXJzW3RlXTtcbiAgICAgICAga2UgPT09IHZvaWQgMCAmJiAoa2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgUy5fX290X2xpc3RlbmVyc1t0ZV0gPSBrZSk7XG4gICAgICAgIHZhciB2ZSA9IGVlLmJpbmQoeiwgaWUpO1xuICAgICAgICByZXR1cm4ga2Uuc2V0KGllLCB2ZSksIEIuY2FsbCh0aGlzLCB0ZSwgdmUsIGZlKTtcbiAgICAgIH07XG4gICAgfSwgai5wcm90b3R5cGUuX3BhdGNoUmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih6LCBlZSkge1xuICAgICAgICBpZiAoUy5fX290X2xpc3RlbmVycyA9PT0gdm9pZCAwIHx8IFMuX19vdF9saXN0ZW5lcnNbel0gPT09IHZvaWQgMClcbiAgICAgICAgICByZXR1cm4gQi5jYWxsKHRoaXMsIHosIGVlKTtcbiAgICAgICAgdmFyIHRlID0gUy5fX290X2xpc3RlbmVyc1t6XSwgaWUgPSB0ZS5nZXQoZWUpO1xuICAgICAgICByZXR1cm4gdGUuZGVsZXRlKGVlKSwgQi5jYWxsKHRoaXMsIHosIGllIHx8IGVlKTtcbiAgICAgIH07XG4gICAgfSwgai5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMuX2VuYWJsZWQpXG4gICAgICAgIHJldHVybiBRaTtcbiAgICAgIHZhciBTID0gdGhpcy5fZ2V0QWN0aXZlWm9uZSgpLCBCID0gdGhpcy5fYWN0aXZlQ29udGV4dEZyb21ab25lKFMpO1xuICAgICAgcmV0dXJuIEIgfHwgUWk7XG4gICAgfSwgai5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKFMsIEIpIHtcbiAgICAgIHJldHVybiBTID09PSB2b2lkIDAgJiYgKFMgPSB0aGlzLmFjdGl2ZSgpKSwgdHlwZW9mIEIgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5fYmluZEZ1bmN0aW9uKFMsIEIpIDogKHh0KEIpICYmIHRoaXMuX2JpbmRMaXN0ZW5lcihTLCBCKSwgQik7XG4gICAgfSwgai5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQgPSBmYWxzZSwgdGhpcztcbiAgICB9LCBqLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkID0gdHJ1ZSwgdGhpcztcbiAgICB9LCBqLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24oUywgQiwgeikge1xuICAgICAgZm9yICh2YXIgZWUgPSBbXSwgdGUgPSAzOyB0ZSA8IGFyZ3VtZW50cy5sZW5ndGg7IHRlKyspXG4gICAgICAgIGVlW3RlIC0gM10gPSBhcmd1bWVudHNbdGVdO1xuICAgICAgdmFyIGllID0gdGhpcy5fY3JlYXRlWm9uZU5hbWUoKSwgZmUgPSB0aGlzLl9jcmVhdGVab25lKGllLCBTKTtcbiAgICAgIHJldHVybiBmZS5ydW4oQiwgeiwgZWUpO1xuICAgIH0sIGo7XG4gIH0oKVxuKSwgcHQgPSB7fSwgZ3Q7XG5mdW5jdGlvbiBGdCgpIHtcbiAgaWYgKGd0KSByZXR1cm4gcHQ7XG4gIGd0ID0gMTtcbiAgLyoqXG4gICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjx1bmtub3duPlxuICAgKiAoYykgMjAxMC0yMDI1IEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby9cbiAgICogTGljZW5zZTogTUlUXG4gICAqL1xuICBjb25zdCBqID0gZ2xvYmFsVGhpcztcbiAgZnVuY3Rpb24gUyh0KSB7XG4gICAgcmV0dXJuIChqLl9fWm9uZV9zeW1ib2xfcHJlZml4IHx8IFwiX196b25lX3N5bWJvbF9fXCIpICsgdDtcbiAgfVxuICBmdW5jdGlvbiBCKCkge1xuICAgIGNvbnN0IHQgPSBqLnBlcmZvcm1hbmNlO1xuICAgIGZ1bmN0aW9uIG4oSSkge1xuICAgICAgdCAmJiB0Lm1hcmsgJiYgdC5tYXJrKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhKEksIHMpIHtcbiAgICAgIHQgJiYgdC5tZWFzdXJlICYmIHQubWVhc3VyZShJLCBzKTtcbiAgICB9XG4gICAgbihcIlpvbmVcIik7XG4gICAgY2xhc3MgZSB7XG4gICAgICBzdGF0aWMgX19zeW1ib2xfXyA9IFM7XG4gICAgICBzdGF0aWMgYXNzZXJ0Wm9uZVBhdGNoZWQoKSB7XG4gICAgICAgIGlmIChqLlByb21pc2UgIT09IE8uWm9uZUF3YXJlUHJvbWlzZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4pXCIpO1xuICAgICAgfVxuICAgICAgc3RhdGljIGdldCByb290KCkge1xuICAgICAgICBsZXQgcyA9IGUuY3VycmVudDtcbiAgICAgICAgZm9yICg7IHMucGFyZW50OyApXG4gICAgICAgICAgcyA9IHMucGFyZW50O1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIGIuem9uZTtcbiAgICAgIH1cbiAgICAgIHN0YXRpYyBnZXQgY3VycmVudFRhc2soKSB7XG4gICAgICAgIHJldHVybiBEO1xuICAgICAgfVxuICAgICAgc3RhdGljIF9fbG9hZF9wYXRjaChzLCBpLCByID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKE8uaGFzT3duUHJvcGVydHkocykpIHtcbiAgICAgICAgICBjb25zdCBFID0galtTKFwiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2tcIildID09PSB0cnVlO1xuICAgICAgICAgIGlmICghciAmJiBFKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogXCIgKyBzKTtcbiAgICAgICAgfSBlbHNlIGlmICghaltcIl9fWm9uZV9kaXNhYmxlX1wiICsgc10pIHtcbiAgICAgICAgICBjb25zdCBFID0gXCJab25lOlwiICsgcztcbiAgICAgICAgICBuKEUpLCBPW3NdID0gaShqLCBlLCBQKSwgYShFLCBFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICAgIH1cbiAgICAgIF9wYXJlbnQ7XG4gICAgICBfbmFtZTtcbiAgICAgIF9wcm9wZXJ0aWVzO1xuICAgICAgX3pvbmVEZWxlZ2F0ZTtcbiAgICAgIGNvbnN0cnVjdG9yKHMsIGkpIHtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcywgdGhpcy5fbmFtZSA9IGkgPyBpLm5hbWUgfHwgXCJ1bm5hbWVkXCIgOiBcIjxyb290PlwiLCB0aGlzLl9wcm9wZXJ0aWVzID0gaSAmJiBpLnByb3BlcnRpZXMgfHwge30sIHRoaXMuX3pvbmVEZWxlZ2F0ZSA9IG5ldyBmKHRoaXMsIHRoaXMuX3BhcmVudCAmJiB0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSwgaSk7XG4gICAgICB9XG4gICAgICBnZXQocykge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5nZXRab25lV2l0aChzKTtcbiAgICAgICAgaWYgKGkpXG4gICAgICAgICAgcmV0dXJuIGkuX3Byb3BlcnRpZXNbc107XG4gICAgICB9XG4gICAgICBnZXRab25lV2l0aChzKSB7XG4gICAgICAgIGxldCBpID0gdGhpcztcbiAgICAgICAgZm9yICg7IGk7ICkge1xuICAgICAgICAgIGlmIChpLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHMpKVxuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgaSA9IGkuX3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZvcmsocykge1xuICAgICAgICBpZiAoIXMpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWm9uZVNwZWMgcmVxdWlyZWQhXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcywgcyk7XG4gICAgICB9XG4gICAgICB3cmFwKHMsIGkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiBcIiArIHMpO1xuICAgICAgICBjb25zdCByID0gdGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLCBzLCBpKSwgRSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gRS5ydW5HdWFyZGVkKHIsIHRoaXMsIGFyZ3VtZW50cywgaSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBydW4ocywgaSwgciwgRSkge1xuICAgICAgICBiID0geyBwYXJlbnQ6IGIsIHpvbmU6IHRoaXMgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLCBzLCBpLCByLCBFKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBiID0gYi5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJ1bkd1YXJkZWQocywgaSA9IG51bGwsIHIsIEUpIHtcbiAgICAgICAgYiA9IHsgcGFyZW50OiBiLCB6b25lOiB0aGlzIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsIHMsIGksIHIsIEUpO1xuICAgICAgICAgIH0gY2F0Y2ggKEcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgRykpXG4gICAgICAgICAgICAgIHRocm93IEc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGIgPSBiLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcnVuVGFzayhzLCBpLCByKSB7XG4gICAgICAgIGlmIChzLnpvbmUgIT0gdGhpcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246IFwiICsgKHMuem9uZSB8fCByZSkubmFtZSArIFwiOyBFeGVjdXRpb246IFwiICsgdGhpcy5uYW1lICsgXCIpXCIpO1xuICAgICAgICBjb25zdCBFID0gcywgeyB0eXBlOiBHLCBkYXRhOiB7IGlzUGVyaW9kaWM6IGNlID0gZmFsc2UsIGlzUmVmcmVzaGFibGU6IEEgPSBmYWxzZSB9ID0ge30gfSA9IHM7XG4gICAgICAgIGlmIChzLnN0YXRlID09PSBKICYmIChHID09PSBZIHx8IEcgPT09IGcpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2UgPSBzLnN0YXRlICE9IHg7XG4gICAgICAgIGdlICYmIEUuX3RyYW5zaXRpb25Ubyh4LCBkKTtcbiAgICAgICAgY29uc3QgeWUgPSBEO1xuICAgICAgICBEID0gRSwgYiA9IHsgcGFyZW50OiBiLCB6b25lOiB0aGlzIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRyA9PSBnICYmIHMuZGF0YSAmJiAhY2UgJiYgIUEgJiYgKHMuY2FuY2VsRm4gPSB2b2lkIDApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZVRhc2sodGhpcywgRSwgaSwgcik7XG4gICAgICAgICAgfSBjYXRjaCAoc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgc2UpKVxuICAgICAgICAgICAgICB0aHJvdyBzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY29uc3Qgc2UgPSBzLnN0YXRlO1xuICAgICAgICAgIGlmIChzZSAhPT0gSiAmJiBzZSAhPT0gSylcbiAgICAgICAgICAgIGlmIChHID09IFkgfHwgY2UgfHwgQSAmJiBzZSA9PT0gaylcbiAgICAgICAgICAgICAgZ2UgJiYgRS5fdHJhbnNpdGlvblRvKGQsIHgsIGspO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IENlID0gRS5fem9uZURlbGVnYXRlcztcbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGFza0NvdW50KEUsIC0xKSwgZ2UgJiYgRS5fdHJhbnNpdGlvblRvKEosIHgsIEopLCBBICYmIChFLl96b25lRGVsZWdhdGVzID0gQ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGIgPSBiLnBhcmVudCwgRCA9IHllO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzY2hlZHVsZVRhc2socykge1xuICAgICAgICBpZiAocy56b25lICYmIHMuem9uZSAhPT0gdGhpcykge1xuICAgICAgICAgIGxldCByID0gdGhpcztcbiAgICAgICAgICBmb3IgKDsgcjsgKSB7XG4gICAgICAgICAgICBpZiAociA9PT0gcy56b25lKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gJHt0aGlzLm5hbWV9IHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICR7cy56b25lLm5hbWV9YCk7XG4gICAgICAgICAgICByID0gci5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHMuX3RyYW5zaXRpb25UbyhrLCBKKTtcbiAgICAgICAgY29uc3QgaSA9IFtdO1xuICAgICAgICBzLl96b25lRGVsZWdhdGVzID0gaSwgcy5fem9uZSA9IHRoaXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcyA9IHRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcywgcyk7XG4gICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICB0aHJvdyBzLl90cmFuc2l0aW9uVG8oSywgaywgSiksIHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLCByKSwgcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcy5fem9uZURlbGVnYXRlcyA9PT0gaSAmJiB0aGlzLl91cGRhdGVUYXNrQ291bnQocywgMSksIHMuc3RhdGUgPT0gayAmJiBzLl90cmFuc2l0aW9uVG8oZCwgayksIHM7XG4gICAgICB9XG4gICAgICBzY2hlZHVsZU1pY3JvVGFzayhzLCBpLCByLCBFKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgcChVLCBzLCBpLCByLCBFLCB2b2lkIDApKTtcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlTWFjcm9UYXNrKHMsIGksIHIsIEUsIEcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKGcsIHMsIGksIHIsIEUsIEcpKTtcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlRXZlbnRUYXNrKHMsIGksIHIsIEUsIEcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKFksIHMsIGksIHIsIEUsIEcpKTtcbiAgICAgIH1cbiAgICAgIGNhbmNlbFRhc2socykge1xuICAgICAgICBpZiAocy56b25lICE9IHRoaXMpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiBcIiArIChzLnpvbmUgfHwgcmUpLm5hbWUgKyBcIjsgRXhlY3V0aW9uOiBcIiArIHRoaXMubmFtZSArIFwiKVwiKTtcbiAgICAgICAgaWYgKCEocy5zdGF0ZSAhPT0gZCAmJiBzLnN0YXRlICE9PSB4KSkge1xuICAgICAgICAgIHMuX3RyYW5zaXRpb25UbyhWLCBkLCB4KTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcywgcyk7XG4gICAgICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICAgICAgdGhyb3cgcy5fdHJhbnNpdGlvblRvKEssIFYpLCB0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgaSksIGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQocywgLTEpLCBzLl90cmFuc2l0aW9uVG8oSiwgViksIHMucnVuQ291bnQgPSAtMSwgcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3VwZGF0ZVRhc2tDb3VudChzLCBpKSB7XG4gICAgICAgIGNvbnN0IHIgPSBzLl96b25lRGVsZWdhdGVzO1xuICAgICAgICBpID09IC0xICYmIChzLl96b25lRGVsZWdhdGVzID0gbnVsbCk7XG4gICAgICAgIGZvciAobGV0IEUgPSAwOyBFIDwgci5sZW5ndGg7IEUrKylcbiAgICAgICAgICByW0VdLl91cGRhdGVUYXNrQ291bnQocy50eXBlLCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICBvbkhhc1Rhc2s6IChJLCBzLCBpLCByKSA9PiBJLmhhc1Rhc2soaSwgciksXG4gICAgICBvblNjaGVkdWxlVGFzazogKEksIHMsIGksIHIpID0+IEkuc2NoZWR1bGVUYXNrKGksIHIpLFxuICAgICAgb25JbnZva2VUYXNrOiAoSSwgcywgaSwgciwgRSwgRykgPT4gSS5pbnZva2VUYXNrKGksIHIsIEUsIEcpLFxuICAgICAgb25DYW5jZWxUYXNrOiAoSSwgcywgaSwgcikgPT4gSS5jYW5jZWxUYXNrKGksIHIpXG4gICAgfTtcbiAgICBjbGFzcyBmIHtcbiAgICAgIGdldCB6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgICAgIH1cbiAgICAgIF96b25lO1xuICAgICAgX3Rhc2tDb3VudHMgPSB7XG4gICAgICAgIG1pY3JvVGFzazogMCxcbiAgICAgICAgbWFjcm9UYXNrOiAwLFxuICAgICAgICBldmVudFRhc2s6IDBcbiAgICAgIH07XG4gICAgICBfcGFyZW50RGVsZWdhdGU7XG4gICAgICBfZm9ya0RsZ3Q7XG4gICAgICBfZm9ya1pTO1xuICAgICAgX2ZvcmtDdXJyWm9uZTtcbiAgICAgIF9pbnRlcmNlcHREbGd0O1xuICAgICAgX2ludGVyY2VwdFpTO1xuICAgICAgX2ludGVyY2VwdEN1cnJab25lO1xuICAgICAgX2ludm9rZURsZ3Q7XG4gICAgICBfaW52b2tlWlM7XG4gICAgICBfaW52b2tlQ3VyclpvbmU7XG4gICAgICBfaGFuZGxlRXJyb3JEbGd0O1xuICAgICAgX2hhbmRsZUVycm9yWlM7XG4gICAgICBfaGFuZGxlRXJyb3JDdXJyWm9uZTtcbiAgICAgIF9zY2hlZHVsZVRhc2tEbGd0O1xuICAgICAgX3NjaGVkdWxlVGFza1pTO1xuICAgICAgX3NjaGVkdWxlVGFza0N1cnJab25lO1xuICAgICAgX2ludm9rZVRhc2tEbGd0O1xuICAgICAgX2ludm9rZVRhc2taUztcbiAgICAgIF9pbnZva2VUYXNrQ3VyclpvbmU7XG4gICAgICBfY2FuY2VsVGFza0RsZ3Q7XG4gICAgICBfY2FuY2VsVGFza1pTO1xuICAgICAgX2NhbmNlbFRhc2tDdXJyWm9uZTtcbiAgICAgIF9oYXNUYXNrRGxndDtcbiAgICAgIF9oYXNUYXNrRGxndE93bmVyO1xuICAgICAgX2hhc1Rhc2taUztcbiAgICAgIF9oYXNUYXNrQ3VyclpvbmU7XG4gICAgICBjb25zdHJ1Y3RvcihzLCBpLCByKSB7XG4gICAgICAgIHRoaXMuX3pvbmUgPSBzLCB0aGlzLl9wYXJlbnREZWxlZ2F0ZSA9IGksIHRoaXMuX2ZvcmtaUyA9IHIgJiYgKHIgJiYgci5vbkZvcmsgPyByIDogaS5fZm9ya1pTKSwgdGhpcy5fZm9ya0RsZ3QgPSByICYmIChyLm9uRm9yayA/IGkgOiBpLl9mb3JrRGxndCksIHRoaXMuX2ZvcmtDdXJyWm9uZSA9IHIgJiYgKHIub25Gb3JrID8gdGhpcy5fem9uZSA6IGkuX2ZvcmtDdXJyWm9uZSksIHRoaXMuX2ludGVyY2VwdFpTID0gciAmJiAoci5vbkludGVyY2VwdCA/IHIgOiBpLl9pbnRlcmNlcHRaUyksIHRoaXMuX2ludGVyY2VwdERsZ3QgPSByICYmIChyLm9uSW50ZXJjZXB0ID8gaSA6IGkuX2ludGVyY2VwdERsZ3QpLCB0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSA9IHIgJiYgKHIub25JbnRlcmNlcHQgPyB0aGlzLl96b25lIDogaS5faW50ZXJjZXB0Q3VyclpvbmUpLCB0aGlzLl9pbnZva2VaUyA9IHIgJiYgKHIub25JbnZva2UgPyByIDogaS5faW52b2tlWlMpLCB0aGlzLl9pbnZva2VEbGd0ID0gciAmJiAoci5vbkludm9rZSA/IGkgOiBpLl9pbnZva2VEbGd0KSwgdGhpcy5faW52b2tlQ3VyclpvbmUgPSByICYmIChyLm9uSW52b2tlID8gdGhpcy5fem9uZSA6IGkuX2ludm9rZUN1cnJab25lKSwgdGhpcy5faGFuZGxlRXJyb3JaUyA9IHIgJiYgKHIub25IYW5kbGVFcnJvciA/IHIgOiBpLl9oYW5kbGVFcnJvclpTKSwgdGhpcy5faGFuZGxlRXJyb3JEbGd0ID0gciAmJiAoci5vbkhhbmRsZUVycm9yID8gaSA6IGkuX2hhbmRsZUVycm9yRGxndCksIHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUgPSByICYmIChyLm9uSGFuZGxlRXJyb3IgPyB0aGlzLl96b25lIDogaS5faGFuZGxlRXJyb3JDdXJyWm9uZSksIHRoaXMuX3NjaGVkdWxlVGFza1pTID0gciAmJiAoci5vblNjaGVkdWxlVGFzayA/IHIgOiBpLl9zY2hlZHVsZVRhc2taUyksIHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QgPSByICYmIChyLm9uU2NoZWR1bGVUYXNrID8gaSA6IGkuX3NjaGVkdWxlVGFza0RsZ3QpLCB0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSA9IHIgJiYgKHIub25TY2hlZHVsZVRhc2sgPyB0aGlzLl96b25lIDogaS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLCB0aGlzLl9pbnZva2VUYXNrWlMgPSByICYmIChyLm9uSW52b2tlVGFzayA/IHIgOiBpLl9pbnZva2VUYXNrWlMpLCB0aGlzLl9pbnZva2VUYXNrRGxndCA9IHIgJiYgKHIub25JbnZva2VUYXNrID8gaSA6IGkuX2ludm9rZVRhc2tEbGd0KSwgdGhpcy5faW52b2tlVGFza0N1cnJab25lID0gciAmJiAoci5vbkludm9rZVRhc2sgPyB0aGlzLl96b25lIDogaS5faW52b2tlVGFza0N1cnJab25lKSwgdGhpcy5fY2FuY2VsVGFza1pTID0gciAmJiAoci5vbkNhbmNlbFRhc2sgPyByIDogaS5fY2FuY2VsVGFza1pTKSwgdGhpcy5fY2FuY2VsVGFza0RsZ3QgPSByICYmIChyLm9uQ2FuY2VsVGFzayA/IGkgOiBpLl9jYW5jZWxUYXNrRGxndCksIHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSA9IHIgJiYgKHIub25DYW5jZWxUYXNrID8gdGhpcy5fem9uZSA6IGkuX2NhbmNlbFRhc2tDdXJyWm9uZSksIHRoaXMuX2hhc1Rhc2taUyA9IG51bGwsIHRoaXMuX2hhc1Rhc2tEbGd0ID0gbnVsbCwgdGhpcy5faGFzVGFza0RsZ3RPd25lciA9IG51bGwsIHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSA9IG51bGw7XG4gICAgICAgIGNvbnN0IEUgPSByICYmIHIub25IYXNUYXNrLCBHID0gaSAmJiBpLl9oYXNUYXNrWlM7XG4gICAgICAgIChFIHx8IEcpICYmICh0aGlzLl9oYXNUYXNrWlMgPSBFID8gciA6IGMsIHRoaXMuX2hhc1Rhc2tEbGd0ID0gaSwgdGhpcy5faGFzVGFza0RsZ3RPd25lciA9IHRoaXMsIHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSA9IHRoaXMuX3pvbmUsIHIub25TY2hlZHVsZVRhc2sgfHwgKHRoaXMuX3NjaGVkdWxlVGFza1pTID0gYywgdGhpcy5fc2NoZWR1bGVUYXNrRGxndCA9IGksIHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lID0gdGhpcy5fem9uZSksIHIub25JbnZva2VUYXNrIHx8ICh0aGlzLl9pbnZva2VUYXNrWlMgPSBjLCB0aGlzLl9pbnZva2VUYXNrRGxndCA9IGksIHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSA9IHRoaXMuX3pvbmUpLCByLm9uQ2FuY2VsVGFzayB8fCAodGhpcy5fY2FuY2VsVGFza1pTID0gYywgdGhpcy5fY2FuY2VsVGFza0RsZ3QgPSBpLCB0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUgPSB0aGlzLl96b25lKSk7XG4gICAgICB9XG4gICAgICBmb3JrKHMsIGkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmtaUyA/IHRoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsIHRoaXMuem9uZSwgcywgaSkgOiBuZXcgZShzLCBpKTtcbiAgICAgIH1cbiAgICAgIGludGVyY2VwdChzLCBpLCByKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRlcmNlcHRaUyA/IHRoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsIHRoaXMuX2ludGVyY2VwdEN1cnJab25lLCBzLCBpLCByKSA6IGk7XG4gICAgICB9XG4gICAgICBpbnZva2UocywgaSwgciwgRSwgRykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlWlMgPyB0aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LCB0aGlzLl9pbnZva2VDdXJyWm9uZSwgcywgaSwgciwgRSwgRykgOiBpLmFwcGx5KHIsIEUpO1xuICAgICAgfVxuICAgICAgaGFuZGxlRXJyb3IocywgaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRXJyb3JaUyA/IHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsIHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsIHMsIGkpIDogdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNjaGVkdWxlVGFzayhzLCBpKSB7XG4gICAgICAgIGxldCByID0gaTtcbiAgICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlVGFza1pTKVxuICAgICAgICAgIHRoaXMuX2hhc1Rhc2taUyAmJiByLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksIHIgPSB0aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LCB0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSwgcywgaSksIHIgfHwgKHIgPSBpKTtcbiAgICAgICAgZWxzZSBpZiAoaS5zY2hlZHVsZUZuKVxuICAgICAgICAgIGkuc2NoZWR1bGVGbihpKTtcbiAgICAgICAgZWxzZSBpZiAoaS50eXBlID09IFUpXG4gICAgICAgICAgWChpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLlwiKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICBpbnZva2VUYXNrKHMsIGksIHIsIEUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUyA/IHRoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsIHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSwgcywgaSwgciwgRSkgOiBpLmNhbGxiYWNrLmFwcGx5KHIsIEUpO1xuICAgICAgfVxuICAgICAgY2FuY2VsVGFzayhzLCBpKSB7XG4gICAgICAgIGxldCByO1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsVGFza1pTKVxuICAgICAgICAgIHIgPSB0aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LCB0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsIHMsIGkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoIWkuY2FuY2VsRm4pXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRhc2sgaXMgbm90IGNhbmNlbGFibGVcIik7XG4gICAgICAgICAgciA9IGkuY2FuY2VsRm4oaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICBoYXNUYXNrKHMsIGkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9oYXNUYXNrWlMgJiYgdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCwgdGhpcy5faGFzVGFza0N1cnJab25lLCBzLCBpKTtcbiAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3Iocywgcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF91cGRhdGVUYXNrQ291bnQocywgaSkge1xuICAgICAgICBjb25zdCByID0gdGhpcy5fdGFza0NvdW50cywgRSA9IHJbc10sIEcgPSByW3NdID0gRSArIGk7XG4gICAgICAgIGlmIChHIDwgMClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuXCIpO1xuICAgICAgICBpZiAoRSA9PSAwIHx8IEcgPT0gMCkge1xuICAgICAgICAgIGNvbnN0IGNlID0ge1xuICAgICAgICAgICAgbWljcm9UYXNrOiByLm1pY3JvVGFzayA+IDAsXG4gICAgICAgICAgICBtYWNyb1Rhc2s6IHIubWFjcm9UYXNrID4gMCxcbiAgICAgICAgICAgIGV2ZW50VGFzazogci5ldmVudFRhc2sgPiAwLFxuICAgICAgICAgICAgY2hhbmdlOiBzXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSwgY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNsYXNzIHAge1xuICAgICAgdHlwZTtcbiAgICAgIHNvdXJjZTtcbiAgICAgIGludm9rZTtcbiAgICAgIGNhbGxiYWNrO1xuICAgICAgZGF0YTtcbiAgICAgIHNjaGVkdWxlRm47XG4gICAgICBjYW5jZWxGbjtcbiAgICAgIF96b25lID0gbnVsbDtcbiAgICAgIHJ1bkNvdW50ID0gMDtcbiAgICAgIF96b25lRGVsZWdhdGVzID0gbnVsbDtcbiAgICAgIF9zdGF0ZSA9IFwibm90U2NoZWR1bGVkXCI7XG4gICAgICBjb25zdHJ1Y3RvcihzLCBpLCByLCBFLCBHLCBjZSkge1xuICAgICAgICBpZiAodGhpcy50eXBlID0gcywgdGhpcy5zb3VyY2UgPSBpLCB0aGlzLmRhdGEgPSBFLCB0aGlzLnNjaGVkdWxlRm4gPSBHLCB0aGlzLmNhbmNlbEZuID0gY2UsICFyKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gcjtcbiAgICAgICAgY29uc3QgQSA9IHRoaXM7XG4gICAgICAgIHMgPT09IFkgJiYgRSAmJiBFLnVzZUcgPyB0aGlzLmludm9rZSA9IHAuaW52b2tlVGFzayA6IHRoaXMuaW52b2tlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHAuaW52b2tlVGFzay5jYWxsKGosIEEsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzdGF0aWMgaW52b2tlVGFzayhzLCBpLCByKSB7XG4gICAgICAgIHMgfHwgKHMgPSB0aGlzKSwgb2UrKztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcy5ydW5Db3VudCsrLCBzLnpvbmUucnVuVGFzayhzLCBpLCByKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBvZSA9PSAxICYmIG5lKCksIG9lLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGdldCB6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgICAgIH1cbiAgICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgICAgfVxuICAgICAgY2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCkge1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVG8oSiwgayk7XG4gICAgICB9XG4gICAgICBfdHJhbnNpdGlvblRvKHMsIGksIHIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBpIHx8IHRoaXMuX3N0YXRlID09PSByKVxuICAgICAgICAgIHRoaXMuX3N0YXRlID0gcywgcyA9PSBKICYmICh0aGlzLl96b25lRGVsZWdhdGVzID0gbnVsbCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50eXBlfSAnJHt0aGlzLnNvdXJjZX0nOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyR7c30nLCBleHBlY3Rpbmcgc3RhdGUgJyR7aX0nJHtyID8gXCIgb3IgJ1wiICsgciArIFwiJ1wiIDogXCJcIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0nLmApO1xuICAgICAgfVxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgJiYgdHlwZW9mIHRoaXMuZGF0YS5oYW5kbGVJZCA8IFwidVwiID8gdGhpcy5kYXRhLmhhbmRsZUlkLnRvU3RyaW5nKCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgICAvLyBhZGQgdG9KU09OIG1ldGhvZCB0byBwcmV2ZW50IGN5Y2xpYyBlcnJvciB3aGVuXG4gICAgICAvLyBjYWxsIEpTT04uc3RyaW5naWZ5KHpvbmVUYXNrKVxuICAgICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICAgIHpvbmU6IHRoaXMuem9uZS5uYW1lLFxuICAgICAgICAgIHJ1bkNvdW50OiB0aGlzLnJ1bkNvdW50XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFQgPSBTKFwic2V0VGltZW91dFwiKSwgeSA9IFMoXCJQcm9taXNlXCIpLCB3ID0gUyhcInRoZW5cIik7XG4gICAgbGV0IF8gPSBbXSwgQyA9IGZhbHNlLCBNO1xuICAgIGZ1bmN0aW9uIEYoSSkge1xuICAgICAgaWYgKE0gfHwgalt5XSAmJiAoTSA9IGpbeV0ucmVzb2x2ZSgwKSksIE0pIHtcbiAgICAgICAgbGV0IHMgPSBNW3ddO1xuICAgICAgICBzIHx8IChzID0gTS50aGVuKSwgcy5jYWxsKE0sIEkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGpbVF0oSSwgMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFgoSSkge1xuICAgICAgb2UgPT09IDAgJiYgXy5sZW5ndGggPT09IDAgJiYgRihuZSksIEkgJiYgXy5wdXNoKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBuZSgpIHtcbiAgICAgIGlmICghQykge1xuICAgICAgICBmb3IgKEMgPSB0cnVlOyBfLmxlbmd0aDsgKSB7XG4gICAgICAgICAgY29uc3QgSSA9IF87XG4gICAgICAgICAgXyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgSS5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgY29uc3QgaSA9IElbc107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpLnpvbmUucnVuVGFzayhpLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICAgICAgUC5vblVuaGFuZGxlZEVycm9yKHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBQLm1pY3JvdGFza0RyYWluRG9uZSgpLCBDID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlID0geyBuYW1lOiBcIk5PIFpPTkVcIiB9LCBKID0gXCJub3RTY2hlZHVsZWRcIiwgayA9IFwic2NoZWR1bGluZ1wiLCBkID0gXCJzY2hlZHVsZWRcIiwgeCA9IFwicnVubmluZ1wiLCBWID0gXCJjYW5jZWxpbmdcIiwgSyA9IFwidW5rbm93blwiLCBVID0gXCJtaWNyb1Rhc2tcIiwgZyA9IFwibWFjcm9UYXNrXCIsIFkgPSBcImV2ZW50VGFza1wiLCBPID0ge30sIFAgPSB7XG4gICAgICBzeW1ib2w6IFMsXG4gICAgICBjdXJyZW50Wm9uZUZyYW1lOiAoKSA9PiBiLFxuICAgICAgb25VbmhhbmRsZWRFcnJvcjogJCxcbiAgICAgIG1pY3JvdGFza0RyYWluRG9uZTogJCxcbiAgICAgIHNjaGVkdWxlTWljcm9UYXNrOiBYLFxuICAgICAgc2hvd1VuY2F1Z2h0RXJyb3I6ICgpID0+ICFlW1MoXCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yXCIpXSxcbiAgICAgIHBhdGNoRXZlbnRUYXJnZXQ6ICgpID0+IFtdLFxuICAgICAgcGF0Y2hPblByb3BlcnRpZXM6ICQsXG4gICAgICBwYXRjaE1ldGhvZDogKCkgPT4gJCxcbiAgICAgIGJpbmRBcmd1bWVudHM6ICgpID0+IFtdLFxuICAgICAgcGF0Y2hUaGVuOiAoKSA9PiAkLFxuICAgICAgcGF0Y2hNYWNyb1Rhc2s6ICgpID0+ICQsXG4gICAgICBwYXRjaEV2ZW50UHJvdG90eXBlOiAoKSA9PiAkLFxuICAgICAgaXNJRU9yRWRnZTogKCkgPT4gZmFsc2UsXG4gICAgICBnZXRHbG9iYWxPYmplY3RzOiAoKSA9PiB7XG4gICAgICB9LFxuICAgICAgT2JqZWN0RGVmaW5lUHJvcGVydHk6ICgpID0+ICQsXG4gICAgICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICgpID0+IHtcbiAgICAgIH0sXG4gICAgICBPYmplY3RDcmVhdGU6ICgpID0+IHtcbiAgICAgIH0sXG4gICAgICBBcnJheVNsaWNlOiAoKSA9PiBbXSxcbiAgICAgIHBhdGNoQ2xhc3M6ICgpID0+ICQsXG4gICAgICB3cmFwV2l0aEN1cnJlbnRab25lOiAoKSA9PiAkLFxuICAgICAgZmlsdGVyUHJvcGVydGllczogKCkgPT4gW10sXG4gICAgICBhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ICgpID0+ICQsXG4gICAgICBfcmVkZWZpbmVQcm9wZXJ0eTogKCkgPT4gJCxcbiAgICAgIHBhdGNoQ2FsbGJhY2tzOiAoKSA9PiAkLFxuICAgICAgbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6IEZcbiAgICB9O1xuICAgIGxldCBiID0geyBwYXJlbnQ6IG51bGwsIHpvbmU6IG5ldyBlKG51bGwsIG51bGwpIH0sIEQgPSBudWxsLCBvZSA9IDA7XG4gICAgZnVuY3Rpb24gJCgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGEoXCJab25lXCIsIFwiWm9uZVwiKSwgZTtcbiAgfVxuICBmdW5jdGlvbiB6KCkge1xuICAgIGNvbnN0IHQgPSBnbG9iYWxUaGlzLCBuID0gdFtTKFwiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2tcIildID09PSB0cnVlO1xuICAgIGlmICh0LlpvbmUgJiYgKG4gfHwgdHlwZW9mIHQuWm9uZS5fX3N5bWJvbF9fICE9IFwiZnVuY3Rpb25cIikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lIGFscmVhZHkgbG9hZGVkLlwiKTtcbiAgICByZXR1cm4gdC5ab25lID8/PSBCKCksIHQuWm9uZTtcbiAgfVxuICBjb25zdCBlZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIHRlID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBpZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiwgZmUgPSBPYmplY3QuY3JlYXRlLCBrZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwgdmUgPSBcImFkZEV2ZW50TGlzdGVuZXJcIiwgQWUgPSBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIiwgamUgPSBTKHZlKSwgSGUgPSBTKEFlKSwgX2UgPSBcInRydWVcIiwgVGUgPSBcImZhbHNlXCIsIHdlID0gUyhcIlwiKTtcbiAgZnVuY3Rpb24geGUodCwgbikge1xuICAgIHJldHVybiBab25lLmN1cnJlbnQud3JhcCh0LCBuKTtcbiAgfVxuICBmdW5jdGlvbiBGZSh0LCBuLCBhLCBlLCBjKSB7XG4gICAgcmV0dXJuIFpvbmUuY3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayh0LCBuLCBhLCBlLCBjKTtcbiAgfVxuICBjb25zdCBIID0gUywgTmUgPSB0eXBlb2Ygd2luZG93IDwgXCJ1XCIsIERlID0gTmUgPyB3aW5kb3cgOiB2b2lkIDAsIFEgPSBOZSAmJiBEZSB8fCBnbG9iYWxUaGlzLCBtdCA9IFwicmVtb3ZlQXR0cmlidXRlXCI7XG4gIGZ1bmN0aW9uIFZlKHQsIG4pIHtcbiAgICBmb3IgKGxldCBhID0gdC5sZW5ndGggLSAxOyBhID49IDA7IGEtLSlcbiAgICAgIHR5cGVvZiB0W2FdID09IFwiZnVuY3Rpb25cIiAmJiAodFthXSA9IHhlKHRbYV0sIG4gKyBcIl9cIiArIGEpKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBmdW5jdGlvbiB5dCh0LCBuKSB7XG4gICAgY29uc3QgYSA9IHQuY29uc3RydWN0b3IubmFtZTtcbiAgICBmb3IgKGxldCBlID0gMDsgZSA8IG4ubGVuZ3RoOyBlKyspIHtcbiAgICAgIGNvbnN0IGMgPSBuW2VdLCBmID0gdFtjXTtcbiAgICAgIGlmIChmKSB7XG4gICAgICAgIGNvbnN0IHAgPSBlZSh0LCBjKTtcbiAgICAgICAgaWYgKCFYZShwKSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdFtjXSA9ICgoVCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBULmFwcGx5KHRoaXMsIFZlKGFyZ3VtZW50cywgYSArIFwiLlwiICsgYykpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHBlKHksIFQpLCB5O1xuICAgICAgICB9KShmKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gWGUodCkge1xuICAgIHJldHVybiB0ID8gdC53cml0YWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6ICEodHlwZW9mIHQuZ2V0ID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdC5zZXQgPiBcInVcIikgOiB0cnVlO1xuICB9XG4gIGNvbnN0IFllID0gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLCBaZSA9ICEoXCJud1wiIGluIFEpICYmIHR5cGVvZiBRLnByb2Nlc3MgPCBcInVcIiAmJiBRLnByb2Nlc3MudG9TdHJpbmcoKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIsIHplID0gIVplICYmICFZZSAmJiAhIShOZSAmJiBEZS5IVE1MRWxlbWVudCksICRlID0gdHlwZW9mIFEucHJvY2VzcyA8IFwidVwiICYmIFEucHJvY2Vzcy50b1N0cmluZygpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIiAmJiAhWWUgJiYgISEoTmUgJiYgRGUuSFRNTEVsZW1lbnQpLCBMZSA9IHt9LCBrdCA9IEgoXCJlbmFibGVfYmVmb3JldW5sb2FkXCIpLCBKZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9IHQgfHwgUS5ldmVudCwgIXQpXG4gICAgICByZXR1cm47XG4gICAgbGV0IG4gPSBMZVt0LnR5cGVdO1xuICAgIG4gfHwgKG4gPSBMZVt0LnR5cGVdID0gSChcIk9OX1BST1BFUlRZXCIgKyB0LnR5cGUpKTtcbiAgICBjb25zdCBhID0gdGhpcyB8fCB0LnRhcmdldCB8fCBRLCBlID0gYVtuXTtcbiAgICBsZXQgYztcbiAgICBpZiAoemUgJiYgYSA9PT0gRGUgJiYgdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgIGNvbnN0IGYgPSB0O1xuICAgICAgYyA9IGUgJiYgZS5jYWxsKHRoaXMsIGYubWVzc2FnZSwgZi5maWxlbmFtZSwgZi5saW5lbm8sIGYuY29sbm8sIGYuZXJyb3IpLCBjID09PSB0cnVlICYmIHQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2VcbiAgICAgIGMgPSBlICYmIGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNDc1NzlcbiAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwNTI1L2hpc3RvcnkuaHRtbCNiZWZvcmV1bmxvYWRldmVudFxuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBzcGVjaWZpYyBjYXNlIHdlIHNob3VsZCBjaGVjayBmb3IuIFRoZSBzcGVjIGRlZmluZXMgdGhhdCB0aGVcbiAgICAgIC8vIGByZXR1cm5WYWx1ZWAgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIG1lc3NhZ2UgdG8gc2hvdyB0aGUgdXNlci4gV2hlbiB0aGUgZXZlbnRcbiAgICAgIC8vIGlzIGNyZWF0ZWQsIHRoaXMgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICB0LnR5cGUgPT09IFwiYmVmb3JldW5sb2FkXCIgJiYgLy8gVG8gcHJldmVudCBhbnkgYnJlYWtpbmcgY2hhbmdlcyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSwgZ2l2ZW4gdGhhdFxuICAgICAgLy8gaXQgd2FzIGFscmVhZHkgY2F1c2luZyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmYWlsdXJlcyBpbiBHMywgd2UgaGF2ZSBoaWRkZW5cbiAgICAgIC8vIHRoYXQgYmVoYXZpb3IgYmVoaW5kIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmxhZy4gQ29uc3VtZXJzIGNhbiBlbmFibGUgdGhpc1xuICAgICAgLy8gZmxhZyBleHBsaWNpdGx5IGlmIHRoZXkgd2FudCB0aGUgYGJlZm9yZXVubG9hZGAgZXZlbnQgdG8gYmUgaGFuZGxlZCBhcyBkZWZpbmVkXG4gICAgICAvLyBpbiB0aGUgc3BlY2lmaWNhdGlvbi5cbiAgICAgIFFba3RdICYmIC8vIFRoZSBJREwgZXZlbnQgZGVmaW5pdGlvbiBpcyBgYXR0cmlidXRlIERPTVN0cmluZyByZXR1cm5WYWx1ZWAsIHNvIHdlIGNoZWNrIHdoZXRoZXJcbiAgICAgIC8vIGB0eXBlb2YgcmVzdWx0YCBpcyBhIHN0cmluZy5cbiAgICAgIHR5cGVvZiBjID09IFwic3RyaW5nXCIgPyB0LnJldHVyblZhbHVlID0gYyA6IGMgIT0gbnVsbCAmJiAhYyAmJiB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG4gIGZ1bmN0aW9uIEtlKHQsIG4sIGEpIHtcbiAgICBsZXQgZSA9IGVlKHQsIG4pO1xuICAgIGlmICghZSAmJiBhICYmIGVlKGEsIG4pICYmIChlID0geyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSksICFlIHx8ICFlLmNvbmZpZ3VyYWJsZSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjID0gSChcIm9uXCIgKyBuICsgXCJwYXRjaGVkXCIpO1xuICAgIGlmICh0Lmhhc093blByb3BlcnR5KGMpICYmIHRbY10pXG4gICAgICByZXR1cm47XG4gICAgZGVsZXRlIGUud3JpdGFibGUsIGRlbGV0ZSBlLnZhbHVlO1xuICAgIGNvbnN0IGYgPSBlLmdldCwgcCA9IGUuc2V0LCBUID0gbi5zbGljZSgyKTtcbiAgICBsZXQgeSA9IExlW1RdO1xuICAgIHkgfHwgKHkgPSBMZVtUXSA9IEgoXCJPTl9QUk9QRVJUWVwiICsgVCkpLCBlLnNldCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgIGxldCBfID0gdGhpcztcbiAgICAgIGlmICghXyAmJiB0ID09PSBRICYmIChfID0gUSksICFfKVxuICAgICAgICByZXR1cm47XG4gICAgICB0eXBlb2YgX1t5XSA9PSBcImZ1bmN0aW9uXCIgJiYgXy5yZW1vdmVFdmVudExpc3RlbmVyKFQsIEplKSwgcD8uY2FsbChfLCBudWxsKSwgX1t5XSA9IHcsIHR5cGVvZiB3ID09IFwiZnVuY3Rpb25cIiAmJiBfLmFkZEV2ZW50TGlzdGVuZXIoVCwgSmUsIGZhbHNlKTtcbiAgICB9LCBlLmdldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgbGV0IHcgPSB0aGlzO1xuICAgICAgaWYgKCF3ICYmIHQgPT09IFEgJiYgKHcgPSBRKSwgIXcpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgXyA9IHdbeV07XG4gICAgICBpZiAoXylcbiAgICAgICAgcmV0dXJuIF87XG4gICAgICBpZiAoZikge1xuICAgICAgICBsZXQgQyA9IGYuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKEMpXG4gICAgICAgICAgcmV0dXJuIGUuc2V0LmNhbGwodGhpcywgQyksIHR5cGVvZiB3W210XSA9PSBcImZ1bmN0aW9uXCIgJiYgdy5yZW1vdmVBdHRyaWJ1dGUobiksIEM7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LCB0ZSh0LCBuLCBlKSwgdFtjXSA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gUWUodCwgbiwgYSkge1xuICAgIGlmIChuKVxuICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBuLmxlbmd0aDsgZSsrKVxuICAgICAgICBLZSh0LCBcIm9uXCIgKyBuW2VdLCBhKTtcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGUgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYyBpbiB0KVxuICAgICAgICBjLnNsaWNlKDAsIDIpID09IFwib25cIiAmJiBlLnB1c2goYyk7XG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGUubGVuZ3RoOyBjKyspXG4gICAgICAgIEtlKHQsIGVbY10sIGEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsZSA9IEgoXCJvcmlnaW5hbEluc3RhbmNlXCIpO1xuICBmdW5jdGlvbiBTZSh0KSB7XG4gICAgY29uc3QgbiA9IFFbdF07XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuO1xuICAgIFFbSCh0KV0gPSBuLCBRW3RdID0gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBjID0gVmUoYXJndW1lbnRzLCB0KTtcbiAgICAgIHN3aXRjaCAoYy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oY1swXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzW2xlXSA9IG5ldyBuKGNbMF0sIGNbMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpc1tsZV0gPSBuZXcgbihjWzBdLCBjWzFdLCBjWzJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRoaXNbbGVdID0gbmV3IG4oY1swXSwgY1sxXSwgY1syXSwgY1szXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJnIGxpc3QgdG9vIGxvbmcuXCIpO1xuICAgICAgfVxuICAgIH0sIHBlKFFbdF0sIG4pO1xuICAgIGNvbnN0IGEgPSBuZXcgbihmdW5jdGlvbigpIHtcbiAgICB9KTtcbiAgICBsZXQgZTtcbiAgICBmb3IgKGUgaW4gYSlcbiAgICAgIHQgPT09IFwiWE1MSHR0cFJlcXVlc3RcIiAmJiBlID09PSBcInJlc3BvbnNlQmxvYlwiIHx8IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdHlwZW9mIGFbY10gPT0gXCJmdW5jdGlvblwiID8gUVt0XS5wcm90b3R5cGVbY10gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpc1tsZV1bY10uYXBwbHkodGhpc1tsZV0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gOiB0ZShRW3RdLnByb3RvdHlwZSwgYywge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24oZikge1xuICAgICAgICAgICAgdHlwZW9mIGYgPT0gXCJmdW5jdGlvblwiID8gKHRoaXNbbGVdW2NdID0geGUoZiwgdCArIFwiLlwiICsgYyksIHBlKHRoaXNbbGVdW2NdLCBmKSkgOiB0aGlzW2xlXVtjXSA9IGY7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbbGVdW2NdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KGUpO1xuICAgIGZvciAoZSBpbiBuKVxuICAgICAgZSAhPT0gXCJwcm90b3R5cGVcIiAmJiBuLmhhc093blByb3BlcnR5KGUpICYmIChRW3RdW2VdID0gbltlXSk7XG4gIH1cbiAgZnVuY3Rpb24gRWUodCwgbiwgYSkge1xuICAgIGxldCBlID0gdDtcbiAgICBmb3IgKDsgZSAmJiAhZS5oYXNPd25Qcm9wZXJ0eShuKTsgKVxuICAgICAgZSA9IGllKGUpO1xuICAgICFlICYmIHRbbl0gJiYgKGUgPSB0KTtcbiAgICBjb25zdCBjID0gSChuKTtcbiAgICBsZXQgZiA9IG51bGw7XG4gICAgaWYgKGUgJiYgKCEoZiA9IGVbY10pIHx8ICFlLmhhc093blByb3BlcnR5KGMpKSkge1xuICAgICAgZiA9IGVbY10gPSBlW25dO1xuICAgICAgY29uc3QgcCA9IGUgJiYgZWUoZSwgbik7XG4gICAgICBpZiAoWGUocCkpIHtcbiAgICAgICAgY29uc3QgVCA9IGEoZiwgYywgbik7XG4gICAgICAgIGVbbl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gVCh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBwZShlW25dLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGY7XG4gIH1cbiAgZnVuY3Rpb24gdnQodCwgbiwgYSkge1xuICAgIGxldCBlID0gbnVsbDtcbiAgICBmdW5jdGlvbiBjKGYpIHtcbiAgICAgIGNvbnN0IHAgPSBmLmRhdGE7XG4gICAgICByZXR1cm4gcC5hcmdzW3AuY2JJZHhdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGYuaW52b2tlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LCBlLmFwcGx5KHAudGFyZ2V0LCBwLmFyZ3MpLCBmO1xuICAgIH1cbiAgICBlID0gRWUodCwgbiwgKGYpID0+IGZ1bmN0aW9uKHAsIFQpIHtcbiAgICAgIGNvbnN0IHkgPSBhKHAsIFQpO1xuICAgICAgcmV0dXJuIHkuY2JJZHggPj0gMCAmJiB0eXBlb2YgVFt5LmNiSWR4XSA9PSBcImZ1bmN0aW9uXCIgPyBGZSh5Lm5hbWUsIFRbeS5jYklkeF0sIHksIGMpIDogZi5hcHBseShwLCBUKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBwZSh0LCBuKSB7XG4gICAgdFtIKFwiT3JpZ2luYWxEZWxlZ2F0ZVwiKV0gPSBuO1xuICB9XG4gIGxldCBldCA9IGZhbHNlLCBHZSA9IGZhbHNlO1xuICBmdW5jdGlvbiBidCgpIHtcbiAgICBpZiAoZXQpXG4gICAgICByZXR1cm4gR2U7XG4gICAgZXQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ID0gRGUubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICh0LmluZGV4T2YoXCJNU0lFIFwiKSAhPT0gLTEgfHwgdC5pbmRleE9mKFwiVHJpZGVudC9cIikgIT09IC0xIHx8IHQuaW5kZXhPZihcIkVkZ2UvXCIpICE9PSAtMSkgJiYgKEdlID0gITApO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgICByZXR1cm4gR2U7XG4gIH1cbiAgZnVuY3Rpb24gdHQodCkge1xuICAgIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG4gIH1cbiAgZnVuY3Rpb24gbnQodCkge1xuICAgIHJldHVybiB0eXBlb2YgdCA9PSBcIm51bWJlclwiO1xuICB9XG4gIGNvbnN0IEN0ID0ge1xuICAgIHVzZUc6IHRydWVcbiAgfSwgYWUgPSB7fSwgcnQgPSB7fSwgb3QgPSBuZXcgUmVnRXhwKFwiXlwiICsgd2UgKyBcIihcXFxcdyspKHRydWV8ZmFsc2UpJFwiKSwgc3QgPSBIKFwicHJvcGFnYXRpb25TdG9wcGVkXCIpO1xuICBmdW5jdGlvbiBpdCh0LCBuKSB7XG4gICAgY29uc3QgYSA9IChuID8gbih0KSA6IHQpICsgVGUsIGUgPSAobiA/IG4odCkgOiB0KSArIF9lLCBjID0gd2UgKyBhLCBmID0gd2UgKyBlO1xuICAgIGFlW3RdID0ge30sIGFlW3RdW1RlXSA9IGMsIGFlW3RdW19lXSA9IGY7XG4gIH1cbiAgZnVuY3Rpb24gUHQodCwgbiwgYSwgZSkge1xuICAgIGNvbnN0IGMgPSBlICYmIGUuYWRkIHx8IHZlLCBmID0gZSAmJiBlLnJtIHx8IEFlLCBwID0gZSAmJiBlLmxpc3RlbmVycyB8fCBcImV2ZW50TGlzdGVuZXJzXCIsIFQgPSBlICYmIGUucm1BbGwgfHwgXCJyZW1vdmVBbGxMaXN0ZW5lcnNcIiwgeSA9IEgoYyksIHcgPSBcIi5cIiArIGMgKyBcIjpcIiwgXyA9IFwicHJlcGVuZExpc3RlbmVyXCIsIEMgPSBcIi5cIiArIF8gKyBcIjpcIiwgTSA9IGZ1bmN0aW9uKGssIGQsIHgpIHtcbiAgICAgIGlmIChrLmlzUmVtb3ZlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgViA9IGsuY2FsbGJhY2s7XG4gICAgICB0eXBlb2YgViA9PSBcIm9iamVjdFwiICYmIFYuaGFuZGxlRXZlbnQgJiYgKGsuY2FsbGJhY2sgPSAoZykgPT4gVi5oYW5kbGVFdmVudChnKSwgay5vcmlnaW5hbERlbGVnYXRlID0gVik7XG4gICAgICBsZXQgSztcbiAgICAgIHRyeSB7XG4gICAgICAgIGsuaW52b2tlKGssIGQsIFt4XSk7XG4gICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgIEsgPSBnO1xuICAgICAgfVxuICAgICAgY29uc3QgVSA9IGsub3B0aW9ucztcbiAgICAgIGlmIChVICYmIHR5cGVvZiBVID09IFwib2JqZWN0XCIgJiYgVS5vbmNlKSB7XG4gICAgICAgIGNvbnN0IGcgPSBrLm9yaWdpbmFsRGVsZWdhdGUgPyBrLm9yaWdpbmFsRGVsZWdhdGUgOiBrLmNhbGxiYWNrO1xuICAgICAgICBkW2ZdLmNhbGwoZCwgeC50eXBlLCBnLCBVKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBLO1xuICAgIH07XG4gICAgZnVuY3Rpb24gRihrLCBkLCB4KSB7XG4gICAgICBpZiAoZCA9IGQgfHwgdC5ldmVudCwgIWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IFYgPSBrIHx8IGQudGFyZ2V0IHx8IHQsIEsgPSBWW2FlW2QudHlwZV1beCA/IF9lIDogVGVdXTtcbiAgICAgIGlmIChLKSB7XG4gICAgICAgIGNvbnN0IFUgPSBbXTtcbiAgICAgICAgaWYgKEsubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29uc3QgZyA9IE0oS1swXSwgViwgZCk7XG4gICAgICAgICAgZyAmJiBVLnB1c2goZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZyA9IEsuc2xpY2UoKTtcbiAgICAgICAgICBmb3IgKGxldCBZID0gMDsgWSA8IGcubGVuZ3RoICYmICEoZCAmJiBkW3N0XSA9PT0gdHJ1ZSk7IFkrKykge1xuICAgICAgICAgICAgY29uc3QgTyA9IE0oZ1tZXSwgViwgZCk7XG4gICAgICAgICAgICBPICYmIFUucHVzaChPKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFUubGVuZ3RoID09PSAxKVxuICAgICAgICAgIHRocm93IFVbMF07XG4gICAgICAgIGZvciAobGV0IGcgPSAwOyBnIDwgVS5sZW5ndGg7IGcrKykge1xuICAgICAgICAgIGNvbnN0IFkgPSBVW2ddO1xuICAgICAgICAgIG4ubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgWTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBYID0gZnVuY3Rpb24oaykge1xuICAgICAgcmV0dXJuIEYodGhpcywgaywgZmFsc2UpO1xuICAgIH0sIG5lID0gZnVuY3Rpb24oaykge1xuICAgICAgcmV0dXJuIEYodGhpcywgaywgdHJ1ZSk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiByZShrLCBkKSB7XG4gICAgICBpZiAoIWspXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGxldCB4ID0gdHJ1ZTtcbiAgICAgIGQgJiYgZC51c2VHICE9PSB2b2lkIDAgJiYgKHggPSBkLnVzZUcpO1xuICAgICAgY29uc3QgViA9IGQgJiYgZC52aDtcbiAgICAgIGxldCBLID0gdHJ1ZTtcbiAgICAgIGQgJiYgZC5jaGtEdXAgIT09IHZvaWQgMCAmJiAoSyA9IGQuY2hrRHVwKTtcbiAgICAgIGxldCBVID0gZmFsc2U7XG4gICAgICBkICYmIGQucnQgIT09IHZvaWQgMCAmJiAoVSA9IGQucnQpO1xuICAgICAgbGV0IGcgPSBrO1xuICAgICAgZm9yICg7IGcgJiYgIWcuaGFzT3duUHJvcGVydHkoYyk7IClcbiAgICAgICAgZyA9IGllKGcpO1xuICAgICAgaWYgKCFnICYmIGtbY10gJiYgKGcgPSBrKSwgIWcgfHwgZ1t5XSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgWSA9IGQgJiYgZC5ldmVudE5hbWVUb1N0cmluZywgTyA9IHt9LCBQID0gZ1t5XSA9IGdbY10sIGIgPSBnW0goZildID0gZ1tmXSwgRCA9IGdbSChwKV0gPSBnW3BdLCBvZSA9IGdbSChUKV0gPSBnW1RdO1xuICAgICAgbGV0ICQ7XG4gICAgICBkICYmIGQucHJlcGVuZCAmJiAoJCA9IGdbSChkLnByZXBlbmQpXSA9IGdbZC5wcmVwZW5kXSk7XG4gICAgICBmdW5jdGlvbiBJKG8sIHUpIHtcbiAgICAgICAgcmV0dXJuIHUgPyB0eXBlb2YgbyA9PSBcImJvb2xlYW5cIiA/IHsgY2FwdHVyZTogbywgcGFzc2l2ZTogdHJ1ZSB9IDogbyA/IHR5cGVvZiBvID09IFwib2JqZWN0XCIgJiYgby5wYXNzaXZlICE9PSBmYWxzZSA/IHsgLi4ubywgcGFzc2l2ZTogdHJ1ZSB9IDogbyA6IHsgcGFzc2l2ZTogdHJ1ZSB9IDogbztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHMgPSBmdW5jdGlvbihvKSB7XG4gICAgICAgIGlmICghTy5pc0V4aXN0aW5nKVxuICAgICAgICAgIHJldHVybiBQLmNhbGwoTy50YXJnZXQsIE8uZXZlbnROYW1lLCBPLmNhcHR1cmUgPyBuZSA6IFgsIE8ub3B0aW9ucyk7XG4gICAgICB9LCBpID0gZnVuY3Rpb24obykge1xuICAgICAgICBpZiAoIW8uaXNSZW1vdmVkKSB7XG4gICAgICAgICAgY29uc3QgdSA9IGFlW28uZXZlbnROYW1lXTtcbiAgICAgICAgICBsZXQgdjtcbiAgICAgICAgICB1ICYmICh2ID0gdVtvLmNhcHR1cmUgPyBfZSA6IFRlXSk7XG4gICAgICAgICAgY29uc3QgUiA9IHYgJiYgby50YXJnZXRbdl07XG4gICAgICAgICAgaWYgKFIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgUi5sZW5ndGg7IG0rKylcbiAgICAgICAgICAgICAgaWYgKFJbbV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICBSLnNwbGljZShtLCAxKSwgby5pc1JlbW92ZWQgPSB0cnVlLCBvLnJlbW92ZUFib3J0TGlzdGVuZXIgJiYgKG8ucmVtb3ZlQWJvcnRMaXN0ZW5lcigpLCBvLnJlbW92ZUFib3J0TGlzdGVuZXIgPSBudWxsKSwgUi5sZW5ndGggPT09IDAgJiYgKG8uYWxsUmVtb3ZlZCA9IHRydWUsIG8udGFyZ2V0W3ZdID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG8uYWxsUmVtb3ZlZClcbiAgICAgICAgICByZXR1cm4gYi5jYWxsKG8udGFyZ2V0LCBvLmV2ZW50TmFtZSwgby5jYXB0dXJlID8gbmUgOiBYLCBvLm9wdGlvbnMpO1xuICAgICAgfSwgciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIFAuY2FsbChPLnRhcmdldCwgTy5ldmVudE5hbWUsIG8uaW52b2tlLCBPLm9wdGlvbnMpO1xuICAgICAgfSwgRSA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuICQuY2FsbChPLnRhcmdldCwgTy5ldmVudE5hbWUsIG8uaW52b2tlLCBPLm9wdGlvbnMpO1xuICAgICAgfSwgRyA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIGIuY2FsbChvLnRhcmdldCwgby5ldmVudE5hbWUsIG8uaW52b2tlLCBvLm9wdGlvbnMpO1xuICAgICAgfSwgY2UgPSB4ID8gcyA6IHIsIEEgPSB4ID8gaSA6IEcsIGdlID0gZnVuY3Rpb24obywgdSkge1xuICAgICAgICBjb25zdCB2ID0gdHlwZW9mIHU7XG4gICAgICAgIHJldHVybiB2ID09PSBcImZ1bmN0aW9uXCIgJiYgby5jYWxsYmFjayA9PT0gdSB8fCB2ID09PSBcIm9iamVjdFwiICYmIG8ub3JpZ2luYWxEZWxlZ2F0ZSA9PT0gdTtcbiAgICAgIH0sIHllID0gZD8uZGlmZiB8fCBnZSwgc2UgPSBab25lW0goXCJVTlBBVENIRURfRVZFTlRTXCIpXSwgQ2UgPSB0W0goXCJQQVNTSVZFX0VWRU5UU1wiKV07XG4gICAgICBmdW5jdGlvbiBoKG8pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvID09IFwib2JqZWN0XCIgJiYgbyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHUgPSB7IC4uLm8gfTtcbiAgICAgICAgICByZXR1cm4gby5zaWduYWwgJiYgKHUuc2lnbmFsID0gby5zaWduYWwpLCB1O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfVxuICAgICAgY29uc3QgbCA9IGZ1bmN0aW9uKG8sIHUsIHYsIFIsIG0gPSBmYWxzZSwgTiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjb25zdCBaID0gdGhpcyB8fCB0O1xuICAgICAgICAgIGxldCBMID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgIGQgJiYgZC50cmFuc2ZlckV2ZW50TmFtZSAmJiAoTCA9IGQudHJhbnNmZXJFdmVudE5hbWUoTCkpO1xuICAgICAgICAgIGxldCBXID0gYXJndW1lbnRzWzFdO1xuICAgICAgICAgIGlmICghVylcbiAgICAgICAgICAgIHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgaWYgKFplICYmIEwgPT09IFwidW5jYXVnaHRFeGNlcHRpb25cIilcbiAgICAgICAgICAgIHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgbGV0IHEgPSBmYWxzZTtcbiAgICAgICAgICBpZiAodHlwZW9mIFcgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoIVcuaGFuZGxlRXZlbnQpXG4gICAgICAgICAgICAgIHJldHVybiBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBxID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFYgJiYgIVYobywgVywgWiwgYXJndW1lbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjb25zdCBtZSA9ICEhQ2UgJiYgQ2UuaW5kZXhPZihMKSAhPT0gLTEsIGhlID0gaChJKGFyZ3VtZW50c1syXSwgbWUpKSwgUGUgPSBoZT8uc2lnbmFsO1xuICAgICAgICAgIGlmIChQZT8uYWJvcnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBpZiAoc2UpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGRlID0gMDsgZGUgPCBzZS5sZW5ndGg7IGRlKyspXG4gICAgICAgICAgICAgIGlmIChMID09PSBzZVtkZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lID8gby5jYWxsKFosIEwsIFcsIGhlKSA6IG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgVWUgPSBoZSA/IHR5cGVvZiBoZSA9PSBcImJvb2xlYW5cIiA/IHRydWUgOiBoZS5jYXB0dXJlIDogZmFsc2UsIGZ0ID0gaGUgJiYgdHlwZW9mIGhlID09IFwib2JqZWN0XCIgPyBoZS5vbmNlIDogZmFsc2UsIEh0ID0gWm9uZS5jdXJyZW50O1xuICAgICAgICAgIGxldCBXZSA9IGFlW0xdO1xuICAgICAgICAgIFdlIHx8IChpdChMLCBZKSwgV2UgPSBhZVtMXSk7XG4gICAgICAgICAgY29uc3QgaHQgPSBXZVtVZSA/IF9lIDogVGVdO1xuICAgICAgICAgIGxldCBSZSA9IFpbaHRdLCBkdCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChSZSkge1xuICAgICAgICAgICAgaWYgKGR0ID0gdHJ1ZSwgSykge1xuICAgICAgICAgICAgICBmb3IgKGxldCBkZSA9IDA7IGRlIDwgUmUubGVuZ3RoOyBkZSsrKVxuICAgICAgICAgICAgICAgIGlmICh5ZShSZVtkZV0sIFcpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgUmUgPSBaW2h0XSA9IFtdO1xuICAgICAgICAgIGxldCBJZTtcbiAgICAgICAgICBjb25zdCBfdCA9IFouY29uc3RydWN0b3IubmFtZSwgVHQgPSBydFtfdF07XG4gICAgICAgICAgVHQgJiYgKEllID0gVHRbTF0pLCBJZSB8fCAoSWUgPSBfdCArIHUgKyAoWSA/IFkoTCkgOiBMKSksIE8ub3B0aW9ucyA9IGhlLCBmdCAmJiAoTy5vcHRpb25zLm9uY2UgPSBmYWxzZSksIE8udGFyZ2V0ID0gWiwgTy5jYXB0dXJlID0gVWUsIE8uZXZlbnROYW1lID0gTCwgTy5pc0V4aXN0aW5nID0gZHQ7XG4gICAgICAgICAgY29uc3QgT2UgPSB4ID8gQ3QgOiB2b2lkIDA7XG4gICAgICAgICAgT2UgJiYgKE9lLnRhc2tEYXRhID0gTyksIFBlICYmIChPLm9wdGlvbnMuc2lnbmFsID0gdm9pZCAwKTtcbiAgICAgICAgICBjb25zdCB1ZSA9IEh0LnNjaGVkdWxlRXZlbnRUYXNrKEllLCBXLCBPZSwgdiwgUik7XG4gICAgICAgICAgaWYgKFBlKSB7XG4gICAgICAgICAgICBPLm9wdGlvbnMuc2lnbmFsID0gUGU7XG4gICAgICAgICAgICBjb25zdCBkZSA9ICgpID0+IHVlLnpvbmUuY2FuY2VsVGFzayh1ZSk7XG4gICAgICAgICAgICBvLmNhbGwoUGUsIFwiYWJvcnRcIiwgZGUsIHsgb25jZTogdHJ1ZSB9KSwgdWUucmVtb3ZlQWJvcnRMaXN0ZW5lciA9ICgpID0+IFBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBkZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChPLnRhcmdldCA9IG51bGwsIE9lICYmIChPZS50YXNrRGF0YSA9IG51bGwpLCBmdCAmJiAoTy5vcHRpb25zLm9uY2UgPSB0cnVlKSwgdHlwZW9mIHVlLm9wdGlvbnMgIT0gXCJib29sZWFuXCIgJiYgKHVlLm9wdGlvbnMgPSBoZSksIHVlLnRhcmdldCA9IFosIHVlLmNhcHR1cmUgPSBVZSwgdWUuZXZlbnROYW1lID0gTCwgcSAmJiAodWUub3JpZ2luYWxEZWxlZ2F0ZSA9IFcpLCBOID8gUmUudW5zaGlmdCh1ZSkgOiBSZS5wdXNoKHVlKSwgbSlcbiAgICAgICAgICAgIHJldHVybiBaO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBnW2NdID0gbChQLCB3LCBjZSwgQSwgVSksICQgJiYgKGdbX10gPSBsKCQsIEMsIEUsIEEsIFUsIHRydWUpKSwgZ1tmXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBvID0gdGhpcyB8fCB0O1xuICAgICAgICBsZXQgdSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgZCAmJiBkLnRyYW5zZmVyRXZlbnROYW1lICYmICh1ID0gZC50cmFuc2ZlckV2ZW50TmFtZSh1KSk7XG4gICAgICAgIGNvbnN0IHYgPSBhcmd1bWVudHNbMl0sIFIgPSB2ID8gdHlwZW9mIHYgPT0gXCJib29sZWFuXCIgPyB0cnVlIDogdi5jYXB0dXJlIDogZmFsc2UsIG0gPSBhcmd1bWVudHNbMV07XG4gICAgICAgIGlmICghbSlcbiAgICAgICAgICByZXR1cm4gYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAoViAmJiAhVihiLCBtLCBvLCBhcmd1bWVudHMpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgTiA9IGFlW3VdO1xuICAgICAgICBsZXQgWjtcbiAgICAgICAgTiAmJiAoWiA9IE5bUiA/IF9lIDogVGVdKTtcbiAgICAgICAgY29uc3QgTCA9IFogJiYgb1taXTtcbiAgICAgICAgaWYgKEwpXG4gICAgICAgICAgZm9yIChsZXQgVyA9IDA7IFcgPCBMLmxlbmd0aDsgVysrKSB7XG4gICAgICAgICAgICBjb25zdCBxID0gTFtXXTtcbiAgICAgICAgICAgIGlmICh5ZShxLCBtKSkge1xuICAgICAgICAgICAgICBpZiAoTC5zcGxpY2UoVywgMSksIHEuaXNSZW1vdmVkID0gdHJ1ZSwgTC5sZW5ndGggPT09IDAgJiYgKHEuYWxsUmVtb3ZlZCA9IHRydWUsIG9bWl0gPSBudWxsLCAhUiAmJiB0eXBlb2YgdSA9PSBcInN0cmluZ1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lID0gd2UgKyBcIk9OX1BST1BFUlRZXCIgKyB1O1xuICAgICAgICAgICAgICAgIG9bbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcS56b25lLmNhbmNlbFRhc2socSksIFUgPyBvIDogdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0sIGdbcF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgbyA9IHRoaXMgfHwgdDtcbiAgICAgICAgbGV0IHUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIGQgJiYgZC50cmFuc2ZlckV2ZW50TmFtZSAmJiAodSA9IGQudHJhbnNmZXJFdmVudE5hbWUodSkpO1xuICAgICAgICBjb25zdCB2ID0gW10sIFIgPSBjdChvLCBZID8gWSh1KSA6IHUpO1xuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IFIubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgICBjb25zdCBOID0gUlttXTtcbiAgICAgICAgICBsZXQgWiA9IE4ub3JpZ2luYWxEZWxlZ2F0ZSA/IE4ub3JpZ2luYWxEZWxlZ2F0ZSA6IE4uY2FsbGJhY2s7XG4gICAgICAgICAgdi5wdXNoKFopO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSwgZ1tUXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBvID0gdGhpcyB8fCB0O1xuICAgICAgICBsZXQgdSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICBkICYmIGQudHJhbnNmZXJFdmVudE5hbWUgJiYgKHUgPSBkLnRyYW5zZmVyRXZlbnROYW1lKHUpKTtcbiAgICAgICAgICBjb25zdCB2ID0gYWVbdV07XG4gICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGNvbnN0IFIgPSB2W1RlXSwgbSA9IHZbX2VdLCBOID0gb1tSXSwgWiA9IG9bbV07XG4gICAgICAgICAgICBpZiAoTikge1xuICAgICAgICAgICAgICBjb25zdCBMID0gTi5zbGljZSgpO1xuICAgICAgICAgICAgICBmb3IgKGxldCBXID0gMDsgVyA8IEwubGVuZ3RoOyBXKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxID0gTFtXXTtcbiAgICAgICAgICAgICAgICBsZXQgbWUgPSBxLm9yaWdpbmFsRGVsZWdhdGUgPyBxLm9yaWdpbmFsRGVsZWdhdGUgOiBxLmNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIHRoaXNbZl0uY2FsbCh0aGlzLCB1LCBtZSwgcS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFopIHtcbiAgICAgICAgICAgICAgY29uc3QgTCA9IFouc2xpY2UoKTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgVyA9IDA7IFcgPCBMLmxlbmd0aDsgVysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcSA9IExbV107XG4gICAgICAgICAgICAgICAgbGV0IG1lID0gcS5vcmlnaW5hbERlbGVnYXRlID8gcS5vcmlnaW5hbERlbGVnYXRlIDogcS5jYWxsYmFjaztcbiAgICAgICAgICAgICAgICB0aGlzW2ZdLmNhbGwodGhpcywgdSwgbWUsIHEub3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdiA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICAgIGZvciAobGV0IFIgPSAwOyBSIDwgdi5sZW5ndGg7IFIrKykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHZbUl0sIE4gPSBvdC5leGVjKG0pO1xuICAgICAgICAgICAgbGV0IFogPSBOICYmIE5bMV07XG4gICAgICAgICAgICBaICYmIFogIT09IFwicmVtb3ZlTGlzdGVuZXJcIiAmJiB0aGlzW1RdLmNhbGwodGhpcywgWik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNbVF0uY2FsbCh0aGlzLCBcInJlbW92ZUxpc3RlbmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgcGUoZ1tjXSwgUCksIHBlKGdbZl0sIGIpLCBvZSAmJiBwZShnW1RdLCBvZSksIEQgJiYgcGUoZ1twXSwgRCksIHRydWU7XG4gICAgfVxuICAgIGxldCBKID0gW107XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBhLmxlbmd0aDsgaysrKVxuICAgICAgSltrXSA9IHJlKGFba10sIGUpO1xuICAgIHJldHVybiBKO1xuICB9XG4gIGZ1bmN0aW9uIGN0KHQsIG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgIGNvbnN0IGYgPSBbXTtcbiAgICAgIGZvciAobGV0IHAgaW4gdCkge1xuICAgICAgICBjb25zdCBUID0gb3QuZXhlYyhwKTtcbiAgICAgICAgbGV0IHkgPSBUICYmIFRbMV07XG4gICAgICAgIGlmICh5ICYmICghbiB8fCB5ID09PSBuKSkge1xuICAgICAgICAgIGNvbnN0IHcgPSB0W3BdO1xuICAgICAgICAgIGlmICh3KVxuICAgICAgICAgICAgZm9yIChsZXQgXyA9IDA7IF8gPCB3Lmxlbmd0aDsgXysrKVxuICAgICAgICAgICAgICBmLnB1c2god1tfXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmO1xuICAgIH1cbiAgICBsZXQgYSA9IGFlW25dO1xuICAgIGEgfHwgKGl0KG4pLCBhID0gYWVbbl0pO1xuICAgIGNvbnN0IGUgPSB0W2FbVGVdXSwgYyA9IHRbYVtfZV1dO1xuICAgIHJldHVybiBlID8gYyA/IGUuY29uY2F0KGMpIDogZS5zbGljZSgpIDogYyA/IGMuc2xpY2UoKSA6IFtdO1xuICB9XG4gIGZ1bmN0aW9uIFJ0KHQsIG4pIHtcbiAgICBjb25zdCBhID0gdC5FdmVudDtcbiAgICBhICYmIGEucHJvdG90eXBlICYmIG4ucGF0Y2hNZXRob2QoYS5wcm90b3R5cGUsIFwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uXCIsIChlKSA9PiBmdW5jdGlvbihjLCBmKSB7XG4gICAgICBjW3N0XSA9IHRydWUsIGUgJiYgZS5hcHBseShjLCBmKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiB3dCh0LCBuKSB7XG4gICAgbi5wYXRjaE1ldGhvZCh0LCBcInF1ZXVlTWljcm90YXNrXCIsIChhKSA9PiBmdW5jdGlvbihlLCBjKSB7XG4gICAgICBab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soXCJxdWV1ZU1pY3JvdGFza1wiLCBjWzBdKTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBNZSA9IEgoXCJ6b25lVGFza1wiKTtcbiAgZnVuY3Rpb24gYmUodCwgbiwgYSwgZSkge1xuICAgIGxldCBjID0gbnVsbCwgZiA9IG51bGw7XG4gICAgbiArPSBlLCBhICs9IGU7XG4gICAgY29uc3QgcCA9IHt9O1xuICAgIGZ1bmN0aW9uIFQodykge1xuICAgICAgY29uc3QgXyA9IHcuZGF0YTtcbiAgICAgIF8uYXJnc1swXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdy5pbnZva2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBDID0gYy5hcHBseSh0LCBfLmFyZ3MpO1xuICAgICAgcmV0dXJuIG50KEMpID8gXy5oYW5kbGVJZCA9IEMgOiAoXy5oYW5kbGUgPSBDLCBfLmlzUmVmcmVzaGFibGUgPSB0dChDLnJlZnJlc2gpKSwgdztcbiAgICB9XG4gICAgZnVuY3Rpb24geSh3KSB7XG4gICAgICBjb25zdCB7IGhhbmRsZTogXywgaGFuZGxlSWQ6IEMgfSA9IHcuZGF0YTtcbiAgICAgIHJldHVybiBmLmNhbGwodCwgXyA/PyBDKTtcbiAgICB9XG4gICAgYyA9IEVlKHQsIG4sICh3KSA9PiBmdW5jdGlvbihfLCBDKSB7XG4gICAgICBpZiAodHQoQ1swXSkpIHtcbiAgICAgICAgY29uc3QgTSA9IHtcbiAgICAgICAgICBpc1JlZnJlc2hhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc1BlcmlvZGljOiBlID09PSBcIkludGVydmFsXCIsXG4gICAgICAgICAgZGVsYXk6IGUgPT09IFwiVGltZW91dFwiIHx8IGUgPT09IFwiSW50ZXJ2YWxcIiA/IENbMV0gfHwgMCA6IHZvaWQgMCxcbiAgICAgICAgICBhcmdzOiBDXG4gICAgICAgIH0sIEYgPSBDWzBdO1xuICAgICAgICBDWzBdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBGLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaGFuZGxlOiB4LCBoYW5kbGVJZDogViwgaXNQZXJpb2RpYzogSywgaXNSZWZyZXNoYWJsZTogVSB9ID0gTTtcbiAgICAgICAgICAgICFLICYmICFVICYmIChWID8gZGVsZXRlIHBbVl0gOiB4ICYmICh4W01lXSA9IG51bGwpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IFggPSBGZShuLCBDWzBdLCBNLCBULCB5KTtcbiAgICAgICAgaWYgKCFYKVxuICAgICAgICAgIHJldHVybiBYO1xuICAgICAgICBjb25zdCB7IGhhbmRsZUlkOiBuZSwgaGFuZGxlOiByZSwgaXNSZWZyZXNoYWJsZTogSiwgaXNQZXJpb2RpYzogayB9ID0gWC5kYXRhO1xuICAgICAgICBpZiAobmUpXG4gICAgICAgICAgcFtuZV0gPSBYO1xuICAgICAgICBlbHNlIGlmIChyZSAmJiAocmVbTWVdID0gWCwgSiAmJiAhaykpIHtcbiAgICAgICAgICBjb25zdCBkID0gcmUucmVmcmVzaDtcbiAgICAgICAgICByZS5yZWZyZXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB7IHpvbmU6IHgsIHN0YXRlOiBWIH0gPSBYO1xuICAgICAgICAgICAgcmV0dXJuIFYgPT09IFwibm90U2NoZWR1bGVkXCIgPyAoWC5fc3RhdGUgPSBcInNjaGVkdWxlZFwiLCB4Ll91cGRhdGVUYXNrQ291bnQoWCwgMSkpIDogViA9PT0gXCJydW5uaW5nXCIgJiYgKFguX3N0YXRlID0gXCJzY2hlZHVsaW5nXCIpLCBkLmNhbGwodGhpcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmUgPz8gbmUgPz8gWDtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gdy5hcHBseSh0LCBDKTtcbiAgICB9KSwgZiA9IEVlKHQsIGEsICh3KSA9PiBmdW5jdGlvbihfLCBDKSB7XG4gICAgICBjb25zdCBNID0gQ1swXTtcbiAgICAgIGxldCBGO1xuICAgICAgbnQoTSkgPyAoRiA9IHBbTV0sIGRlbGV0ZSBwW01dKSA6IChGID0gTT8uW01lXSwgRiA/IE1bTWVdID0gbnVsbCA6IEYgPSBNKSwgRj8udHlwZSA/IEYuY2FuY2VsRm4gJiYgRi56b25lLmNhbmNlbFRhc2soRikgOiB3LmFwcGx5KHQsIEMpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIER0KHQsIG4pIHtcbiAgICBjb25zdCB7IGlzQnJvd3NlcjogYSwgaXNNaXg6IGUgfSA9IG4uZ2V0R2xvYmFsT2JqZWN0cygpO1xuICAgIGlmICghYSAmJiAhZSB8fCAhdC5jdXN0b21FbGVtZW50cyB8fCAhKFwiY3VzdG9tRWxlbWVudHNcIiBpbiB0KSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjID0gW1xuICAgICAgXCJjb25uZWN0ZWRDYWxsYmFja1wiLFxuICAgICAgXCJkaXNjb25uZWN0ZWRDYWxsYmFja1wiLFxuICAgICAgXCJhZG9wdGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrXCIsXG4gICAgICBcImZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiZm9ybURpc2FibGVkQ2FsbGJhY2tcIixcbiAgICAgIFwiZm9ybVJlc2V0Q2FsbGJhY2tcIixcbiAgICAgIFwiZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrXCJcbiAgICBdO1xuICAgIG4ucGF0Y2hDYWxsYmFja3MobiwgdC5jdXN0b21FbGVtZW50cywgXCJjdXN0b21FbGVtZW50c1wiLCBcImRlZmluZVwiLCBjKTtcbiAgfVxuICBmdW5jdGlvbiBTdCh0LCBuKSB7XG4gICAgaWYgKFpvbmVbbi5zeW1ib2woXCJwYXRjaEV2ZW50VGFyZ2V0XCIpXSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB7IGV2ZW50TmFtZXM6IGEsIHpvbmVTeW1ib2xFdmVudE5hbWVzOiBlLCBUUlVFX1NUUjogYywgRkFMU0VfU1RSOiBmLCBaT05FX1NZTUJPTF9QUkVGSVg6IHAgfSA9IG4uZ2V0R2xvYmFsT2JqZWN0cygpO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgYS5sZW5ndGg7IHkrKykge1xuICAgICAgY29uc3QgdyA9IGFbeV0sIF8gPSB3ICsgZiwgQyA9IHcgKyBjLCBNID0gcCArIF8sIEYgPSBwICsgQztcbiAgICAgIGVbd10gPSB7fSwgZVt3XVtmXSA9IE0sIGVbd11bY10gPSBGO1xuICAgIH1cbiAgICBjb25zdCBUID0gdC5FdmVudFRhcmdldDtcbiAgICBpZiAoISghVCB8fCAhVC5wcm90b3R5cGUpKVxuICAgICAgcmV0dXJuIG4ucGF0Y2hFdmVudFRhcmdldCh0LCBuLCBbVCAmJiBULnByb3RvdHlwZV0pLCB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIE90KHQsIG4pIHtcbiAgICBuLnBhdGNoRXZlbnRQcm90b3R5cGUodCwgbik7XG4gIH1cbiAgZnVuY3Rpb24gYXQodCwgbiwgYSkge1xuICAgIGlmICghYSB8fCBhLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiBuO1xuICAgIGNvbnN0IGUgPSBhLmZpbHRlcigoZikgPT4gZi50YXJnZXQgPT09IHQpO1xuICAgIGlmIChlLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiBuO1xuICAgIGNvbnN0IGMgPSBlWzBdLmlnbm9yZVByb3BlcnRpZXM7XG4gICAgcmV0dXJuIG4uZmlsdGVyKChmKSA9PiBjLmluZGV4T2YoZikgPT09IC0xKTtcbiAgfVxuICBmdW5jdGlvbiBsdCh0LCBuLCBhLCBlKSB7XG4gICAgaWYgKCF0KVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGMgPSBhdCh0LCBuLCBhKTtcbiAgICBRZSh0LCBjLCBlKTtcbiAgfVxuICBmdW5jdGlvbiBCZSh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZpbHRlcigobikgPT4gbi5zdGFydHNXaXRoKFwib25cIikgJiYgbi5sZW5ndGggPiAyKS5tYXAoKG4pID0+IG4uc3Vic3RyaW5nKDIpKTtcbiAgfVxuICBmdW5jdGlvbiBOdCh0LCBuKSB7XG4gICAgaWYgKFplICYmICEkZSB8fCBab25lW3Quc3ltYm9sKFwicGF0Y2hFdmVudHNcIildKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGEgPSBuLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztcbiAgICBsZXQgZSA9IFtdO1xuICAgIGlmICh6ZSkge1xuICAgICAgY29uc3QgYyA9IHdpbmRvdztcbiAgICAgIGUgPSBlLmNvbmNhdChbXG4gICAgICAgIFwiRG9jdW1lbnRcIixcbiAgICAgICAgXCJTVkdFbGVtZW50XCIsXG4gICAgICAgIFwiRWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTEJvZHlFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTE1lZGlhRWxlbWVudFwiLFxuICAgICAgICBcIkhUTUxGcmFtZVNldEVsZW1lbnRcIixcbiAgICAgICAgXCJIVE1MRnJhbWVFbGVtZW50XCIsXG4gICAgICAgIFwiSFRNTElGcmFtZUVsZW1lbnRcIixcbiAgICAgICAgXCJIVE1MTWFycXVlZUVsZW1lbnRcIixcbiAgICAgICAgXCJXb3JrZXJcIlxuICAgICAgXSk7XG4gICAgICBjb25zdCBmID0gW107XG4gICAgICBsdChjLCBCZShjKSwgYSAmJiBhLmNvbmNhdChmKSwgaWUoYykpO1xuICAgIH1cbiAgICBlID0gZS5jb25jYXQoW1xuICAgICAgXCJYTUxIdHRwUmVxdWVzdFwiLFxuICAgICAgXCJYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0XCIsXG4gICAgICBcIklEQkluZGV4XCIsXG4gICAgICBcIklEQlJlcXVlc3RcIixcbiAgICAgIFwiSURCT3BlbkRCUmVxdWVzdFwiLFxuICAgICAgXCJJREJEYXRhYmFzZVwiLFxuICAgICAgXCJJREJUcmFuc2FjdGlvblwiLFxuICAgICAgXCJJREJDdXJzb3JcIixcbiAgICAgIFwiV2ViU29ja2V0XCJcbiAgICBdKTtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGUubGVuZ3RoOyBjKyspIHtcbiAgICAgIGNvbnN0IGYgPSBuW2VbY11dO1xuICAgICAgZj8ucHJvdG90eXBlICYmIGx0KGYucHJvdG90eXBlLCBCZShmLnByb3RvdHlwZSksIGEpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBadCh0KSB7XG4gICAgdC5fX2xvYWRfcGF0Y2goXCJsZWdhY3lcIiwgKG4pID0+IHtcbiAgICAgIGNvbnN0IGEgPSBuW3QuX19zeW1ib2xfXyhcImxlZ2FjeVBhdGNoXCIpXTtcbiAgICAgIGEgJiYgYSgpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcInRpbWVyc1wiLCAobikgPT4ge1xuICAgICAgY29uc3QgZSA9IFwiY2xlYXJcIjtcbiAgICAgIGJlKG4sIFwic2V0XCIsIGUsIFwiVGltZW91dFwiKSwgYmUobiwgXCJzZXRcIiwgZSwgXCJJbnRlcnZhbFwiKSwgYmUobiwgXCJzZXRcIiwgZSwgXCJJbW1lZGlhdGVcIik7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIsIChuKSA9PiB7XG4gICAgICBiZShuLCBcInJlcXVlc3RcIiwgXCJjYW5jZWxcIiwgXCJBbmltYXRpb25GcmFtZVwiKSwgYmUobiwgXCJtb3pSZXF1ZXN0XCIsIFwibW96Q2FuY2VsXCIsIFwiQW5pbWF0aW9uRnJhbWVcIiksIGJlKG4sIFwid2Via2l0UmVxdWVzdFwiLCBcIndlYmtpdENhbmNlbFwiLCBcIkFuaW1hdGlvbkZyYW1lXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcImJsb2NraW5nXCIsIChuLCBhKSA9PiB7XG4gICAgICBjb25zdCBlID0gW1wiYWxlcnRcIiwgXCJwcm9tcHRcIiwgXCJjb25maXJtXCJdO1xuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBlLmxlbmd0aDsgYysrKSB7XG4gICAgICAgIGNvbnN0IGYgPSBlW2NdO1xuICAgICAgICBFZShuLCBmLCAocCwgVCwgeSkgPT4gZnVuY3Rpb24odywgXykge1xuICAgICAgICAgIHJldHVybiBhLmN1cnJlbnQucnVuKHAsIG4sIF8sIHkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJFdmVudFRhcmdldFwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgT3QobiwgZSksIFN0KG4sIGUpO1xuICAgICAgY29uc3QgYyA9IG4uWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcbiAgICAgIGMgJiYgYy5wcm90b3R5cGUgJiYgZS5wYXRjaEV2ZW50VGFyZ2V0KG4sIGUsIFtjLnByb3RvdHlwZV0pO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIk11dGF0aW9uT2JzZXJ2ZXJcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIFNlKFwiTXV0YXRpb25PYnNlcnZlclwiKSwgU2UoXCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBTZShcIkludGVyc2VjdGlvbk9ic2VydmVyXCIpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIkZpbGVSZWFkZXJcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIFNlKFwiRmlsZVJlYWRlclwiKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJvbl9wcm9wZXJ0eVwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgTnQoZSwgbik7XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwiY3VzdG9tRWxlbWVudHNcIiwgKG4sIGEsIGUpID0+IHtcbiAgICAgIER0KG4sIGUpO1xuICAgIH0pLCB0Ll9fbG9hZF9wYXRjaChcIlhIUlwiLCAobiwgYSkgPT4ge1xuICAgICAgdyhuKTtcbiAgICAgIGNvbnN0IGUgPSBIKFwieGhyVGFza1wiKSwgYyA9IEgoXCJ4aHJTeW5jXCIpLCBmID0gSChcInhockxpc3RlbmVyXCIpLCBwID0gSChcInhoclNjaGVkdWxlZFwiKSwgVCA9IEgoXCJ4aHJVUkxcIiksIHkgPSBIKFwieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWRcIik7XG4gICAgICBmdW5jdGlvbiB3KF8pIHtcbiAgICAgICAgY29uc3QgQyA9IF8uWE1MSHR0cFJlcXVlc3Q7XG4gICAgICAgIGlmICghQylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IE0gPSBDLnByb3RvdHlwZTtcbiAgICAgICAgZnVuY3Rpb24gRihQKSB7XG4gICAgICAgICAgcmV0dXJuIFBbZV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IFggPSBNW2plXSwgbmUgPSBNW0hlXTtcbiAgICAgICAgaWYgKCFYKSB7XG4gICAgICAgICAgY29uc3QgUCA9IF8uWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcbiAgICAgICAgICBpZiAoUCkge1xuICAgICAgICAgICAgY29uc3QgYiA9IFAucHJvdG90eXBlO1xuICAgICAgICAgICAgWCA9IGJbamVdLCBuZSA9IGJbSGVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZSA9IFwicmVhZHlzdGF0ZWNoYW5nZVwiLCBKID0gXCJzY2hlZHVsZWRcIjtcbiAgICAgICAgZnVuY3Rpb24gayhQKSB7XG4gICAgICAgICAgY29uc3QgYiA9IFAuZGF0YSwgRCA9IGIudGFyZ2V0O1xuICAgICAgICAgIERbcF0gPSBmYWxzZSwgRFt5XSA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG9lID0gRFtmXTtcbiAgICAgICAgICBYIHx8IChYID0gRFtqZV0sIG5lID0gRFtIZV0pLCBvZSAmJiBuZS5jYWxsKEQsIHJlLCBvZSk7XG4gICAgICAgICAgY29uc3QgJCA9IERbZl0gPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoRC5yZWFkeVN0YXRlID09PSBELkRPTkUpXG4gICAgICAgICAgICAgIGlmICghYi5hYm9ydGVkICYmIERbcF0gJiYgUC5zdGF0ZSA9PT0gSikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBEW2EuX19zeW1ib2xfXyhcImxvYWRmYWxzZVwiKV07XG4gICAgICAgICAgICAgICAgaWYgKEQuc3RhdHVzICE9PSAwICYmIHMgJiYgcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpID0gUC5pbnZva2U7XG4gICAgICAgICAgICAgICAgICBQLmludm9rZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gRFthLl9fc3ltYm9sX18oXCJsb2FkZmFsc2VcIildO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBFID0gMDsgRSA8IHIubGVuZ3RoOyBFKyspXG4gICAgICAgICAgICAgICAgICAgICAgcltFXSA9PT0gUCAmJiByLnNwbGljZShFLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgIWIuYWJvcnRlZCAmJiBQLnN0YXRlID09PSBKICYmIGkuY2FsbChQKTtcbiAgICAgICAgICAgICAgICAgIH0sIHMucHVzaChQKTtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIFAuaW52b2tlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSAhYi5hYm9ydGVkICYmIERbcF0gPT09IGZhbHNlICYmIChEW3ldID0gdHJ1ZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gWC5jYWxsKEQsIHJlLCAkKSwgRFtlXSB8fCAoRFtlXSA9IFApLCBZLmFwcGx5KEQsIGIuYXJncyksIERbcF0gPSB0cnVlLCBQO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGQoKSB7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24geChQKSB7XG4gICAgICAgICAgY29uc3QgYiA9IFAuZGF0YTtcbiAgICAgICAgICByZXR1cm4gYi5hYm9ydGVkID0gdHJ1ZSwgTy5hcHBseShiLnRhcmdldCwgYi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBWID0gRWUoTSwgXCJvcGVuXCIsICgpID0+IGZ1bmN0aW9uKFAsIGIpIHtcbiAgICAgICAgICByZXR1cm4gUFtjXSA9IGJbMl0gPT0gZmFsc2UsIFBbVF0gPSBiWzFdLCBWLmFwcGx5KFAsIGIpO1xuICAgICAgICB9KSwgSyA9IFwiWE1MSHR0cFJlcXVlc3Quc2VuZFwiLCBVID0gSChcImZldGNoVGFza0Fib3J0aW5nXCIpLCBnID0gSChcImZldGNoVGFza1NjaGVkdWxpbmdcIiksIFkgPSBFZShNLCBcInNlbmRcIiwgKCkgPT4gZnVuY3Rpb24oUCwgYikge1xuICAgICAgICAgIGlmIChhLmN1cnJlbnRbZ10gPT09IHRydWUgfHwgUFtjXSlcbiAgICAgICAgICAgIHJldHVybiBZLmFwcGx5KFAsIGIpO1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IEQgPSB7XG4gICAgICAgICAgICAgIHRhcmdldDogUCxcbiAgICAgICAgICAgICAgdXJsOiBQW1RdLFxuICAgICAgICAgICAgICBpc1BlcmlvZGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXJnczogYixcbiAgICAgICAgICAgICAgYWJvcnRlZDogZmFsc2VcbiAgICAgICAgICAgIH0sIG9lID0gRmUoSywgZCwgRCwgaywgeCk7XG4gICAgICAgICAgICBQICYmIFBbeV0gPT09IHRydWUgJiYgIUQuYWJvcnRlZCAmJiBvZS5zdGF0ZSA9PT0gSiAmJiBvZS5pbnZva2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLCBPID0gRWUoTSwgXCJhYm9ydFwiLCAoKSA9PiBmdW5jdGlvbihQLCBiKSB7XG4gICAgICAgICAgY29uc3QgRCA9IEYoUCk7XG4gICAgICAgICAgaWYgKEQgJiYgdHlwZW9mIEQudHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoRC5jYW5jZWxGbiA9PSBudWxsIHx8IEQuZGF0YSAmJiBELmRhdGEuYWJvcnRlZClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgRC56b25lLmNhbmNlbFRhc2soRCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhLmN1cnJlbnRbVV0gPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gTy5hcHBseShQLCBiKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSksIHQuX19sb2FkX3BhdGNoKFwiZ2VvbG9jYXRpb25cIiwgKG4pID0+IHtcbiAgICAgIG4ubmF2aWdhdG9yICYmIG4ubmF2aWdhdG9yLmdlb2xvY2F0aW9uICYmIHl0KG4ubmF2aWdhdG9yLmdlb2xvY2F0aW9uLCBbXCJnZXRDdXJyZW50UG9zaXRpb25cIiwgXCJ3YXRjaFBvc2l0aW9uXCJdKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJQcm9taXNlUmVqZWN0aW9uRXZlbnRcIiwgKG4sIGEpID0+IHtcbiAgICAgIGZ1bmN0aW9uIGUoYykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZikge1xuICAgICAgICAgIGN0KG4sIGMpLmZvckVhY2goKFQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBuLlByb21pc2VSZWplY3Rpb25FdmVudDtcbiAgICAgICAgICAgIGlmICh5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHcgPSBuZXcgeShjLCB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZTogZi5wcm9taXNlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZi5yZWplY3Rpb25cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIFQuaW52b2tlKHcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbi5Qcm9taXNlUmVqZWN0aW9uRXZlbnQgJiYgKGFbSChcInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyXCIpXSA9IGUoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiksIGFbSChcInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyXCIpXSA9IGUoXCJyZWplY3Rpb25oYW5kbGVkXCIpKTtcbiAgICB9KSwgdC5fX2xvYWRfcGF0Y2goXCJxdWV1ZU1pY3JvdGFza1wiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgd3QobiwgZSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gTHQodCkge1xuICAgIHQuX19sb2FkX3BhdGNoKFwiWm9uZUF3YXJlUHJvbWlzZVwiLCAobiwgYSwgZSkgPT4ge1xuICAgICAgY29uc3QgYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIGYgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4gICAgICBmdW5jdGlvbiBwKGgpIHtcbiAgICAgICAgaWYgKGggJiYgaC50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuICAgICAgICAgIGNvbnN0IGwgPSBoLmNvbnN0cnVjdG9yICYmIGguY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICByZXR1cm4gKGwgfHwgXCJcIikgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaCA/IGgudG9TdHJpbmcoKSA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFQgPSBlLnN5bWJvbCwgeSA9IFtdLCB3ID0gbltUKFwiRElTQUJMRV9XUkFQUElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTlwiKV0gIT09IGZhbHNlLCBfID0gVChcIlByb21pc2VcIiksIEMgPSBUKFwidGhlblwiKSwgTSA9IFwiX19jcmVhdGlvblRyYWNlX19cIjtcbiAgICAgIGUub25VbmhhbmRsZWRFcnJvciA9IChoKSA9PiB7XG4gICAgICAgIGlmIChlLnNob3dVbmNhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBjb25zdCBsID0gaCAmJiBoLnJlamVjdGlvbjtcbiAgICAgICAgICBsID8gY29uc29sZS5lcnJvcihcIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjpcIiwgbCBpbnN0YW5jZW9mIEVycm9yID8gbC5tZXNzYWdlIDogbCwgXCI7IFpvbmU6XCIsIGguem9uZS5uYW1lLCBcIjsgVGFzazpcIiwgaC50YXNrICYmIGgudGFzay5zb3VyY2UsIFwiOyBWYWx1ZTpcIiwgbCwgbCBpbnN0YW5jZW9mIEVycm9yID8gbC5zdGFjayA6IHZvaWQgMCkgOiBjb25zb2xlLmVycm9yKGgpO1xuICAgICAgICB9XG4gICAgICB9LCBlLm1pY3JvdGFza0RyYWluRG9uZSA9ICgpID0+IHtcbiAgICAgICAgZm9yICg7IHkubGVuZ3RoOyApIHtcbiAgICAgICAgICBjb25zdCBoID0geS5zaGlmdCgpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoLnpvbmUucnVuR3VhcmRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IGgudGhyb3dPcmlnaW5hbCA/IGgucmVqZWN0aW9uIDogaDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIFgobCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgRiA9IFQoXCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlclwiKTtcbiAgICAgIGZ1bmN0aW9uIFgoaCkge1xuICAgICAgICBlLm9uVW5oYW5kbGVkRXJyb3IoaCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbCA9IGFbRl07XG4gICAgICAgICAgdHlwZW9mIGwgPT0gXCJmdW5jdGlvblwiICYmIGwuY2FsbCh0aGlzLCBoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5lKGgpIHtcbiAgICAgICAgcmV0dXJuIGggJiYgdHlwZW9mIGgudGhlbiA9PSBcImZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZShoKSB7XG4gICAgICAgIHJldHVybiBoO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSihoKSB7XG4gICAgICAgIHJldHVybiBBLnJlamVjdChoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGsgPSBUKFwic3RhdGVcIiksIGQgPSBUKFwidmFsdWVcIiksIHggPSBUKFwiZmluYWxseVwiKSwgViA9IFQoXCJwYXJlbnRQcm9taXNlVmFsdWVcIiksIEsgPSBUKFwicGFyZW50UHJvbWlzZVN0YXRlXCIpLCBVID0gXCJQcm9taXNlLnRoZW5cIiwgZyA9IG51bGwsIFkgPSB0cnVlLCBPID0gZmFsc2UsIFAgPSAwO1xuICAgICAgZnVuY3Rpb24gYihoLCBsKSB7XG4gICAgICAgIHJldHVybiAobykgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBJKGgsIGwsIG8pO1xuICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgIEkoaCwgZmFsc2UsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IEQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IGggPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBoIHx8IChoID0gdHJ1ZSwgby5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSwgb2UgPSBcIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGZcIiwgJCA9IFQoXCJjdXJyZW50VGFza1RyYWNlXCIpO1xuICAgICAgZnVuY3Rpb24gSShoLCBsLCBvKSB7XG4gICAgICAgIGNvbnN0IHUgPSBEKCk7XG4gICAgICAgIGlmIChoID09PSBvKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Iob2UpO1xuICAgICAgICBpZiAoaFtrXSA9PT0gZykge1xuICAgICAgICAgIGxldCB2ID0gbnVsbDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgKHR5cGVvZiBvID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiKSAmJiAodiA9IG8gJiYgby50aGVuKTtcbiAgICAgICAgICB9IGNhdGNoIChSKSB7XG4gICAgICAgICAgICByZXR1cm4gdSgoKSA9PiB7XG4gICAgICAgICAgICAgIEkoaCwgZmFsc2UsIFIpO1xuICAgICAgICAgICAgfSkoKSwgaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGwgIT09IE8gJiYgbyBpbnN0YW5jZW9mIEEgJiYgby5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvLmhhc093blByb3BlcnR5KGQpICYmIG9ba10gIT09IGcpXG4gICAgICAgICAgICBpKG8pLCBJKGgsIG9ba10sIG9bZF0pO1xuICAgICAgICAgIGVsc2UgaWYgKGwgIT09IE8gJiYgdHlwZW9mIHYgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdi5jYWxsKG8sIHUoYihoLCBsKSksIHUoYihoLCAhMSkpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKFIpIHtcbiAgICAgICAgICAgICAgdSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgSShoLCBmYWxzZSwgUik7XG4gICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoW2tdID0gbDtcbiAgICAgICAgICAgIGNvbnN0IFIgPSBoW2RdO1xuICAgICAgICAgICAgaWYgKGhbZF0gPSBvLCBoW3hdID09PSB4ICYmIGwgPT09IFkgJiYgKGhba10gPSBoW0tdLCBoW2RdID0gaFtWXSksIGwgPT09IE8gJiYgbyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG0gPSBhLmN1cnJlbnRUYXNrICYmIGEuY3VycmVudFRhc2suZGF0YSAmJiBhLmN1cnJlbnRUYXNrLmRhdGFbTV07XG4gICAgICAgICAgICAgIG0gJiYgZihvLCAkLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBSLmxlbmd0aDsgKVxuICAgICAgICAgICAgICByKGgsIFJbbSsrXSwgUlttKytdLCBSW20rK10sIFJbbSsrXSk7XG4gICAgICAgICAgICBpZiAoUi5sZW5ndGggPT0gMCAmJiBsID09IE8pIHtcbiAgICAgICAgICAgICAgaFtrXSA9IFA7XG4gICAgICAgICAgICAgIGxldCBtID0gbztcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6IFwiICsgcChvKSArIChvICYmIG8uc3RhY2sgPyBgXG5gICsgby5zdGFjayA6IFwiXCIpKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoTikge1xuICAgICAgICAgICAgICAgIG0gPSBOO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHcgJiYgKG0udGhyb3dPcmlnaW5hbCA9IHRydWUpLCBtLnJlamVjdGlvbiA9IG8sIG0ucHJvbWlzZSA9IGgsIG0uem9uZSA9IGEuY3VycmVudCwgbS50YXNrID0gYS5jdXJyZW50VGFzaywgeS5wdXNoKG0pLCBlLnNjaGVkdWxlTWljcm9UYXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoO1xuICAgICAgfVxuICAgICAgY29uc3QgcyA9IFQoXCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlclwiKTtcbiAgICAgIGZ1bmN0aW9uIGkoaCkge1xuICAgICAgICBpZiAoaFtrXSA9PT0gUCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBsID0gYVtzXTtcbiAgICAgICAgICAgIGwgJiYgdHlwZW9mIGwgPT0gXCJmdW5jdGlvblwiICYmIGwuY2FsbCh0aGlzLCB7IHJlamVjdGlvbjogaFtkXSwgcHJvbWlzZTogaCB9KTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB9XG4gICAgICAgICAgaFtrXSA9IE87XG4gICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCB5Lmxlbmd0aDsgbCsrKVxuICAgICAgICAgICAgaCA9PT0geVtsXS5wcm9taXNlICYmIHkuc3BsaWNlKGwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByKGgsIGwsIG8sIHUsIHYpIHtcbiAgICAgICAgaShoKTtcbiAgICAgICAgY29uc3QgUiA9IGhba10sIG0gPSBSID8gdHlwZW9mIHUgPT0gXCJmdW5jdGlvblwiID8gdSA6IHJlIDogdHlwZW9mIHYgPT0gXCJmdW5jdGlvblwiID8gdiA6IEo7XG4gICAgICAgIGwuc2NoZWR1bGVNaWNyb1Rhc2soVSwgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBOID0gaFtkXSwgWiA9ICEhbyAmJiB4ID09PSBvW3hdO1xuICAgICAgICAgICAgWiAmJiAob1tWXSA9IE4sIG9bS10gPSBSKTtcbiAgICAgICAgICAgIGNvbnN0IEwgPSBsLnJ1bihtLCB2b2lkIDAsIFogJiYgbSAhPT0gSiAmJiBtICE9PSByZSA/IFtdIDogW05dKTtcbiAgICAgICAgICAgIEkobywgITAsIEwpO1xuICAgICAgICAgIH0gY2F0Y2ggKE4pIHtcbiAgICAgICAgICAgIEkobywgZmFsc2UsIE4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgbyk7XG4gICAgICB9XG4gICAgICBjb25zdCBFID0gXCJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH1cIiwgRyA9IGZ1bmN0aW9uKCkge1xuICAgICAgfSwgY2UgPSBuLkFnZ3JlZ2F0ZUVycm9yO1xuICAgICAgY2xhc3MgQSB7XG4gICAgICAgIHN0YXRpYyB0b1N0cmluZygpIHtcbiAgICAgICAgICByZXR1cm4gRTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgcmVzb2x2ZShsKSB7XG4gICAgICAgICAgcmV0dXJuIGwgaW5zdGFuY2VvZiBBID8gbCA6IEkobmV3IHRoaXMobnVsbCksIFksIGwpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyByZWplY3QobCkge1xuICAgICAgICAgIHJldHVybiBJKG5ldyB0aGlzKG51bGwpLCBPLCBsKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgd2l0aFJlc29sdmVycygpIHtcbiAgICAgICAgICBjb25zdCBsID0ge307XG4gICAgICAgICAgcmV0dXJuIGwucHJvbWlzZSA9IG5ldyBBKChvLCB1KSA9PiB7XG4gICAgICAgICAgICBsLnJlc29sdmUgPSBvLCBsLnJlamVjdCA9IHU7XG4gICAgICAgICAgfSksIGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFueShsKSB7XG4gICAgICAgICAgaWYgKCFsIHx8IHR5cGVvZiBsW1N5bWJvbC5pdGVyYXRvcl0gIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjZShbXSwgXCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZFwiKSk7XG4gICAgICAgICAgY29uc3QgbyA9IFtdO1xuICAgICAgICAgIGxldCB1ID0gMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgbSBvZiBsKVxuICAgICAgICAgICAgICB1KyssIG8ucHVzaChBLnJlc29sdmUobSkpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjZShbXSwgXCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZFwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjZShbXSwgXCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZFwiKSk7XG4gICAgICAgICAgbGV0IHYgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBSID0gW107XG4gICAgICAgICAgcmV0dXJuIG5ldyBBKChtLCBOKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBaID0gMDsgWiA8IG8ubGVuZ3RoOyBaKyspXG4gICAgICAgICAgICAgIG9bWl0udGhlbigoTCkgPT4ge1xuICAgICAgICAgICAgICAgIHYgfHwgKHYgPSB0cnVlLCBtKEwpKTtcbiAgICAgICAgICAgICAgfSwgKEwpID0+IHtcbiAgICAgICAgICAgICAgICBSLnB1c2goTCksIHUtLSwgdSA9PT0gMCAmJiAodiA9IHRydWUsIE4obmV3IGNlKFIsIFwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWRcIikpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHJhY2UobCkge1xuICAgICAgICAgIGxldCBvLCB1LCB2ID0gbmV3IHRoaXMoKE4sIFopID0+IHtcbiAgICAgICAgICAgIG8gPSBOLCB1ID0gWjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmdW5jdGlvbiBSKE4pIHtcbiAgICAgICAgICAgIG8oTik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG0oTikge1xuICAgICAgICAgICAgdShOKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgTiBvZiBsKVxuICAgICAgICAgICAgbmUoTikgfHwgKE4gPSB0aGlzLnJlc29sdmUoTikpLCBOLnRoZW4oUiwgbSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFsbChsKSB7XG4gICAgICAgICAgcmV0dXJuIEEuYWxsV2l0aENhbGxiYWNrKGwpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhbGxTZXR0bGVkKGwpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMgJiYgdGhpcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBID8gdGhpcyA6IEEpLmFsbFdpdGhDYWxsYmFjayhsLCB7XG4gICAgICAgICAgICB0aGVuQ2FsbGJhY2s6ICh1KSA9PiAoeyBzdGF0dXM6IFwiZnVsZmlsbGVkXCIsIHZhbHVlOiB1IH0pLFxuICAgICAgICAgICAgZXJyb3JDYWxsYmFjazogKHUpID0+ICh7IHN0YXR1czogXCJyZWplY3RlZFwiLCByZWFzb246IHUgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYWxsV2l0aENhbGxiYWNrKGwsIG8pIHtcbiAgICAgICAgICBsZXQgdSwgdiwgUiA9IG5ldyB0aGlzKChMLCBXKSA9PiB7XG4gICAgICAgICAgICB1ID0gTCwgdiA9IFc7XG4gICAgICAgICAgfSksIG0gPSAyLCBOID0gMDtcbiAgICAgICAgICBjb25zdCBaID0gW107XG4gICAgICAgICAgZm9yIChsZXQgTCBvZiBsKSB7XG4gICAgICAgICAgICBuZShMKSB8fCAoTCA9IHRoaXMucmVzb2x2ZShMKSk7XG4gICAgICAgICAgICBjb25zdCBXID0gTjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEwudGhlbigocSkgPT4ge1xuICAgICAgICAgICAgICAgIFpbV10gPSBvID8gby50aGVuQ2FsbGJhY2socSkgOiBxLCBtLS0sIG0gPT09IDAgJiYgdShaKTtcbiAgICAgICAgICAgICAgfSwgKHEpID0+IHtcbiAgICAgICAgICAgICAgICBvID8gKFpbV10gPSBvLmVycm9yQ2FsbGJhY2socSksIG0tLSwgbSA9PT0gMCAmJiB1KFopKSA6IHYocSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAocSkge1xuICAgICAgICAgICAgICB2KHEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbSsrLCBOKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtIC09IDIsIG0gPT09IDAgJiYgdShaKSwgUjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihsKSB7XG4gICAgICAgICAgY29uc3QgbyA9IHRoaXM7XG4gICAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIEEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuXCIpO1xuICAgICAgICAgIG9ba10gPSBnLCBvW2RdID0gW107XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBEKCk7XG4gICAgICAgICAgICBsICYmIGwodShiKG8sIFkpKSwgdShiKG8sIE8pKSk7XG4gICAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgICAgSShvLCBmYWxzZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgICByZXR1cm4gXCJQcm9taXNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XG4gICAgICAgICAgcmV0dXJuIEE7XG4gICAgICAgIH1cbiAgICAgICAgdGhlbihsLCBvKSB7XG4gICAgICAgICAgbGV0IHUgPSB0aGlzLmNvbnN0cnVjdG9yPy5bU3ltYm9sLnNwZWNpZXNdO1xuICAgICAgICAgICghdSB8fCB0eXBlb2YgdSAhPSBcImZ1bmN0aW9uXCIpICYmICh1ID0gdGhpcy5jb25zdHJ1Y3RvciB8fCBBKTtcbiAgICAgICAgICBjb25zdCB2ID0gbmV3IHUoRyksIFIgPSBhLmN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXNba10gPT0gZyA/IHRoaXNbZF0ucHVzaChSLCB2LCBsLCBvKSA6IHIodGhpcywgUiwgdiwgbCwgbyksIHY7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gobCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgbCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseShsKSB7XG4gICAgICAgICAgbGV0IG8gPSB0aGlzLmNvbnN0cnVjdG9yPy5bU3ltYm9sLnNwZWNpZXNdO1xuICAgICAgICAgICghbyB8fCB0eXBlb2YgbyAhPSBcImZ1bmN0aW9uXCIpICYmIChvID0gQSk7XG4gICAgICAgICAgY29uc3QgdSA9IG5ldyBvKEcpO1xuICAgICAgICAgIHVbeF0gPSB4O1xuICAgICAgICAgIGNvbnN0IHYgPSBhLmN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXNba10gPT0gZyA/IHRoaXNbZF0ucHVzaCh2LCB1LCBsLCBsKSA6IHIodGhpcywgdiwgdSwgbCwgbCksIHU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucmVzb2x2ZSA9IEEucmVzb2x2ZSwgQS5yZWplY3QgPSBBLnJlamVjdCwgQS5yYWNlID0gQS5yYWNlLCBBLmFsbCA9IEEuYWxsO1xuICAgICAgY29uc3QgZ2UgPSBuW19dID0gbi5Qcm9taXNlO1xuICAgICAgbi5Qcm9taXNlID0gQTtcbiAgICAgIGNvbnN0IHllID0gVChcInRoZW5QYXRjaGVkXCIpO1xuICAgICAgZnVuY3Rpb24gc2UoaCkge1xuICAgICAgICBjb25zdCBsID0gaC5wcm90b3R5cGUsIG8gPSBjKGwsIFwidGhlblwiKTtcbiAgICAgICAgaWYgKG8gJiYgKG8ud3JpdGFibGUgPT09IGZhbHNlIHx8ICFvLmNvbmZpZ3VyYWJsZSkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB1ID0gbC50aGVuO1xuICAgICAgICBsW0NdID0gdSwgaC5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uKHYsIFIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEEoKE4sIFopID0+IHtcbiAgICAgICAgICAgIHUuY2FsbCh0aGlzLCBOLCBaKTtcbiAgICAgICAgICB9KS50aGVuKHYsIFIpO1xuICAgICAgICB9LCBoW3llXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBlLnBhdGNoVGhlbiA9IHNlO1xuICAgICAgZnVuY3Rpb24gQ2UoaCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obCwgbykge1xuICAgICAgICAgIGxldCB1ID0gaC5hcHBseShsLCBvKTtcbiAgICAgICAgICBpZiAodSBpbnN0YW5jZW9mIEEpXG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICBsZXQgdiA9IHUuY29uc3RydWN0b3I7XG4gICAgICAgICAgcmV0dXJuIHZbeWVdIHx8IHNlKHYpLCB1O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdlICYmIChzZShnZSksIEVlKG4sIFwiZmV0Y2hcIiwgKGgpID0+IENlKGgpKSksIFByb21pc2VbYS5fX3N5bWJvbF9fKFwidW5jYXVnaHRQcm9taXNlRXJyb3JzXCIpXSA9IHksIEE7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gTXQodCkge1xuICAgIHQuX19sb2FkX3BhdGNoKFwidG9TdHJpbmdcIiwgKG4pID0+IHtcbiAgICAgIGNvbnN0IGEgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsIGUgPSBIKFwiT3JpZ2luYWxEZWxlZ2F0ZVwiKSwgYyA9IEgoXCJQcm9taXNlXCIpLCBmID0gSChcIkVycm9yXCIpLCBwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBjb25zdCBfID0gdGhpc1tlXTtcbiAgICAgICAgICBpZiAoXylcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgXyA9PSBcImZ1bmN0aW9uXCIgPyBhLmNhbGwoXykgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXyk7XG4gICAgICAgICAgaWYgKHRoaXMgPT09IFByb21pc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IEMgPSBuW2NdO1xuICAgICAgICAgICAgaWYgKEMpXG4gICAgICAgICAgICAgIHJldHVybiBhLmNhbGwoQyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzID09PSBFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgQyA9IG5bZl07XG4gICAgICAgICAgICBpZiAoQylcbiAgICAgICAgICAgICAgcmV0dXJuIGEuY2FsbChDKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEuY2FsbCh0aGlzKTtcbiAgICAgIH07XG4gICAgICBwW2VdID0gYSwgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gcDtcbiAgICAgIGNvbnN0IFQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLCB5ID0gXCJbb2JqZWN0IFByb21pc2VdXCI7XG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUHJvbWlzZSA9PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIFByb21pc2UgPyB5IDogVC5jYWxsKHRoaXMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBJdCh0LCBuLCBhLCBlLCBjKSB7XG4gICAgY29uc3QgZiA9IFpvbmUuX19zeW1ib2xfXyhlKTtcbiAgICBpZiAobltmXSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBwID0gbltmXSA9IG5bZV07XG4gICAgbltlXSA9IGZ1bmN0aW9uKFQsIHksIHcpIHtcbiAgICAgIHJldHVybiB5ICYmIHkucHJvdG90eXBlICYmIGMuZm9yRWFjaChmdW5jdGlvbihfKSB7XG4gICAgICAgIGNvbnN0IEMgPSBgJHthfS4ke2V9OjpgICsgXywgTSA9IHkucHJvdG90eXBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChNLmhhc093blByb3BlcnR5KF8pKSB7XG4gICAgICAgICAgICBjb25zdCBGID0gdC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTSwgXyk7XG4gICAgICAgICAgICBGICYmIEYudmFsdWUgPyAoRi52YWx1ZSA9IHQud3JhcFdpdGhDdXJyZW50Wm9uZShGLnZhbHVlLCBDKSwgdC5fcmVkZWZpbmVQcm9wZXJ0eSh5LnByb3RvdHlwZSwgXywgRikpIDogTVtfXSAmJiAoTVtfXSA9IHQud3JhcFdpdGhDdXJyZW50Wm9uZShNW19dLCBDKSk7XG4gICAgICAgICAgfSBlbHNlIE1bX10gJiYgKE1bX10gPSB0LndyYXBXaXRoQ3VycmVudFpvbmUoTVtfXSwgQykpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgfVxuICAgICAgfSksIHAuY2FsbChuLCBULCB5LCB3KTtcbiAgICB9LCB0LmF0dGFjaE9yaWdpblRvUGF0Y2hlZChuW2VdLCBwKTtcbiAgfVxuICBmdW5jdGlvbiBBdCh0KSB7XG4gICAgdC5fX2xvYWRfcGF0Y2goXCJ1dGlsXCIsIChuLCBhLCBlKSA9PiB7XG4gICAgICBjb25zdCBjID0gQmUobik7XG4gICAgICBlLnBhdGNoT25Qcm9wZXJ0aWVzID0gUWUsIGUucGF0Y2hNZXRob2QgPSBFZSwgZS5iaW5kQXJndW1lbnRzID0gVmUsIGUucGF0Y2hNYWNyb1Rhc2sgPSB2dDtcbiAgICAgIGNvbnN0IGYgPSBhLl9fc3ltYm9sX18oXCJCTEFDS19MSVNURURfRVZFTlRTXCIpLCBwID0gYS5fX3N5bWJvbF9fKFwiVU5QQVRDSEVEX0VWRU5UU1wiKTtcbiAgICAgIG5bcF0gJiYgKG5bZl0gPSBuW3BdKSwgbltmXSAmJiAoYVtmXSA9IGFbcF0gPSBuW2ZdKSwgZS5wYXRjaEV2ZW50UHJvdG90eXBlID0gUnQsIGUucGF0Y2hFdmVudFRhcmdldCA9IFB0LCBlLmlzSUVPckVkZ2UgPSBidCwgZS5PYmplY3REZWZpbmVQcm9wZXJ0eSA9IHRlLCBlLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGVlLCBlLk9iamVjdENyZWF0ZSA9IGZlLCBlLkFycmF5U2xpY2UgPSBrZSwgZS5wYXRjaENsYXNzID0gU2UsIGUud3JhcFdpdGhDdXJyZW50Wm9uZSA9IHhlLCBlLmZpbHRlclByb3BlcnRpZXMgPSBhdCwgZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQgPSBwZSwgZS5fcmVkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgZS5wYXRjaENhbGxiYWNrcyA9IEl0LCBlLmdldEdsb2JhbE9iamVjdHMgPSAoKSA9PiAoe1xuICAgICAgICBnbG9iYWxTb3VyY2VzOiBydCxcbiAgICAgICAgem9uZVN5bWJvbEV2ZW50TmFtZXM6IGFlLFxuICAgICAgICBldmVudE5hbWVzOiBjLFxuICAgICAgICBpc0Jyb3dzZXI6IHplLFxuICAgICAgICBpc01peDogJGUsXG4gICAgICAgIGlzTm9kZTogWmUsXG4gICAgICAgIFRSVUVfU1RSOiBfZSxcbiAgICAgICAgRkFMU0VfU1RSOiBUZSxcbiAgICAgICAgWk9ORV9TWU1CT0xfUFJFRklYOiB3ZSxcbiAgICAgICAgQUREX0VWRU5UX0xJU1RFTkVSX1NUUjogdmUsXG4gICAgICAgIFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6IEFlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBqdCh0KSB7XG4gICAgTHQodCksIE10KHQpLCBBdCh0KTtcbiAgfVxuICBjb25zdCB1dCA9IHooKTtcbiAgcmV0dXJuIGp0KHV0KSwgWnQodXQpLCBwdDtcbn1cbkZ0KCk7XG5cbmV4cG9ydCB7IHp0IGFzIFpvbmVDb250ZXh0TWFuYWdlciB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsVUFBVTtBQUV4QixTQUFTQyxHQUFHQyxHQUFHO0FBQ2IsU0FBT0EsTUFBTSxXQUFXQSxJQUFJLENBQUMsSUFBSSxPQUFPQSxFQUFFLG9CQUFvQixjQUFjLE9BQU9BLEVBQUUsdUJBQXVCO0FBQzlHO0FBQ0EsSUFBSUMsS0FBSyxtQkFBbUJDO0FBQUE7QUFBQSxFQUUxQixXQUFXO0FBQ1QsYUFBU0YsSUFBSTtBQUNYLFdBQUssV0FBVyxJQUFPLEtBQUssZUFBZTtBQUFBLElBQzdDO0FBQ0EsV0FBT0EsRUFBRSxVQUFVLHlCQUF5QixTQUFTRyxHQUFHO0FBQ3RELGFBQU9BLEtBQUtBLEVBQUUsSUFBSUYsRUFBRSxLQUFLSDtBQUFBLElBQzNCLEdBQUdFLEVBQUUsVUFBVSxnQkFBZ0IsU0FBU0csR0FBR0MsR0FBRztBQUM1QyxVQUFJQyxJQUFJLE1BQU0sS0FBSyxXQUFXO0FBQzVCLGlCQUFTLEtBQUssTUFBTUMsS0FBSyxDQUFDLEdBQUdDLEtBQUssR0FBR0Es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QW9CLE9BQU8sZ0JBQWdCQSxFQUFFLGlCQUFpQnFHLElBQUlyRyxFQUFFLG1CQUFtQixPQUFPO0FBQUEsUUFDN2EsZUFBZTtBQUFBLFFBQ2Ysc0JBQXNCMEQ7QUFBQSxRQUN0QixZQUFZbkM7QUFBQSxRQUNaLFdBQVd1QjtBQUFBLFFBQ1gsT0FBT0M7QUFBQSxRQUNQLFFBQVFGO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixXQUFXYjtBQUFBLFFBQ1gsb0JBQW9CQztBQUFBLFFBQ3BCLHdCQUF3QnpDO0FBQUEsUUFDeEIsMkJBQTJCcUM7QUFBQSxNQUM3QjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDQSxXQUFTMEUsR0FBRzNHLEdBQUc7QUFDYixJQUFBcUcsR0FBR3JHLENBQUMsR0FBR3VHLEdBQUd2RyxDQUFDLEdBQUcwRyxHQUFHMUcsQ0FBQztBQUFBLEVBQ3BCO0FBQ0EsUUFBTSxLQUFLUixFQUFFO0FBQ2IsU0FBT21ILEdBQUcsRUFBRSxHQUFHVixHQUFHLEVBQUUsR0FBR3BHO0FBQ3pCO0FBQ0FFLEdBQUc7IiwKICAibmFtZXMiOiBbIlFpIiwgInh0IiwgImoiLCAiRXQiLCAienQiLCAiUyIsICJCIiwgInoiLCAiaWUiLCAiZmUiLCAia2UiLCAidmUiLCAicHQiLCAiZ3QiLCAiRnQiLCAidCIsICJJIiwgImEiLCAicyIsICJlIiwgImIiLCAiRCIsICJpIiwgIkUiLCAiUCIsICJmIiwgIkciLCAiY2UiLCAiQSIsICJKIiwgIlkiLCAiZyIsICJnZSIsICJ4IiwgImQiLCAieWUiLCAiSyIsICJrIiwgIkNlIiwgInAiLCAiVSIsICJWIiwgImMiLCAiVCIsICJDIiwgIk0iLCAiRiIsICIkIiwgIkFlIiwgImplIiwgIkhlIiwgIlRlIiwgIndlIiwgInhlIiwgIkZlIiwgIkgiLCAiTmUiLCAiRGUiLCAibXQiLCAiVmUiLCAieXQiLCAiWGUiLCAicGUiLCAiWWUiLCAiWmUiLCAiemUiLCAiJGUiLCAiTGUiLCAia3QiLCAiSmUiLCAiS2UiLCAiU2UiLCAiRWUiLCAidnQiLCAiR2UiLCAiYnQiLCAiQ3QiLCAiYWUiLCAiaXQiLCAiUHQiLCAidSIsICJ2IiwgIlIiLCAiaCIsICJOIiwgIloiLCAiTCIsICJtZSIsICJoZSIsICJQZSIsICJkZSIsICJVZSIsICJmdCIsICJIdCIsICJXZSIsICJodCIsICJSZSIsICJkdCIsICJJZSIsICJUdCIsICJPZSIsICJjdCIsICJSdCIsICJ3dCIsICJNZSIsICJiZSIsICJEdCIsICJTdCIsICJPdCIsICJhdCIsICJCZSIsICJOdCIsICJadCIsICJyIiwgInkiLCAidyIsICJMdCIsICJvIiwgIk10IiwgIl8iLCAiSXQiLCAiQXQiLCAianQiXQp9Cg==