@getopenpay/openpay-js-react 0.3.8-alpha.194eea9 → 0.3.9

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 (28) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource--dF8SUuJ-Dc9fQMmn.js → Resource-CJ4KZ4z3-CsufUK73.js} +3 -3
  3. package/dist/SimpleSpanProcessor-C7I0uVei-CCCIv2WQ.js +957 -0
  4. package/dist/detect-resources-BlvKzegu-D_EiUoH5.js +854 -0
  5. package/dist/diag-api-Bs9VFr7r-BlpGaXD1.js +6 -0
  6. package/dist/{index-IxpBtXsu-nwxvM_yk.js → index-BLsvoFAn-dEwYMk-U.js} +12 -12
  7. package/dist/{index-BcYRfjX5-B9cTBiMG.js → index-BWgCjKML-BYuqOFDy.js} +73 -73
  8. package/dist/{index-CEsYYLcp-Q6csoibw.js → index-D3GiAieN-C9dfFJE0.js} +5 -5
  9. package/dist/{index-CKzAqIcz-C4PjH48o.js → index-D8mCUVHz-BH2qiKcr.js} +8 -8
  10. package/dist/{index-DsDofAPV-B5Mj1vdu.js → index-DBuu_2wY-BIRog2Mp.js} +2 -2
  11. package/dist/index-DWpAquoJ-BwiIVs-E.js +431 -0
  12. package/dist/{index-CsaC-H6L-DJQ-GdFM.js → index-E79_uuNF-C466qmvx.js} +58 -58
  13. package/dist/index-TXNqRMu1.js +7453 -0
  14. package/dist/{index-5NV_TDDQ-DabIopSA.js → index-Y2-ZTBPX-UTok6bUG.js} +2 -2
  15. package/dist/{index-DwzLZzfW-V560zaw6.js → index-qUosrjsr-DhS4wLns.js} +27 -27
  16. package/dist/index.js +3 -3
  17. package/dist/{metrics-api-DQcGvAaq-B5m_vWqX.js → metrics-api-zu0dnBTL-BQnfo0ed.js} +10 -10
  18. package/dist/{sdk-info-C7UYJoSX-DvD2qmJD.js → sdk-info-DU-2di3y-JTC8mnZo.js} +2 -2
  19. package/dist/url-DIOkZJ-h-BWV5Vp1s.js +797 -0
  20. package/dist/{utils-DJvE0EZd-BUrw6VfJ.js → utils-DrBU4IDX-IFl3B8CY.js} +2 -2
  21. package/dist/{utils-Byi88tCg-D9NISnnM.js → utils-IKSKKiHC-FjxdDnHH.js} +14 -14
  22. package/package.json +1 -1
  23. package/dist/SimpleSpanProcessor-PDWzkQEC-DLb0X0Rr.js +0 -957
  24. package/dist/detect-resources-Ch7Vy_os-C4-9trM0.js +0 -854
  25. package/dist/diag-api-BiCutnqB-syr6_lhh.js +0 -6
  26. package/dist/index-CqoUiXBR.js +0 -7397
  27. package/dist/index-o-DbM8F_-CnbPyD7e.js +0 -431
  28. package/dist/url-C117Jy_6-BDXd1mVb.js +0 -797
@@ -1,431 +0,0 @@
1
- import { r as D } from "./diag-api-BiCutnqB-syr6_lhh.js";
2
- import { j as M, q as B, Z as W, z as X, y as v, a as Z, Q as $, x as G, p as C, S as I, O as Q } from "./url-C117Jy_6-BDXd1mVb.js";
3
- import { F as V, H as Y, Y as J } from "./utils-Byi88tCg-D9NISnnM.js";
4
- import { l as b } from "./utils-BGeftTvk-CchVJ54o.js";
5
- import { T as E, x as k, R as x, s as K, b as tt } from "./utils-DJvE0EZd-BUrw6VfJ.js";
6
- import { S as P, b as h, V as et } from "./index-CqoUiXBR.js";
7
- var g;
8
- (function(o) {
9
- o.COMPONENT = "component", o.HTTP_ERROR_NAME = "http.error_name", o.HTTP_STATUS_TEXT = "http.status_text";
10
- })(g || (g = {}));
11
- var nt = function(o, i, t, n) {
12
- function r(e) {
13
- return e instanceof t ? e : new t(function(s) {
14
- s(e);
15
- });
16
- }
17
- return new (t || (t = Promise))(function(e, s) {
18
- function a(l) {
19
- try {
20
- u(n.next(l));
21
- } catch (d) {
22
- s(d);
23
- }
24
- }
25
- function c(l) {
26
- try {
27
- u(n.throw(l));
28
- } catch (d) {
29
- s(d);
30
- }
31
- }
32
- function u(l) {
33
- l.done ? e(l.value) : r(l.value).then(a, c);
34
- }
35
- u((n = n.apply(o, [])).next());
36
- });
37
- }, rt = function(o, i) {
38
- var t = { label: 0, sent: function() {
39
- if (e[0] & 1) throw e[1];
40
- return e[1];
41
- }, trys: [], ops: [] }, n, r, e, s;
42
- return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
43
- return this;
44
- }), s;
45
- function a(u) {
46
- return function(l) {
47
- return c([u, l]);
48
- };
49
- }
50
- function c(u) {
51
- if (n) throw new TypeError("Generator is already executing.");
52
- for (; t; ) try {
53
- if (n = 1, r && (e = u[0] & 2 ? r.return : u[0] ? r.throw || ((e = r.return) && e.call(r), 0) : r.next) && !(e = e.call(r, u[1])).done) return e;
54
- switch (r = 0, e && (u = [u[0] & 2, e.value]), u[0]) {
55
- case 0:
56
- case 1:
57
- e = u;
58
- break;
59
- case 4:
60
- return t.label++, { value: u[1], done: !1 };
61
- case 5:
62
- t.label++, r = u[1], u = [0];
63
- continue;
64
- case 7:
65
- u = t.ops.pop(), t.trys.pop();
66
- continue;
67
- default:
68
- if (e = t.trys, !(e = e.length > 0 && e[e.length - 1]) && (u[0] === 6 || u[0] === 2)) {
69
- t = 0;
70
- continue;
71
- }
72
- if (u[0] === 3 && (!e || u[1] > e[0] && u[1] < e[3])) {
73
- t.label = u[1];
74
- break;
75
- }
76
- if (u[0] === 6 && t.label < e[1]) {
77
- t.label = e[1], e = u;
78
- break;
79
- }
80
- if (e && t.label < e[2]) {
81
- t.label = e[2], t.ops.push(u);
82
- break;
83
- }
84
- e[2] && t.ops.pop(), t.trys.pop();
85
- continue;
86
- }
87
- u = i.call(o, t);
88
- } catch (l) {
89
- u = [6, l], r = 0;
90
- } finally {
91
- n = e = 0;
92
- }
93
- if (u[0] & 5) throw u[1];
94
- return { value: u[0] ? u[1] : void 0, done: !0 };
95
- }
96
- }, ot = function(o) {
97
- var i = typeof Symbol == "function" && Symbol.iterator, t = i && o[i], n = 0;
98
- if (t) return t.call(o);
99
- if (o && typeof o.length == "number") return {
100
- next: function() {
101
- return o && n >= o.length && (o = void 0), { value: o && o[n++], done: !o };
102
- }
103
- };
104
- throw new TypeError(i ? "Object is not iterable." : "Symbol.iterator is not defined.");
105
- }, it = function(o, i) {
106
- var t = typeof Symbol == "function" && o[Symbol.iterator];
107
- if (!t) return o;
108
- var n = t.call(o), r, e = [], s;
109
- try {
110
- for (; (i === void 0 || i-- > 0) && !(r = n.next()).done; ) e.push(r.value);
111
- } catch (a) {
112
- s = { error: a };
113
- } finally {
114
- try {
115
- r && !r.done && (t = n.return) && t.call(n);
116
- } finally {
117
- if (s) throw s.error;
118
- }
119
- }
120
- return e;
121
- }, N = D.createComponentLogger({
122
- namespace: "@opentelemetry/opentelemetry-instrumentation-fetch/utils"
123
- });
124
- function st() {
125
- for (var o = [], i = 0; i < arguments.length; i++)
126
- o[i] = arguments[i];
127
- if (o[0] instanceof URL || typeof o[0] == "string") {
128
- var t = o[1];
129
- if (!(t != null && t.body))
130
- return Promise.resolve();
131
- if (t.body instanceof ReadableStream) {
132
- var n = at(t.body), r = n.body, e = n.length;
133
- return t.body = r, e;
134
- } else
135
- return Promise.resolve(ut(t.body));
136
- } else {
137
- var s = o[0];
138
- return s != null && s.body ? s.clone().text().then(function(a) {
139
- return S(a);
140
- }) : Promise.resolve();
141
- }
142
- }
143
- function at(o) {
144
- if (!o.pipeThrough)
145
- return N.warn("Platform has ReadableStream but not pipeThrough!"), {
146
- body: o,
147
- length: Promise.resolve(void 0)
148
- };
149
- var i = 0, t, n = new Promise(function(e) {
150
- t = e;
151
- }), r = new TransformStream({
152
- start: function() {
153
- },
154
- transform: function(e, s) {
155
- return nt(this, void 0, void 0, function() {
156
- var a;
157
- return rt(this, function(c) {
158
- switch (c.label) {
159
- case 0:
160
- return [4, e];
161
- case 1:
162
- return a = c.sent(), i += a.byteLength, s.enqueue(e), [
163
- 2
164
- /*return*/
165
- ];
166
- }
167
- });
168
- });
169
- },
170
- flush: function() {
171
- t(i);
172
- }
173
- });
174
- return {
175
- body: o.pipeThrough(r),
176
- length: n
177
- };
178
- }
179
- function ut(o) {
180
- if (typeof Document < "u" && o instanceof Document)
181
- return new XMLSerializer().serializeToString(document).length;
182
- if (o instanceof Blob)
183
- return o.size;
184
- if (o.byteLength !== void 0)
185
- return o.byteLength;
186
- if (o instanceof FormData)
187
- return ft(o);
188
- if (o instanceof URLSearchParams)
189
- return S(o.toString());
190
- if (typeof o == "string")
191
- return S(o);
192
- N.warn("unknown body type");
193
- }
194
- var ct = new TextEncoder();
195
- function S(o) {
196
- return ct.encode(o).byteLength;
197
- }
198
- function ft(o) {
199
- var i, t, n = 0;
200
- try {
201
- for (var r = ot(o.entries()), e = r.next(); !e.done; e = r.next()) {
202
- var s = it(e.value, 2), a = s[0], c = s[1];
203
- n += a.length, c instanceof Blob ? n += c.size : n += c.length;
204
- }
205
- } catch (u) {
206
- i = { error: u };
207
- } finally {
208
- try {
209
- e && !e.done && (t = r.return) && t.call(r);
210
- } finally {
211
- if (i) throw i.error;
212
- }
213
- }
214
- return n;
215
- }
216
- var O = "0.57.0", lt = /* @__PURE__ */ function() {
217
- var o = function(i, t) {
218
- return o = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, r) {
219
- n.__proto__ = r;
220
- } || function(n, r) {
221
- for (var e in r) Object.prototype.hasOwnProperty.call(r, e) && (n[e] = r[e]);
222
- }, o(i, t);
223
- };
224
- return function(i, t) {
225
- if (typeof t != "function" && t !== null)
226
- throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");
227
- o(i, t);
228
- function n() {
229
- this.constructor = i;
230
- }
231
- i.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());
232
- };
233
- }(), pt = function(o, i) {
234
- var t = typeof Symbol == "function" && o[Symbol.iterator];
235
- if (!t) return o;
236
- var n = t.call(o), r, e = [], s;
237
- try {
238
- for (; (i === void 0 || i-- > 0) && !(r = n.next()).done; ) e.push(r.value);
239
- } catch (a) {
240
- s = { error: a };
241
- } finally {
242
- try {
243
- r && !r.done && (t = n.return) && t.call(n);
244
- } finally {
245
- if (s) throw s.error;
246
- }
247
- }
248
- return e;
249
- }, ht = function(o, i, t) {
250
- if (arguments.length === 2) for (var n = 0, r = i.length, e; n < r; n++)
251
- (e || !(n in i)) && (e || (e = Array.prototype.slice.call(i, 0, n)), e[n] = i[n]);
252
- return o.concat(e || Array.prototype.slice.call(i));
253
- }, _, dt = 300, j = typeof process == "object" && ((_ = process.release) === null || _ === void 0 ? void 0 : _.name) === "node", St = (
254
- /** @class */
255
- function(o) {
256
- lt(i, o);
257
- function i(t) {
258
- t === void 0 && (t = {});
259
- var n = o.call(this, "@opentelemetry/instrumentation-fetch", O, t) || this;
260
- return n.component = "fetch", n.version = O, n.moduleName = n.component, n._usedResources = /* @__PURE__ */ new WeakSet(), n._tasksCount = 0, n;
261
- }
262
- return i.prototype.init = function() {
263
- }, i.prototype._addChildSpan = function(t, n) {
264
- var r = this.tracer.startSpan("CORS Preflight", {
265
- startTime: n[E.FETCH_START]
266
- }, P.setSpan(h.active(), t));
267
- k(r, n, this.getConfig().ignoreNetworkEvents), r.end(n[E.RESPONSE_END]);
268
- }, i.prototype._addFinalSpanAttributes = function(t, n) {
269
- var r = x(n.url);
270
- t.setAttribute(M, n.status), n.statusText != null && t.setAttribute(g.HTTP_STATUS_TEXT, n.statusText), t.setAttribute(B, r.host), t.setAttribute(W, r.protocol.replace(":", "")), typeof navigator < "u" && t.setAttribute(X, navigator.userAgent);
271
- }, i.prototype._addHeaders = function(t, n) {
272
- if (!K(n, this.getConfig().propagateTraceHeaderCorsUrls)) {
273
- var r = {};
274
- v.inject(h.active(), r), Object.keys(r).length > 0 && this._diag.debug("headers inject skipped due to CORS policy");
275
- return;
276
- }
277
- if (t instanceof Request)
278
- v.inject(h.active(), t.headers, {
279
- set: function(e, s, a) {
280
- return e.set(s, typeof a == "string" ? a : String(a));
281
- }
282
- });
283
- else if (t.headers instanceof Headers)
284
- v.inject(h.active(), t.headers, {
285
- set: function(e, s, a) {
286
- return e.set(s, typeof a == "string" ? a : String(a));
287
- }
288
- });
289
- else if (t.headers instanceof Map)
290
- v.inject(h.active(), t.headers, {
291
- set: function(e, s, a) {
292
- return e.set(s, typeof a == "string" ? a : String(a));
293
- }
294
- });
295
- else {
296
- var r = {};
297
- v.inject(h.active(), r), t.headers = Object.assign({}, r, t.headers || {});
298
- }
299
- }, i.prototype._clearResources = function() {
300
- this._tasksCount === 0 && this.getConfig().clearTimingResources && (performance.clearResourceTimings(), this._usedResources = /* @__PURE__ */ new WeakSet());
301
- }, i.prototype._createSpan = function(t, n) {
302
- var r;
303
- if (n === void 0 && (n = {}), Z(t, this.getConfig().ignoreUrls)) {
304
- this._diag.debug("ignoring span as url matches ignored url");
305
- return;
306
- }
307
- var e = (n.method || "GET").toUpperCase(), s = "HTTP " + e;
308
- return this.tracer.startSpan(s, {
309
- kind: et.CLIENT,
310
- attributes: (r = {}, r[g.COMPONENT] = this.moduleName, r[$] = e, r[G] = t, r)
311
- });
312
- }, i.prototype._findResourceAndAddNetworkEvents = function(t, n, r) {
313
- var e = n.entries;
314
- if (!e.length) {
315
- if (!performance.getEntriesByType)
316
- return;
317
- e = performance.getEntriesByType("resource");
318
- }
319
- var s = tt(n.spanUrl, n.startTime, r, e, this._usedResources, "fetch");
320
- if (s.mainRequest) {
321
- var a = s.mainRequest;
322
- this._markResourceAsUsed(a);
323
- var c = s.corsPreFlightRequest;
324
- c && (this._addChildSpan(t, c), this._markResourceAsUsed(c)), k(t, a, this.getConfig().ignoreNetworkEvents);
325
- }
326
- }, i.prototype._markResourceAsUsed = function(t) {
327
- this._usedResources.add(t);
328
- }, i.prototype._endSpan = function(t, n, r) {
329
- var e = this, s = Q(Date.now()), a = C();
330
- this._addFinalSpanAttributes(t, r), setTimeout(function() {
331
- var c;
332
- (c = n.observer) === null || c === void 0 || c.disconnect(), e._findResourceAndAddNetworkEvents(t, n, a), e._tasksCount--, e._clearResources(), t.end(s);
333
- }, dt);
334
- }, i.prototype._patchConstructor = function() {
335
- var t = this;
336
- return function(n) {
337
- var r = t;
338
- return function() {
339
- for (var e = [], s = 0; s < arguments.length; s++)
340
- e[s] = arguments[s];
341
- var a = this, c = x(e[0] instanceof Request ? e[0].url : String(e[0])).href, u = e[0] instanceof Request ? e[0] : e[1] || {}, l = r._createSpan(c, u);
342
- if (!l)
343
- return n.apply(this, e);
344
- var d = r._prepareSpanData(c);
345
- r.getConfig().measureRequestSize && st.apply(void 0, ht([], pt(e), !1)).then(function(f) {
346
- f && l.setAttribute(I, f);
347
- }).catch(function(f) {
348
- r._diag.warn("getFetchBodyLength", f);
349
- });
350
- function T(f, p) {
351
- r._applyAttributesAfterFetch(f, u, p), r._endSpan(f, d, {
352
- status: p.status || 0,
353
- statusText: p.message,
354
- url: c
355
- });
356
- }
357
- function w(f, p) {
358
- r._applyAttributesAfterFetch(f, u, p), p.status >= 200 && p.status < 400 ? r._endSpan(f, d, p) : r._endSpan(f, d, {
359
- status: p.status,
360
- statusText: p.statusText,
361
- url: c
362
- });
363
- }
364
- function U(f, p, y) {
365
- try {
366
- var H = y.clone(), q = y.clone(), A = H.body;
367
- if (A) {
368
- var L = A.getReader(), R = function() {
369
- L.read().then(function(m) {
370
- var z = m.done;
371
- z ? w(f, q) : R();
372
- }, function(m) {
373
- T(f, m);
374
- });
375
- };
376
- R();
377
- } else
378
- w(f, y);
379
- } finally {
380
- p(y);
381
- }
382
- }
383
- function F(f, p, y) {
384
- try {
385
- T(f, y);
386
- } finally {
387
- p(y);
388
- }
389
- }
390
- return new Promise(function(f, p) {
391
- return h.with(P.setSpan(h.active(), l), function() {
392
- return r._addHeaders(u, c), r._tasksCount++, n.apply(a, u instanceof Request ? [u] : [c, u]).then(U.bind(a, l, f), F.bind(a, l, p));
393
- });
394
- });
395
- };
396
- };
397
- }, i.prototype._applyAttributesAfterFetch = function(t, n, r) {
398
- var e = this, s = this.getConfig().applyCustomAttributesOnSpan;
399
- s && V(function() {
400
- return s(t, n, r);
401
- }, function(a) {
402
- a && e._diag.error("applyCustomAttributesOnSpan", a);
403
- }, !0);
404
- }, i.prototype._prepareSpanData = function(t) {
405
- var n = C(), r = [];
406
- if (typeof PerformanceObserver != "function")
407
- return { entries: r, startTime: n, spanUrl: t };
408
- var e = new PerformanceObserver(function(s) {
409
- var a = s.getEntries();
410
- a.forEach(function(c) {
411
- c.initiatorType === "fetch" && c.name === t && r.push(c);
412
- });
413
- });
414
- return e.observe({
415
- entryTypes: ["resource"]
416
- }), { entries: r, observer: e, startTime: n, spanUrl: t };
417
- }, i.prototype.enable = function() {
418
- if (j) {
419
- this._diag.warn("this instrumentation is intended for web usage only, it does not instrument Node.js's fetch()");
420
- return;
421
- }
422
- Y(fetch) && (this._unwrap(b, "fetch"), this._diag.debug("removing previous patch for constructor")), this._wrap(b, "fetch", this._patchConstructor());
423
- }, i.prototype.disable = function() {
424
- j || (this._unwrap(b, "fetch"), this._usedResources = /* @__PURE__ */ new WeakSet());
425
- }, i;
426
- }(J)
427
- );
428
- export {
429
- St as FetchInstrumentation
430
- };
431
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtby1EYk04Rl8tIX57MDA2fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHIgfSBmcm9tICcuL2RpYWctYXBpLUJpQ3V0bnFCLSF+ezAwN31+LmpzJztcbmltcG9ydCB7IGogYXMgakEsIHEgYXMgcUEsIFogYXMgWkEsIHogYXMgekEsIHkgYXMgeV8sIGEgYXMgWmUsIFEgYXMgUUEsIHggYXMgeEEsIHAgYXMgcF8sIFMgYXMgU3IsIE8gfSBmcm9tICcuL3VybC1DMTE3SnlfNi0hfnswMDh9fi5qcyc7XG5pbXBvcnQgeyBGLCBIIGFzIEgkMSwgWSB9IGZyb20gJy4vdXRpbHMtQnlpODh0Q2ctIX57MDA5fX4uanMnO1xuaW1wb3J0IHsgbCB9IGZyb20gJy4vdXRpbHMtQkdlZnRUdmstIX57MDBhfX4uanMnO1xuaW1wb3J0IHsgVCwgeCwgUiwgcywgYiBhcyBiJDEgfSBmcm9tICcuL3V0aWxzLURKdkUwRVpkLSF+ezAwNX1+LmpzJztcbmltcG9ydCB7IFMgYXMgU2UsIGIgYXMgYmUkMSwgViBhcyBWZSB9IGZyb20gJy4vaW5kZXgtIX57MDA0fX4uanMnO1xuXG52YXIgeTtcbihmdW5jdGlvbihhKSB7XG4gIGEuQ09NUE9ORU5UID0gXCJjb21wb25lbnRcIiwgYS5IVFRQX0VSUk9SX05BTUUgPSBcImh0dHAuZXJyb3JfbmFtZVwiLCBhLkhUVFBfU1RBVFVTX1RFWFQgPSBcImh0dHAuc3RhdHVzX3RleHRcIjtcbn0pKHkgfHwgKHkgPSB7fSkpO1xudmFyIG5lID0gZnVuY3Rpb24oYSwgbywgZSwgcikge1xuICBmdW5jdGlvbiBuKHQpIHtcbiAgICByZXR1cm4gdCBpbnN0YW5jZW9mIGUgPyB0IDogbmV3IGUoZnVuY3Rpb24oaSkge1xuICAgICAgaSh0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHQsIGkpIHtcbiAgICBmdW5jdGlvbiBzKGMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUoci5uZXh0KGMpKTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgaShoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZihjKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIudGhyb3coYykpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBpKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGMpIHtcbiAgICAgIGMuZG9uZSA/IHQoYy52YWx1ZSkgOiBuKGMudmFsdWUpLnRoZW4ocywgZik7XG4gICAgfVxuICAgIHUoKHIgPSByLmFwcGx5KGEsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59LCBhZSA9IGZ1bmN0aW9uKGEsIG8pIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAodFswXSAmIDEpIHRocm93IHRbMV07XG4gICAgcmV0dXJuIHRbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIHIsIG4sIHQsIGk7XG4gIHJldHVybiBpID0geyBuZXh0OiBzKDApLCB0aHJvdzogcygxKSwgcmV0dXJuOiBzKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGk7XG4gIGZ1bmN0aW9uIHModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gZihbdSwgY10pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZih1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBlOyApIHRyeSB7XG4gICAgICBpZiAociA9IDEsIG4gJiYgKHQgPSB1WzBdICYgMiA/IG4ucmV0dXJuIDogdVswXSA/IG4udGhyb3cgfHwgKCh0ID0gbi5yZXR1cm4pICYmIHQuY2FsbChuKSwgMCkgOiBuLm5leHQpICYmICEodCA9IHQuY2FsbChuLCB1WzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICBzd2l0Y2ggKG4gPSAwLCB0ICYmICh1ID0gW3VbMF0gJiAyLCB0LnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdCA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBuID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICh0ID0gZS50cnlzLCAhKHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCF0IHx8IHVbMV0gPiB0WzBdICYmIHVbMV0gPCB0WzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHRbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB0WzFdLCB0ID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodCAmJiBlLmxhYmVsIDwgdFsyXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHRbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdFsyXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IG8uY2FsbChhLCBlKTtcbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICB1ID0gWzYsIGNdLCBuID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgciA9IHQgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59LCBpZSA9IGZ1bmN0aW9uKGEpIHtcbiAgdmFyIG8gPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSBvICYmIGFbb10sIHIgPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbChhKTtcbiAgaWYgKGEgJiYgdHlwZW9mIGEubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gYSAmJiByID49IGEubGVuZ3RoICYmIChhID0gdm9pZCAwKSwgeyB2YWx1ZTogYSAmJiBhW3IrK10sIGRvbmU6ICFhIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKG8gPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBvZSA9IGZ1bmN0aW9uKGEsIG8pIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBhW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIGE7XG4gIHZhciByID0gZS5jYWxsKGEpLCBuLCB0ID0gW10sIGk7XG4gIHRyeSB7XG4gICAgZm9yICg7IChvID09PSB2b2lkIDAgfHwgby0tID4gMCkgJiYgIShuID0gci5uZXh0KCkpLmRvbmU7ICkgdC5wdXNoKG4udmFsdWUpO1xuICB9IGNhdGNoIChzKSB7XG4gICAgaSA9IHsgZXJyb3I6IHMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbiAmJiAhbi5kb25lICYmIChlID0gci5yZXR1cm4pICYmIGUuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB0O1xufSwgVSA9IHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgbmFtZXNwYWNlOiBcIkBvcGVudGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktaW5zdHJ1bWVudGF0aW9uLWZldGNoL3V0aWxzXCJcbn0pO1xuZnVuY3Rpb24gc2UoKSB7XG4gIGZvciAodmFyIGEgPSBbXSwgbyA9IDA7IG8gPCBhcmd1bWVudHMubGVuZ3RoOyBvKyspXG4gICAgYVtvXSA9IGFyZ3VtZW50c1tvXTtcbiAgaWYgKGFbMF0gaW5zdGFuY2VvZiBVUkwgfHwgdHlwZW9mIGFbMF0gPT0gXCJzdHJpbmdcIikge1xuICAgIHZhciBlID0gYVsxXTtcbiAgICBpZiAoIShlICE9IG51bGwgJiYgZS5ib2R5KSlcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZS5ib2R5IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgIHZhciByID0gdWUoZS5ib2R5KSwgbiA9IHIuYm9keSwgdCA9IHIubGVuZ3RoO1xuICAgICAgcmV0dXJuIGUuYm9keSA9IG4sIHQ7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZlKGUuYm9keSkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpID0gYVswXTtcbiAgICByZXR1cm4gaSAhPSBudWxsICYmIGkuYm9keSA/IGkuY2xvbmUoKS50ZXh0KCkudGhlbihmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gYihzKTtcbiAgICB9KSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG59XG5mdW5jdGlvbiB1ZShhKSB7XG4gIGlmICghYS5waXBlVGhyb3VnaClcbiAgICByZXR1cm4gVS53YXJuKFwiUGxhdGZvcm0gaGFzIFJlYWRhYmxlU3RyZWFtIGJ1dCBub3QgcGlwZVRocm91Z2ghXCIpLCB7XG4gICAgICBib2R5OiBhLFxuICAgICAgbGVuZ3RoOiBQcm9taXNlLnJlc29sdmUodm9pZCAwKVxuICAgIH07XG4gIHZhciBvID0gMCwgZSwgciA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpIHtcbiAgICBlID0gdDtcbiAgfSksIG4gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgfSxcbiAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uKHQsIGkpIHtcbiAgICAgIHJldHVybiBuZSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzO1xuICAgICAgICByZXR1cm4gYWUodGhpcywgZnVuY3Rpb24oZikge1xuICAgICAgICAgIHN3aXRjaCAoZi5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIHRdO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gcyA9IGYuc2VudCgpLCBvICs9IHMuYnl0ZUxlbmd0aCwgaS5lbnF1ZXVlKHQpLCBbXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIC8qcmV0dXJuKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBmbHVzaDogZnVuY3Rpb24oKSB7XG4gICAgICBlKG8pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgYm9keTogYS5waXBlVGhyb3VnaChuKSxcbiAgICBsZW5ndGg6IHJcbiAgfTtcbn1cbmZ1bmN0aW9uIGZlKGEpIHtcbiAgaWYgKHR5cGVvZiBEb2N1bWVudCA8IFwidVwiICYmIGEgaW5zdGFuY2VvZiBEb2N1bWVudClcbiAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudCkubGVuZ3RoO1xuICBpZiAoYSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgcmV0dXJuIGEuc2l6ZTtcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gdm9pZCAwKVxuICAgIHJldHVybiBhLmJ5dGVMZW5ndGg7XG4gIGlmIChhIGluc3RhbmNlb2YgRm9ybURhdGEpXG4gICAgcmV0dXJuIGxlKGEpO1xuICBpZiAoYSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcylcbiAgICByZXR1cm4gYihhLnRvU3RyaW5nKCkpO1xuICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gYihhKTtcbiAgVS53YXJuKFwidW5rbm93biBib2R5IHR5cGVcIik7XG59XG52YXIgY2UgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmZ1bmN0aW9uIGIoYSkge1xuICByZXR1cm4gY2UuZW5jb2RlKGEpLmJ5dGVMZW5ndGg7XG59XG5mdW5jdGlvbiBsZShhKSB7XG4gIHZhciBvLCBlLCByID0gMDtcbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBuID0gaWUoYS5lbnRyaWVzKCkpLCB0ID0gbi5uZXh0KCk7ICF0LmRvbmU7IHQgPSBuLm5leHQoKSkge1xuICAgICAgdmFyIGkgPSBvZSh0LnZhbHVlLCAyKSwgcyA9IGlbMF0sIGYgPSBpWzFdO1xuICAgICAgciArPSBzLmxlbmd0aCwgZiBpbnN0YW5jZW9mIEJsb2IgPyByICs9IGYuc2l6ZSA6IHIgKz0gZi5sZW5ndGg7XG4gICAgfVxuICB9IGNhdGNoICh1KSB7XG4gICAgbyA9IHsgZXJyb3I6IHUgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgdCAmJiAhdC5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKG8pIHRocm93IG8uZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxudmFyIGsgPSBcIjAuNTcuMFwiLCBkZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGEgPSBmdW5jdGlvbihvLCBlKSB7XG4gICAgcmV0dXJuIGEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihyLCBuKSB7XG4gICAgICByLl9fcHJvdG9fXyA9IG47XG4gICAgfSB8fCBmdW5jdGlvbihyLCBuKSB7XG4gICAgICBmb3IgKHZhciB0IGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCB0KSAmJiAoclt0XSA9IG5bdF0pO1xuICAgIH0sIGEobywgZSk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihvLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIGEobywgZSk7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBvO1xuICAgIH1cbiAgICBvLnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKHIucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyByKCkpO1xuICB9O1xufSgpLCBoZSA9IGZ1bmN0aW9uKGEsIG8pIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBhW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIGE7XG4gIHZhciByID0gZS5jYWxsKGEpLCBuLCB0ID0gW10sIGk7XG4gIHRyeSB7XG4gICAgZm9yICg7IChvID09PSB2b2lkIDAgfHwgby0tID4gMCkgJiYgIShuID0gci5uZXh0KCkpLmRvbmU7ICkgdC5wdXNoKG4udmFsdWUpO1xuICB9IGNhdGNoIChzKSB7XG4gICAgaSA9IHsgZXJyb3I6IHMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbiAmJiAhbi5kb25lICYmIChlID0gci5yZXR1cm4pICYmIGUuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB0O1xufSwgcGUgPSBmdW5jdGlvbihhLCBvLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciByID0gMCwgbiA9IG8ubGVuZ3RoLCB0OyByIDwgbjsgcisrKVxuICAgICh0IHx8ICEociBpbiBvKSkgJiYgKHQgfHwgKHQgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvLCAwLCByKSksIHRbcl0gPSBvW3JdKTtcbiAgcmV0dXJuIGEuY29uY2F0KHQgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobykpO1xufSwgUywgdmUgPSAzMDAsIEggPSB0eXBlb2YgcHJvY2VzcyA9PSBcIm9iamVjdFwiICYmICgoUyA9IHByb2Nlc3MucmVsZWFzZSkgPT09IG51bGwgfHwgUyA9PT0gdm9pZCAwID8gdm9pZCAwIDogUy5uYW1lKSA9PT0gXCJub2RlXCIsIGJlID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKGEpIHtcbiAgICBkZShvLCBhKTtcbiAgICBmdW5jdGlvbiBvKGUpIHtcbiAgICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHt9KTtcbiAgICAgIHZhciByID0gYS5jYWxsKHRoaXMsIFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZldGNoXCIsIGssIGUpIHx8IHRoaXM7XG4gICAgICByZXR1cm4gci5jb21wb25lbnQgPSBcImZldGNoXCIsIHIudmVyc2lvbiA9IGssIHIubW9kdWxlTmFtZSA9IHIuY29tcG9uZW50LCByLl91c2VkUmVzb3VyY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCksIHIuX3Rhc2tzQ291bnQgPSAwLCByO1xuICAgIH1cbiAgICByZXR1cm4gby5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgIH0sIG8ucHJvdG90eXBlLl9hZGRDaGlsZFNwYW4gPSBmdW5jdGlvbihlLCByKSB7XG4gICAgICB2YXIgbiA9IHRoaXMudHJhY2VyLnN0YXJ0U3BhbihcIkNPUlMgUHJlZmxpZ2h0XCIsIHtcbiAgICAgICAgc3RhcnRUaW1lOiByW1QuRkVUQ0hfU1RBUlRdXG4gICAgICB9LCBTZS5zZXRTcGFuKGJlJDEuYWN0aXZlKCksIGUpKTtcbiAgICAgIHgobiwgciwgdGhpcy5nZXRDb25maWcoKS5pZ25vcmVOZXR3b3JrRXZlbnRzKSwgbi5lbmQocltULlJFU1BPTlNFX0VORF0pO1xuICAgIH0sIG8ucHJvdG90eXBlLl9hZGRGaW5hbFNwYW5BdHRyaWJ1dGVzID0gZnVuY3Rpb24oZSwgcikge1xuICAgICAgdmFyIG4gPSBSKHIudXJsKTtcbiAgICAgIGUuc2V0QXR0cmlidXRlKGpBLCByLnN0YXR1cyksIHIuc3RhdHVzVGV4dCAhPSBudWxsICYmIGUuc2V0QXR0cmlidXRlKHkuSFRUUF9TVEFUVVNfVEVYVCwgci5zdGF0dXNUZXh0KSwgZS5zZXRBdHRyaWJ1dGUocUEsIG4uaG9zdCksIGUuc2V0QXR0cmlidXRlKFpBLCBuLnByb3RvY29sLnJlcGxhY2UoXCI6XCIsIFwiXCIpKSwgdHlwZW9mIG5hdmlnYXRvciA8IFwidVwiICYmIGUuc2V0QXR0cmlidXRlKHpBLCBuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICB9LCBvLnByb3RvdHlwZS5fYWRkSGVhZGVycyA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICAgIGlmICghcyhyLCB0aGlzLmdldENvbmZpZygpLnByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHMpKSB7XG4gICAgICAgIHZhciBuID0ge307XG4gICAgICAgIHlfLmluamVjdChiZSQxLmFjdGl2ZSgpLCBuKSwgT2JqZWN0LmtleXMobikubGVuZ3RoID4gMCAmJiB0aGlzLl9kaWFnLmRlYnVnKFwiaGVhZGVycyBpbmplY3Qgc2tpcHBlZCBkdWUgdG8gQ09SUyBwb2xpY3lcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmVxdWVzdClcbiAgICAgICAgeV8uaW5qZWN0KGJlJDEuYWN0aXZlKCksIGUuaGVhZGVycywge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24odCwgaSwgcykge1xuICAgICAgICAgICAgcmV0dXJuIHQuc2V0KGksIHR5cGVvZiBzID09IFwic3RyaW5nXCIgPyBzIDogU3RyaW5nKHMpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgZWxzZSBpZiAoZS5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycylcbiAgICAgICAgeV8uaW5qZWN0KGJlJDEuYWN0aXZlKCksIGUuaGVhZGVycywge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24odCwgaSwgcykge1xuICAgICAgICAgICAgcmV0dXJuIHQuc2V0KGksIHR5cGVvZiBzID09IFwic3RyaW5nXCIgPyBzIDogU3RyaW5nKHMpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgZWxzZSBpZiAoZS5oZWFkZXJzIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICB5Xy5pbmplY3QoYmUkMS5hY3RpdmUoKSwgZS5oZWFkZXJzLCB7XG4gICAgICAgICAgc2V0OiBmdW5jdGlvbih0LCBpLCBzKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5zZXQoaSwgdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiA/IHMgOiBTdHJpbmcocykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIG4gPSB7fTtcbiAgICAgICAgeV8uaW5qZWN0KGJlJDEuYWN0aXZlKCksIG4pLCBlLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBuLCBlLmhlYWRlcnMgfHwge30pO1xuICAgICAgfVxuICAgIH0sIG8ucHJvdG90eXBlLl9jbGVhclJlc291cmNlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fdGFza3NDb3VudCA9PT0gMCAmJiB0aGlzLmdldENvbmZpZygpLmNsZWFyVGltaW5nUmVzb3VyY2VzICYmIChwZXJmb3JtYW5jZS5jbGVhclJlc291cmNlVGltaW5ncygpLCB0aGlzLl91c2VkUmVzb3VyY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9jcmVhdGVTcGFuID0gZnVuY3Rpb24oZSwgcikge1xuICAgICAgdmFyIG47XG4gICAgICBpZiAociA9PT0gdm9pZCAwICYmIChyID0ge30pLCBaZShlLCB0aGlzLmdldENvbmZpZygpLmlnbm9yZVVybHMpKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoXCJpZ25vcmluZyBzcGFuIGFzIHVybCBtYXRjaGVzIGlnbm9yZWQgdXJsXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdCA9IChyLm1ldGhvZCB8fCBcIkdFVFwiKS50b1VwcGVyQ2FzZSgpLCBpID0gXCJIVFRQIFwiICsgdDtcbiAgICAgIHJldHVybiB0aGlzLnRyYWNlci5zdGFydFNwYW4oaSwge1xuICAgICAgICBraW5kOiBWZS5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IChuID0ge30sIG5beS5DT01QT05FTlRdID0gdGhpcy5tb2R1bGVOYW1lLCBuW1FBXSA9IHQsIG5beEFdID0gZSwgbilcbiAgICAgIH0pO1xuICAgIH0sIG8ucHJvdG90eXBlLl9maW5kUmVzb3VyY2VBbmRBZGROZXR3b3JrRXZlbnRzID0gZnVuY3Rpb24oZSwgciwgbikge1xuICAgICAgdmFyIHQgPSByLmVudHJpZXM7XG4gICAgICBpZiAoIXQubGVuZ3RoKSB7XG4gICAgICAgIGlmICghcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHQgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwicmVzb3VyY2VcIik7XG4gICAgICB9XG4gICAgICB2YXIgaSA9IGIkMShyLnNwYW5VcmwsIHIuc3RhcnRUaW1lLCBuLCB0LCB0aGlzLl91c2VkUmVzb3VyY2VzLCBcImZldGNoXCIpO1xuICAgICAgaWYgKGkubWFpblJlcXVlc3QpIHtcbiAgICAgICAgdmFyIHMgPSBpLm1haW5SZXF1ZXN0O1xuICAgICAgICB0aGlzLl9tYXJrUmVzb3VyY2VBc1VzZWQocyk7XG4gICAgICAgIHZhciBmID0gaS5jb3JzUHJlRmxpZ2h0UmVxdWVzdDtcbiAgICAgICAgZiAmJiAodGhpcy5fYWRkQ2hpbGRTcGFuKGUsIGYpLCB0aGlzLl9tYXJrUmVzb3VyY2VBc1VzZWQoZikpLCB4KGUsIHMsIHRoaXMuZ2V0Q29uZmlnKCkuaWdub3JlTmV0d29ya0V2ZW50cyk7XG4gICAgICB9XG4gICAgfSwgby5wcm90b3R5cGUuX21hcmtSZXNvdXJjZUFzVXNlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHRoaXMuX3VzZWRSZXNvdXJjZXMuYWRkKGUpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9lbmRTcGFuID0gZnVuY3Rpb24oZSwgciwgbikge1xuICAgICAgdmFyIHQgPSB0aGlzLCBpID0gTyhEYXRlLm5vdygpKSwgcyA9IHBfKCk7XG4gICAgICB0aGlzLl9hZGRGaW5hbFNwYW5BdHRyaWJ1dGVzKGUsIG4pLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZjtcbiAgICAgICAgKGYgPSByLm9ic2VydmVyKSA9PT0gbnVsbCB8fCBmID09PSB2b2lkIDAgfHwgZi5kaXNjb25uZWN0KCksIHQuX2ZpbmRSZXNvdXJjZUFuZEFkZE5ldHdvcmtFdmVudHMoZSwgciwgcyksIHQuX3Rhc2tzQ291bnQtLSwgdC5fY2xlYXJSZXNvdXJjZXMoKSwgZS5lbmQoaSk7XG4gICAgICB9LCB2ZSk7XG4gICAgfSwgby5wcm90b3R5cGUuX3BhdGNoQ29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gdGhpcztcbiAgICAgIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgICAgIHZhciBuID0gZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBpW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBmID0gdGhpcywgdSA9IFIoaVswXSBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpWzBdLnVybCA6IFN0cmluZyhpWzBdKSkuaHJlZiwgYyA9IGlbMF0gaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaVswXSA6IGlbMV0gfHwge30sIGggPSBuLl9jcmVhdGVTcGFuKHUsIGMpO1xuICAgICAgICAgIGlmICghaClcbiAgICAgICAgICAgIHJldHVybiByLmFwcGx5KHRoaXMsIGkpO1xuICAgICAgICAgIHZhciBtID0gbi5fcHJlcGFyZVNwYW5EYXRhKHUpO1xuICAgICAgICAgIG4uZ2V0Q29uZmlnKCkubWVhc3VyZVJlcXVlc3RTaXplICYmIHNlLmFwcGx5KHZvaWQgMCwgcGUoW10sIGhlKGkpLCAhMSkpLnRoZW4oZnVuY3Rpb24obCkge1xuICAgICAgICAgICAgbCAmJiBoLnNldEF0dHJpYnV0ZShTciwgbCk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgICAgbi5fZGlhZy53YXJuKFwiZ2V0RmV0Y2hCb2R5TGVuZ3RoXCIsIGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZ1bmN0aW9uIEUobCwgZCkge1xuICAgICAgICAgICAgbi5fYXBwbHlBdHRyaWJ1dGVzQWZ0ZXJGZXRjaChsLCBjLCBkKSwgbi5fZW5kU3BhbihsLCBtLCB7XG4gICAgICAgICAgICAgIHN0YXR1czogZC5zdGF0dXMgfHwgMCxcbiAgICAgICAgICAgICAgc3RhdHVzVGV4dDogZC5tZXNzYWdlLFxuICAgICAgICAgICAgICB1cmw6IHVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB3KGwsIGQpIHtcbiAgICAgICAgICAgIG4uX2FwcGx5QXR0cmlidXRlc0FmdGVyRmV0Y2gobCwgYywgZCksIGQuc3RhdHVzID49IDIwMCAmJiBkLnN0YXR1cyA8IDQwMCA/IG4uX2VuZFNwYW4obCwgbSwgZCkgOiBuLl9lbmRTcGFuKGwsIG0sIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBkLnN0YXR1cyxcbiAgICAgICAgICAgICAgc3RhdHVzVGV4dDogZC5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICB1cmw6IHVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBNKGwsIGQsIHYpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBqID0gdi5jbG9uZSgpLCBEID0gdi5jbG9uZSgpLCBSID0gai5ib2R5O1xuICAgICAgICAgICAgICBpZiAoUikge1xuICAgICAgICAgICAgICAgIHZhciBCID0gUi5nZXRSZWFkZXIoKSwgQSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgQi5yZWFkKCkudGhlbihmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBGID0gZy5kb25lO1xuICAgICAgICAgICAgICAgICAgICBGID8gdyhsLCBEKSA6IEEoKTtcbiAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGcpIHtcbiAgICAgICAgICAgICAgICAgICAgRShsLCBnKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgQSgpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICB3KGwsIHYpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTChsLCBkLCB2KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBFKGwsIHYpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBiZSQxLndpdGgoU2Uuc2V0U3BhbihiZSQxLmFjdGl2ZSgpLCBoKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuLl9hZGRIZWFkZXJzKGMsIHUpLCBuLl90YXNrc0NvdW50KyssIHIuYXBwbHkoZiwgYyBpbnN0YW5jZW9mIFJlcXVlc3QgPyBbY10gOiBbdSwgY10pLnRoZW4oTS5iaW5kKGYsIGgsIGwpLCBMLmJpbmQoZiwgaCwgZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0sIG8ucHJvdG90eXBlLl9hcHBseUF0dHJpYnV0ZXNBZnRlckZldGNoID0gZnVuY3Rpb24oZSwgciwgbikge1xuICAgICAgdmFyIHQgPSB0aGlzLCBpID0gdGhpcy5nZXRDb25maWcoKS5hcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW47XG4gICAgICBpICYmIEYoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpKGUsIHIsIG4pO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICBzICYmIHQuX2RpYWcuZXJyb3IoXCJhcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW5cIiwgcyk7XG4gICAgICB9LCAhMCk7XG4gICAgfSwgby5wcm90b3R5cGUuX3ByZXBhcmVTcGFuRGF0YSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciByID0gcF8oKSwgbiA9IFtdO1xuICAgICAgaWYgKHR5cGVvZiBQZXJmb3JtYW5jZU9ic2VydmVyICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogbiwgc3RhcnRUaW1lOiByLCBzcGFuVXJsOiBlIH07XG4gICAgICB2YXIgdCA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyIHMgPSBpLmdldEVudHJpZXMoKTtcbiAgICAgICAgcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICBmLmluaXRpYXRvclR5cGUgPT09IFwiZmV0Y2hcIiAmJiBmLm5hbWUgPT09IGUgJiYgbi5wdXNoKGYpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHQub2JzZXJ2ZSh7XG4gICAgICAgIGVudHJ5VHlwZXM6IFtcInJlc291cmNlXCJdXG4gICAgICB9KSwgeyBlbnRyaWVzOiBuLCBvYnNlcnZlcjogdCwgc3RhcnRUaW1lOiByLCBzcGFuVXJsOiBlIH07XG4gICAgfSwgby5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoSCkge1xuICAgICAgICB0aGlzLl9kaWFnLndhcm4oXCJ0aGlzIGluc3RydW1lbnRhdGlvbiBpcyBpbnRlbmRlZCBmb3Igd2ViIHVzYWdlIG9ubHksIGl0IGRvZXMgbm90IGluc3RydW1lbnQgTm9kZS5qcydzIGZldGNoKClcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEgkMShmZXRjaCkgJiYgKHRoaXMuX3Vud3JhcChsLCBcImZldGNoXCIpLCB0aGlzLl9kaWFnLmRlYnVnKFwicmVtb3ZpbmcgcHJldmlvdXMgcGF0Y2ggZm9yIGNvbnN0cnVjdG9yXCIpKSwgdGhpcy5fd3JhcChsLCBcImZldGNoXCIsIHRoaXMuX3BhdGNoQ29uc3RydWN0b3IoKSk7XG4gICAgfSwgby5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgSCB8fCAodGhpcy5fdW53cmFwKGwsIFwiZmV0Y2hcIiksIHRoaXMuX3VzZWRSZXNvdXJjZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG4gICAgfSwgbztcbiAgfShZKVxuKTtcblxuZXhwb3J0IHsgYmUgYXMgRmV0Y2hJbnN0cnVtZW50YXRpb24gfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUFBLFNBQVM7QUFDbEIsU0FBUyxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUFDLFNBQVM7QUFDNUcsU0FBUyxLQUFBQyxHQUFHLEtBQUtDLEdBQUssS0FBQUMsU0FBUztBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsU0FBUyxLQUFBQyxHQUFHLEtBQUFDLEdBQUcsS0FBQUMsR0FBRyxLQUFBQyxHQUFHLEtBQUtDLFVBQVc7QUFDckMsU0FBUyxLQUFLQyxHQUFJLEtBQUtDLEdBQU0sS0FBS0MsVUFBVTtBQUU1QyxJQUFJQztBQUFBLENBQ0gsU0FBU0MsR0FBRztBQUNYLEVBQUFBLEVBQUUsWUFBWSxhQUFhQSxFQUFFLGtCQUFrQixtQkFBbUJBLEVBQUUsbUJBQW1CO0FBQ3pGLEdBQUdELE1BQU1BLElBQUksQ0FBQyxFQUFFO0FBQ2hCLElBQUlFLEtBQUssU0FBU0QsR0FBR0UsR0FBR0MsR0FBRzVCLEdBQUc7QUFDNUIsV0FBUzZCLEVBQUVDLEdBQUc7QUFDWixXQUFPQSxhQUFhRixJQUFJRSxJQUFJLElBQUlGLEVBQUUsU0FBU0csR0FBRztBQUM1QyxNQUFBQSxFQUFFRCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sS0FBS0YsTUFBTUEsSUFBSSxVQUFVLFNBQVNFLEdBQUdDLEdBQUc7QUFDN0MsYUFBU1osRUFBRWEsR0FBRztBQUNaLFVBQUk7QUFDRixVQUFF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WSxDQUFDLFVBQVU7QUFBQSxNQUN6QixDQUFDLEdBQUcsRUFBRSxTQUFTRCxHQUFHLFVBQVVDLEdBQUcsV0FBVzlCLEdBQUcsU0FBUzRCLEVBQUU7QUFBQSxJQUMxRCxHQUFHRCxFQUFFLFVBQVUsU0FBUyxXQUFXO0FBQ2pDLFVBQUl3QixHQUFHO0FBQ0wsYUFBSyxNQUFNLEtBQUssK0ZBQStGO0FBQy9HO0FBQUEsTUFDRjtBQUNBLE1BQUF0QyxFQUFJLEtBQUssTUFBTSxLQUFLLFFBQVFFLEdBQUcsT0FBTyxHQUFHLEtBQUssTUFBTSxNQUFNLHlDQUF5QyxJQUFJLEtBQUssTUFBTUEsR0FBRyxTQUFTLEtBQUssa0JBQWtCLENBQUM7QUFBQSxJQUN4SixHQUFHWSxFQUFFLFVBQVUsVUFBVSxXQUFXO0FBQ2xDLE1BQUF3QixNQUFNLEtBQUssUUFBUXBDLEdBQUcsT0FBTyxHQUFHLEtBQUssaUJBQWlDLG9CQUFJLFFBQVE7QUFBQSxJQUNwRixHQUFHWTtBQUFBLEVBQ0wsRUFBRWIsQ0FBQztBQUFBOyIsCiAgIm5hbWVzIjogWyJyIiwgImpBIiwgInFBIiwgIlpBIiwgInpBIiwgInlfIiwgIlplIiwgIlFBIiwgInhBIiwgInBfIiwgIlNyIiwgIk8iLCAiRiIsICJIJDEiLCAiWSIsICJsIiwgIlQiLCAieCIsICJSIiwgInMiLCAiYiQxIiwgIlNlIiwgImJlJDEiLCAiVmUiLCAieSIsICJhIiwgIm5lIiwgIm8iLCAiZSIsICJuIiwgInQiLCAiaSIsICJjIiwgImgiLCAiZiIsICJhZSIsICJpZSIsICJvZSIsICJVIiwgInNlIiwgInVlIiwgImZlIiwgImIiLCAibGUiLCAiY2UiLCAiayIsICJkZSIsICJoZSIsICJwZSIsICJTIiwgInZlIiwgIkgiLCAiYmUiLCAidSIsICJtIiwgIkUiLCAiZCIsICJNIiwgInYiLCAiaiIsICJEIiwgIkIiLCAiQSIsICJnIiwgIkwiXQp9Cg==