@getopenpay/openpay-js-react 0.5.14 → 0.5.15

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 (49) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{ExportResult-B-YLKMaU-DKI4wi_s.js → ExportResult-BacsqwKA-wgTHEn_9.js} +1 -1
  3. package/dist/Resource-C_JyOUi0-DCzIGxs8.js +176 -0
  4. package/dist/SimpleSpanProcessor-DsaymkqA-CtD-GEtk.js +910 -0
  5. package/dist/_commonjsHelpers-CdLE1o9f-ChUIkuR8.js +30 -0
  6. package/dist/detect-resources-WIF4Hgfd-BW23wWaP.js +862 -0
  7. package/dist/diag-api-DbLQG6Cy-7Q64bfX9.js +6 -0
  8. package/dist/index-0_SuCli2-B5_tBBpx.js +430 -0
  9. package/dist/index-3-QFb-PY-DJRVxNSq.js +127 -0
  10. package/dist/index-B2hBQXxN-CgWoAORq.js +6 -0
  11. package/dist/index-BJ3-FtuX-DlTusXVc.js +28 -0
  12. package/dist/index-CDEhufnp-CDtO0j1l.js +18 -0
  13. package/dist/index-CV8wT6Y2-Bh-lYVds.js +6718 -0
  14. package/dist/index-DIoaqP4_-Cs74t_lP.js +1012 -0
  15. package/dist/index-DJhVQsLX-BiIZL-r4.js +147 -0
  16. package/dist/index-Din5I5pT-Be1fPmsi.js +1613 -0
  17. package/dist/index-nPWqtn7T.js +9357 -0
  18. package/dist/index.d.ts +24 -0
  19. package/dist/index.js +8 -8
  20. package/dist/lifecycle-D1BdEbZs-BvuQx__u.js +119 -0
  21. package/dist/{metrics-api-kGWvPyP1-D3Nmj2Ml.js → metrics-api-B_K2nQRV-Be59r2AI.js} +13 -13
  22. package/dist/sdk-info-ChuKu8zW-BkU0NT3O.js +285 -0
  23. package/dist/suppress-tracing-i166ZvAf-D2QqEK4Q.js +17 -0
  24. package/dist/url-D2-xNTDs-BLiqCwPG.js +798 -0
  25. package/dist/utils-BFjwGsZE-dHVj8huE.js +101 -0
  26. package/dist/utils-Blz-BInC-461m4Gx4.js +270 -0
  27. package/dist/utils-De78ey-v-ChjePi4C.js +12 -0
  28. package/package.json +5 -5
  29. package/dist/Resource-CWcxyqCu-BpY8XBEt.js +0 -176
  30. package/dist/SimpleSpanProcessor-C1qhGgiR-BsuHTDv6.js +0 -957
  31. package/dist/_commonjsHelpers-f76XedMs-N1iNS-iQ.js +0 -25
  32. package/dist/detect-resources-Dn5v7ndj-Cjz2K7Ne.js +0 -854
  33. package/dist/diag-api-CsQOTGkN-xb6cqTYK.js +0 -6
  34. package/dist/index-B0WqhX79-DcfF1_Rw.js +0 -6685
  35. package/dist/index-BBW4S5yj-CLc9aNqW.js +0 -150
  36. package/dist/index-BikTboCM-CuVpQZbQ.js +0 -1593
  37. package/dist/index-CTgGlkZ9-_jFlsPe_.js +0 -431
  38. package/dist/index-CWofBZiq-C1KAGcbi.js +0 -52
  39. package/dist/index-Cc1XQnJP-Cj99cshF.js +0 -130
  40. package/dist/index-CyljyZDC-CHsQ1lEf.js +0 -330
  41. package/dist/index-D-CzF5e8-BeCsZ_lY.js +0 -19
  42. package/dist/index-DXlPRASH.js +0 -9420
  43. package/dist/index-Dj77MBTj-Zoe1kwBN.js +0 -830
  44. package/dist/lifecycle-BjQ-7GLm-BmSFW2aE.js +0 -119
  45. package/dist/sdk-info-DDU3_0Kq-B_Ptfv97.js +0 -484
  46. package/dist/url-4OFtf8y3-Cudf4p-r.js +0 -797
  47. package/dist/utils-B8mlyr-p-D5QT4FOw.js +0 -142
  48. package/dist/utils-CX5YT7yI-BbTNmH0Z.js +0 -14
  49. package/dist/utils-DvAb8FQJ-4qBn4nnT.js +0 -381
@@ -1,957 +0,0 @@
1
- import { G as _, k as nt, X as b, h as ot, O as E, d as it, l as st, a as at } from "./index-DXlPRASH.js";
2
- import { r as l } from "./diag-api-CsQOTGkN-xb6cqTYK.js";
3
- import { dC as j, dD as ut, dE as M, p as pt, O as A, dF as ct, dG as lt, cy as N, cw as D, y as ht, dH as V, dI as dt, cx as ft } from "./url-4OFtf8y3-Cudf4p-r.js";
4
- import { Z as _t, a as R, n as f, w as mt, p as H, b as vt, c as yt, J as St, W as gt, s as Et, k as Tt, d as J, t as bt } from "./index-Dj77MBTj-Zoe1kwBN.js";
5
- import { bm as v, O as P, bn as Lt, bo as Pt, bp as wt } from "./sdk-info-DDU3_0Kq-B_Ptfv97.js";
6
- import { R as Q } from "./Resource-CWcxyqCu-BpY8XBEt.js";
7
- import { a as w } from "./ExportResult-B-YLKMaU-DKI4wi_s.js";
8
- var xt = "exception", U = function() {
9
- return U = Object.assign || function(e) {
10
- for (var t, r = 1, n = arguments.length; r < n; r++) {
11
- t = arguments[r];
12
- for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
13
- }
14
- return e;
15
- }, U.apply(this, arguments);
16
- }, At = function(e) {
17
- var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
18
- if (r) return r.call(e);
19
- if (e && typeof e.length == "number") return {
20
- next: function() {
21
- return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
22
- }
23
- };
24
- throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
25
- }, X = function(e, t) {
26
- var r = typeof Symbol == "function" && e[Symbol.iterator];
27
- if (!r) return e;
28
- var n = r.call(e), i, o = [], s;
29
- try {
30
- for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
31
- } catch (a) {
32
- s = { error: a };
33
- } finally {
34
- try {
35
- i && !i.done && (r = n.return) && r.call(n);
36
- } finally {
37
- if (s) throw s.error;
38
- }
39
- }
40
- return o;
41
- }, Ot = function(e, t, r) {
42
- if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
43
- (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
44
- return e.concat(o || Array.prototype.slice.call(t));
45
- }, Ct = (
46
- /** @class */
47
- function() {
48
- function e(t, r, n, i, o, s, a, p, u, c) {
49
- a === void 0 && (a = []), this.attributes = {}, this.links = [], this.events = [], this._droppedAttributesCount = 0, this._droppedEventsCount = 0, this._droppedLinksCount = 0, this.status = {
50
- code: at.UNSET
51
- }, this.endTime = [0, 0], this._ended = !1, this._duration = [-1, -1], this.name = n, this._spanContext = i, this.parentSpanId = s, this.kind = o, this.links = a;
52
- var h = Date.now();
53
- this._performanceStartTime = M.now(), this._performanceOffset = h - (this._performanceStartTime + dt()), this._startTimeProvided = p != null, this.startTime = this._getTime(p ?? h), this.resource = t.resource, this.instrumentationLibrary = t.instrumentationLibrary, this._spanLimits = t.getSpanLimits(), this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0, c != null && this.setAttributes(c), this._spanProcessor = t.getActiveSpanProcessor(), this._spanProcessor.onStart(this, r);
54
- }
55
- return e.prototype.spanContext = function() {
56
- return this._spanContext;
57
- }, e.prototype.setAttribute = function(t, r) {
58
- return r == null || this._isSpanEnded() ? this : t.length === 0 ? (l.warn("Invalid attribute key: " + t), this) : _t(r) ? Object.keys(this.attributes).length >= this._spanLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, t) ? (this._droppedAttributesCount++, this) : (this.attributes[t] = this._truncateToSize(r), this) : (l.warn("Invalid attribute value set for key: " + t), this);
59
- }, e.prototype.setAttributes = function(t) {
60
- var r, n;
61
- try {
62
- for (var i = At(Object.entries(t)), o = i.next(); !o.done; o = i.next()) {
63
- var s = X(o.value, 2), a = s[0], p = s[1];
64
- this.setAttribute(a, p);
65
- }
66
- } catch (u) {
67
- r = { error: u };
68
- } finally {
69
- try {
70
- o && !o.done && (n = i.return) && n.call(i);
71
- } finally {
72
- if (r) throw r.error;
73
- }
74
- }
75
- return this;
76
- }, e.prototype.addEvent = function(t, r, n) {
77
- if (this._isSpanEnded())
78
- return this;
79
- if (this._spanLimits.eventCountLimit === 0)
80
- return l.warn("No events allowed."), this._droppedEventsCount++, this;
81
- this.events.length >= this._spanLimits.eventCountLimit && (this._droppedEventsCount === 0 && l.debug("Dropping extra events."), this.events.shift(), this._droppedEventsCount++), j(r) && (j(n) || (n = r), r = void 0);
82
- var i = R(r);
83
- return this.events.push({
84
- name: t,
85
- attributes: i,
86
- time: this._getTime(n),
87
- droppedAttributesCount: 0
88
- }), this;
89
- }, e.prototype.addLink = function(t) {
90
- return this.links.push(t), this;
91
- }, e.prototype.addLinks = function(t) {
92
- var r;
93
- return (r = this.links).push.apply(r, Ot([], X(t), !1)), this;
94
- }, e.prototype.setStatus = function(t) {
95
- return this._isSpanEnded() ? this : (this.status = U({}, t), this.status.message != null && typeof t.message != "string" && (l.warn("Dropping invalid status.message of type '" + typeof t.message + "', expected 'string'"), delete this.status.message), this);
96
- }, e.prototype.updateName = function(t) {
97
- return this._isSpanEnded() ? this : (this.name = t, this);
98
- }, e.prototype.end = function(t) {
99
- if (this._isSpanEnded()) {
100
- l.error(this.name + " " + this._spanContext.traceId + "-" + this._spanContext.spanId + " - You can only call end() on a span once.");
101
- return;
102
- }
103
- this._ended = !0, this.endTime = this._getTime(t), this._duration = ut(this.startTime, this.endTime), this._duration[0] < 0 && (l.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.", this.startTime, this.endTime), this.endTime = this.startTime.slice(), this._duration = [0, 0]), this._droppedEventsCount > 0 && l.warn("Dropped " + this._droppedEventsCount + " events because eventCountLimit reached"), this._spanProcessor.onEnd(this);
104
- }, e.prototype._getTime = function(t) {
105
- if (typeof t == "number" && t <= M.now())
106
- return pt(t + this._performanceOffset);
107
- if (typeof t == "number")
108
- return A(t);
109
- if (t instanceof Date)
110
- return A(t.getTime());
111
- if (ct(t))
112
- return t;
113
- if (this._startTimeProvided)
114
- return A(Date.now());
115
- var r = M.now() - this._performanceStartTime;
116
- return lt(this.startTime, A(r));
117
- }, e.prototype.isRecording = function() {
118
- return this._ended === !1;
119
- }, e.prototype.recordException = function(t, r) {
120
- var n = {};
121
- typeof t == "string" ? n[D] = t : t && (t.code ? n[N] = t.code.toString() : t.name && (n[N] = t.name), t.message && (n[D] = t.message), t.stack && (n[ft] = t.stack)), n[N] || n[D] ? this.addEvent(xt, n, r) : l.warn("Failed to record an exception " + t);
122
- }, Object.defineProperty(e.prototype, "duration", {
123
- get: function() {
124
- return this._duration;
125
- },
126
- enumerable: !1,
127
- configurable: !0
128
- }), Object.defineProperty(e.prototype, "ended", {
129
- get: function() {
130
- return this._ended;
131
- },
132
- enumerable: !1,
133
- configurable: !0
134
- }), Object.defineProperty(e.prototype, "droppedAttributesCount", {
135
- get: function() {
136
- return this._droppedAttributesCount;
137
- },
138
- enumerable: !1,
139
- configurable: !0
140
- }), Object.defineProperty(e.prototype, "droppedEventsCount", {
141
- get: function() {
142
- return this._droppedEventsCount;
143
- },
144
- enumerable: !1,
145
- configurable: !0
146
- }), Object.defineProperty(e.prototype, "droppedLinksCount", {
147
- get: function() {
148
- return this._droppedLinksCount;
149
- },
150
- enumerable: !1,
151
- configurable: !0
152
- }), e.prototype._isSpanEnded = function() {
153
- return this._ended && l.warn("Can not execute the operation on ended Span {traceId: " + this._spanContext.traceId + ", spanId: " + this._spanContext.spanId + "}"), this._ended;
154
- }, e.prototype._truncateToLimitUtil = function(t, r) {
155
- return t.length <= r ? t : t.substring(0, r);
156
- }, e.prototype._truncateToSize = function(t) {
157
- var r = this, n = this._attributeValueLengthLimit;
158
- return n <= 0 ? (l.warn("Attribute value limit must be positive, got " + n), t) : typeof t == "string" ? this._truncateToLimitUtil(t, n) : Array.isArray(t) ? t.map(function(i) {
159
- return typeof i == "string" ? r._truncateToLimitUtil(i, n) : i;
160
- }) : t;
161
- }, e;
162
- }()
163
- ), L;
164
- (function(e) {
165
- e[e.NOT_RECORD = 0] = "NOT_RECORD", e[e.RECORD = 1] = "RECORD", e[e.RECORD_AND_SAMPLED = 2] = "RECORD_AND_SAMPLED";
166
- })(L || (L = {}));
167
- var I = (
168
- /** @class */
169
- function() {
170
- function e() {
171
- }
172
- return e.prototype.shouldSample = function() {
173
- return {
174
- decision: L.NOT_RECORD
175
- };
176
- }, e.prototype.toString = function() {
177
- return "AlwaysOffSampler";
178
- }, e;
179
- }()
180
- ), T = (
181
- /** @class */
182
- function() {
183
- function e() {
184
- }
185
- return e.prototype.shouldSample = function() {
186
- return {
187
- decision: L.RECORD_AND_SAMPLED
188
- };
189
- }, e.prototype.toString = function() {
190
- return "AlwaysOnSampler";
191
- }, e;
192
- }()
193
- ), B = (
194
- /** @class */
195
- function() {
196
- function e(t) {
197
- var r, n, i, o;
198
- this._root = t.root, this._root || (f(new Error("ParentBasedSampler must have a root sampler configured")), this._root = new T()), this._remoteParentSampled = (r = t.remoteParentSampled) !== null && r !== void 0 ? r : new T(), this._remoteParentNotSampled = (n = t.remoteParentNotSampled) !== null && n !== void 0 ? n : new I(), this._localParentSampled = (i = t.localParentSampled) !== null && i !== void 0 ? i : new T(), this._localParentNotSampled = (o = t.localParentNotSampled) !== null && o !== void 0 ? o : new I();
199
- }
200
- return e.prototype.shouldSample = function(t, r, n, i, o, s) {
201
- var a = _.getSpanContext(t);
202
- return !a || !nt(a) ? this._root.shouldSample(t, r, n, i, o, s) : a.isRemote ? a.traceFlags & b.SAMPLED ? this._remoteParentSampled.shouldSample(t, r, n, i, o, s) : this._remoteParentNotSampled.shouldSample(t, r, n, i, o, s) : a.traceFlags & b.SAMPLED ? this._localParentSampled.shouldSample(t, r, n, i, o, s) : this._localParentNotSampled.shouldSample(t, r, n, i, o, s);
203
- }, e.prototype.toString = function() {
204
- return "ParentBased{root=" + this._root.toString() + ", remoteParentSampled=" + this._remoteParentSampled.toString() + ", remoteParentNotSampled=" + this._remoteParentNotSampled.toString() + ", localParentSampled=" + this._localParentSampled.toString() + ", localParentNotSampled=" + this._localParentNotSampled.toString() + "}";
205
- }, e;
206
- }()
207
- ), W = (
208
- /** @class */
209
- function() {
210
- function e(t) {
211
- t === void 0 && (t = 0), this._ratio = t, this._ratio = this._normalize(t), this._upperBound = Math.floor(this._ratio * 4294967295);
212
- }
213
- return e.prototype.shouldSample = function(t, r) {
214
- return {
215
- decision: ot(r) && this._accumulate(r) < this._upperBound ? L.RECORD_AND_SAMPLED : L.NOT_RECORD
216
- };
217
- }, e.prototype.toString = function() {
218
- return "TraceIdRatioBased{" + this._ratio + "}";
219
- }, e.prototype._normalize = function(t) {
220
- return typeof t != "number" || isNaN(t) ? 0 : t >= 1 ? 1 : t <= 0 ? 0 : t;
221
- }, e.prototype._accumulate = function(t) {
222
- for (var r = 0, n = 0; n < t.length / 8; n++) {
223
- var i = n * 8, o = parseInt(t.slice(i, i + 8), 16);
224
- r = (r ^ o) >>> 0;
225
- }
226
- return r;
227
- }, e;
228
- }()
229
- ), Rt = v.AlwaysOn, g = 1;
230
- function K() {
231
- var e = P();
232
- return {
233
- sampler: $(e),
234
- forceFlushTimeoutMillis: 3e4,
235
- generalLimits: {
236
- attributeValueLengthLimit: e.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
237
- attributeCountLimit: e.OTEL_ATTRIBUTE_COUNT_LIMIT
238
- },
239
- spanLimits: {
240
- attributeValueLengthLimit: e.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,
241
- attributeCountLimit: e.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
242
- linkCountLimit: e.OTEL_SPAN_LINK_COUNT_LIMIT,
243
- eventCountLimit: e.OTEL_SPAN_EVENT_COUNT_LIMIT,
244
- attributePerEventCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
245
- attributePerLinkCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT
246
- },
247
- mergeResourceWithDefaults: !0
248
- };
249
- }
250
- function $(e) {
251
- switch (e === void 0 && (e = P()), e.OTEL_TRACES_SAMPLER) {
252
- case v.AlwaysOn:
253
- return new T();
254
- case v.AlwaysOff:
255
- return new I();
256
- case v.ParentBasedAlwaysOn:
257
- return new B({
258
- root: new T()
259
- });
260
- case v.ParentBasedAlwaysOff:
261
- return new B({
262
- root: new I()
263
- });
264
- case v.TraceIdRatio:
265
- return new W(q(e));
266
- case v.ParentBasedTraceIdRatio:
267
- return new B({
268
- root: new W(q(e))
269
- });
270
- default:
271
- return l.error('OTEL_TRACES_SAMPLER value "' + e.OTEL_TRACES_SAMPLER + " invalid, defaulting to " + Rt + '".'), new T();
272
- }
273
- }
274
- function q(e) {
275
- if (e.OTEL_TRACES_SAMPLER_ARG === void 0 || e.OTEL_TRACES_SAMPLER_ARG === "")
276
- return l.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to " + g + "."), g;
277
- var t = Number(e.OTEL_TRACES_SAMPLER_ARG);
278
- return isNaN(t) ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is invalid, defaulting to " + g + "."), g) : t < 0 || t > 1 ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is out of range ([0..1]), defaulting to " + g + "."), g) : t;
279
- }
280
- function It(e) {
281
- var t = {
282
- sampler: $()
283
- }, r = K(), n = Object.assign({}, r, t, e);
284
- return n.generalLimits = Object.assign({}, r.generalLimits, e.generalLimits || {}), n.spanLimits = Object.assign({}, r.spanLimits, e.spanLimits || {}), n;
285
- }
286
- function Mt(e) {
287
- var t, r, n, i, o, s, a, p, u, c, h, d, S = Object.assign({}, e.spanLimits), m = Lt();
288
- return S.attributeCountLimit = (s = (o = (i = (r = (t = e.spanLimits) === null || t === void 0 ? void 0 : t.attributeCountLimit) !== null && r !== void 0 ? r : (n = e.generalLimits) === null || n === void 0 ? void 0 : n.attributeCountLimit) !== null && i !== void 0 ? i : m.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT) !== null && o !== void 0 ? o : m.OTEL_ATTRIBUTE_COUNT_LIMIT) !== null && s !== void 0 ? s : Pt, S.attributeValueLengthLimit = (d = (h = (c = (p = (a = e.spanLimits) === null || a === void 0 ? void 0 : a.attributeValueLengthLimit) !== null && p !== void 0 ? p : (u = e.generalLimits) === null || u === void 0 ? void 0 : u.attributeValueLengthLimit) !== null && c !== void 0 ? c : m.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && h !== void 0 ? h : m.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && d !== void 0 ? d : wt, Object.assign({}, e, { spanLimits: S });
289
- }
290
- var Nt = (
291
- /** @class */
292
- function() {
293
- function e(t, r) {
294
- this._exporter = t, this._isExporting = !1, this._finishedSpans = [], this._droppedSpansCount = 0;
295
- var n = P();
296
- this._maxExportBatchSize = typeof (r == null ? void 0 : r.maxExportBatchSize) == "number" ? r.maxExportBatchSize : n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, this._maxQueueSize = typeof (r == null ? void 0 : r.maxQueueSize) == "number" ? r.maxQueueSize : n.OTEL_BSP_MAX_QUEUE_SIZE, this._scheduledDelayMillis = typeof (r == null ? void 0 : r.scheduledDelayMillis) == "number" ? r.scheduledDelayMillis : n.OTEL_BSP_SCHEDULE_DELAY, this._exportTimeoutMillis = typeof (r == null ? void 0 : r.exportTimeoutMillis) == "number" ? r.exportTimeoutMillis : n.OTEL_BSP_EXPORT_TIMEOUT, this._shutdownOnce = new J(this._shutdown, this), this._maxExportBatchSize > this._maxQueueSize && (l.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"), this._maxExportBatchSize = this._maxQueueSize);
297
- }
298
- return e.prototype.forceFlush = function() {
299
- return this._shutdownOnce.isCalled ? this._shutdownOnce.promise : this._flushAll();
300
- }, e.prototype.onStart = function(t, r) {
301
- }, e.prototype.onEnd = function(t) {
302
- this._shutdownOnce.isCalled || t.spanContext().traceFlags & b.SAMPLED && this._addToBuffer(t);
303
- }, e.prototype.shutdown = function() {
304
- return this._shutdownOnce.call();
305
- }, e.prototype._shutdown = function() {
306
- var t = this;
307
- return Promise.resolve().then(function() {
308
- return t.onShutdown();
309
- }).then(function() {
310
- return t._flushAll();
311
- }).then(function() {
312
- return t._exporter.shutdown();
313
- });
314
- }, e.prototype._addToBuffer = function(t) {
315
- if (this._finishedSpans.length >= this._maxQueueSize) {
316
- this._droppedSpansCount === 0 && l.debug("maxQueueSize reached, dropping spans"), this._droppedSpansCount++;
317
- return;
318
- }
319
- this._droppedSpansCount > 0 && (l.warn("Dropped " + this._droppedSpansCount + " spans because maxQueueSize reached"), this._droppedSpansCount = 0), this._finishedSpans.push(t), this._maybeStartTimer();
320
- }, e.prototype._flushAll = function() {
321
- var t = this;
322
- return new Promise(function(r, n) {
323
- for (var i = [], o = Math.ceil(t._finishedSpans.length / t._maxExportBatchSize), s = 0, a = o; s < a; s++)
324
- i.push(t._flushOneBatch());
325
- Promise.all(i).then(function() {
326
- r();
327
- }).catch(n);
328
- });
329
- }, e.prototype._flushOneBatch = function() {
330
- var t = this;
331
- return this._clearTimer(), this._finishedSpans.length === 0 ? Promise.resolve() : new Promise(function(r, n) {
332
- var i = setTimeout(function() {
333
- n(new Error("Timeout"));
334
- }, t._exportTimeoutMillis);
335
- E.with(gt(E.active()), function() {
336
- var o;
337
- t._finishedSpans.length <= t._maxExportBatchSize ? (o = t._finishedSpans, t._finishedSpans = []) : o = t._finishedSpans.splice(0, t._maxExportBatchSize);
338
- for (var s = function() {
339
- return t._exporter.export(o, function(h) {
340
- var d;
341
- clearTimeout(i), h.code === w.SUCCESS ? r() : n((d = h.error) !== null && d !== void 0 ? d : new Error("BatchSpanProcessor: span export failed"));
342
- });
343
- }, a = null, p = 0, u = o.length; p < u; p++) {
344
- var c = o[p];
345
- c.resource.asyncAttributesPending && c.resource.waitForAsyncAttributes && (a ?? (a = []), a.push(c.resource.waitForAsyncAttributes()));
346
- }
347
- a === null ? s() : Promise.all(a).then(s, function(h) {
348
- f(h), n(h);
349
- });
350
- });
351
- });
352
- }, e.prototype._maybeStartTimer = function() {
353
- var t = this;
354
- if (!this._isExporting) {
355
- var r = function() {
356
- t._isExporting = !0, t._flushOneBatch().finally(function() {
357
- t._isExporting = !1, t._finishedSpans.length > 0 && (t._clearTimer(), t._maybeStartTimer());
358
- }).catch(function(n) {
359
- t._isExporting = !1, f(n);
360
- });
361
- };
362
- if (this._finishedSpans.length >= this._maxExportBatchSize)
363
- return r();
364
- this._timer === void 0 && (this._timer = setTimeout(function() {
365
- return r();
366
- }, this._scheduledDelayMillis), Et(this._timer));
367
- }
368
- }, e.prototype._clearTimer = function() {
369
- this._timer !== void 0 && (clearTimeout(this._timer), this._timer = void 0);
370
- }, e;
371
- }()
372
- ), Dt = /* @__PURE__ */ function() {
373
- var e = function(t, r) {
374
- return e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, i) {
375
- n.__proto__ = i;
376
- } || function(n, i) {
377
- for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (n[o] = i[o]);
378
- }, e(t, r);
379
- };
380
- return function(t, r) {
381
- if (typeof r != "function" && r !== null)
382
- throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
383
- e(t, r);
384
- function n() {
385
- this.constructor = t;
386
- }
387
- t.prototype = r === null ? Object.create(r) : (n.prototype = r.prototype, new n());
388
- };
389
- }(), Bt = (
390
- /** @class */
391
- function(e) {
392
- Dt(t, e);
393
- function t(r, n) {
394
- var i = e.call(this, r, n) || this;
395
- return i.onInit(n), i;
396
- }
397
- return t.prototype.onInit = function(r) {
398
- var n = this;
399
- (r == null ? void 0 : r.disableAutoFlushOnDocumentHide) !== !0 && typeof document < "u" && (this._visibilityChangeListener = function() {
400
- document.visibilityState === "hidden" && n.forceFlush().catch(function(i) {
401
- f(i);
402
- });
403
- }, this._pageHideListener = function() {
404
- n.forceFlush().catch(function(i) {
405
- f(i);
406
- });
407
- }, document.addEventListener("visibilitychange", this._visibilityChangeListener), document.addEventListener("pagehide", this._pageHideListener));
408
- }, t.prototype.onShutdown = function() {
409
- typeof document < "u" && (this._visibilityChangeListener && document.removeEventListener("visibilitychange", this._visibilityChangeListener), this._pageHideListener && document.removeEventListener("pagehide", this._pageHideListener));
410
- }, t;
411
- }(Nt)
412
- ), Ut = 8, Ft = 16, kt = (
413
- /** @class */
414
- /* @__PURE__ */ function() {
415
- function e() {
416
- this.generateTraceId = Z(Ft), this.generateSpanId = Z(Ut);
417
- }
418
- return e;
419
- }()
420
- ), O = Array(32);
421
- function Z(e) {
422
- return function() {
423
- for (var t = 0; t < e * 2; t++)
424
- O[t] = Math.floor(Math.random() * 16) + 48, O[t] >= 58 && (O[t] += 39);
425
- return String.fromCharCode.apply(null, O.slice(0, e * 2));
426
- };
427
- }
428
- var zt = (
429
- /** @class */
430
- function() {
431
- function e(t, r, n) {
432
- this._tracerProvider = n;
433
- var i = It(r);
434
- this._sampler = i.sampler, this._generalLimits = i.generalLimits, this._spanLimits = i.spanLimits, this._idGenerator = r.idGenerator || new kt(), this.resource = n.resource, this.instrumentationLibrary = t;
435
- }
436
- return e.prototype.startSpan = function(t, r, n) {
437
- var i, o, s;
438
- r === void 0 && (r = {}), n === void 0 && (n = E.active()), r.root && (n = _.deleteSpan(n));
439
- var a = _.getSpan(n);
440
- if (mt(n)) {
441
- l.debug("Instrumentation suppressed, returning Noop Span");
442
- var p = _.wrapSpanContext(it);
443
- return p;
444
- }
445
- var u = a == null ? void 0 : a.spanContext(), c = this._idGenerator.generateSpanId(), h, d, S;
446
- !u || !_.isSpanContextValid(u) ? h = this._idGenerator.generateTraceId() : (h = u.traceId, d = u.traceState, S = u.spanId);
447
- var m = (i = r.kind) !== null && i !== void 0 ? i : st.INTERNAL, F = ((o = r.links) !== null && o !== void 0 ? o : []).map(function(G) {
448
- return {
449
- context: G.context,
450
- attributes: R(G.attributes)
451
- };
452
- }), k = R(r.attributes), x = this._sampler.shouldSample(n, h, t, m, k, F);
453
- d = (s = x.traceState) !== null && s !== void 0 ? s : d;
454
- var tt = x.decision === H.RECORD_AND_SAMPLED ? b.SAMPLED : b.NONE, z = { traceId: h, spanId: c, traceFlags: tt, traceState: d };
455
- if (x.decision === H.NOT_RECORD) {
456
- l.debug("Recording is off, propagating context in a non-recording span");
457
- var p = _.wrapSpanContext(z);
458
- return p;
459
- }
460
- var et = R(Object.assign(k, x.attributes)), rt = new Ct(this, n, t, z, m, S, F, r.startTime, void 0, et);
461
- return rt;
462
- }, e.prototype.startActiveSpan = function(t, r, n, i) {
463
- var o, s, a;
464
- if (!(arguments.length < 2)) {
465
- arguments.length === 2 ? a = r : arguments.length === 3 ? (o = r, a = n) : (o = r, s = n, a = i);
466
- var p = s ?? E.active(), u = this.startSpan(t, o, p), c = _.setSpan(p, u);
467
- return E.with(c, a, void 0, u);
468
- }
469
- }, e.prototype.getGeneralLimits = function() {
470
- return this._generalLimits;
471
- }, e.prototype.getSpanLimits = function() {
472
- return this._spanLimits;
473
- }, e.prototype.getActiveSpanProcessor = function() {
474
- return this._tracerProvider.getActiveSpanProcessor();
475
- }, e;
476
- }()
477
- ), C = function(e) {
478
- var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
479
- if (r) return r.call(e);
480
- if (e && typeof e.length == "number") return {
481
- next: function() {
482
- return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
483
- }
484
- };
485
- throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
486
- }, Y = (
487
- /** @class */
488
- function() {
489
- function e(t) {
490
- this._spanProcessors = t;
491
- }
492
- return e.prototype.forceFlush = function() {
493
- var t, r, n = [];
494
- try {
495
- for (var i = C(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
496
- var s = o.value;
497
- n.push(s.forceFlush());
498
- }
499
- } catch (a) {
500
- t = { error: a };
501
- } finally {
502
- try {
503
- o && !o.done && (r = i.return) && r.call(i);
504
- } finally {
505
- if (t) throw t.error;
506
- }
507
- }
508
- return new Promise(function(a) {
509
- Promise.all(n).then(function() {
510
- a();
511
- }).catch(function(p) {
512
- f(p || new Error("MultiSpanProcessor: forceFlush failed")), a();
513
- });
514
- });
515
- }, e.prototype.onStart = function(t, r) {
516
- var n, i;
517
- try {
518
- for (var o = C(this._spanProcessors), s = o.next(); !s.done; s = o.next()) {
519
- var a = s.value;
520
- a.onStart(t, r);
521
- }
522
- } catch (p) {
523
- n = { error: p };
524
- } finally {
525
- try {
526
- s && !s.done && (i = o.return) && i.call(o);
527
- } finally {
528
- if (n) throw n.error;
529
- }
530
- }
531
- }, e.prototype.onEnd = function(t) {
532
- var r, n;
533
- try {
534
- for (var i = C(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
535
- var s = o.value;
536
- s.onEnd(t);
537
- }
538
- } catch (a) {
539
- r = { error: a };
540
- } finally {
541
- try {
542
- o && !o.done && (n = i.return) && n.call(i);
543
- } finally {
544
- if (r) throw r.error;
545
- }
546
- }
547
- }, e.prototype.shutdown = function() {
548
- var t, r, n = [];
549
- try {
550
- for (var i = C(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
551
- var s = o.value;
552
- n.push(s.shutdown());
553
- }
554
- } catch (a) {
555
- t = { error: a };
556
- } finally {
557
- try {
558
- o && !o.done && (r = i.return) && r.call(i);
559
- } finally {
560
- if (t) throw t.error;
561
- }
562
- }
563
- return new Promise(function(a, p) {
564
- Promise.all(n).then(function() {
565
- a();
566
- }, p);
567
- });
568
- }, e;
569
- }()
570
- ), Gt = (
571
- /** @class */
572
- function() {
573
- function e() {
574
- }
575
- return e.prototype.onStart = function(t, r) {
576
- }, e.prototype.onEnd = function(t) {
577
- }, e.prototype.shutdown = function() {
578
- return Promise.resolve();
579
- }, e.prototype.forceFlush = function() {
580
- return Promise.resolve();
581
- }, e;
582
- }()
583
- ), jt = function(e, t) {
584
- var r = typeof Symbol == "function" && e[Symbol.iterator];
585
- if (!r) return e;
586
- var n = r.call(e), i, o = [], s;
587
- try {
588
- for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
589
- } catch (a) {
590
- s = { error: a };
591
- } finally {
592
- try {
593
- i && !i.done && (r = n.return) && r.call(n);
594
- } finally {
595
- if (s) throw s.error;
596
- }
597
- }
598
- return o;
599
- }, Vt = function(e, t, r) {
600
- if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
601
- (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
602
- return e.concat(o || Array.prototype.slice.call(t));
603
- }, y;
604
- (function(e) {
605
- e[e.resolved = 0] = "resolved", e[e.timeout = 1] = "timeout", e[e.error = 2] = "error", e[e.unresolved = 3] = "unresolved";
606
- })(y || (y = {}));
607
- var re = (
608
- /** @class */
609
- function() {
610
- function e(t) {
611
- t === void 0 && (t = {});
612
- var r, n;
613
- this._registeredSpanProcessors = [], this._tracers = /* @__PURE__ */ new Map();
614
- var i = Tt({}, K(), Mt(t));
615
- if (this.resource = (r = i.resource) !== null && r !== void 0 ? r : Q.empty(), i.mergeResourceWithDefaults && (this.resource = Q.default().merge(this.resource)), this._config = Object.assign({}, i, {
616
- resource: this.resource
617
- }), !((n = t.spanProcessors) === null || n === void 0) && n.length)
618
- this._registeredSpanProcessors = Vt([], jt(t.spanProcessors), !1), this.activeSpanProcessor = new Y(this._registeredSpanProcessors);
619
- else {
620
- var o = this._buildExporterFromEnv();
621
- if (o !== void 0) {
622
- var s = new Bt(o);
623
- this.activeSpanProcessor = s;
624
- } else
625
- this.activeSpanProcessor = new Gt();
626
- }
627
- }
628
- return e.prototype.getTracer = function(t, r, n) {
629
- var i = t + "@" + (r || "") + ":" + ((n == null ? void 0 : n.schemaUrl) || "");
630
- return this._tracers.has(i) || this._tracers.set(i, new zt({ name: t, version: r, schemaUrl: n == null ? void 0 : n.schemaUrl }, this._config, this)), this._tracers.get(i);
631
- }, e.prototype.addSpanProcessor = function(t) {
632
- this._registeredSpanProcessors.length === 0 && this.activeSpanProcessor.shutdown().catch(function(r) {
633
- return l.error("Error while trying to shutdown current span processor", r);
634
- }), this._registeredSpanProcessors.push(t), this.activeSpanProcessor = new Y(this._registeredSpanProcessors);
635
- }, e.prototype.getActiveSpanProcessor = function() {
636
- return this.activeSpanProcessor;
637
- }, e.prototype.register = function(t) {
638
- t === void 0 && (t = {}), _.setGlobalTracerProvider(this), t.propagator === void 0 && (t.propagator = this._buildPropagatorFromEnv()), t.contextManager && E.setGlobalContextManager(t.contextManager), t.propagator && ht.setGlobalPropagator(t.propagator);
639
- }, e.prototype.forceFlush = function() {
640
- var t = this._config.forceFlushTimeoutMillis, r = this._registeredSpanProcessors.map(function(n) {
641
- return new Promise(function(i) {
642
- var o, s = setTimeout(function() {
643
- i(new Error("Span processor did not completed within timeout period of " + t + " ms")), o = y.timeout;
644
- }, t);
645
- n.forceFlush().then(function() {
646
- clearTimeout(s), o !== y.timeout && (o = y.resolved, i(o));
647
- }).catch(function(a) {
648
- clearTimeout(s), o = y.error, i(a);
649
- });
650
- });
651
- });
652
- return new Promise(function(n, i) {
653
- Promise.all(r).then(function(o) {
654
- var s = o.filter(function(a) {
655
- return a !== y.resolved;
656
- });
657
- s.length > 0 ? i(s) : n();
658
- }).catch(function(o) {
659
- return i([o]);
660
- });
661
- });
662
- }, e.prototype.shutdown = function() {
663
- return this.activeSpanProcessor.shutdown();
664
- }, e.prototype._getPropagator = function(t) {
665
- var r;
666
- return (r = this.constructor._registeredPropagators.get(t)) === null || r === void 0 ? void 0 : r();
667
- }, e.prototype._getSpanExporter = function(t) {
668
- var r;
669
- return (r = this.constructor._registeredExporters.get(t)) === null || r === void 0 ? void 0 : r();
670
- }, e.prototype._buildPropagatorFromEnv = function() {
671
- var t = this, r = Array.from(new Set(P().OTEL_PROPAGATORS)), n = r.map(function(o) {
672
- var s = t._getPropagator(o);
673
- return s || l.warn('Propagator "' + o + '" requested through environment variable is unavailable.'), s;
674
- }), i = n.reduce(function(o, s) {
675
- return s && o.push(s), o;
676
- }, []);
677
- if (i.length !== 0)
678
- return r.length === 1 ? i[0] : new vt({
679
- propagators: i
680
- });
681
- }, e.prototype._buildExporterFromEnv = function() {
682
- var t = P().OTEL_TRACES_EXPORTER;
683
- if (!(t === "none" || t === "")) {
684
- var r = this._getSpanExporter(t);
685
- return r || l.error('Exporter "' + t + '" requested through environment variable is unavailable.'), r;
686
- }
687
- }, e._registeredPropagators = /* @__PURE__ */ new Map([
688
- ["tracecontext", function() {
689
- return new yt();
690
- }],
691
- ["baggage", function() {
692
- return new St();
693
- }]
694
- ]), e._registeredExporters = /* @__PURE__ */ new Map(), e;
695
- }()
696
- ), Ht = function(e) {
697
- var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
698
- if (r) return r.call(e);
699
- if (e && typeof e.length == "number") return {
700
- next: function() {
701
- return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
702
- }
703
- };
704
- throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
705
- }, ne = (
706
- /** @class */
707
- function() {
708
- function e() {
709
- }
710
- return e.prototype.export = function(t, r) {
711
- return this._sendSpans(t, r);
712
- }, e.prototype.shutdown = function() {
713
- return this._sendSpans([]), this.forceFlush();
714
- }, e.prototype.forceFlush = function() {
715
- return Promise.resolve();
716
- }, e.prototype._exportInfo = function(t) {
717
- var r;
718
- return {
719
- resource: {
720
- attributes: t.resource.attributes
721
- },
722
- instrumentationScope: t.instrumentationLibrary,
723
- traceId: t.spanContext().traceId,
724
- parentId: t.parentSpanId,
725
- traceState: (r = t.spanContext().traceState) === null || r === void 0 ? void 0 : r.serialize(),
726
- name: t.name,
727
- id: t.spanContext().spanId,
728
- kind: t.kind,
729
- timestamp: V(t.startTime),
730
- duration: V(t.duration),
731
- attributes: t.attributes,
732
- status: t.status,
733
- events: t.events,
734
- links: t.links
735
- };
736
- }, e.prototype._sendSpans = function(t, r) {
737
- var n, i;
738
- try {
739
- for (var o = Ht(t), s = o.next(); !s.done; s = o.next()) {
740
- var a = s.value;
741
- console.dir(this._exportInfo(a), { depth: 3 });
742
- }
743
- } catch (p) {
744
- n = { error: p };
745
- } finally {
746
- try {
747
- s && !s.done && (i = o.return) && i.call(o);
748
- } finally {
749
- if (n) throw n.error;
750
- }
751
- }
752
- if (r)
753
- return r({ code: w.SUCCESS });
754
- }, e;
755
- }()
756
- ), Qt = function(e, t) {
757
- var r = typeof Symbol == "function" && e[Symbol.iterator];
758
- if (!r) return e;
759
- var n = r.call(e), i, o = [], s;
760
- try {
761
- for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
762
- } catch (a) {
763
- s = { error: a };
764
- } finally {
765
- try {
766
- i && !i.done && (r = n.return) && r.call(n);
767
- } finally {
768
- if (s) throw s.error;
769
- }
770
- }
771
- return o;
772
- }, Xt = function(e, t, r) {
773
- if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
774
- (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
775
- return e.concat(o || Array.prototype.slice.call(t));
776
- }, oe = (
777
- /** @class */
778
- function() {
779
- function e() {
780
- this._finishedSpans = [], this._stopped = !1;
781
- }
782
- return e.prototype.export = function(t, r) {
783
- var n;
784
- if (this._stopped)
785
- return r({
786
- code: w.FAILED,
787
- error: new Error("Exporter has been stopped")
788
- });
789
- (n = this._finishedSpans).push.apply(n, Xt([], Qt(t), !1)), setTimeout(function() {
790
- return r({ code: w.SUCCESS });
791
- }, 0);
792
- }, e.prototype.shutdown = function() {
793
- return this._stopped = !0, this._finishedSpans = [], this.forceFlush();
794
- }, e.prototype.forceFlush = function() {
795
- return Promise.resolve();
796
- }, e.prototype.reset = function() {
797
- this._finishedSpans = [];
798
- }, e.prototype.getFinishedSpans = function() {
799
- return this._finishedSpans;
800
- }, e;
801
- }()
802
- ), Wt = function(e, t, r, n) {
803
- function i(o) {
804
- return o instanceof r ? o : new r(function(s) {
805
- s(o);
806
- });
807
- }
808
- return new (r || (r = Promise))(function(o, s) {
809
- function a(c) {
810
- try {
811
- u(n.next(c));
812
- } catch (h) {
813
- s(h);
814
- }
815
- }
816
- function p(c) {
817
- try {
818
- u(n.throw(c));
819
- } catch (h) {
820
- s(h);
821
- }
822
- }
823
- function u(c) {
824
- c.done ? o(c.value) : i(c.value).then(a, p);
825
- }
826
- u((n = n.apply(e, [])).next());
827
- });
828
- }, qt = function(e, t) {
829
- var r = { label: 0, sent: function() {
830
- if (o[0] & 1) throw o[1];
831
- return o[1];
832
- }, trys: [], ops: [] }, n, i, o, s;
833
- return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
834
- return this;
835
- }), s;
836
- function a(u) {
837
- return function(c) {
838
- return p([u, c]);
839
- };
840
- }
841
- function p(u) {
842
- if (n) throw new TypeError("Generator is already executing.");
843
- for (; r; ) try {
844
- if (n = 1, i && (o = u[0] & 2 ? i.return : u[0] ? i.throw || ((o = i.return) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o;
845
- switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {
846
- case 0:
847
- case 1:
848
- o = u;
849
- break;
850
- case 4:
851
- return r.label++, { value: u[1], done: !1 };
852
- case 5:
853
- r.label++, i = u[1], u = [0];
854
- continue;
855
- case 7:
856
- u = r.ops.pop(), r.trys.pop();
857
- continue;
858
- default:
859
- if (o = r.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {
860
- r = 0;
861
- continue;
862
- }
863
- if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {
864
- r.label = u[1];
865
- break;
866
- }
867
- if (u[0] === 6 && r.label < o[1]) {
868
- r.label = o[1], o = u;
869
- break;
870
- }
871
- if (o && r.label < o[2]) {
872
- r.label = o[2], r.ops.push(u);
873
- break;
874
- }
875
- o[2] && r.ops.pop(), r.trys.pop();
876
- continue;
877
- }
878
- u = t.call(e, r);
879
- } catch (c) {
880
- u = [6, c], i = 0;
881
- } finally {
882
- n = o = 0;
883
- }
884
- if (u[0] & 5) throw u[1];
885
- return { value: u[0] ? u[1] : void 0, done: !0 };
886
- }
887
- }, ie = (
888
- /** @class */
889
- function() {
890
- function e(t) {
891
- this._exporter = t, this._shutdownOnce = new J(this._shutdown, this), this._unresolvedExports = /* @__PURE__ */ new Set();
892
- }
893
- return e.prototype.forceFlush = function() {
894
- return Wt(this, void 0, void 0, function() {
895
- return qt(this, function(t) {
896
- switch (t.label) {
897
- case 0:
898
- return [4, Promise.all(Array.from(this._unresolvedExports))];
899
- case 1:
900
- return t.sent(), this._exporter.forceFlush ? [4, this._exporter.forceFlush()] : [3, 3];
901
- case 2:
902
- t.sent(), t.label = 3;
903
- case 3:
904
- return [
905
- 2
906
- /*return*/
907
- ];
908
- }
909
- });
910
- });
911
- }, e.prototype.onStart = function(t, r) {
912
- }, e.prototype.onEnd = function(t) {
913
- var r = this, n, i;
914
- if (!this._shutdownOnce.isCalled && t.spanContext().traceFlags & b.SAMPLED) {
915
- var o = function() {
916
- return bt._export(r._exporter, [t]).then(function(a) {
917
- var p;
918
- a.code !== w.SUCCESS && f((p = a.error) !== null && p !== void 0 ? p : new Error("SimpleSpanProcessor: span export failed (status " + a + ")"));
919
- }).catch(function(a) {
920
- f(a);
921
- });
922
- };
923
- if (t.resource.asyncAttributesPending) {
924
- var s = (i = (n = t.resource).waitForAsyncAttributes) === null || i === void 0 ? void 0 : i.call(n).then(function() {
925
- return s != null && r._unresolvedExports.delete(s), o();
926
- }, function(a) {
927
- return f(a);
928
- });
929
- s != null && this._unresolvedExports.add(s);
930
- } else
931
- o();
932
- }
933
- }, e.prototype.shutdown = function() {
934
- return this._shutdownOnce.call();
935
- }, e.prototype._shutdown = function() {
936
- return this._exporter.shutdown();
937
- }, e;
938
- }()
939
- );
940
- export {
941
- Bt as D,
942
- kt as G,
943
- I,
944
- Ct as O,
945
- L as P,
946
- y as S,
947
- W,
948
- B as a,
949
- T as g,
950
- oe as i,
951
- Gt as j,
952
- ne as n,
953
- ie as o,
954
- re as r,
955
- zt as z
956
- };
957
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiU2ltcGxlU3BhblByb2Nlc3Nvci1DMXFoR2dpUi0hfnswMDJ9fi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgRyBhcyBHZSwgayBhcyBrbiwgWCBhcyBYdCQxLCBoIGFzIGhzLCBPIGFzIE9lLCBkIGFzIGRzLCBsIGFzIGx0LCBhIGFzIFNlIH0gZnJvbSAnLi9pbmRleC0hfnswMDV9fi5qcyc7XG5pbXBvcnQgeyByIH0gZnJvbSAnLi9kaWFnLWFwaS1Dc1FPVEdrTi0hfnswMDh9fi5qcyc7XG5pbXBvcnQgeyBkQyBhcyBxZSwgZEQgYXMgd2UsIGRFIGFzIFIsIHAgYXMgcF8sIE8gYXMgTyQxLCBkRiBhcyBOXywgZEcgYXMgSF8sIGN5IGFzIHJBLCBjdyBhcyBOQSwgeSBhcyB5XywgZEggYXMga2UsIGRJIGFzIHJfLCBjeCBhcyBNQSB9IGZyb20gJy4vdXJsLTRPRnRmOHkzLSF+ezAwOX1+LmpzJztcbmltcG9ydCB7IFosIGEgYXMgWmUsIG4gYXMgbmUkMSwgdywgcCwgYiBhcyBwciwgYyBhcyBiciwgSiBhcyBKZSwgVyBhcyBXJDEsIHMgYXMgc3IsIGsgYXMga3IsIGQgYXMgWnIsIHQgYXMgdHQgfSBmcm9tICcuL2luZGV4LURqNzdNQlRqLSF+ezAwa31+LmpzJztcbmltcG9ydCB7IGJtIGFzIHIkMSwgTyBhcyBPVCwgYm4gYXMgTFQsIGJvIGFzIFAkMSwgYnAgYXMgTSB9IGZyb20gJy4vc2RrLWluZm8tRERVM18wS3EtIX57MDBofX4uanMnO1xuaW1wb3J0IHsgUiBhcyBSJDEgfSBmcm9tICcuL1Jlc291cmNlLUNXY3h5cUN1LSF+ezAwZ31+LmpzJztcbmltcG9ydCB7IGEgfSBmcm9tICcuL0V4cG9ydFJlc3VsdC1CLVlMS01hVS0hfnswMG19fi5qcyc7XG5cbnZhciBidCA9IFwiZXhjZXB0aW9uXCIsIFUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFUgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKGUpIHtcbiAgICBmb3IgKHZhciB0LCByID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IHIgPCBuOyByKyspIHtcbiAgICAgIHQgPSBhcmd1bWVudHNbcl07XG4gICAgICBmb3IgKHZhciBvIGluIHQpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBvKSAmJiAoZVtvXSA9IHRbb10pO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSwgVS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSwgQ3QgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCByID0gdCAmJiBlW3RdLCBuID0gMDtcbiAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgbiA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtuKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcih0ID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufSwgWCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBpID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChzKSB7XG4gICAgYSA9IHsgZXJyb3I6IHMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgeHQgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgT3QgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBvLCBpLCBhLCBzLCBsLCB1LCBwKSB7XG4gICAgICBzID09PSB2b2lkIDAgJiYgKHMgPSBbXSksIHRoaXMuYXR0cmlidXRlcyA9IHt9LCB0aGlzLmxpbmtzID0gW10sIHRoaXMuZXZlbnRzID0gW10sIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQgPSAwLCB0aGlzLl9kcm9wcGVkTGlua3NDb3VudCA9IDAsIHRoaXMuc3RhdHVzID0ge1xuICAgICAgICBjb2RlOiBTZS5VTlNFVFxuICAgICAgfSwgdGhpcy5lbmRUaW1lID0gWzAsIDBdLCB0aGlzLl9lbmRlZCA9ICExLCB0aGlzLl9kdXJhdGlvbiA9IFstMSwgLTFdLCB0aGlzLm5hbWUgPSBuLCB0aGlzLl9zcGFuQ29udGV4dCA9IG8sIHRoaXMucGFyZW50U3BhbklkID0gYSwgdGhpcy5raW5kID0gaSwgdGhpcy5saW5rcyA9IHM7XG4gICAgICB2YXIgZiA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZSA9IFIubm93KCksIHRoaXMuX3BlcmZvcm1hbmNlT2Zmc2V0ID0gZiAtICh0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZSArIHJfKCkpLCB0aGlzLl9zdGFydFRpbWVQcm92aWRlZCA9IGwgIT0gbnVsbCwgdGhpcy5zdGFydFRpbWUgPSB0aGlzLl9nZXRUaW1lKGwgPz8gZiksIHRoaXMucmVzb3VyY2UgPSB0LnJlc291cmNlLCB0aGlzLmluc3RydW1lbnRhdGlvbkxpYnJhcnkgPSB0Lmluc3RydW1lbnRhdGlvbkxpYnJhcnksIHRoaXMuX3NwYW5MaW1pdHMgPSB0LmdldFNwYW5MaW1pdHMoKSwgdGhpcy5fYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCA9IHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCB8fCAwLCBwICE9IG51bGwgJiYgdGhpcy5zZXRBdHRyaWJ1dGVzKHApLCB0aGlzLl9zcGFuUHJvY2Vzc29yID0gdC5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yKCksIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25TdGFydCh0aGlzLCByKTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgciQxKSB7XG4gICAgICByZXR1cm4gciQxID09IG51bGwgfHwgdGhpcy5faXNTcGFuRW5kZWQoKSA/IHRoaXMgOiB0Lmxlbmd0aCA9PT0gMCA/IChyLndhcm4oXCJJbnZhbGlkIGF0dHJpYnV0ZSBrZXk6IFwiICsgdCksIHRoaXMpIDogWihyJDEpID8gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGggPj0gdGhpcy5fc3BhbkxpbWl0cy5hdHRyaWJ1dGVDb3VudExpbWl0ICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCB0KSA/ICh0aGlzLl9kcm9wcGVkQXR0cmlidXRlc0NvdW50KyssIHRoaXMpIDogKHRoaXMuYXR0cmlidXRlc1t0XSA9IHRoaXMuX3RydW5jYXRlVG9TaXplKHIkMSksIHRoaXMpIDogKHIud2FybihcIkludmFsaWQgYXR0cmlidXRlIHZhbHVlIHNldCBmb3Iga2V5OiBcIiArIHQpLCB0aGlzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHIsIG47XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBvID0gQ3QoT2JqZWN0LmVudHJpZXModCkpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICAgIHZhciBhID0gWChpLnZhbHVlLCAyKSwgcyA9IGFbMF0sIGwgPSBhWzFdO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHMsIGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIgPSB7IGVycm9yOiB1IH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGkgJiYgIWkuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgciQxLCBuKSB7XG4gICAgICBpZiAodGhpcy5faXNTcGFuRW5kZWQoKSlcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICBpZiAodGhpcy5fc3BhbkxpbWl0cy5ldmVudENvdW50TGltaXQgPT09IDApXG4gICAgICAgIHJldHVybiByLndhcm4oXCJObyBldmVudHMgYWxsb3dlZC5cIiksIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCsrLCB0aGlzO1xuICAgICAgdGhpcy5ldmVudHMubGVuZ3RoID49IHRoaXMuX3NwYW5MaW1pdHMuZXZlbnRDb3VudExpbWl0ICYmICh0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQgPT09IDAgJiYgci5kZWJ1ZyhcIkRyb3BwaW5nIGV4dHJhIGV2ZW50cy5cIiksIHRoaXMuZXZlbnRzLnNoaWZ0KCksIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCsrKSwgcWUociQxKSAmJiAocWUobikgfHwgKG4gPSByJDEpLCByJDEgPSB2b2lkIDApO1xuICAgICAgdmFyIG8gPSBaZShyJDEpO1xuICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiB0LFxuICAgICAgICBhdHRyaWJ1dGVzOiBvLFxuICAgICAgICB0aW1lOiB0aGlzLl9nZXRUaW1lKG4pLFxuICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwXG4gICAgICB9KSwgdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXMubGlua3MucHVzaCh0KSwgdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuIChyID0gdGhpcy5saW5rcykucHVzaC5hcHBseShyLCB4dChbXSwgWCh0KSwgITEpKSwgdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcy5faXNTcGFuRW5kZWQoKSA/IHRoaXMgOiAodGhpcy5zdGF0dXMgPSBVKHt9LCB0KSwgdGhpcy5zdGF0dXMubWVzc2FnZSAhPSBudWxsICYmIHR5cGVvZiB0Lm1lc3NhZ2UgIT0gXCJzdHJpbmdcIiAmJiAoci53YXJuKFwiRHJvcHBpbmcgaW52YWxpZCBzdGF0dXMubWVzc2FnZSBvZiB0eXBlICdcIiArIHR5cGVvZiB0Lm1lc3NhZ2UgKyBcIicsIGV4cGVjdGVkICdzdHJpbmcnXCIpLCBkZWxldGUgdGhpcy5zdGF0dXMubWVzc2FnZSksIHRoaXMpO1xuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcy5faXNTcGFuRW5kZWQoKSA/IHRoaXMgOiAodGhpcy5uYW1lID0gdCwgdGhpcyk7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpIHtcbiAgICAgICAgci5lcnJvcih0aGlzLm5hbWUgKyBcIiBcIiArIHRoaXMuX3NwYW5Db250ZXh0LnRyYWNlSWQgKyBcIi1cIiArIHRoaXMuX3NwYW5Db250ZXh0LnNwYW5JZCArIFwiIC0gWW91IGNhbiBvbmx5IGNhbGwgZW5kKCkgb24gYSBzcGFuIG9uY2UuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9lbmRlZCA9ICEwLCB0aGlzLmVuZFRpbWUgPSB0aGlzLl9nZXRUaW1lKHQpLCB0aGlzLl9kdXJhdGlvbiA9IHdlKHRoaXMuc3RhcnRUaW1lLCB0aGlzLmVuZFRpbWUpLCB0aGlzLl9kdXJhdGlvblswXSA8IDAgJiYgKHIud2FybihcIkluY29uc2lzdGVudCBzdGFydCBhbmQgZW5kIHRpbWUsIHN0YXJ0VGltZSA+IGVuZFRpbWUuIFNldHRpbmcgc3BhbiBkdXJhdGlvbiB0byAwbXMuXCIsIHRoaXMuc3RhcnRUaW1lLCB0aGlzLmVuZFRpbWUpLCB0aGlzLmVuZFRpbWUgPSB0aGlzLnN0YXJ0VGltZS5zbGljZSgpLCB0aGlzLl9kdXJhdGlvbiA9IFswLCAwXSksIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA+IDAgJiYgci53YXJuKFwiRHJvcHBlZCBcIiArIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCArIFwiIGV2ZW50cyBiZWNhdXNlIGV2ZW50Q291bnRMaW1pdCByZWFjaGVkXCIpLCB0aGlzLl9zcGFuUHJvY2Vzc29yLm9uRW5kKHRoaXMpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRUaW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKHR5cGVvZiB0ID09IFwibnVtYmVyXCIgJiYgdCA8PSBSLm5vdygpKVxuICAgICAgICByZXR1cm4gcF8odCArIHRoaXMuX3BlcmZvcm1hbmNlT2Zmc2V0KTtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gTyQxKHQpO1xuICAgICAgaWYgKHQgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICByZXR1cm4gTyQxKHQuZ2V0VGltZSgpKTtcbiAgICAgIGlmIChOXyh0KSlcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICBpZiAodGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQpXG4gICAgICAgIHJldHVybiBPJDEoRGF0ZS5ub3coKSk7XG4gICAgICB2YXIgciA9IFIubm93KCkgLSB0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZTtcbiAgICAgIHJldHVybiBIXyh0aGlzLnN0YXJ0VGltZSwgTyQxKHIpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkID09PSAhMTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCByJDEpIHtcbiAgICAgIHZhciBuID0ge307XG4gICAgICB0eXBlb2YgdCA9PSBcInN0cmluZ1wiID8gbltOQV0gPSB0IDogdCAmJiAodC5jb2RlID8gbltyQV0gPSB0LmNvZGUudG9TdHJpbmcoKSA6IHQubmFtZSAmJiAobltyQV0gPSB0Lm5hbWUpLCB0Lm1lc3NhZ2UgJiYgKG5bTkFdID0gdC5tZXNzYWdlKSwgdC5zdGFjayAmJiAobltNQV0gPSB0LnN0YWNrKSksIG5bckFdIHx8IG5bTkFdID8gdGhpcy5hZGRFdmVudChidCwgbiwgciQxKSA6IHIud2FybihcIkZhaWxlZCB0byByZWNvcmQgYW4gZXhjZXB0aW9uIFwiICsgdCk7XG4gICAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCBcImR1cmF0aW9uXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCBcImVuZGVkXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRlZDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwgXCJkcm9wcGVkRXZlbnRzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCBcImRyb3BwZWRMaW5rc0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkTGlua3NDb3VudDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgZS5wcm90b3R5cGUuX2lzU3BhbkVuZGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kZWQgJiYgci53YXJuKFwiQ2FuIG5vdCBleGVjdXRlIHRoZSBvcGVyYXRpb24gb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogXCIgKyB0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkICsgXCIsIHNwYW5JZDogXCIgKyB0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWQgKyBcIn1cIiksIHRoaXMuX2VuZGVkO1xuICAgIH0sIGUucHJvdG90eXBlLl90cnVuY2F0ZVRvTGltaXRVdGlsID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHQubGVuZ3RoIDw9IHIgPyB0IDogdC5zdWJzdHJpbmcoMCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX3RydW5jYXRlVG9TaXplID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHIkMSA9IHRoaXMsIG4gPSB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0O1xuICAgICAgcmV0dXJuIG4gPD0gMCA/IChyLndhcm4oXCJBdHRyaWJ1dGUgdmFsdWUgbGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgZ290IFwiICsgbiksIHQpIDogdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiA/IHRoaXMuX3RydW5jYXRlVG9MaW1pdFV0aWwodCwgbikgOiBBcnJheS5pc0FycmF5KHQpID8gdC5tYXAoZnVuY3Rpb24obykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJzdHJpbmdcIiA/IHIkMS5fdHJ1bmNhdGVUb0xpbWl0VXRpbChvLCBuKSA6IG87XG4gICAgICB9KSA6IHQ7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBQO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PVF9SRUNPUkQgPSAwXSA9IFwiTk9UX1JFQ09SRFwiLCBlW2UuUkVDT1JEID0gMV0gPSBcIlJFQ09SRFwiLCBlW2UuUkVDT1JEX0FORF9TQU1QTEVEID0gMl0gPSBcIlJFQ09SRF9BTkRfU0FNUExFRFwiO1xufSkoUCB8fCAoUCA9IHt9KSk7XG52YXIgSSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogUC5OT1RfUkVDT1JEXG4gICAgICB9O1xuICAgIH0sIGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJBbHdheXNPZmZTYW1wbGVyXCI7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBnID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2lzaW9uOiBQLlJFQ09SRF9BTkRfU0FNUExFRFxuICAgICAgfTtcbiAgICB9LCBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiQWx3YXlzT25TYW1wbGVyXCI7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBEID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIsIG4sIG8sIGk7XG4gICAgICB0aGlzLl9yb290ID0gdC5yb290LCB0aGlzLl9yb290IHx8IChuZSQxKG5ldyBFcnJvcihcIlBhcmVudEJhc2VkU2FtcGxlciBtdXN0IGhhdmUgYSByb290IHNhbXBsZXIgY29uZmlndXJlZFwiKSksIHRoaXMuX3Jvb3QgPSBuZXcgZygpKSwgdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZCA9IChyID0gdC5yZW1vdGVQYXJlbnRTYW1wbGVkKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogbmV3IGcoKSwgdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZCA9IChuID0gdC5yZW1vdGVQYXJlbnROb3RTYW1wbGVkKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogbmV3IEkoKSwgdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkID0gKG8gPSB0LmxvY2FsUGFyZW50U2FtcGxlZCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IG5ldyBnKCksIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZCA9IChpID0gdC5sb2NhbFBhcmVudE5vdFNhbXBsZWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBuZXcgSSgpO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24odCwgciwgbiwgbywgaSwgYSkge1xuICAgICAgdmFyIHMgPSBHZS5nZXRTcGFuQ29udGV4dCh0KTtcbiAgICAgIHJldHVybiAhcyB8fCAha24ocykgPyB0aGlzLl9yb290LnNob3VsZFNhbXBsZSh0LCByLCBuLCBvLCBpLCBhKSA6IHMuaXNSZW1vdGUgPyBzLnRyYWNlRmxhZ3MgJiBYdCQxLlNBTVBMRUQgPyB0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCByLCBuLCBvLCBpLCBhKSA6IHRoaXMuX3JlbW90ZVBhcmVudE5vdFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIHIsIG4sIG8sIGksIGEpIDogcy50cmFjZUZsYWdzICYgWHQkMS5TQU1QTEVEID8gdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCByLCBuLCBvLCBpLCBhKSA6IHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgciwgbiwgbywgaSwgYSk7XG4gICAgfSwgZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlBhcmVudEJhc2Vke3Jvb3Q9XCIgKyB0aGlzLl9yb290LnRvU3RyaW5nKCkgKyBcIiwgcmVtb3RlUGFyZW50U2FtcGxlZD1cIiArIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQudG9TdHJpbmcoKSArIFwiLCByZW1vdGVQYXJlbnROb3RTYW1wbGVkPVwiICsgdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpICsgXCIsIGxvY2FsUGFyZW50U2FtcGxlZD1cIiArIHRoaXMuX2xvY2FsUGFyZW50U2FtcGxlZC50b1N0cmluZygpICsgXCIsIGxvY2FsUGFyZW50Tm90U2FtcGxlZD1cIiArIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpICsgXCJ9XCI7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBXID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gMCksIHRoaXMuX3JhdGlvID0gdCwgdGhpcy5fcmF0aW8gPSB0aGlzLl9ub3JtYWxpemUodCksIHRoaXMuX3VwcGVyQm91bmQgPSBNYXRoLmZsb29yKHRoaXMuX3JhdGlvICogNDI5NDk2NzI5NSk7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogaHMocikgJiYgdGhpcy5fYWNjdW11bGF0ZShyKSA8IHRoaXMuX3VwcGVyQm91bmQgPyBQLlJFQ09SRF9BTkRfU0FNUExFRCA6IFAuTk9UX1JFQ09SRFxuICAgICAgfTtcbiAgICB9LCBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiVHJhY2VJZFJhdGlvQmFzZWR7XCIgKyB0aGlzLl9yYXRpbyArIFwifVwiO1xuICAgIH0sIGUucHJvdG90eXBlLl9ub3JtYWxpemUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJudW1iZXJcIiB8fCBpc05hTih0KSA/IDAgOiB0ID49IDEgPyAxIDogdCA8PSAwID8gMCA6IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuX2FjY3VtdWxhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICBmb3IgKHZhciByID0gMCwgbiA9IDA7IG4gPCB0Lmxlbmd0aCAvIDg7IG4rKykge1xuICAgICAgICB2YXIgbyA9IG4gKiA4LCBpID0gcGFyc2VJbnQodC5zbGljZShvLCBvICsgOCksIDE2KTtcbiAgICAgICAgciA9IChyIF4gaSkgPj4+IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBlO1xuICB9KClcbiksIFJ0ID0gciQxLkFsd2F5c09uLCBFID0gMTtcbmZ1bmN0aW9uIEooKSB7XG4gIHZhciBlID0gT1QoKTtcbiAgcmV0dXJuIHtcbiAgICBzYW1wbGVyOiAkKGUpLFxuICAgIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzOiAzZTQsXG4gICAgZ2VuZXJhbExpbWl0czoge1xuICAgICAgYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDogZS5PVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiBlLk9URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUXG4gICAgfSxcbiAgICBzcGFuTGltaXRzOiB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiBlLk9URUxfU1BBTl9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlULFxuICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogZS5PVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlULFxuICAgICAgbGlua0NvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0xJTktfQ09VTlRfTElNSVQsXG4gICAgICBldmVudENvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0VWRU5UX0NPVU5UX0xJTUlULFxuICAgICAgYXR0cmlidXRlUGVyRXZlbnRDb3VudExpbWl0OiBlLk9URUxfU1BBTl9BVFRSSUJVVEVfUEVSX0VWRU5UX0NPVU5UX0xJTUlULFxuICAgICAgYXR0cmlidXRlUGVyTGlua0NvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0FUVFJJQlVURV9QRVJfTElOS19DT1VOVF9MSU1JVFxuICAgIH0sXG4gICAgbWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0czogITBcbiAgfTtcbn1cbmZ1bmN0aW9uICQoZSkge1xuICBzd2l0Y2ggKGUgPT09IHZvaWQgMCAmJiAoZSA9IE9UKCkpLCBlLk9URUxfVFJBQ0VTX1NBTVBMRVIpIHtcbiAgICBjYXNlIHIkMS5BbHdheXNPbjpcbiAgICAgIHJldHVybiBuZXcgZygpO1xuICAgIGNhc2UgciQxLkFsd2F5c09mZjpcbiAgICAgIHJldHVybiBuZXcgSSgpO1xuICAgIGNhc2UgciQxLlBhcmVudEJhc2VkQWx3YXlzT246XG4gICAgICByZXR1cm4gbmV3IEQoe1xuICAgICAgICByb290OiBuZXcgZygpXG4gICAgICB9KTtcbiAgICBjYXNlIHIkMS5QYXJlbnRCYXNlZEFsd2F5c09mZjpcbiAgICAgIHJldHVybiBuZXcgRCh7XG4gICAgICAgIHJvb3Q6IG5ldyBJKClcbiAgICAgIH0pO1xuICAgIGNhc2UgciQxLlRyYWNlSWRSYXRpbzpcbiAgICAgIHJldHVybiBuZXcgVyhZKGUpKTtcbiAgICBjYXNlIHIkMS5QYXJlbnRCYXNlZFRyYWNlSWRSYXRpbzpcbiAgICAgIHJldHVybiBuZXcgRCh7XG4gICAgICAgIHJvb3Q6IG5ldyBXKFkoZSkpXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHIuZXJyb3IoJ09URUxfVFJBQ0VTX1NBTVBMRVIgdmFsdWUgXCInICsgZS5PVEVMX1RSQUNFU19TQU1QTEVSICsgXCIgaW52YWxpZCwgZGVmYXVsdGluZyB0byBcIiArIFJ0ICsgJ1wiLicpLCBuZXcgZygpO1xuICB9XG59XG5mdW5jdGlvbiBZKGUpIHtcbiAgaWYgKGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgPT09IHZvaWQgMCB8fCBlLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHID09PSBcIlwiKVxuICAgIHJldHVybiByLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgaXMgYmxhbmssIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFO1xuICB2YXIgdCA9IE51bWJlcihlLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHKTtcbiAgcmV0dXJuIGlzTmFOKHQpID8gKHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRz1cIiArIGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgKyBcIiB3YXMgZ2l2ZW4sIGJ1dCBpdCBpcyBpbnZhbGlkLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRSkgOiB0IDwgMCB8fCB0ID4gMSA/IChyLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkc9XCIgKyBlLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHICsgXCIgd2FzIGdpdmVuLCBidXQgaXQgaXMgb3V0IG9mIHJhbmdlIChbMC4uMV0pLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRSkgOiB0O1xufVxuZnVuY3Rpb24gSXQoZSkge1xuICB2YXIgdCA9IHtcbiAgICBzYW1wbGVyOiAkKClcbiAgfSwgciA9IEooKSwgbiA9IE9iamVjdC5hc3NpZ24oe30sIHIsIHQsIGUpO1xuICByZXR1cm4gbi5nZW5lcmFsTGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgci5nZW5lcmFsTGltaXRzLCBlLmdlbmVyYWxMaW1pdHMgfHwge30pLCBuLnNwYW5MaW1pdHMgPSBPYmplY3QuYXNzaWduKHt9LCByLnNwYW5MaW1pdHMsIGUuc3BhbkxpbWl0cyB8fCB7fSksIG47XG59XG5mdW5jdGlvbiBNdChlKSB7XG4gIHZhciB0LCByLCBuLCBvLCBpLCBhLCBzLCBsLCB1LCBwLCBmLCBjLCB5ID0gT2JqZWN0LmFzc2lnbih7fSwgZS5zcGFuTGltaXRzKSwgbSA9IExUKCk7XG4gIHJldHVybiB5LmF0dHJpYnV0ZUNvdW50TGltaXQgPSAoYSA9IChpID0gKG8gPSAociA9ICh0ID0gZS5zcGFuTGltaXRzKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmF0dHJpYnV0ZUNvdW50TGltaXQpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiAobiA9IGUuZ2VuZXJhbExpbWl0cykgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5hdHRyaWJ1dGVDb3VudExpbWl0KSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbS5PVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlUKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogbS5PVEVMX0FUVFJJQlVURV9DT1VOVF9MSU1JVCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IFAkMSwgeS5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID0gKGMgPSAoZiA9IChwID0gKGwgPSAocyA9IGUuc3BhbkxpbWl0cykgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0KSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogKHUgPSBlLmdlbmVyYWxMaW1pdHMpID09PSBudWxsIHx8IHUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHUuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCkgIT09IG51bGwgJiYgcCAhPT0gdm9pZCAwID8gcCA6IG0uT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQpICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiBtLk9URUxfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IE0sIE9iamVjdC5hc3NpZ24oe30sIGUsIHsgc3BhbkxpbWl0czogeSB9KTtcbn1cbnZhciBOdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIkMSkge1xuICAgICAgdGhpcy5fZXhwb3J0ZXIgPSB0LCB0aGlzLl9pc0V4cG9ydGluZyA9ICExLCB0aGlzLl9maW5pc2hlZFNwYW5zID0gW10sIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID0gMDtcbiAgICAgIHZhciBuID0gT1QoKTtcbiAgICAgIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9IHR5cGVvZiAociQxID09IG51bGwgPyB2b2lkIDAgOiByJDEubWF4RXhwb3J0QmF0Y2hTaXplKSA9PSBcIm51bWJlclwiID8gciQxLm1heEV4cG9ydEJhdGNoU2l6ZSA6IG4uT1RFTF9CU1BfTUFYX0VYUE9SVF9CQVRDSF9TSVpFLCB0aGlzLl9tYXhRdWV1ZVNpemUgPSB0eXBlb2YgKHIkMSA9PSBudWxsID8gdm9pZCAwIDogciQxLm1heFF1ZXVlU2l6ZSkgPT0gXCJudW1iZXJcIiA/IHIkMS5tYXhRdWV1ZVNpemUgOiBuLk9URUxfQlNQX01BWF9RVUVVRV9TSVpFLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyA9IHR5cGVvZiAociQxID09IG51bGwgPyB2b2lkIDAgOiByJDEuc2NoZWR1bGVkRGVsYXlNaWxsaXMpID09IFwibnVtYmVyXCIgPyByJDEuc2NoZWR1bGVkRGVsYXlNaWxsaXMgOiBuLk9URUxfQlNQX1NDSEVEVUxFX0RFTEFZLCB0aGlzLl9leHBvcnRUaW1lb3V0TWlsbGlzID0gdHlwZW9mIChyJDEgPT0gbnVsbCA/IHZvaWQgMCA6IHIkMS5leHBvcnRUaW1lb3V0TWlsbGlzKSA9PSBcIm51bWJlclwiID8gciQxLmV4cG9ydFRpbWVvdXRNaWxsaXMgOiBuLk9URUxfQlNQX0VYUE9SVF9USU1FT1VULCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgWnIodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPiB0aGlzLl9tYXhRdWV1ZVNpemUgJiYgKHIud2FybihcIkJhdGNoU3BhblByb2Nlc3NvcjogbWF4RXhwb3J0QmF0Y2hTaXplIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBtYXhRdWV1ZVNpemUsIHNldHRpbmcgbWF4RXhwb3J0QmF0Y2hTaXplIHRvIG1hdGNoIG1heFF1ZXVlU2l6ZVwiKSwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdGhpcy5fbWF4UXVldWVTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQgPyB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZSA6IHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgfSwgZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCB8fCB0LnNwYW5Db250ZXh0KCkudHJhY2VGbGFncyAmIFh0JDEuU0FNUExFRCAmJiB0aGlzLl9hZGRUb0J1ZmZlcih0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHQub25TaHV0ZG93bigpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHQuX2ZsdXNoQWxsKCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLl9hZGRUb0J1ZmZlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA+PSB0aGlzLl9tYXhRdWV1ZVNpemUpIHtcbiAgICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPT09IDAgJiYgci5kZWJ1ZyhcIm1heFF1ZXVlU2l6ZSByZWFjaGVkLCBkcm9wcGluZyBzcGFuc1wiKSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQrKztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPiAwICYmIChyLndhcm4oXCJEcm9wcGVkIFwiICsgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgKyBcIiBzcGFucyBiZWNhdXNlIG1heFF1ZXVlU2l6ZSByZWFjaGVkXCIpLCB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9IDApLCB0aGlzLl9maW5pc2hlZFNwYW5zLnB1c2godCksIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgIH0sIGUucHJvdG90eXBlLl9mbHVzaEFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbyA9IFtdLCBpID0gTWF0aC5jZWlsKHQuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoIC8gdC5fbWF4RXhwb3J0QmF0Y2hTaXplKSwgYSA9IDAsIHMgPSBpOyBhIDwgczsgYSsrKVxuICAgICAgICAgIG8ucHVzaCh0Ll9mbHVzaE9uZUJhdGNoKCkpO1xuICAgICAgICBQcm9taXNlLmFsbChvKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHIoKTtcbiAgICAgICAgfSkuY2F0Y2gobik7XG4gICAgICB9KTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZmx1c2hPbmVCYXRjaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgcmV0dXJuIHRoaXMuX2NsZWFyVGltZXIoKSwgdGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPT09IDAgPyBQcm9taXNlLnJlc29sdmUoKSA6IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICAgICAgdmFyIG8gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG4obmV3IEVycm9yKFwiVGltZW91dFwiKSk7XG4gICAgICAgIH0sIHQuX2V4cG9ydFRpbWVvdXRNaWxsaXMpO1xuICAgICAgICBPZS53aXRoKFckMShPZS5hY3RpdmUoKSksIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpO1xuICAgICAgICAgIHQuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoIDw9IHQuX21heEV4cG9ydEJhdGNoU2l6ZSA/IChpID0gdC5fZmluaXNoZWRTcGFucywgdC5fZmluaXNoZWRTcGFucyA9IFtdKSA6IGkgPSB0Ll9maW5pc2hlZFNwYW5zLnNwbGljZSgwLCB0Ll9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgIGZvciAodmFyIGEkMSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHQuX2V4cG9ydGVyLmV4cG9ydChpLCBmdW5jdGlvbihmKSB7XG4gICAgICAgICAgICAgIHZhciBjO1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQobyksIGYuY29kZSA9PT0gYS5TVUNDRVNTID8gcigpIDogbigoYyA9IGYuZXJyb3IpICE9PSBudWxsICYmIGMgIT09IHZvaWQgMCA/IGMgOiBuZXcgRXJyb3IoXCJCYXRjaFNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZFwiKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBzID0gbnVsbCwgbCA9IDAsIHUgPSBpLmxlbmd0aDsgbCA8IHU7IGwrKykge1xuICAgICAgICAgICAgdmFyIHAgPSBpW2xdO1xuICAgICAgICAgICAgcC5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nICYmIHAucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcyAmJiAocyA/PyAocyA9IFtdKSwgcy5wdXNoKHAucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcygpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMgPT09IG51bGwgPyBhJDEoKSA6IFByb21pc2UuYWxsKHMpLnRoZW4oYSQxLCBmdW5jdGlvbihmKSB7XG4gICAgICAgICAgICBuZSQxKGYpLCBuKGYpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLl9tYXliZVN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIGlmICghdGhpcy5faXNFeHBvcnRpbmcpIHtcbiAgICAgICAgdmFyIHIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0Ll9pc0V4cG9ydGluZyA9ICEwLCB0Ll9mbHVzaE9uZUJhdGNoKCkuZmluYWxseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHQuX2lzRXhwb3J0aW5nID0gITEsIHQuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID4gMCAmJiAodC5fY2xlYXJUaW1lcigpLCB0Ll9tYXliZVN0YXJ0VGltZXIoKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obikge1xuICAgICAgICAgICAgdC5faXNFeHBvcnRpbmcgPSAhMSwgbmUkMShuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSlcbiAgICAgICAgICByZXR1cm4gcigpO1xuICAgICAgICB0aGlzLl90aW1lciA9PT0gdm9pZCAwICYmICh0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHIoKTtcbiAgICAgICAgfSwgdGhpcy5fc2NoZWR1bGVkRGVsYXlNaWxsaXMpLCBzcih0aGlzLl90aW1lcikpO1xuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLl9jbGVhclRpbWVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl90aW1lciAhPT0gdm9pZCAwICYmIChjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLCB0aGlzLl90aW1lciA9IHZvaWQgMCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBCdCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihuLCBvKSB7XG4gICAgICBuLl9fcHJvdG9fXyA9IG87XG4gICAgfSB8fCBmdW5jdGlvbihuLCBvKSB7XG4gICAgICBmb3IgKHZhciBpIGluIG8pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBpKSAmJiAobltpXSA9IG9baV0pO1xuICAgIH0sIGUodCwgcik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIGUodCwgcik7XG4gICAgZnVuY3Rpb24gbigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICAgIH1cbiAgICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKG4ucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBuKCkpO1xuICB9O1xufSgpLCBEdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbihlKSB7XG4gICAgQnQodCwgZSk7XG4gICAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgICB2YXIgbyA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgICAgcmV0dXJuIG8ub25Jbml0KG4pLCBvO1xuICAgIH1cbiAgICByZXR1cm4gdC5wcm90b3R5cGUub25Jbml0ID0gZnVuY3Rpb24ocikge1xuICAgICAgdmFyIG4gPSB0aGlzO1xuICAgICAgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZGlzYWJsZUF1dG9GbHVzaE9uRG9jdW1lbnRIaWRlKSAhPT0gITAgJiYgdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIgJiYgKHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09IFwiaGlkZGVuXCIgJiYgbi5mb3JjZUZsdXNoKCkuY2F0Y2goZnVuY3Rpb24obykge1xuICAgICAgICAgIG5lJDEobyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBuLmZvcmNlRmx1c2goKS5jYXRjaChmdW5jdGlvbihvKSB7XG4gICAgICAgICAgbmUkMShvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIpLCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lcikpO1xuICAgIH0sIHQucHJvdG90eXBlLm9uU2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmICh0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdGhpcy5fdmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyKSwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lciAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lcikpO1xuICAgIH0sIHQ7XG4gIH0oTnQpXG4pLCBVdCA9IDgsIEZ0ID0gMTYsIEd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZVRyYWNlSWQgPSBxKEZ0KSwgdGhpcy5nZW5lcmF0ZVNwYW5JZCA9IHEoVXQpO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCB4ID0gQXJyYXkoMzIpO1xuZnVuY3Rpb24gcShlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUgKiAyOyByKyspXG4gICAgICB4W3JdID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpICsgNDgsIHhbcl0gPj0gNTggJiYgKHhbcl0gKz0gMzkpO1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHguc2xpY2UoMCwgZSAqIDIpKTtcbiAgfTtcbn1cbnZhciB6dCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIsIG4pIHtcbiAgICAgIHRoaXMuX3RyYWNlclByb3ZpZGVyID0gbjtcbiAgICAgIHZhciBvID0gSXQocik7XG4gICAgICB0aGlzLl9zYW1wbGVyID0gby5zYW1wbGVyLCB0aGlzLl9nZW5lcmFsTGltaXRzID0gby5nZW5lcmFsTGltaXRzLCB0aGlzLl9zcGFuTGltaXRzID0gby5zcGFuTGltaXRzLCB0aGlzLl9pZEdlbmVyYXRvciA9IHIuaWRHZW5lcmF0b3IgfHwgbmV3IEd0KCksIHRoaXMucmVzb3VyY2UgPSBuLnJlc291cmNlLCB0aGlzLmluc3RydW1lbnRhdGlvbkxpYnJhcnkgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciQxLCBuKSB7XG4gICAgICB2YXIgbywgaSwgYTtcbiAgICAgIHIkMSA9PT0gdm9pZCAwICYmIChyJDEgPSB7fSksIG4gPT09IHZvaWQgMCAmJiAobiA9IE9lLmFjdGl2ZSgpKSwgciQxLnJvb3QgJiYgKG4gPSBHZS5kZWxldGVTcGFuKG4pKTtcbiAgICAgIHZhciBzID0gR2UuZ2V0U3BhbihuKTtcbiAgICAgIGlmICh3KG4pKSB7XG4gICAgICAgIHIuZGVidWcoXCJJbnN0cnVtZW50YXRpb24gc3VwcHJlc3NlZCwgcmV0dXJuaW5nIE5vb3AgU3BhblwiKTtcbiAgICAgICAgdmFyIGwgPSBHZS53cmFwU3BhbkNvbnRleHQoZHMpO1xuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH1cbiAgICAgIHZhciB1ID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5zcGFuQ29udGV4dCgpLCBwJDEgPSB0aGlzLl9pZEdlbmVyYXRvci5nZW5lcmF0ZVNwYW5JZCgpLCBmLCBjLCB5O1xuICAgICAgIXUgfHwgIUdlLmlzU3BhbkNvbnRleHRWYWxpZCh1KSA/IGYgPSB0aGlzLl9pZEdlbmVyYXRvci5nZW5lcmF0ZVRyYWNlSWQoKSA6IChmID0gdS50cmFjZUlkLCBjID0gdS50cmFjZVN0YXRlLCB5ID0gdS5zcGFuSWQpO1xuICAgICAgdmFyIG0gPSAobyA9IHIkMS5raW5kKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbHQuSU5URVJOQUwsIEYgPSAoKGkgPSByJDEubGlua3MpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBbXSkubWFwKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZXh0OiBqLmNvbnRleHQsXG4gICAgICAgICAgYXR0cmlidXRlczogWmUoai5hdHRyaWJ1dGVzKVxuICAgICAgICB9O1xuICAgICAgfSksIEcgPSBaZShyJDEuYXR0cmlidXRlcyksIGIgPSB0aGlzLl9zYW1wbGVyLnNob3VsZFNhbXBsZShuLCBmLCB0LCBtLCBHLCBGKTtcbiAgICAgIGMgPSAoYSA9IGIudHJhY2VTdGF0ZSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IGM7XG4gICAgICB2YXIgdHQgPSBiLmRlY2lzaW9uID09PSBwLlJFQ09SRF9BTkRfU0FNUExFRCA/IFh0JDEuU0FNUExFRCA6IFh0JDEuTk9ORSwgeiA9IHsgdHJhY2VJZDogZiwgc3BhbklkOiBwJDEsIHRyYWNlRmxhZ3M6IHR0LCB0cmFjZVN0YXRlOiBjIH07XG4gICAgICBpZiAoYi5kZWNpc2lvbiA9PT0gcC5OT1RfUkVDT1JEKSB7XG4gICAgICAgIHIuZGVidWcoXCJSZWNvcmRpbmcgaXMgb2ZmLCBwcm9wYWdhdGluZyBjb250ZXh0IGluIGEgbm9uLXJlY29yZGluZyBzcGFuXCIpO1xuICAgICAgICB2YXIgbCA9IEdlLndyYXBTcGFuQ29udGV4dCh6KTtcbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICB2YXIgZXQgPSBaZShPYmplY3QuYXNzaWduKEcsIGIuYXR0cmlidXRlcykpLCBydCA9IG5ldyBPdCh0aGlzLCBuLCB0LCB6LCBtLCB5LCBGLCByJDEuc3RhcnRUaW1lLCB2b2lkIDAsIGV0KTtcbiAgICAgIHJldHVybiBydDtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgYSwgcztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gcyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBzID0gbikgOiAoaSA9IHIsIGEgPSBuLCBzID0gbyk7XG4gICAgICAgIHZhciBsID0gYSA/PyBPZS5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBwID0gR2Uuc2V0U3BhbihsLCB1KTtcbiAgICAgICAgcmV0dXJuIE9lLndpdGgocCwgcywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5nZXRHZW5lcmFsTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhbExpbWl0cztcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRTcGFuTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkxpbWl0cztcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2VyUHJvdmlkZXIuZ2V0QWN0aXZlU3BhblByb2Nlc3NvcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgTyA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHIgPSB0ICYmIGVbdF0sIG4gPSAwO1xuICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiBuID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW24rK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBLID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fc3BhblByb2Nlc3NvcnMgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIHIsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuZm9yY2VGbHVzaCgpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0ID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKHIgPSBvLnJldHVybikgJiYgci5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocykge1xuICAgICAgICBQcm9taXNlLmFsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHMoKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgIG5lJDEobCB8fCBuZXcgRXJyb3IoXCJNdWx0aVNwYW5Qcm9jZXNzb3I6IGZvcmNlRmx1c2ggZmFpbGVkXCIpKSwgcygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICB2YXIgbiwgbztcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgYSA9IGkubmV4dCgpOyAhYS5kb25lOyBhID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgcyA9IGEudmFsdWU7XG4gICAgICAgICAgcy5vblN0YXJ0KHQsIHIpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIG4gPSB7IGVycm9yOiBsIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByLCBuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IE8odGhpcy5fc3BhblByb2Nlc3NvcnMpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICAgIHZhciBhID0gaS52YWx1ZTtcbiAgICAgICAgICBhLm9uRW5kKHQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHIgPSB7IGVycm9yOiBzIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGkgJiYgIWkuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIHIsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuc2h1dGRvd24oKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdCA9IHsgZXJyb3I6IHMgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChyID0gby5yZXR1cm4pICYmIHIuY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwobikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBzKCk7XG4gICAgICAgIH0sIGwpO1xuICAgICAgfSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBqdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFZ0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBrdCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBTO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLnJlc29sdmVkID0gMF0gPSBcInJlc29sdmVkXCIsIGVbZS50aW1lb3V0ID0gMV0gPSBcInRpbWVvdXRcIiwgZVtlLmVycm9yID0gMl0gPSBcImVycm9yXCIsIGVbZS51bnJlc29sdmVkID0gM10gPSBcInVucmVzb2x2ZWRcIjtcbn0pKFMgfHwgKFMgPSB7fSkpO1xudmFyIHJlID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pO1xuICAgICAgdmFyIHIsIG47XG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMgPSBbXSwgdGhpcy5fdHJhY2VycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICB2YXIgbyA9IGtyKHt9LCBKKCksIE10KHQpKTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlID0gKHIgPSBvLnJlc291cmNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUiQxLmVtcHR5KCksIG8ubWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0cyAmJiAodGhpcy5yZXNvdXJjZSA9IFIkMS5kZWZhdWx0KCkubWVyZ2UodGhpcy5yZXNvdXJjZSkpLCB0aGlzLl9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvLCB7XG4gICAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlXG4gICAgICB9KSwgISgobiA9IHQuc3BhblByb2Nlc3NvcnMpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCkgJiYgbi5sZW5ndGgpXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyA9IGt0KFtdLCBWdCh0LnNwYW5Qcm9jZXNzb3JzKSwgITEpLCB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBuZXcgSyh0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5fYnVpbGRFeHBvcnRlckZyb21FbnYoKTtcbiAgICAgICAgaWYgKGkgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHZhciBhID0gbmV3IER0KGkpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IGE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBqdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG8gPSB0ICsgXCJAXCIgKyAociB8fCBcIlwiKSArIFwiOlwiICsgKChuID09IG51bGwgPyB2b2lkIDAgOiBuLnNjaGVtYVVybCkgfHwgXCJcIik7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2Vycy5oYXMobykgfHwgdGhpcy5fdHJhY2Vycy5zZXQobywgbmV3IHp0KHsgbmFtZTogdCwgdmVyc2lvbjogciwgc2NoZW1hVXJsOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLnNjaGVtYVVybCB9LCB0aGlzLl9jb25maWcsIHRoaXMpKSwgdGhpcy5fdHJhY2Vycy5nZXQobyk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkU3BhblByb2Nlc3NvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycy5sZW5ndGggPT09IDAgJiYgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yLnNodXRkb3duKCkuY2F0Y2goZnVuY3Rpb24ociQxKSB7XG4gICAgICAgIHJldHVybiByLmVycm9yKFwiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHNodXRkb3duIGN1cnJlbnQgc3BhbiBwcm9jZXNzb3JcIiwgciQxKTtcbiAgICAgIH0pLCB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMucHVzaCh0KSwgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IEsodGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yO1xuICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pLCBHZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlcih0aGlzKSwgdC5wcm9wYWdhdG9yID09PSB2b2lkIDAgJiYgKHQucHJvcGFnYXRvciA9IHRoaXMuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYoKSksIHQuY29udGV4dE1hbmFnZXIgJiYgT2Uuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIodC5jb250ZXh0TWFuYWdlciksIHQucHJvcGFnYXRvciAmJiB5Xy5zZXRHbG9iYWxQcm9wYWdhdG9yKHQucHJvcGFnYXRvcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzLl9jb25maWcuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMsIHIgPSB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICB2YXIgaSwgYSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvKG5ldyBFcnJvcihcIlNwYW4gcHJvY2Vzc29yIGRpZCBub3QgY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHBlcmlvZCBvZiBcIiArIHQgKyBcIiBtc1wiKSksIGkgPSBTLnRpbWVvdXQ7XG4gICAgICAgICAgfSwgdCk7XG4gICAgICAgICAgbi5mb3JjZUZsdXNoKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChhKSwgaSAhPT0gUy50aW1lb3V0ICYmIChpID0gUy5yZXNvbHZlZCwgbyhpKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGEpLCBpID0gUy5lcnJvciwgbyhzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIFByb21pc2UuYWxsKHIpLnRoZW4oZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHZhciBhID0gaS5maWx0ZXIoZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgcmV0dXJuIHMgIT09IFMucmVzb2x2ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYS5sZW5ndGggPiAwID8gbyhhKSA6IG4oKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHJldHVybiBvKFtpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0UHJvcGFnYXRvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuIChyID0gdGhpcy5jb25zdHJ1Y3Rvci5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzLmdldCh0KSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcigpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRTcGFuRXhwb3J0ZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAociA9IHRoaXMuY29uc3RydWN0b3IuX3JlZ2lzdGVyZWRFeHBvcnRlcnMuZ2V0KHQpKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgciQxID0gQXJyYXkuZnJvbShuZXcgU2V0KE9UKCkuT1RFTF9QUk9QQUdBVE9SUykpLCBuID0gciQxLm1hcChmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gdC5fZ2V0UHJvcGFnYXRvcihpKTtcbiAgICAgICAgcmV0dXJuIGEgfHwgci53YXJuKCdQcm9wYWdhdG9yIFwiJyArIGkgKyAnXCIgcmVxdWVzdGVkIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5hdmFpbGFibGUuJyksIGE7XG4gICAgICB9KSwgbyA9IG4ucmVkdWNlKGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgICAgcmV0dXJuIGEgJiYgaS5wdXNoKGEpLCBpO1xuICAgICAgfSwgW10pO1xuICAgICAgaWYgKG8ubGVuZ3RoICE9PSAwKVxuICAgICAgICByZXR1cm4gciQxLmxlbmd0aCA9PT0gMSA/IG9bMF0gOiBuZXcgcHIoe1xuICAgICAgICAgIHByb3BhZ2F0b3JzOiBvXG4gICAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLl9idWlsZEV4cG9ydGVyRnJvbUVudiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSBPVCgpLk9URUxfVFJBQ0VTX0VYUE9SVEVSO1xuICAgICAgaWYgKCEodCA9PT0gXCJub25lXCIgfHwgdCA9PT0gXCJcIikpIHtcbiAgICAgICAgdmFyIHIkMSA9IHRoaXMuX2dldFNwYW5FeHBvcnRlcih0KTtcbiAgICAgICAgcmV0dXJuIHIkMSB8fCByLmVycm9yKCdFeHBvcnRlciBcIicgKyB0ICsgJ1wiIHJlcXVlc3RlZCB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuYXZhaWxhYmxlLicpLCByJDE7XG4gICAgICB9XG4gICAgfSwgZS5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1xuICAgICAgW1widHJhY2Vjb250ZXh0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IGJyKCk7XG4gICAgICB9XSxcbiAgICAgIFtcImJhZ2dhZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgSmUoKTtcbiAgICAgIH1dXG4gICAgXSksIGUuX3JlZ2lzdGVyZWRFeHBvcnRlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBlO1xuICB9KClcbiksIEh0ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIG5lID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZFNwYW5zKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZFNwYW5zKFtdKSwgdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLl9leHBvcnRJbmZvID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHQucmVzb3VyY2UuYXR0cmlidXRlc1xuICAgICAgICB9LFxuICAgICAgICBpbnN0cnVtZW50YXRpb25TY29wZTogdC5pbnN0cnVtZW50YXRpb25MaWJyYXJ5LFxuICAgICAgICB0cmFjZUlkOiB0LnNwYW5Db250ZXh0KCkudHJhY2VJZCxcbiAgICAgICAgcGFyZW50SWQ6IHQucGFyZW50U3BhbklkLFxuICAgICAgICB0cmFjZVN0YXRlOiAociA9IHQuc3BhbkNvbnRleHQoKS50cmFjZVN0YXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnNlcmlhbGl6ZSgpLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGlkOiB0LnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgICBraW5kOiB0LmtpbmQsXG4gICAgICAgIHRpbWVzdGFtcDoga2UodC5zdGFydFRpbWUpLFxuICAgICAgICBkdXJhdGlvbjoga2UodC5kdXJhdGlvbiksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHQuYXR0cmlidXRlcyxcbiAgICAgICAgc3RhdHVzOiB0LnN0YXR1cyxcbiAgICAgICAgZXZlbnRzOiB0LmV2ZW50cyxcbiAgICAgICAgbGlua3M6IHQubGlua3NcbiAgICAgIH07XG4gICAgfSwgZS5wcm90b3R5cGUuX3NlbmRTcGFucyA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHZhciBuLCBvO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgaSA9IEh0KHQpLCBhJDEgPSBpLm5leHQoKTsgIWEkMS5kb25lOyBhJDEgPSBpLm5leHQoKSkge1xuICAgICAgICAgIHZhciBzID0gYSQxLnZhbHVlO1xuICAgICAgICAgIGNvbnNvbGUuZGlyKHRoaXMuX2V4cG9ydEluZm8ocyksIHsgZGVwdGg6IDMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgbiA9IHsgZXJyb3I6IGwgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYSQxICYmICFhJDEuZG9uZSAmJiAobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyKVxuICAgICAgICByZXR1cm4gcih7IGNvZGU6IGEuU1VDQ0VTUyB9KTtcbiAgICB9LCBlO1xuICB9KClcbiksIFF0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBYdCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBpZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdLCB0aGlzLl9zdG9wcGVkID0gITE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICB2YXIgbjtcbiAgICAgIGlmICh0aGlzLl9zdG9wcGVkKVxuICAgICAgICByZXR1cm4gcih7XG4gICAgICAgICAgY29kZTogYS5GQUlMRUQsXG4gICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkV4cG9ydGVyIGhhcyBiZWVuIHN0b3BwZWRcIilcbiAgICAgICAgfSk7XG4gICAgICAobiA9IHRoaXMuX2ZpbmlzaGVkU3BhbnMpLnB1c2guYXBwbHkobiwgWHQoW10sIFF0KHQpLCAhMSkpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcih7IGNvZGU6IGEuU1VDQ0VTUyB9KTtcbiAgICAgIH0sIDApO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RvcHBlZCA9ICEwLCB0aGlzLl9maW5pc2hlZFNwYW5zID0gW10sIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgIH0sIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIH0sIGUucHJvdG90eXBlLmdldEZpbmlzaGVkU3BhbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZFNwYW5zO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgV3QgPSBmdW5jdGlvbihlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIG8oaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihhKSB7XG4gICAgICBhKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgYSkge1xuICAgIGZ1bmN0aW9uIHMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBhKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGEoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUocCkge1xuICAgICAgcC5kb25lID8gaShwLnZhbHVlKSA6IG8ocC52YWx1ZSkudGhlbihzLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIFl0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgaSwgYTtcbiAgcmV0dXJuIGEgPSB7IG5leHQ6IHMoMCksIHRocm93OiBzKDEpLCByZXR1cm46IHMoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gcyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBsKFt1LCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgbyAmJiAoaSA9IHVbMF0gJiAyID8gby5yZXR1cm4gOiB1WzBdID8gby50aHJvdyB8fCAoKGkgPSBvLnJldHVybikgJiYgaS5jYWxsKG8pLCAwKSA6IG8ubmV4dCkgJiYgIShpID0gaS5jYWxsKG8sIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAobyA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIG8gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHUgPSBbNiwgcF0sIG8gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn0sIG9lID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fZXhwb3J0ZXIgPSB0LCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgWnIodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl91bnJlc29sdmVkRXhwb3J0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gV3QodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gWXQodGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgIHN3aXRjaCAodC5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMpKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiB0LnNlbnQoKSwgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCA/IFs0LCB0aGlzLl9leHBvcnRlci5mb3JjZUZsdXNoKCldIDogWzMsIDNdO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICB0LnNlbnQoKSwgdC5sYWJlbCA9IDM7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIC8qcmV0dXJuKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiwgbztcbiAgICAgIGlmICghdGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkICYmIHQuc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgWHQkMS5TQU1QTEVEKSB7XG4gICAgICAgIHZhciBpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHR0Ll9leHBvcnQoci5fZXhwb3J0ZXIsIFt0XSkudGhlbihmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICB2YXIgbDtcbiAgICAgICAgICAgIHMuY29kZSAhPT0gYS5TVUNDRVNTICYmIG5lJDEoKGwgPSBzLmVycm9yKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogbmV3IEVycm9yKFwiU2ltcGxlU3BhblByb2Nlc3Nvcjogc3BhbiBleHBvcnQgZmFpbGVkIChzdGF0dXMgXCIgKyBzICsgXCIpXCIpKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICBuZSQxKHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodC5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgdmFyIGEkMSA9IChvID0gKG4gPSB0LnJlc291cmNlKS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvLmNhbGwobikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBhJDEgIT0gbnVsbCAmJiByLl91bnJlc29sdmVkRXhwb3J0cy5kZWxldGUoYSQxKSwgaSgpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZSQxKHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGEkMSAhPSBudWxsICYmIHRoaXMuX3VucmVzb2x2ZWRFeHBvcnRzLmFkZChhJDEpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBpKCk7XG4gICAgICB9XG4gICAgfSwgZS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH0sIGUucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuXG5leHBvcnQgeyBEdCBhcyBELCBHdCBhcyBHLCBJLCBPdCBhcyBPLCBQLCBTLCBXLCBEIGFzIGEsIGcsIGllIGFzIGksIGp0IGFzIGosIG5lIGFzIG4sIG9lIGFzIG8sIHJlIGFzIHIsIHp0IGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUtBLEdBQUksS0FBS0MsSUFBSSxLQUFLQyxHQUFNLEtBQUtDLElBQUksS0FBS0MsR0FBSSxLQUFLQyxJQUFJLEtBQUtDLElBQUksS0FBS0MsVUFBVTtBQUN6RixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsU0FBUyxNQUFNQyxHQUFJLE1BQU1DLElBQUksTUFBTUMsR0FBRyxLQUFLQyxJQUFJLEtBQUtDLEdBQUssTUFBTUMsSUFBSSxNQUFNQyxJQUFJLE1BQU1DLEdBQUksTUFBTUMsR0FBSSxLQUFLQyxJQUFJLE1BQU1DLEdBQUksTUFBTUMsSUFBSSxNQUFNQyxVQUFVO0FBQzlJLFNBQVMsS0FBQUMsSUFBRyxLQUFLQyxHQUFJLEtBQUtDLEdBQU0sS0FBQUMsSUFBRyxLQUFBQyxHQUFHLEtBQUtDLElBQUksS0FBS0MsSUFB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USxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVNZLEdBQUc7QUFDbkQsZ0JBQUlHO0FBQ0osWUFBQUgsRUFBRSxTQUFTTCxFQUFFLFdBQVdqQixHQUFNeUIsSUFBSUgsRUFBRSxXQUFXLFFBQVFHLE1BQU0sU0FBU0EsSUFBSSxJQUFJLE1BQU0scURBQXFESCxJQUFJLEdBQUcsQ0FBQztBQUFBLFVBQ25KLENBQUMsRUFBRSxNQUFNLFNBQVNBLEdBQUc7QUFDbkIsWUFBQXRCLEVBQUtzQixDQUFDO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUNBLFlBQUksRUFBRSxTQUFTLHdCQUF3QjtBQUNyQyxjQUFJYSxLQUFPaEIsS0FBSyxJQUFJLEVBQUUsVUFBVSw0QkFBNEIsUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxXQUFXO0FBQ3BILG1CQUFPZ0IsS0FBTyxRQUFRLEVBQUUsbUJBQW1CLE9BQU9BLENBQUcsR0FBR2QsRUFBRTtBQUFBLFVBQzVELEdBQUcsU0FBU0MsR0FBRztBQUNiLG1CQUFPdEIsRUFBS3NCLENBQUM7QUFBQSxVQUNmLENBQUM7QUFDRCxVQUFBYSxLQUFPLFFBQVEsS0FBSyxtQkFBbUIsSUFBSUEsQ0FBRztBQUFBLFFBQ2hEO0FBQ0UsVUFBQWQsRUFBRTtBQUFBLE1BQ047QUFBQSxJQUNGLEdBQUcsRUFBRSxVQUFVLFdBQVcsV0FBVztBQUNuQyxhQUFPLEtBQUssY0FBYyxLQUFLO0FBQUEsSUFDakMsR0FBRyxFQUFFLFVBQVUsWUFBWSxXQUFXO0FBQ3BDLGFBQU8sS0FBSyxVQUFVLFNBQVM7QUFBQSxJQUNqQyxHQUFHO0FBQUEsRUFDTCxFQUFFO0FBQUE7IiwKICAibmFtZXMiOiBbIkdlIiwgImtuIiwgIlh0JDEiLCAiaHMiLCAiT2UiLCAiZHMiLCAibHQiLCAiU2UiLCAiciIsICJxZSIsICJ3ZSIsICJSIiwgInBfIiwgIk8kMSIsICJOXyIsICJIXyIsICJyQSIsICJOQSIsICJ5XyIsICJrZSIsICJyXyIsICJNQSIsICJaIiwgIlplIiwgIm5lJDEiLCAidyIsICJwIiwgInByIiwgImJyIiwgIkplIiwgIlckMSIsICJzciIsICJrciIsICJaciIsICJ0dCIsICJyJDEiLCAiT1QiLCAiTFQiLCAiUCQxIiwgIk0iLCAiUiQxIiwgImEiLCAiYnQiLCAibyIsICJDdCIsICJpIiwgInMiLCAieHQiLCAiT3QiLCAibCIsICJmIiwgIlAiLCAiZyIsICJEIiwgIkUiLCAiSiIsICJZIiwgImMiLCAieSIsICJhJDEiLCAiQnQiLCAiRHQiLCAiR3QiLCAicSIsICJ4IiwgInAkMSIsICJqIiwgIkciLCAiYiIsICJPIiwgIksiLCAianQiLCAiVnQiLCAia3QiLCAiUyIsICJpZSIsICJZdCIsICJvZSJdCn0K