@getopenpay/openpay-js-react
Version:
Accept payments through OpenPay, right on your site
911 lines • 134 kB
JavaScript
import { H as b, M as _, T as E, a as nt, e as ot, w as it, h as st, d as at } from "./index-BRlq-xUA.js";
import { r as l } from "./diag-api-DC4dxlqZ-DOFCnxry.js";
import { dD as j, y as ut, dE as V, dF as ct, dG as I, p as pt, O as x, dH as lt, dI as ht, at as M, av as N, dJ as dt, au as ft } from "./url-CTAMV9Fr-n8hDYbJZ.js";
import { E as f, O as P, v as _t, V as mt, Z as vt, f as Y, S as St, n as yt, Q as C, l as H, c as gt, d as Et, p as Tt, a as bt, b as v, e as Lt } from "./index-v1SRbPSI-Ck3VxOS9.js";
import { u as Pt, a as wt } from "./suppress-tracing-BuitcWA2-BFsdq8P_.js";
import { R as Q } from "./Resource-Ci2cMsNJ-r_pjpkns.js";
import { a as U } from "./ExportResult-BacsqwKA-wgTHEn_9.js";
var xt = "exception", B = function() {
return B = Object.assign || function(e) {
for (var t, r = 1, n = arguments.length; r < n; r++) {
t = arguments[r];
for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
}
return e;
}, B.apply(this, arguments);
}, At = function(e) {
var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
if (r) return r.call(e);
if (e && typeof e.length == "number") return {
next: function() {
return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
}
};
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
}, X = function(e, t) {
var r = typeof Symbol == "function" && e[Symbol.iterator];
if (!r) return e;
var n = r.call(e), i, o = [], s;
try {
for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
} catch (a) {
s = { error: a };
} finally {
try {
i && !i.done && (r = n.return) && r.call(n);
} finally {
if (s) throw s.error;
}
}
return o;
}, Ot = function(e, t, r) {
if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
(o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
return e.concat(o || Array.prototype.slice.call(t));
}, Ct = (
/** @class */
(function() {
function e(t, r, n, i, o, s, a, c, u, p) {
a === void 0 && (a = []), this.attributes = {}, this.links = [], this.events = [], this._droppedAttributesCount = 0, this._droppedEventsCount = 0, this._droppedLinksCount = 0, this.status = {
code: it.UNSET
}, 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;
var h = Date.now();
this._performanceStartTime = I.now(), this._performanceOffset = h - (this._performanceStartTime + dt()), this._startTimeProvided = c != null, this.startTime = this._getTime(c ?? h), this.resource = t.resource, this.instrumentationLibrary = t.instrumentationLibrary, this._spanLimits = t.getSpanLimits(), this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0, p != null && this.setAttributes(p), this._spanProcessor = t.getActiveSpanProcessor(), this._spanProcessor.onStart(this, r);
}
return e.prototype.spanContext = function() {
return this._spanContext;
}, e.prototype.setAttribute = function(t, r) {
return r == null || this._isSpanEnded() ? this : t.length === 0 ? (l.warn("Invalid attribute key: " + t), this) : bt(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);
}, e.prototype.setAttributes = function(t) {
var r, n;
try {
for (var i = At(Object.entries(t)), o = i.next(); !o.done; o = i.next()) {
var s = X(o.value, 2), a = s[0], c = s[1];
this.setAttribute(a, c);
}
} catch (u) {
r = { error: u };
} finally {
try {
o && !o.done && (n = i.return) && n.call(i);
} finally {
if (r) throw r.error;
}
}
return this;
}, e.prototype.addEvent = function(t, r, n) {
if (this._isSpanEnded())
return this;
if (this._spanLimits.eventCountLimit === 0)
return l.warn("No events allowed."), this._droppedEventsCount++, this;
this.events.length >= this._spanLimits.eventCountLimit && (this._droppedEventsCount === 0 && l.debug("Dropping extra events."), this.events.shift(), this._droppedEventsCount++), V(r) && (V(n) || (n = r), r = void 0);
var i = C(r);
return this.events.push({
name: t,
attributes: i,
time: this._getTime(n),
droppedAttributesCount: 0
}), this;
}, e.prototype.addLink = function(t) {
return this.links.push(t), this;
}, e.prototype.addLinks = function(t) {
var r;
return (r = this.links).push.apply(r, Ot([], X(t), !1)), this;
}, e.prototype.setStatus = function(t) {
return this._isSpanEnded() ? this : (this.status = B({}, 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);
}, e.prototype.updateName = function(t) {
return this._isSpanEnded() ? this : (this.name = t, this);
}, e.prototype.end = function(t) {
if (this._isSpanEnded()) {
l.error(this.name + " " + this._spanContext.traceId + "-" + this._spanContext.spanId + " - You can only call end() on a span once.");
return;
}
this._ended = !0, this.endTime = this._getTime(t), this._duration = ct(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);
}, e.prototype._getTime = function(t) {
if (typeof t == "number" && t <= I.now())
return pt(t + this._performanceOffset);
if (typeof t == "number")
return x(t);
if (t instanceof Date)
return x(t.getTime());
if (lt(t))
return t;
if (this._startTimeProvided)
return x(Date.now());
var r = I.now() - this._performanceStartTime;
return ht(this.startTime, x(r));
}, e.prototype.isRecording = function() {
return this._ended === !1;
}, e.prototype.recordException = function(t, r) {
var n = {};
typeof t == "string" ? n[N] = t : t && (t.code ? n[M] = t.code.toString() : t.name && (n[M] = t.name), t.message && (n[N] = t.message), t.stack && (n[ft] = t.stack)), n[M] || n[N] ? this.addEvent(xt, n, r) : l.warn("Failed to record an exception " + t);
}, Object.defineProperty(e.prototype, "duration", {
get: function() {
return this._duration;
},
enumerable: !1,
configurable: !0
}), Object.defineProperty(e.prototype, "ended", {
get: function() {
return this._ended;
},
enumerable: !1,
configurable: !0
}), Object.defineProperty(e.prototype, "droppedAttributesCount", {
get: function() {
return this._droppedAttributesCount;
},
enumerable: !1,
configurable: !0
}), Object.defineProperty(e.prototype, "droppedEventsCount", {
get: function() {
return this._droppedEventsCount;
},
enumerable: !1,
configurable: !0
}), Object.defineProperty(e.prototype, "droppedLinksCount", {
get: function() {
return this._droppedLinksCount;
},
enumerable: !1,
configurable: !0
}), e.prototype._isSpanEnded = function() {
return this._ended && l.warn("Can not execute the operation on ended Span {traceId: " + this._spanContext.traceId + ", spanId: " + this._spanContext.spanId + "}"), this._ended;
}, e.prototype._truncateToLimitUtil = function(t, r) {
return t.length <= r ? t : t.substring(0, r);
}, e.prototype._truncateToSize = function(t) {
var r = this, n = this._attributeValueLengthLimit;
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) {
return typeof i == "string" ? r._truncateToLimitUtil(i, n) : i;
}) : t;
}, e;
})()
), L;
(function(e) {
e[e.NOT_RECORD = 0] = "NOT_RECORD", e[e.RECORD = 1] = "RECORD", e[e.RECORD_AND_SAMPLED = 2] = "RECORD_AND_SAMPLED";
})(L || (L = {}));
var R = (
/** @class */
(function() {
function e() {
}
return e.prototype.shouldSample = function() {
return {
decision: L.NOT_RECORD
};
}, e.prototype.toString = function() {
return "AlwaysOffSampler";
}, e;
})()
), T = (
/** @class */
(function() {
function e() {
}
return e.prototype.shouldSample = function() {
return {
decision: L.RECORD_AND_SAMPLED
};
}, e.prototype.toString = function() {
return "AlwaysOnSampler";
}, e;
})()
), D = (
/** @class */
(function() {
function e(t) {
var r, n, i, o;
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 R(), this._localParentSampled = (i = t.localParentSampled) !== null && i !== void 0 ? i : new T(), this._localParentNotSampled = (o = t.localParentNotSampled) !== null && o !== void 0 ? o : new R();
}
return e.prototype.shouldSample = function(t, r, n, i, o, s) {
var a = _.getSpanContext(t);
return !a || !st(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);
}, e.prototype.toString = function() {
return "ParentBased{root=" + this._root.toString() + ", remoteParentSampled=" + this._remoteParentSampled.toString() + ", remoteParentNotSampled=" + this._remoteParentNotSampled.toString() + ", localParentSampled=" + this._localParentSampled.toString() + ", localParentNotSampled=" + this._localParentNotSampled.toString() + "}";
}, e;
})()
), q = (
/** @class */
(function() {
function e(t) {
t === void 0 && (t = 0), this._ratio = t, this._ratio = this._normalize(t), this._upperBound = Math.floor(this._ratio * 4294967295);
}
return e.prototype.shouldSample = function(t, r) {
return {
decision: at(r) && this._accumulate(r) < this._upperBound ? L.RECORD_AND_SAMPLED : L.NOT_RECORD
};
}, e.prototype.toString = function() {
return "TraceIdRatioBased{" + this._ratio + "}";
}, e.prototype._normalize = function(t) {
return typeof t != "number" || isNaN(t) ? 0 : t >= 1 ? 1 : t <= 0 ? 0 : t;
}, e.prototype._accumulate = function(t) {
for (var r = 0, n = 0; n < t.length / 8; n++) {
var i = n * 8, o = parseInt(t.slice(i, i + 8), 16);
r = (r ^ o) >>> 0;
}
return r;
}, e;
})()
), Rt = v.AlwaysOn, g = 1;
function J() {
var e = P();
return {
sampler: $(e),
forceFlushTimeoutMillis: 3e4,
generalLimits: {
attributeValueLengthLimit: e.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
attributeCountLimit: e.OTEL_ATTRIBUTE_COUNT_LIMIT
},
spanLimits: {
attributeValueLengthLimit: e.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,
attributeCountLimit: e.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
linkCountLimit: e.OTEL_SPAN_LINK_COUNT_LIMIT,
eventCountLimit: e.OTEL_SPAN_EVENT_COUNT_LIMIT,
attributePerEventCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
attributePerLinkCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT
},
mergeResourceWithDefaults: !0
};
}
function $(e) {
switch (e === void 0 && (e = P()), e.OTEL_TRACES_SAMPLER) {
case v.AlwaysOn:
return new T();
case v.AlwaysOff:
return new R();
case v.ParentBasedAlwaysOn:
return new D({
root: new T()
});
case v.ParentBasedAlwaysOff:
return new D({
root: new R()
});
case v.TraceIdRatio:
return new q(Z(e));
case v.ParentBasedTraceIdRatio:
return new D({
root: new q(Z(e))
});
default:
return l.error('OTEL_TRACES_SAMPLER value "' + e.OTEL_TRACES_SAMPLER + " invalid, defaulting to " + Rt + '".'), new T();
}
}
function Z(e) {
if (e.OTEL_TRACES_SAMPLER_ARG === void 0 || e.OTEL_TRACES_SAMPLER_ARG === "")
return l.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to " + g + "."), g;
var t = Number(e.OTEL_TRACES_SAMPLER_ARG);
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;
}
function It(e) {
var t = {
sampler: $()
}, r = J(), n = Object.assign({}, r, t, e);
return n.generalLimits = Object.assign({}, r.generalLimits, e.generalLimits || {}), n.spanLimits = Object.assign({}, r.spanLimits, e.spanLimits || {}), n;
}
function Mt(e) {
var t, r, n, i, o, s, a, c, u, p, h, d, y = Object.assign({}, e.spanLimits), m = gt();
return y.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 : Et, y.attributeValueLengthLimit = (d = (h = (p = (c = (a = e.spanLimits) === null || a === void 0 ? void 0 : a.attributeValueLengthLimit) !== null && c !== void 0 ? c : (u = e.generalLimits) === null || u === void 0 ? void 0 : u.attributeValueLengthLimit) !== null && p !== void 0 ? p : m.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && h !== void 0 ? h : m.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && d !== void 0 ? d : Tt, Object.assign({}, e, { spanLimits: y });
}
var Nt = (
/** @class */
(function() {
function e(t, r) {
this._exporter = t, this._isExporting = !1, this._finishedSpans = [], this._droppedSpansCount = 0;
var n = P();
this._maxExportBatchSize = typeof r?.maxExportBatchSize == "number" ? r.maxExportBatchSize : n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, this._maxQueueSize = typeof r?.maxQueueSize == "number" ? r.maxQueueSize : n.OTEL_BSP_MAX_QUEUE_SIZE, this._scheduledDelayMillis = typeof r?.scheduledDelayMillis == "number" ? r.scheduledDelayMillis : n.OTEL_BSP_SCHEDULE_DELAY, this._exportTimeoutMillis = typeof r?.exportTimeoutMillis == "number" ? r.exportTimeoutMillis : n.OTEL_BSP_EXPORT_TIMEOUT, this._shutdownOnce = new Y(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);
}
return e.prototype.forceFlush = function() {
return this._shutdownOnce.isCalled ? this._shutdownOnce.promise : this._flushAll();
}, e.prototype.onStart = function(t, r) {
}, e.prototype.onEnd = function(t) {
this._shutdownOnce.isCalled || (t.spanContext().traceFlags & b.SAMPLED) !== 0 && this._addToBuffer(t);
}, e.prototype.shutdown = function() {
return this._shutdownOnce.call();
}, e.prototype._shutdown = function() {
var t = this;
return Promise.resolve().then(function() {
return t.onShutdown();
}).then(function() {
return t._flushAll();
}).then(function() {
return t._exporter.shutdown();
});
}, e.prototype._addToBuffer = function(t) {
if (this._finishedSpans.length >= this._maxQueueSize) {
this._droppedSpansCount === 0 && l.debug("maxQueueSize reached, dropping spans"), this._droppedSpansCount++;
return;
}
this._droppedSpansCount > 0 && (l.warn("Dropped " + this._droppedSpansCount + " spans because maxQueueSize reached"), this._droppedSpansCount = 0), this._finishedSpans.push(t), this._maybeStartTimer();
}, e.prototype._flushAll = function() {
var t = this;
return new Promise(function(r, n) {
for (var i = [], o = Math.ceil(t._finishedSpans.length / t._maxExportBatchSize), s = 0, a = o; s < a; s++)
i.push(t._flushOneBatch());
Promise.all(i).then(function() {
r();
}).catch(n);
});
}, e.prototype._flushOneBatch = function() {
var t = this;
return this._clearTimer(), this._finishedSpans.length === 0 ? Promise.resolve() : new Promise(function(r, n) {
var i = setTimeout(function() {
n(new Error("Timeout"));
}, t._exportTimeoutMillis);
E.with(Pt(E.active()), function() {
var o;
t._finishedSpans.length <= t._maxExportBatchSize ? (o = t._finishedSpans, t._finishedSpans = []) : o = t._finishedSpans.splice(0, t._maxExportBatchSize);
for (var s = function() {
return t._exporter.export(o, function(h) {
var d;
clearTimeout(i), h.code === U.SUCCESS ? r() : n((d = h.error) !== null && d !== void 0 ? d : new Error("BatchSpanProcessor: span export failed"));
});
}, a = null, c = 0, u = o.length; c < u; c++) {
var p = o[c];
p.resource.asyncAttributesPending && p.resource.waitForAsyncAttributes && (a ?? (a = []), a.push(p.resource.waitForAsyncAttributes()));
}
a === null ? s() : Promise.all(a).then(s, function(h) {
f(h), n(h);
});
});
});
}, e.prototype._maybeStartTimer = function() {
var t = this;
if (!this._isExporting) {
var r = function() {
t._isExporting = !0, t._flushOneBatch().finally(function() {
t._isExporting = !1, t._finishedSpans.length > 0 && (t._clearTimer(), t._maybeStartTimer());
}).catch(function(n) {
t._isExporting = !1, f(n);
});
};
if (this._finishedSpans.length >= this._maxExportBatchSize)
return r();
this._timer === void 0 && (this._timer = setTimeout(function() {
return r();
}, this._scheduledDelayMillis), St(this._timer));
}
}, e.prototype._clearTimer = function() {
this._timer !== void 0 && (clearTimeout(this._timer), this._timer = void 0);
}, e;
})()
), Dt = /* @__PURE__ */ (function() {
var e = function(t, r) {
return e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, i) {
n.__proto__ = i;
} || function(n, i) {
for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (n[o] = i[o]);
}, e(t, r);
};
return function(t, r) {
if (typeof r != "function" && r !== null)
throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
e(t, r);
function n() {
this.constructor = t;
}
t.prototype = r === null ? Object.create(r) : (n.prototype = r.prototype, new n());
};
})(), Bt = (
/** @class */
(function(e) {
Dt(t, e);
function t(r, n) {
var i = e.call(this, r, n) || this;
return i.onInit(n), i;
}
return t.prototype.onInit = function(r) {
var n = this;
r?.disableAutoFlushOnDocumentHide !== !0 && typeof document < "u" && (this._visibilityChangeListener = function() {
document.visibilityState === "hidden" && n.forceFlush().catch(function(i) {
f(i);
});
}, this._pageHideListener = function() {
n.forceFlush().catch(function(i) {
f(i);
});
}, document.addEventListener("visibilitychange", this._visibilityChangeListener), document.addEventListener("pagehide", this._pageHideListener));
}, t.prototype.onShutdown = function() {
typeof document < "u" && (this._visibilityChangeListener && document.removeEventListener("visibilitychange", this._visibilityChangeListener), this._pageHideListener && document.removeEventListener("pagehide", this._pageHideListener));
}, t;
})(Nt)
), Ut = 8, Ft = 16, kt = (
/** @class */
/* @__PURE__ */ (function() {
function e() {
this.generateTraceId = K(Ft), this.generateSpanId = K(Ut);
}
return e;
})()
), A = Array(32);
function K(e) {
return function() {
for (var t = 0; t < e * 2; t++)
A[t] = Math.floor(Math.random() * 16) + 48, A[t] >= 58 && (A[t] += 39);
return String.fromCharCode.apply(null, A.slice(0, e * 2));
};
}
var zt = (
/** @class */
(function() {
function e(t, r, n) {
this._tracerProvider = n;
var i = It(r);
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;
}
return e.prototype.startSpan = function(t, r, n) {
var i, o, s;
r === void 0 && (r = {}), n === void 0 && (n = E.active()), r.root && (n = _.deleteSpan(n));
var a = _.getSpan(n);
if (wt(n)) {
l.debug("Instrumentation suppressed, returning Noop Span");
var c = _.wrapSpanContext(nt);
return c;
}
var u = a?.spanContext(), p = this._idGenerator.generateSpanId(), h, d, y;
!u || !_.isSpanContextValid(u) ? h = this._idGenerator.generateTraceId() : (h = u.traceId, d = u.traceState, y = u.spanId);
var m = (i = r.kind) !== null && i !== void 0 ? i : ot.INTERNAL, F = ((o = r.links) !== null && o !== void 0 ? o : []).map(function(G) {
return {
context: G.context,
attributes: C(G.attributes)
};
}), k = C(r.attributes), w = this._sampler.shouldSample(n, h, t, m, k, F);
d = (s = w.traceState) !== null && s !== void 0 ? s : d;
var tt = w.decision === H.RECORD_AND_SAMPLED ? b.SAMPLED : b.NONE, z = { traceId: h, spanId: p, traceFlags: tt, traceState: d };
if (w.decision === H.NOT_RECORD) {
l.debug("Recording is off, propagating context in a non-recording span");
var c = _.wrapSpanContext(z);
return c;
}
var et = C(Object.assign(k, w.attributes)), rt = new Ct(this, n, t, z, m, y, F, r.startTime, void 0, et);
return rt;
}, e.prototype.startActiveSpan = function(t, r, n, i) {
var o, s, a;
if (!(arguments.length < 2)) {
arguments.length === 2 ? a = r : arguments.length === 3 ? (o = r, a = n) : (o = r, s = n, a = i);
var c = s ?? E.active(), u = this.startSpan(t, o, c), p = _.setSpan(c, u);
return E.with(p, a, void 0, u);
}
}, e.prototype.getGeneralLimits = function() {
return this._generalLimits;
}, e.prototype.getSpanLimits = function() {
return this._spanLimits;
}, e.prototype.getActiveSpanProcessor = function() {
return this._tracerProvider.getActiveSpanProcessor();
}, e;
})()
), O = function(e) {
var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
if (r) return r.call(e);
if (e && typeof e.length == "number") return {
next: function() {
return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
}
};
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
}, W = (
/** @class */
(function() {
function e(t) {
this._spanProcessors = t;
}
return e.prototype.forceFlush = function() {
var t, r, n = [];
try {
for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
var s = o.value;
n.push(s.forceFlush());
}
} catch (a) {
t = { error: a };
} finally {
try {
o && !o.done && (r = i.return) && r.call(i);
} finally {
if (t) throw t.error;
}
}
return new Promise(function(a) {
Promise.all(n).then(function() {
a();
}).catch(function(c) {
f(c || new Error("MultiSpanProcessor: forceFlush failed")), a();
});
});
}, e.prototype.onStart = function(t, r) {
var n, i;
try {
for (var o = O(this._spanProcessors), s = o.next(); !s.done; s = o.next()) {
var a = s.value;
a.onStart(t, r);
}
} catch (c) {
n = { error: c };
} finally {
try {
s && !s.done && (i = o.return) && i.call(o);
} finally {
if (n) throw n.error;
}
}
}, e.prototype.onEnd = function(t) {
var r, n;
try {
for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
var s = o.value;
s.onEnd(t);
}
} catch (a) {
r = { error: a };
} finally {
try {
o && !o.done && (n = i.return) && n.call(i);
} finally {
if (r) throw r.error;
}
}
}, e.prototype.shutdown = function() {
var t, r, n = [];
try {
for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
var s = o.value;
n.push(s.shutdown());
}
} catch (a) {
t = { error: a };
} finally {
try {
o && !o.done && (r = i.return) && r.call(i);
} finally {
if (t) throw t.error;
}
}
return new Promise(function(a, c) {
Promise.all(n).then(function() {
a();
}, c);
});
}, e;
})()
), Gt = (
/** @class */
(function() {
function e() {
}
return e.prototype.onStart = function(t, r) {
}, e.prototype.onEnd = function(t) {
}, e.prototype.shutdown = function() {
return Promise.resolve();
}, e.prototype.forceFlush = function() {
return Promise.resolve();
}, e;
})()
), jt = function(e, t) {
var r = typeof Symbol == "function" && e[Symbol.iterator];
if (!r) return e;
var n = r.call(e), i, o = [], s;
try {
for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
} catch (a) {
s = { error: a };
} finally {
try {
i && !i.done && (r = n.return) && r.call(n);
} finally {
if (s) throw s.error;
}
}
return o;
}, Vt = function(e, t, r) {
if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
(o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
return e.concat(o || Array.prototype.slice.call(t));
}, S;
(function(e) {
e[e.resolved = 0] = "resolved", e[e.timeout = 1] = "timeout", e[e.error = 2] = "error", e[e.unresolved = 3] = "unresolved";
})(S || (S = {}));
var te = (
/** @class */
(function() {
function e(t) {
t === void 0 && (t = {});
var r, n;
this._registeredSpanProcessors = [], this._tracers = /* @__PURE__ */ new Map();
var i = yt({}, J(), Mt(t));
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, {
resource: this.resource
}), !((n = t.spanProcessors) === null || n === void 0) && n.length)
this._registeredSpanProcessors = Vt([], jt(t.spanProcessors), !1), this.activeSpanProcessor = new W(this._registeredSpanProcessors);
else {
var o = this._buildExporterFromEnv();
if (o !== void 0) {
var s = new Bt(o);
this.activeSpanProcessor = s;
} else
this.activeSpanProcessor = new Gt();
}
}
return e.prototype.getTracer = function(t, r, n) {
var i = t + "@" + (r || "") + ":" + (n?.schemaUrl || "");
return this._tracers.has(i) || this._tracers.set(i, new zt({ name: t, version: r, schemaUrl: n?.schemaUrl }, this._config, this)), this._tracers.get(i);
}, e.prototype.addSpanProcessor = function(t) {
this._registeredSpanProcessors.length === 0 && this.activeSpanProcessor.shutdown().catch(function(r) {
return l.error("Error while trying to shutdown current span processor", r);
}), this._registeredSpanProcessors.push(t), this.activeSpanProcessor = new W(this._registeredSpanProcessors);
}, e.prototype.getActiveSpanProcessor = function() {
return this.activeSpanProcessor;
}, e.prototype.register = function(t) {
t === void 0 && (t = {}), _.setGlobalTracerProvider(this), t.propagator === void 0 && (t.propagator = this._buildPropagatorFromEnv()), t.contextManager && E.setGlobalContextManager(t.contextManager), t.propagator && ut.setGlobalPropagator(t.propagator);
}, e.prototype.forceFlush = function() {
var t = this._config.forceFlushTimeoutMillis, r = this._registeredSpanProcessors.map(function(n) {
return new Promise(function(i) {
var o, s = setTimeout(function() {
i(new Error("Span processor did not completed within timeout period of " + t + " ms")), o = S.timeout;
}, t);
n.forceFlush().then(function() {
clearTimeout(s), o !== S.timeout && (o = S.resolved, i(o));
}).catch(function(a) {
clearTimeout(s), o = S.error, i(a);
});
});
});
return new Promise(function(n, i) {
Promise.all(r).then(function(o) {
var s = o.filter(function(a) {
return a !== S.resolved;
});
s.length > 0 ? i(s) : n();
}).catch(function(o) {
return i([o]);
});
});
}, e.prototype.shutdown = function() {
return this.activeSpanProcessor.shutdown();
}, e.prototype._getPropagator = function(t) {
var r;
return (r = this.constructor._registeredPropagators.get(t)) === null || r === void 0 ? void 0 : r();
}, e.prototype._getSpanExporter = function(t) {
var r;
return (r = this.constructor._registeredExporters.get(t)) === null || r === void 0 ? void 0 : r();
}, e.prototype._buildPropagatorFromEnv = function() {
var t = this, r = Array.from(new Set(P().OTEL_PROPAGATORS)), n = r.map(function(o) {
var s = t._getPropagator(o);
return s || l.warn('Propagator "' + o + '" requested through environment variable is unavailable.'), s;
}), i = n.reduce(function(o, s) {
return s && o.push(s), o;
}, []);
if (i.length !== 0)
return r.length === 1 ? i[0] : new _t({
propagators: i
});
}, e.prototype._buildExporterFromEnv = function() {
var t = P().OTEL_TRACES_EXPORTER;
if (!(t === "none" || t === "")) {
var r = this._getSpanExporter(t);
return r || l.error('Exporter "' + t + '" requested through environment variable is unavailable.'), r;
}
}, e._registeredPropagators = /* @__PURE__ */ new Map([
["tracecontext", function() {
return new mt();
}],
["baggage", function() {
return new vt();
}]
]), e._registeredExporters = /* @__PURE__ */ new Map(), e;
})()
), Ht = function(e) {
var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
if (r) return r.call(e);
if (e && typeof e.length == "number") return {
next: function() {
return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
}
};
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
}, ee = (
/** @class */
(function() {
function e() {
}
return e.prototype.export = function(t, r) {
return this._sendSpans(t, r);
}, e.prototype.shutdown = function() {
return this._sendSpans([]), this.forceFlush();
}, e.prototype.forceFlush = function() {
return Promise.resolve();
}, e.prototype._exportInfo = function(t) {
var r;
return {
resource: {
attributes: t.resource.attributes
},
instrumentationScope: t.instrumentationLibrary,
traceId: t.spanContext().traceId,
parentId: t.parentSpanId,
traceState: (r = t.spanContext().traceState) === null || r === void 0 ? void 0 : r.serialize(),
name: t.name,
id: t.spanContext().spanId,
kind: t.kind,
timestamp: j(t.startTime),
duration: j(t.duration),
attributes: t.attributes,
status: t.status,
events: t.events,
links: t.links
};
}, e.prototype._sendSpans = function(t, r) {
var n, i;
try {
for (var o = Ht(t), s = o.next(); !s.done; s = o.next()) {
var a = s.value;
console.dir(this._exportInfo(a), { depth: 3 });
}
} catch (c) {
n = { error: c };
} finally {
try {
s && !s.done && (i = o.return) && i.call(o);
} finally {
if (n) throw n.error;
}
}
if (r)
return r({ code: U.SUCCESS });
}, e;
})()
), Qt = function(e, t, r, n) {
function i(o) {
return o instanceof r ? o : new r(function(s) {
s(o);
});
}
return new (r || (r = Promise))(function(o, s) {
function a(p) {
try {
u(n.next(p));
} catch (h) {
s(h);
}
}
function c(p) {
try {
u(n.throw(p));
} catch (h) {
s(h);
}
}
function u(p) {
p.done ? o(p.value) : i(p.value).then(a, c);
}
u((n = n.apply(e, [])).next());
});
}, Xt = function(e, t) {
var r = { label: 0, sent: function() {
if (o[0] & 1) throw o[1];
return o[1];
}, trys: [], ops: [] }, n, i, o, s;
return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
return this;
}), s;
function a(u) {
return function(p) {
return c([u, p]);
};
}
function c(u) {
if (n) throw new TypeError("Generator is already executing.");
for (; r; ) try {
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;
switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {
case 0:
case 1:
o = u;
break;
case 4:
return r.label++, { value: u[1], done: !1 };
case 5:
r.label++, i = u[1], u = [0];
continue;
case 7:
u = r.ops.pop(), r.trys.pop();
continue;
default:
if (o = r.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {
r = 0;
continue;
}
if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {
r.label = u[1];
break;
}
if (u[0] === 6 && r.label < o[1]) {
r.label = o[1], o = u;
break;
}
if (o && r.label < o[2]) {
r.label = o[2], r.ops.push(u);
break;
}
o[2] && r.ops.pop(), r.trys.pop();
continue;
}
u = t.call(e, r);
} catch (p) {
u = [6, p], i = 0;
} finally {
n = o = 0;
}
if (u[0] & 5) throw u[1];
return { value: u[0] ? u[1] : void 0, done: !0 };
}
}, re = (
/** @class */
(function() {
function e(t) {
this._exporter = t, this._shutdownOnce = new Y(this._shutdown, this), this._unresolvedExports = /* @__PURE__ */ new Set();
}
return e.prototype.forceFlush = function() {
return Qt(this, void 0, void 0, function() {
return Xt(this, function(t) {
switch (t.label) {
case 0:
return [4, Promise.all(Array.from(this._unresolvedExports))];
case 1:
return t.sent(), this._exporter.forceFlush ? [4, this._exporter.forceFlush()] : [3, 3];
case 2:
t.sent(), t.label = 3;
case 3:
return [
2
/*return*/
];
}
});
});
}, e.prototype.onStart = function(t, r) {
}, e.prototype.onEnd = function(t) {
var r = this, n, i;
if (!this._shutdownOnce.isCalled && (t.spanContext().traceFlags & b.SAMPLED) !== 0) {
var o = function() {
return Lt._export(r._exporter, [t]).then(function(a) {
var c;
a.code !== U.SUCCESS && f((c = a.error) !== null && c !== void 0 ? c : new Error("SimpleSpanProcessor: span export failed (status " + a + ")"));
}).catch(function(a) {
f(a);
});
};
if (t.resource.asyncAttributesPending) {
var s = (i = (n = t.resource).waitForAsyncAttributes) === null || i === void 0 ? void 0 : i.call(n).then(function() {
return s != null && r._unresolvedExports.delete(s), o();
}, function(a) {
return f(a);
});
s != null && this._unresolvedExports.add(s);
} else
o();
}
}, e.prototype.shutdown = function() {
return this._shutdownOnce.call();
}, e.prototype._shutdown = function() {
return this._exporter.shutdown();
}, e;
})()
);
export {
D as B,
Bt as D,
kt as G,
L as P,
R,
S,
q as W,
ee as e,
T as g,
Gt as j,
re as r,
te as t,
Ct as x,
zt as z
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiU2ltcGxlU3BhblByb2Nlc3Nvci1CMGVVN0M4QS0hfnswMDR9fi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgSCBhcyBIdCQxLCBNIGFzIE1lLCBUIGFzIFRlLCBhIGFzIGFzLCBlIGFzIGV0LCB3IGFzIHdlLCBoIGFzIGhuLCBkIGFzIGRzIH0gZnJvbSAnLi9pbmRleC0hfnswMDd9fi5qcyc7XG5pbXBvcnQgeyByIH0gZnJvbSAnLi9kaWFnLWFwaS1EQzRkeGxxWi0hfnswMGF9fi5qcyc7XG5pbXBvcnQgeyBkRCBhcyBqZSwgeSBhcyB5XywgZEUgYXMgcWUsIGRGIGFzIFhlLCBkRyBhcyBSJDIsIHAgYXMgcF8sIE8gYXMgTyQxLCBkSCBhcyBOXywgZEkgYXMgYl8sIGF0IGFzIE5BLCBhdiBhcyBNQSwgZEogYXMgcl8sIGF1IGFzIGVBIH0gZnJvbSAnLi91cmwtQ1RBTVY5RnItIX57MDBifX4uanMnO1xuaW1wb3J0IHsgRSBhcyBFciwgTyBhcyBPZSwgdiBhcyB2ZSwgViBhcyBWZSwgWiBhcyBaciwgZiBhcyBmdCwgUyBhcyBTZSwgbiBhcyBudCwgUSBhcyBRciwgbCwgYyBhcyBjZSwgZCwgcCwgYSBhcyBhciwgYiBhcyB2LCBlIGFzIE90JDEgfSBmcm9tICcuL2luZGV4LXYxU1JiUFNJLSF+ezAwaX1+LmpzJztcbmltcG9ydCB7IHUsIGEgYXMgYSQxIH0gZnJvbSAnLi9zdXBwcmVzcy10cmFjaW5nLUJ1aXRjV0EyLSF+ezAwbn1+LmpzJztcbmltcG9ydCB7IFIgYXMgUiQxIH0gZnJvbSAnLi9SZXNvdXJjZS1DaTJjTXNOSi0hfnswMDJ9fi5qcyc7XG5pbXBvcnQgeyBhIH0gZnJvbSAnLi9FeHBvcnRSZXN1bHQtQmFjc3F3S0EtIX57MDBsfX4uanMnO1xuXG52YXIgd3QgPSBcImV4Y2VwdGlvblwiLCBEID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBEID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgdCwgZSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBlIDwgbjsgZSsrKSB7XG4gICAgICB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgbyBpbiB0KSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwgbykgJiYgKHJbb10gPSB0W29dKTtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH0sIEQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0sIEN0ID0gZnVuY3Rpb24ocikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHQgJiYgclt0XSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHIpO1xuICBpZiAociAmJiB0eXBlb2Ygci5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByICYmIG4gPj0gci5sZW5ndGggJiYgKHIgPSB2b2lkIDApLCB7IHZhbHVlOiByICYmIHJbbisrXSwgZG9uZTogIXIgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIFggPSBmdW5jdGlvbihyLCB0KSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgcltTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiByO1xuICB2YXIgbiA9IGUuY2FsbChyKSwgbywgaSA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGEgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIE90ID0gZnVuY3Rpb24ociwgdCwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiByLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIHh0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByJDEodCwgZSwgbiwgbywgaSwgYSwgcywgbCwgdSwgcCkge1xuICAgICAgcyA9PT0gdm9pZCAwICYmIChzID0gW10pLCB0aGlzLmF0dHJpYnV0ZXMgPSB7fSwgdGhpcy5saW5rcyA9IFtdLCB0aGlzLmV2ZW50cyA9IFtdLCB0aGlzLl9kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMCwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID0gMCwgdGhpcy5fZHJvcHBlZExpbmtzQ291bnQgPSAwLCB0aGlzLnN0YXR1cyA9IHtcbiAgICAgICAgY29kZTogd2UuVU5TRVRcbiAgICAgIH0sIHRoaXMuZW5kVGltZSA9IFswLCAwXSwgdGhpcy5fZW5kZWQgPSBmYWxzZSwgdGhpcy5fZHVyYXRpb24gPSBbLTEsIC0xXSwgdGhpcy5uYW1lID0gbiwgdGhpcy5fc3BhbkNvbnRleHQgPSBvLCB0aGlzLnBhcmVudFNwYW5JZCA9IGEsIHRoaXMua2luZCA9IGksIHRoaXMubGlua3MgPSBzO1xuICAgICAgdmFyIGMgPSBEYXRlLm5vdygpO1xuICAgICAgdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWUgPSBSJDIubm93KCksIHRoaXMuX3BlcmZvcm1hbmNlT2Zmc2V0ID0gYyAtICh0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZSArIHJfKCkpLCB0aGlzLl9zdGFydFRpbWVQcm92aWRlZCA9IGwgIT0gbnVsbCwgdGhpcy5zdGFydFRpbWUgPSB0aGlzLl9nZXRUaW1lKGwgPz8gYyksIHRoaXMucmVzb3VyY2UgPSB0LnJlc291cmNlLCB0aGlzLmluc3RydW1lbnRhdGlvbkxpYnJhcnkgPSB0Lmluc3RydW1lbnRhdGlvbkxpYnJhcnksIHRoaXMuX3NwYW5MaW1pdHMgPSB0LmdldFNwYW5MaW1pdHMoKSwgdGhpcy5fYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCA9IHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCB8fCAwLCBwICE9IG51bGwgJiYgdGhpcy5zZXRBdHRyaWJ1dGVzKHApLCB0aGlzLl9zcGFuUHJvY2Vzc29yID0gdC5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yKCksIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25TdGFydCh0aGlzLCBlKTtcbiAgICB9XG4gICAgcmV0dXJuIHIkMS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCByJDEucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKHQsIGUpIHtcbiAgICAgIHJldHVybiBlID09IG51bGwgfHwgdGhpcy5faXNTcGFuRW5kZWQoKSA/IHRoaXMgOiB0Lmxlbmd0aCA9PT0gMCA/IChyLndhcm4oXCJJbnZhbGlkIGF0dHJpYnV0ZSBrZXk6IFwiICsgdCksIHRoaXMpIDogYXIoZSkgPyBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aCA+PSB0aGlzLl9zcGFuTGltaXRzLmF0dHJpYnV0ZUNvdW50TGltaXQgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIHQpID8gKHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQrKywgdGhpcykgOiAodGhpcy5hdHRyaWJ1dGVzW3RdID0gdGhpcy5fdHJ1bmNhdGVUb1NpemUoZSksIHRoaXMpIDogKHIud2FybihcIkludmFsaWQgYXR0cmlidXRlIHZhbHVlIHNldCBmb3Iga2V5OiBcIiArIHQpLCB0aGlzKTtcbiAgICB9LCByJDEucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZSwgbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBDdChPYmplY3QuZW50cmllcyh0KSksIGkgPSBvLm5leHQoKTsgIWkuZG9uZTsgaSA9IG8ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGEgPSBYKGkudmFsdWUsIDIpLCBzID0gYVswXSwgbCA9IGFbMV07XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUocywgbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZSA9IHsgZXJyb3I6IHUgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gby5yZXR1cm4pICYmIG4uY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgciQxLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uKHQsIGUsIG4pIHtcbiAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIGlmICh0aGlzLl9zcGFuTGltaXRzLmV2ZW50Q291bnRMaW1pdCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHIud2FybihcIk5vIGV2ZW50cyBhbGxvd2VkLlwiKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50KyssIHRoaXM7XG4gICAgICB0aGlzLmV2ZW50cy5sZW5ndGggPj0gdGhpcy5fc3BhbkxpbWl0cy5ldmVudENvdW50TGltaXQgJiYgKHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA9PT0gMCAmJiByLmRlYnVnKFwiRHJvcHBpbmcgZXh0cmEgZXZlbnRzLlwiKSwgdGhpcy5ldmVudHMuc2hpZnQoKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50KyspLCBxZShlKSAmJiAocWUobikgfHwgKG4gPSBlKSwgZSA9IHZvaWQgMCk7XG4gICAgICB2YXIgbyA9IFFyKGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiB0LFxuICAgICAgICBhdHRyaWJ1dGVzOiBvLFxuICAgICAgICB0aW1lOiB0aGlzLl9nZXRUaW1lKG4pLFxuICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwXG4gICAgICB9KSwgdGhpcztcbiAgICB9LCByJDEucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcy5saW5rcy5wdXNoKHQpLCB0aGlzO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoZSA9IHRoaXMubGlua3MpLnB1c2guYXBwbHkoZSwgT3QoW10sIFgodCksIGZhbHNlKSksIHRoaXM7XG4gICAgfSwgciQxLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcy5faXNTcGFuRW5kZWQoKSA/IHRoaXMgOiAodGhpcy5zdGF0dXMgPSBEKHt9LCB0KSwgdGhpcy5zdGF0dXMubWVzc2FnZSAhPSBudWxsICYmIHR5cGVvZiB0Lm1lc3NhZ2UgIT0gXCJzdHJpbmdcIiAmJiAoci53YXJuKFwiRHJvcHBpbmcgaW52YWxpZCBzdGF0dXMubWVzc2FnZSBvZiB0eXBlICdcIiArIHR5cGVvZiB0Lm1lc3NhZ2UgKyBcIicsIGV4cGVjdGVkICdzdHJpbmcnXCIpLCBkZWxldGUgdGhpcy5zdGF0dXMubWVzc2FnZSksIHRoaXMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6ICh0aGlzLm5hbWUgPSB0LCB0aGlzKTtcbiAgICB9LCByJDEucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKSB7XG4gICAgICAgIHIuZXJyb3IodGhpcy5uYW1lICsgXCIgXCIgKyB0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkICsgXCItXCIgKyB0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWQgKyBcIiAtIFlvdSBjYW4gb25seSBjYWxsIGVuZCgpIG9uIGEgc3BhbiBvbmNlLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZW5kZWQgPSB0cnVlLCB0aGlzLmVuZFRpbWUgPSB0aGlzLl9nZXRUaW1lKHQpLCB0aGlzLl9kdXJhdGlvbiA9IFhlKHRoaXMuc3RhcnRUaW1lLCB0aGlzLmVuZFRpbWUpLCB0aGlzLl9kdXJhdGlvblswXSA8IDAgJiYgKHIud2FybihcIkluY29uc2lzdGVudCBzdGFydCBhbmQgZW5kIHRpbWUsIHN0YXJ0VGltZSA+IGVuZFRpbWUuIFNldHRpbmcgc3BhbiBkdXJhdGlvbiB0byAwbXMuXCIsIHRoaXMuc3RhcnRUaW1lLCB0aGlzLmVuZFRpbWUpLCB0aGlzLmVuZFRpbWUgPSB0aGlzLnN0YXJ0VGltZS5zbGljZSgpLCB0aGlzLl9kdXJhdGlvbiA9IFswLCAwXSksIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA+IDAgJiYgci53YXJuKFwiRHJvcHBlZCBcIiArIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCArIFwiIGV2ZW50cyBiZWNhdXNlIGV2ZW50Q291bnRMaW1pdCByZWFjaGVkXCIpLCB0aGlzLl9zcGFuUHJvY2Vzc29yLm9uRW5kKHRoaXMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2dldFRpbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAodHlwZW9mIHQgPT0gXCJudW1iZXJcIiAmJiB0IDw9IFIkMi5ub3coKSlcbiAgICAgICAgcmV0dXJuIHBfKHQgKyB0aGlzLl9wZXJmb3JtYW5jZU9mZnNldCk7XG4gICAgICBpZiAodHlwZW9mIHQgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIE8kMSh0KTtcbiAgICAgIGlmICh0IGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgcmV0dXJuIE8kMSh0LmdldFRpbWUoKSk7XG4gICAgICBpZiAoTl8odCkpXG4gICAgICAgIHJldHVybiB0O1xuICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZVByb3ZpZGVkKVxuICAgICAgICByZXR1cm4gTyQxKERhdGUubm93KCkpO1xuICAgICAgdmFyIGUgPSBSJDIubm93KCkgLSB0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZTtcbiAgICAgIHJldHVybiBiXyh0aGlzLnN0YXJ0VGltZSwgTyQxKGUpKTtcbiAgICB9LCByJDEucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kZWQgPT09IGZhbHNlO1xuICAgIH0sIHIkMS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgdmFyIG4gPSB7fTtcbiAgICAgIHR5cGVvZiB0ID09IFwic3RyaW5nXCIgPyBuW01BXSA9IHQgOiB0ICYmICh0LmNvZGUgPyBuW05BXSA9IHQuY29kZS50b1N0cmluZygpIDogdC5uYW1lICYmIChuW05BXSA9IHQubmFtZSksIHQubWVzc2FnZSAmJiAobltNQV0gPSB0Lm1lc3NhZ2UpLCB0LnN0YWNrICYmIChuW2VBXSA9IHQuc3RhY2spKSwgbltOQV0gfHwgbltNQV0gPyB0aGlzLmFkZEV2ZW50KHd0LCBuLCBlKSA6IHIud2FybihcIkZhaWxlZCB0byByZWNvcmQgYW4gZXhjZXB0aW9uIFwiICsgdCk7XG4gICAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZHVyYXRpb25cIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyJDEucHJvdG90eXBlLCBcImVuZGVkXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRlZDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkociQxLnByb3RvdHlwZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkQXR0cmlidXRlc0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyJDEucHJvdG90eXBlLCBcImRyb3BwZWRFdmVudHNDb3VudFwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyJDEucHJvdG90eXBlLCBcImRyb3BwZWRMaW5rc0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkTGlua3NDb3VudDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pLCByJDEucHJvdG90eXBlLl9pc1NwYW5FbmRlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkICYmIHIud2FybihcIkNhbiBub3QgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uIG9uIGVuZGVkIFNwYW4ge3RyYWNlSWQ6IFwiICsgdGhpcy5fc3BhbkNvbnRleHQudHJhY2VJZCArIFwiLCBzcGFuSWQ6IFwiICsgdGhpcy5fc3BhbkNvbnRleHQuc3BhbklkICsgXCJ9XCIpLCB0aGlzLl9lbmRlZDtcbiAgICB9LCByJDEucHJvdG90eXBlLl90cnVuY2F0ZVRvTGltaXRVdGlsID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgcmV0dXJuIHQubGVuZ3RoIDw9IGUgPyB0IDogdC5zdWJzdHJpbmcoMCwgZSk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fdHJ1bmNhdGVUb1NpemUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0O1xuICAgICAgcmV0dXJuIG4gPD0gMCA/IChyLndhcm4oXCJBdHRyaWJ1dGUgdmFsdWUgbGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgZ290IFwiICsgbiksIHQpIDogdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiA/IHRoaXMuX3RydW5jYXRlVG9MaW1pdFV0aWwodCwgbikgOiBBcnJheS5pc0FycmF5KHQpID8gdC5tYXAoZnVuY3Rpb24obykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJzdHJpbmdcIiA/IGUuX3RydW5jYXRlVG9MaW1pdFV0aWwobywgbikgOiBvO1xuICAgICAgfSkgOiB0O1xuICAgIH0sIHIkMTtcbiAgfSkoKVxuKSwgUDtcbihmdW5jdGlvbihyKSB7XG4gIHJbci5OT1RfUkVDT1JEID0gMF0gPSBcIk5PVF9SRUNPUkRcIiwgcltyLlJFQ09SRCA9IDFdID0gXCJSRUNPUkRcIiwgcltyLlJFQ09SRF9BTkRfU0FNUExFRCA9IDJdID0gXCJSRUNPUkRfQU5EX1NBTVBMRURcIjtcbn0pKFAgfHwgKFAgPSB7fSkpO1xudmFyIFIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgfVxuICAgIHJldHVybiByLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2lzaW9uOiBQLk5PVF9SRUNPUkRcbiAgICAgIH07XG4gICAgfSwgci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIkFsd2F5c09mZlNhbXBsZXJcIjtcbiAgICB9LCByO1xuICB9KSgpXG4pLCBnID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogUC5SRUNPUkRfQU5EX1NBTVBMRURcbiAgICAgIH07XG4gICAgfSwgci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIkFsd2F5c09uU2FtcGxlclwiO1xuICAgIH0sIHI7XG4gIH0pKClcbiksIEIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIodCkge1xuICAgICAgdmFyIGUsIG4sIG8sIGk7XG4gICAgICB0aGlzLl9yb290ID0gdC5yb290LCB0aGlzLl9yb290IHx8IChFcihuZXcgRXJyb3IoXCJQYXJlbnRCYXNlZFNhbXBsZXIgbXVzdCBoYXZlIGEgcm9vdCBzYW1wbGVyIGNvbmZpZ3VyZWRcIikpLCB0aGlzLl9yb290ID0gbmV3IGcoKSksIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQgPSAoZSA9IHQucmVtb3RlUGFyZW50U2FtcGxlZCkgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IG5ldyBnKCksIHRoaXMuX3JlbW90ZVBhcmVudE5vdFNhbXBsZWQgPSAobiA9IHQucmVtb3RlUGFyZW50Tm90U2FtcGxlZCkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IG5ldyBSKCksIHRoaXMuX2xvY2FsUGFyZW50U2FtcGxlZCA9IChvID0gdC5sb2NhbFBhcmVudFNhbXBsZWQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBuZXcgZygpLCB0aGlzLl9sb2NhbFBhcmVudE5vdFNhbXBsZWQgPSAoaSA9IHQubG9jYWxQYXJlbnROb3RTYW1wbGVkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogbmV3IFIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKHQsIGUsIG4sIG8sIGksIGEpIHtcbiAgICAgIHZhciBzID0gTWUuZ2V0U3BhbkNvbnRleHQodCk7XG4gICAgICByZXR1cm4gIXMgfHwgIWhuKHMpID8gdGhpcy5fcm9vdC5zaG91bGRTYW1wbGUodCwgZSwgbiwgbywgaSwgYSkgOiBzLmlzUmVtb3RlID8gcy50cmFjZUZsYWdzICYgSHQkMS5TQU1QTEVEID8gdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgZSwgbiwgbywgaSwgYSkgOiB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKSA6IHMudHJhY2VGbGFncyAmIEh0JDEuU0FNUExFRCA/IHRoaXMuX2xvY2FsUGFyZW50U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgZSwgbiwgbywgaSwgYSkgOiB0aGlzLl9sb2NhbFBhcmVudE5vdFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIGUsIG4sIG8sIGksIGEpO1xuICAgIH0sIHIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJQYXJlbnRCYXNlZHtyb290PVwiICsgdGhpcy5fcm9vdC50b1N0cmluZygpICsgXCIsIHJlbW90ZVBhcmVudFNhbXBsZWQ9XCIgKyB0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIiwgcmVtb3RlUGFyZW50Tm90U2FtcGxlZD1cIiArIHRoaXMuX3JlbW90ZVBhcmVudE5vdFNhbXBsZWQudG9TdHJpbmcoKSArIFwiLCBsb2NhbFBhcmVudFNhbXBsZWQ9XCIgKyB0aGlzLl9sb2NhbFBhcmVudFNhbXBsZWQudG9TdHJpbmcoKSArIFwiLCBsb2NhbFBhcmVudE5vdFNhbXBsZWQ9XCIgKyB0aGlzLl9sb2NhbFBhcmVudE5vdFNhbXBsZWQudG9TdHJpbmcoKSArIFwifVwiO1xuICAgIH0sIHI7XG4gIH0pKClcbiksIFcgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gMCksIHRoaXMuX3JhdGlvID0gdCwgdGhpcy5fcmF0aW8gPSB0aGlzLl9ub3JtYWxpemUodCksIHRoaXMuX3VwcGVyQm91bmQgPSBNYXRoLmZsb29yKHRoaXMuX3JhdGlvICogNDI5NDk2NzI5NSk7XG4gICAgfVxuICAgIHJldHVybiByLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogZHMoZSkgJiYgdGhpcy5fYWNjdW11bGF0ZShlKSA8IHRoaXMuX3VwcGVyQm91bmQgPyBQLlJFQ09SRF9BTkRfU0FNUExFRCA6IFAuTk9UX1JFQ09SRFxuICAgICAgfTtcbiAgICB9LCByLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiVHJhY2VJZFJhdGlvQmFzZWR7XCIgKyB0aGlzLl9yYXRpbyArIFwifVwiO1xuICAgIH0sIHIucHJvdG90eXBlLl9ub3JtYWxpemUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJudW1iZXJcIiB8fCBpc05hTih0KSA/IDAgOiB0ID49IDEgPyAxIDogdCA8PSAwID8gMCA6IHQ7XG4gICAgfSwgci5wcm90b3R5cGUuX2FjY3VtdWxhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICBmb3IgKHZhciBlID0gMCwgbiA9IDA7IG4gPCB0Lmxlbmd0aCAvIDg7IG4rKykge1xuICAgICAgICB2YXIgbyA9IG4gKiA4LCBpID0gcGFyc2VJbnQodC5zbGljZShvLCBvICsgOCksIDE2KTtcbiAgICAgICAgZSA9IChlIF4gaSkgPj4+IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZTtcbiAgICB9LCByO1xuICB9KSgpXG4pLCBSdCA9IHYuQWx3YXlzT24sIEUgPSAxO1xuZnVuY3Rpb24gSigpIHtcbiAgdmFyIHIgPSBPZSgpO1xuICByZXR1cm4ge1xuICAgIHNhbXBsZXI6ICQociksXG4gICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM6IDNlNCxcbiAgICBnZW5lcmFsTGltaXRzOiB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiByLk9URUxfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCxcbiAgICAgIGF0dHJpYnV0ZUNvdW50TGltaXQ6IHIuT1RFTF9BVFRSSUJVVEVfQ09VTlRfTElNSVRcbiAgICB9LFxuICAgIHNwYW5MaW1pdHM6IHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ6IHIuT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiByLk9URUxfU1BBTl9BVFRSSUJVVEVfQ09VTlRfTElNSVQsXG4gICAgICBsaW5rQ291bnRMaW1pdDogci5PVEVMX1NQQU5fTElOS19DT1VOVF9MSU1JVCxcbiAgICAgIGV2ZW50Q291bnRMaW1pdDogci5PVEVMX1NQQU5fRVZFTlRfQ09VTlRfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVQZXJFdmVudENvdW50TGltaXQ6IHIuT1RFTF9TUEFOX0FUVFJJQlVURV9QRVJfRVZFTlRfQ09VTlRfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVQZXJMaW5rQ291bnRMaW1pdDogci5PVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9MSU5LX0NPVU5UX0xJTUlUXG4gICAgfSxcbiAgICBtZXJnZVJlc291cmNlV2l0aERlZmF1bHRzOiB0cnVlXG4gIH07XG59XG5mdW5jdGlvbiAkKHIkMSkge1xuICBzd2l0Y2ggKHIkMSA9PT0gdm9pZCAwICYmIChyJDEgPSBPZSgpKSwgciQxLk9URUxfVFJBQ0VTX1NBTVBMRVIpIHtcbiAgICBjYXNlIHYuQWx3YXlzT246XG4gICAgICByZXR1cm4gbmV3IGcoKTtcbiAgICBjYXNlIHYuQWx3YXlzT2ZmOlxuICAgICAgcmV0dXJuIG5ldyBSKCk7XG4gICAgY2FzZSB2LlBhcmVudEJhc2VkQWx3YXlzT246XG4gICAgICByZXR1cm4gbmV3IEIoe1xuICAgICAgICByb290OiBuZXcgZygpXG4gICAgICB9KTtcbiAgICBjYXNlIHYuUGFyZW50QmFzZWRBbHdheXNPZmY6XG4gICAgICByZXR1cm4gbmV3IEIoe1xuICAgICAgICByb290OiBuZXcgUigpXG4gICAgICB9KTtcbiAgICBjYXNlIHYuVHJhY2VJZFJhdGlvOlxuICAgICAgcmV0dXJuIG5ldyBXKFkociQxKSk7XG4gICAgY2FzZSB2LlBhcmVudEJhc2VkVHJhY2VJZFJhdGlvOlxuICAgICAgcmV0dXJuIG5ldyBCKHtcbiAgICAgICAgcm9vdDogbmV3IFcoWShyJDEpKVxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiByLmVycm9yKCdPVEVMX1RSQUNFU19TQU1QTEVSIHZhbHVlIFwiJyArIHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSICsgXCIgaW52YWxpZCwgZGVmYXVsdGluZyB0byBcIiArIFJ0ICsgJ1wiLicpLCBuZXcgZygpO1xuICB9XG59XG5mdW5jdGlvbiBZKHIkMSkge1xuICBpZiAociQxLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHID09PSB2b2lkIDAgfHwgciQxLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHID09PSBcIlwiKVxuICAgIHJldHVybiByLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgaXMgYmxhbmssIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFO1xuICB2YXIgdCA9IE51bWJlcihyJDEuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcpO1xuICByZXR1cm4gaXNOYU4odCkgPyAoci5lcnJvcihcIk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHPVwiICsgciQxLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHICsgXCIgd2FzIGdpdmVuLCBidXQgaXQgaXMgaW52YWxpZCwgZGVmYXVsdGluZyB0byBcIiArIEUgKyBcIi5cIiksIEUpIDogdCA8IDAgfHwgdCA+IDEgPyAoci5lcnJvcihcIk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHPVwiICsgciQxLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHICsgXCIgd2FzIGdpdmVuLCBidXQgaXQgaXMgb3V0IG9mIHJhbmdlIChbMC4uMV0pLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRSkgOiB0O1xufVxuZnVuY3Rpb24gSXQocikge1xuICB2YXIgdCA9IHtcbiAgICBzYW1wbGVyOiAkKClcbiAgfSwgZSA9IEooKSwgbiA9IE9iamVjdC5hc3NpZ24oe30sIGUsIHQsIHIpO1xuICByZXR1cm4gbi5nZW5lcmFsTGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgZS5nZW5lcmFsTGltaXRzLCByLmdlbmVyYWxMaW1pdHMgfHwge30pLCBuLnNwYW5MaW1pdHMgPSBPYmplY3QuYXNzaWduKHt9LCBlLnNwYW5MaW1pdHMsIHIuc3BhbkxpbWl0cyB8fCB7fSksIG47XG59XG5mdW5jdGlvbiBOdChyKSB7XG4gIHZhciB0LCBlLCBuLCBvLCBpLCBhLCBzLCBsLCB1LCBwJDEsIGMsIGYsIHkgPSBPYmplY3QuYXNzaWduKHt9LCByLnNwYW5MaW1pdHMpLCBtID0gY2UoKTtcbiAgcmV0dXJuIHkuYXR0cmlidXRlQ291bnRMaW1pdCA9IChhID0gKGkgPSAobyA9IChlID0gKHQgPSByLnNwYW5MaW1pdHMpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuYXR0cmlidXRlQ291bnRMaW1pdCkgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IChuID0gci5nZW5lcmFsTGltaXRzKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmF0dHJpYnV0ZUNvdW50TGltaXQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBtLk9URUxfU1BBTl9BVFRSSUJVVEVfQ09VTlRfTElNSVQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBtLk9URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogZCwgeS5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID0gKGYgPSAoYyA9IChwJDEgPSAobCA9IChzID0gci5zcGFuTGltaXRzKSA9PT0gbnVsbCB8fCBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzLmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQpICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiAodSA9IHIuZ2VuZXJhbExpbWl0cykgPT09IG51bGwgfHwgdSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdS5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0KSAhPT0gbnVsbCAmJiBwJDEgIT09IHZvaWQgMCA/IHAkMSA6IG0uT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQpICE9PSBudWxsICYmIGMgIT09IHZvaWQgMCA/IGMgOiBtLk9URUxfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCkgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IHAsIE9iamVjdC5hc3NpZ24oe30sIHIsIHsgc3BhbkxpbWl0czogeSB9KTtcbn1cbnZhciBNdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gciQxKHQsIGUpIHtcbiAgICAgIHRoaXMuX2V4cG9ydGVyID0gdCwgdGhpcy5faXNFeHBvcnRpbmcgPSBmYWxzZSwgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdLCB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9IDA7XG4gICAgICB2YXIgbiA9IE9lKCk7XG4gICAgICB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPSB0eXBlb2YgZT8ubWF4RXhwb3J0QmF0Y2hTaXplID09IFwibnVtYmVyXCIgPyBlLm1heEV4cG9ydEJhdGNoU2l6ZSA6IG4uT1RFTF9CU1BfTUFYX0VYUE9SVF9CQVRDSF9TSVpFLCB0aGlzLl9tYXhRdWV1ZVNpemUgPSB0eXBlb2YgZT8ubWF4UXVldWVTaXplID09IFwibnVtYmVyXCIgPyBlLm1heFF1ZXVlU2l6ZSA6IG4uT1RFTF9CU1BfTUFYX1FVRVVFX1NJWkUsIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzID0gdHlwZW9mIGU/LnNjaGVkdWxlZERlbGF5TWlsbGlzID09IFwibnVtYmVyXCIgPyBlLnNjaGVkdWxlZERlbGF5TWlsbGlzIDogbi5PVEVMX0JTUF9TQ0hFRFVMRV9ERUxBWSwgdGhpcy5fZXhwb3J0VGltZW91dE1pbGxpcyA9IHR5cGVvZiBlPy5leHBvcnRUaW1lb3V0TWlsbGlzID09IFwibnVtYmVyXCIgPyBlLmV4cG9ydFRpbWVvdXRNaWxsaXMgOiBuLk9URUxfQlNQX0VYUE9SVF9USU1FT1VULCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgZnQodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPiB0aGlzLl9tYXhRdWV1ZVNpemUgJiYgKHIud2FybihcIkJhdGNoU3BhblByb2Nlc3NvcjogbWF4RXhwb3J0QmF0Y2hTaXplIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBtYXhRdWV1ZVNpemUsIHNldHRpbmcgbWF4RXhwb3J0QmF0Y2hTaXplIHRvIG1hdGNoIG1heFF1ZXVlU2l6ZVwiKSwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdGhpcy5fbWF4UXVldWVTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIHIkMS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCA/IHRoaXMuX3NodXRkb3duT25jZS5wcm9taXNlIDogdGhpcy5fZmx1c2hBbGwoKTtcbiAgICB9LCByJDEucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgfSwgciQxLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCB8fCAodC5zcGFuQ29udGV4dCgpLnRyYWNlRmxhZ3MgJiBIdCQxLlNBTVBMRUQpICE9PSAwICYmIHRoaXMuX2FkZFRvQnVmZmVyKHQpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHQub25TaHV0ZG93bigpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHQuX2ZsdXNoQWxsKCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICAgIH0pO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2FkZFRvQnVmZmVyID0gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heFF1ZXVlU2l6ZSkge1xuICAgICAgICB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9PT0gMCAmJiByLmRlYnVnKFwibWF4UXVldWVTaXplIHJlYWNoZWQsIGRyb3BwaW5nIHNwYW5zXCIpLCB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCsrO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA+IDAgJiYgKHIud2FybihcIkRyb3BwZWQgXCIgKyB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCArIFwiIHNwYW5zIGJlY2F1c2UgbWF4UXVldWVTaXplIHJlYWNoZWRcIiksIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID0gMCksIHRoaXMuX2ZpbmlzaGVkU3BhbnMucHVzaCh0KSwgdGhpcy5fbWF5YmVTdGFydFRpbWVyKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fZmx1c2hBbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBbXSwgaSA9IE1hdGguY2VpbCh0Ll9maW5pc2hlZFNwYW5zLmxlbmd0aCAvIHQuX21heEV4cG9ydEJhdGNoU2l6ZSksIGEgPSAwLCBzID0gaTsgYSA8IHM7IGErKylcbiAgICAgICAgICBvLnB1c2godC5fZmx1c2hPbmVCYXRjaCgpKTtcbiAgICAgICAgUHJvbWlzZS5hbGwobykudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBlKCk7XG4gICAgICAgIH0pLmNhdGNoKG4pO1xuICAgICAgfSk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fZmx1c2hPbmVCYXRjaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgcmV0dXJuIHRoaXMuX2NsZWFyVGltZXIoKSwgdGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPT09IDAgPyBQcm9taXNlLnJlc29sdmUoKSA6IG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgdmFyIG8gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG4obmV3IEVycm9yKFwiVGltZW91dFwiKSk7XG4gICAgICAgIH0sIHQuX2V4cG9ydFRpbWVvdXRNaWxsaXMpO1xuICAgICAgICBUZS53aXRoKHUoVGUuYWN0aXZlKCkpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICB0Ll9maW5pc2hlZFNwYW5zLmxlbmd0aCA8PSB0Ll9tYXhFeHBvcnRCYXRjaFNpemUgPyAoaSA9IHQuX2ZpbmlzaGVkU3BhbnMsIHQuX2ZpbmlzaGVkU3BhbnMgPSBbXSkgOiBpID0gdC5fZmluaXNoZWRTcGFucy5zcGxpY2UoMCwgdC5fbWF4RXhwb3J0QmF0Y2hTaXplKTtcbiAgICAgICAgICBmb3IgKHZhciBhJDEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0Ll9leHBvcnRlci5leHBvcnQoaSwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICB2YXIgZjtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KG8pLCBjLmNvZGUgPT09IGEuU1VDQ0VTUyA/IGUoKSA6IG4oKGYgPSBjLmVycm9yKSAhPT0gbnVsbCAmJiBmICE9PSB2b2lkIDAgPyBmIDogbmV3IEVycm9yKFwiQmF0Y2hTcGFuUHJvY2Vzc29yOiBzcGFuIGV4cG9ydCBmYWlsZWRcIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgcyA9IG51bGwsIGwgPSAwLCB1ID0gaS5sZW5ndGg7IGwgPCB1OyBsKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gaVtsXTtcbiAgICAgICAgICAgIHAucmVzb3VyY2UuYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyAmJiBwLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMgJiYgKHMgPz8gKHMgPSBbXSksIHMucHVzaChwLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMoKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID09PSBudWxsID8gYSQxKCkgOiBQcm9taXNlLmFsbChzKS50aGVuKGEkMSwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgRXIoYyksIG4oYyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fbWF5YmVTdGFydFRpbWVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICBpZiAoIXRoaXMuX2lzRXhwb3J0aW5nKSB7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdC5faXNFeHBvcnRpbmcgPSB0cnVlLCB0Ll9mbHVzaE9uZUJhdGNoKCkuZmluYWxseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHQuX2lzRXhwb3J0aW5nID0gZmFsc2UsIHQuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID4gMCAmJiAodC5fY2xlYXJUaW1lcigpLCB0Ll9tYXliZVN0YXJ0VGltZXIoKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obikge1xuICAgICAgICAgICAgdC5faXNFeHBvcnRpbmcgPSBmYWxzZSwgRXIobik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA+PSB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpXG4gICAgICAgICAgcmV0dXJuIGUoKTtcbiAgICAgICAgdGhpcy5fdGltZXIgPT09IHZvaWQgMCAmJiAodGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBlKCk7XG4gICAgICAgIH0sIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzKSwgU2UodGhpcy5fdGltZXIpKTtcbiAgICAgIH1cbiAgICB9LCByJDEucHJvdG90eXBlLl9jbGVhclRpbWVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl90aW1lciAhPT0gdm9pZCAwICYmIChjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLCB0aGlzLl90aW1lciA9IHZvaWQgMCk7XG4gICAgfSwgciQxO1xuICB9KSgpXG4pLCBCdCA9IC8qIEBfX1BVUkVfXyAqLyAoZnVuY3Rpb24oKSB7XG4gIHZhciByID0gZnVuY3Rpb24odCwgZSkge1xuICAgIHJldHVybiByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24obiwgbykge1xuICAgICAgbi5fX3Byb3RvX18gPSBvO1xuICAgIH0gfHwgZnVuY3Rpb24obiwgbykge1xuICAgICAgZm9yICh2YXIgaSBpbiBvKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaSkgJiYgKG5baV0gPSBvW2ldKTtcbiAgICB9LCByKHQsIGUpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24odCwgZSkge1xuICAgIGlmICh0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCIgJiYgZSAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICByKHQsIGUpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChuLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0pKCksIER0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbihyKSB7XG4gICAgQnQodCwgcik7XG4gICAgZnVuY3Rpb24gdChlLCBuKSB7XG4gICAgICB2YXIgbyA9IHIuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgICAgcmV0dXJuIG8ub25Jbml0KG4pLCBvO1xuICAgIH1cbiAgICByZXR1cm4gdC5wcm90b3R5cGUub25Jbml0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIG4gPSB0aGlzO1xuICAgICAgZT8uZGlzYWJsZUF1dG9GbHVzaE9uRG9jdW1lbnRIaWRlICE9PSB0cnVlICYmIHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmICh0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcImhpZGRlblwiICYmIG4uZm9yY2VGbHVzaCgpLmNhdGNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICBFcihvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIG4uZm9yY2VGbHVzaCgpLmNhdGNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICBFcihvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIpLCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lcikpO1xuICAgIH0sIHQucHJvdG90eXBlLm9uU2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmICh0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdGhpcy5fdmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyKSwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lciAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lcikpO1xuICAgIH0sIHQ7XG4gIH0pKE10KVxuKSwgVXQgPSA4LCBGdCA9IDE2LCBHdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlVHJhY2VJZCA9IHEoRnQpLCB0aGlzLmdlbmVyYXRlU3BhbklkID0gcShVdCk7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9KSgpXG4pLCBDID0gQXJyYXkoMzIpO1xuZnVuY3Rpb24gcShyKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHIgKiAyOyBlKyspXG4gICAgICBDW2VdID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpICsgNDgsIENbZV0gPj0gNTggJiYgKENbZV0gKz0gMzkpO1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIEMuc2xpY2UoMCwgciAqIDIpKTtcbiAgfTtcbn1cbnZhciB6dCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gciQxKHQsIGUsIG4pIHtcbiAgICAgIHRoaXMuX3RyYWNlclByb3ZpZGVyID0gbjtcbiAgICAgIHZhciBvID0gSXQoZSk7XG4gICAgICB0aGlzLl9zYW1wbGVyID0gby5zYW1wbGVyLCB0aGlzLl9nZW5lcmFsTGltaXRzID0gby5nZW5lcmFsTGltaXRzLCB0aGlzLl9zcGFuTGltaXRzID0gby5zcGFuTGltaXRzLCB0aGlzLl9pZEdlbmVyYXRvciA9IGUuaWRHZW5lcmF0b3IgfHwgbmV3IEd0KCksIHRoaXMucmVzb3VyY2UgPSBuLnJlc291cmNlLCB0aGlzLmluc3RydW1lbnRhdGlvbkxpYnJhcnkgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gciQxLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCBlLCBuKSB7XG4gICAgICB2YXIgbywgaSwgYTtcbiAgICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHt9KSwgbiA9PT0gdm9pZCAwICYmIChuID0gVGUuYWN0aXZlKCkpLCBlLnJvb3QgJiYgKG4gPSBNZS5kZWxldGVTcGFuKG4pKTtcbiAgICAgIHZhciBzID0gTWUuZ2V0U3BhbihuKTtcbiAgICAgIGlmIChhJDEobikpIHtcbiAgICAgICAgci5kZWJ1ZyhcIkluc3RydW1lbnRhdGlvbiBzdXBwcmVzc2VkLCByZXR1cm5pbmcgTm9vcCBTcGFuXCIpO1xuICAgICAgICB2YXIgbCQxID0gTWUud3JhcFNwYW5Db250ZXh0KGFzKTtcbiAgICAgICAgcmV0dXJuIGwkMTtcbiAgICAgIH1cbiAgICAgIHZhciB1ID0gcz8uc3BhbkNvbnRleHQoKSwgcCA9IHRoaXMuX2lkR2VuZXJhdG9yLmdlbmVyYXRlU3BhbklkKCksIGMsIGYsIHk7XG4gICAgICAhdSB8fCAhTWUuaXNTcGFuQ29udGV4dFZhbGlkKHUpID8gYyA9IHRoaXMuX2lkR2VuZXJhdG9yLmdlbmVyYXRlVHJhY2VJZCgpIDogKGMgPSB1LnRyYWNlSWQsIGYgPSB1LnRyYWNlU3RhdGUsIHkgPSB1LnNwYW5JZCk7XG4gICAgICB2YXIgbSA9IChvID0gZS5raW5kKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogZXQuSU5URVJOQUwsIEYgPSAoKGkgPSBlLmxpbmtzKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogW10pLm1hcChmdW5jdGlvbihqKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGV4dDogai5jb250ZXh0LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IFFyKGouYXR0cmlidXRlcylcbiAgICAgICAgfTtcbiAgICAgIH0pLCBHID0gUXIoZS5hdHRyaWJ1dGVzKSwgYiA9IHRoaXMuX3NhbXBsZXIuc2hvdWxkU2FtcGxlKG4sIGMsIHQsIG0sIEcsIEYpO1xuICAgICAgZiA9IChhID0gYi50cmFjZVN0YXRlKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogZjtcbiAgICAgIHZhciB0dCA9IGIuZGVjaXNpb24gPT09IGwuUkVDT1JEX0FORF9TQU1QTEVEID8gSHQkMS5TQU1QTEVEIDogSHQkMS5OT05FLCB6ID0geyB0cmFjZUlkOiBjLCBzcGFuSWQ6IHAsIHRyYWNlRmxhZ3M6IHR0LCB0cmFjZVN0YXRlOiBmIH07XG4gICAgICBpZiAoYi5kZWNpc2lvbiA9PT0gbC5OT1RfUkVDT1JEKSB7XG4gICAgICAgIHIuZGVidWcoXCJSZWNvcmRpbmcgaXMgb2ZmLCBwcm9wYWdhdGluZyBjb250ZXh0IGluIGEgbm9uLXJlY29yZGluZyBzcGFuXCIpO1xuICAgICAgICB2YXIgbCQxID0gTWUud3JhcFNwYW5Db250ZXh0KHopO1xuICAgICAgICByZXR1cm4gbCQxO1xuICAgICAgfVxuICAgICAgdmFyIGV0JDEgPSBRcihPYmplY3QuYXNzaWduKEcsIGIuYXR0cmlidXRlcykpLCBydCA9IG5ldyB4dCh0aGlzLCBuLCB0LCB6LCBtLCB5LCBGLCBlLnN0YXJ0VGltZSwgdm9pZCAwLCBldCQxKTtcbiAgICAgIHJldHVybiBydDtcbiAgICB9LCByJDEucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIGUsIG4sIG8pIHtcbiAgICAgIHZhciBpLCBhLCBzO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBzID0gZSA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAoaSA9IGUsIHMgPSBuKSA6IChpID0gZSwgYSA9IG4sIHMgPSBvKTtcbiAgICAgICAgdmFyIGwgPSBhID8/IFRlLmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgaSwgbCksIHAgPSBNZS5zZXRTcGFuKGwsIHUpO1xuICAgICAgICByZXR1cm4gVGUud2l0aChwLCBzLCB2b2lkIDAsIHUpO1xuICAgICAgfVxuICAgIH0sIHIkMS5wcm90b3R5cGUuZ2V0R2VuZXJhbExpbWl0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dlbmVyYWxMaW1pdHM7XG4gICAgfSwgciQxLnByb3RvdHlwZS5nZXRTcGFuTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkxpbWl0cztcbiAgICB9LCByJDEucHJvdG90eXBlLmdldEFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFjZXJQcm92aWRlci5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yKCk7XG4gICAgfSwgciQxO1xuICB9KSgpXG4pLCBPID0gZnVuY3Rpb24ocikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHQgJiYgclt0XSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHIpO1xuICBpZiAociAmJiB0eXBlb2Ygci5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByICYmIG4gPj0gci5sZW5ndGggJiYgKHIgPSB2b2lkIDApLCB7IHZhbHVlOiByICYmIHJbbisrXSwgZG9uZTogIXIgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIEsgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIodCkge1xuICAgICAgdGhpcy5fc3BhblByb2Nlc3NvcnMgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIGUsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuZm9yY2VGbHVzaCgpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0ID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBvLnJldHVybikgJiYgZS5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocykge1xuICAgICAgICBQcm9taXNlLmFsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHMoKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgIEVyKGwgfHwgbmV3IEVycm9yKFwiTXVsdGlTcGFuUHJvY2Vzc29yOiBmb3JjZUZsdXNoIGZhaWxlZFwiKSksIHMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCByLnByb3RvdHlwZS5vblN0YXJ0ID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgdmFyIG4sIG87XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBpID0gTyh0aGlzLl9zcGFuUHJvY2Vzc29ycyksIGEgPSBpLm5leHQoKTsgIWEuZG9uZTsgYSA9IGkubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIHMgPSBhLnZhbHVlO1xuICAgICAgICAgIHMub25TdGFydCh0LCBlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICBuID0geyBlcnJvcjogbCB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhICYmICFhLmRvbmUgJiYgKG8gPSBpLnJldHVybikgJiYgby5jYWxsKGkpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgci5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZSwgbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgYS5vbkVuZCh0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICBlID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgci5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0LCBlLCBuID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBvID0gTyh0aGlzLl9zcGFuUHJvY2Vzc29ycyksIGkgPSBvLm5leHQoKTsgIWkuZG9uZTsgaSA9IG8ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGEgPSBpLnZhbHVlO1xuICAgICAgICAgIG4ucHVzaChhLnNodXRkb3duKCkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHQgPSB7IGVycm9yOiBzIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG8ucmV0dXJuKSAmJiBlLmNhbGwobyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLCBsKSB7XG4gICAgICAgIFByb21pc2UuYWxsKG4pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcygpO1xuICAgICAgICB9LCBsKTtcbiAgICAgIH0pO1xuICAgIH0sIHI7XG4gIH0pKClcbiksIGp0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIGUpIHtcbiAgICB9LCByLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCByLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIHIucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCByO1xuICB9KSgpXG4pLCBrdCA9IGZ1bmN0aW9uKHIsIHQpIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiByW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHI7XG4gIHZhciBuID0gZS5jYWxsKHIpLCBvLCBpID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChzKSB7XG4gICAgYSA9IHsgZXJyb3I6IHMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgVnQgPSBmdW5jdGlvbihyLCB0LCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIHIuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgUztcbihmdW5jdGlvbihyKSB7XG4gIHJbci5yZXNvbHZlZCA9IDBdID0gXCJyZXNvbHZlZFwiLCByW3IudGltZW91dCA9IDFdID0gXCJ0aW1lb3V0XCIsIHJbci5lcnJvciA9IDJdID0gXCJlcnJvclwiLCByW3IudW5yZXNvbHZlZCA9IDNdID0gXCJ1bnJlc29sdmVkXCI7XG59KShTIHx8IChTID0ge30pKTtcbnZhciB0ZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gciQxKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IHt9KTtcbiAgICAgIHZhciBlLCBuO1xuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzID0gW10sIHRoaXMuX3RyYWNlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgdmFyIG8gPSBudCh7fSwgSigpLCBOdCh0KSk7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZSA9IChlID0gby5yZXNvdXJjZSkgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFIkMS5lbXB0eSgpLCBvLm1lcmdlUmVzb3VyY2VXaXRoRGVmYXVsdHMgJiYgKHRoaXMucmVzb3VyY2UgPSBSJDEuZGVmYXVsdCgpLm1lcmdlKHRoaXMucmVzb3VyY2UpKSwgdGhpcy5fY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgbywge1xuICAgICAgICByZXNvdXJjZTogdGhpcy5yZXNvdXJjZVxuICAgICAgfSksICEoKG4gPSB0LnNwYW5Qcm9jZXNzb3JzKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDApICYmIG4ubGVuZ3RoKVxuICAgICAgICB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMgPSBWdChbXSwga3QodC5zcGFuUHJvY2Vzc29ycyksIGZhbHNlKSwgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IEsodGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgaSA9IHRoaXMuX2J1aWxkRXhwb3J0ZXJGcm9tRW52KCk7XG4gICAgICAgIGlmIChpICE9PSB2b2lkIDApIHtcbiAgICAgICAgICB2YXIgYSA9IG5ldyBEdChpKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBhO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBuZXcganQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHIkMS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgZSwgbikge1xuICAgICAgdmFyIG8gPSB0ICsgXCJAXCIgKyAoZSB8fCBcIlwiKSArIFwiOlwiICsgKG4/LnNjaGVtYVVybCB8fCBcIlwiKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFjZXJzLmhhcyhvKSB8fCB0aGlzLl90cmFjZXJzLnNldChvLCBuZXcgenQoeyBuYW1lOiB0LCB2ZXJzaW9uOiBlLCBzY2hlbWFVcmw6IG4/LnNjaGVtYVVybCB9LCB0aGlzLl9jb25maWcsIHRoaXMpKSwgdGhpcy5fdHJhY2Vycy5nZXQobyk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5hZGRTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24odCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICAgIHJldHVybiByLmVycm9yKFwiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHNodXRkb3duIGN1cnJlbnQgc3BhbiBwcm9jZXNzb3JcIiwgZSk7XG4gICAgICB9KSwgdGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzLnB1c2godCksIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBLKHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yO1xuICAgIH0sIHIkMS5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSB7fSksIE1lLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyKHRoaXMpLCB0LnByb3BhZ2F0b3IgPT09IHZvaWQgMCAmJiAodC5wcm9wYWdhdG9yID0gdGhpcy5fYnVpbGRQcm9wYWdhdG9yRnJvbUVudigpKSwgdC5jb250ZXh0TWFuYWdlciAmJiBUZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlcih0LmNvbnRleHRNYW5hZ2VyKSwgdC5wcm9wYWdhdG9yICYmIHlfLnNldEdsb2JhbFByb3BhZ2F0b3IodC5wcm9wYWdhdG9yKTtcbiAgICB9LCByJDEucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcy5fY29uZmlnLmZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzLCBlID0gdGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzLm1hcChmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvKSB7XG4gICAgICAgICAgdmFyIGksIGEgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbyhuZXcgRXJyb3IoXCJTcGFuIHByb2Nlc3NvciBkaWQgbm90IGNvbXBsZXRlZCB3aXRoaW4gdGltZW91dCBwZXJpb2Qgb2YgXCIgKyB0ICsgXCIgbXNcIikpLCBpID0gUy50aW1lb3V0O1xuICAgICAgICAgIH0sIHQpO1xuICAgICAgICAgIG4uZm9yY2VGbHVzaCgpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoYSksIGkgIT09IFMudGltZW91dCAmJiAoaSA9IFMucmVzb2x2ZWQsIG8oaSkpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChhKSwgaSA9IFMuZXJyb3IsIG8ocyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obiwgbykge1xuICAgICAgICBQcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkuZmlsdGVyKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBzICE9PSBTLnJlc29sdmVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGEubGVuZ3RoID4gMCA/IG8oYSkgOiBuKCk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICByZXR1cm4gbyhbaV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9nZXRQcm9wYWdhdG9yID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKGUgPSB0aGlzLmNvbnN0cnVjdG9yLl9yZWdpc3RlcmVkUHJvcGFnYXRvcnMuZ2V0KHQpKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fZ2V0U3BhbkV4cG9ydGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKGUgPSB0aGlzLmNvbnN0cnVjdG9yLl9yZWdpc3RlcmVkRXhwb3J0ZXJzLmdldCh0KSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZSgpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgZSA9IEFycmF5LmZyb20obmV3IFNldChPZSgpLk9URUxfUFJPUEFHQVRPUlMpKSwgbiA9IGUubWFwKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyIGEgPSB0Ll9nZXRQcm9wYWdhdG9yKGkpO1xuICAgICAgICByZXR1cm4gYSB8fCByLndhcm4oJ1Byb3BhZ2F0b3IgXCInICsgaSArICdcIiByZXF1ZXN0ZWQgdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bmF2YWlsYWJsZS4nKSwgYTtcbiAgICAgIH0pLCBvID0gbi5yZWR1Y2UoZnVuY3Rpb24oaSwgYSkge1xuICAgICAgICByZXR1cm4gYSAmJiBpLnB1c2goYSksIGk7XG4gICAgICB9LCBbXSk7XG4gICAgICBpZiAoby5sZW5ndGggIT09IDApXG4gICAgICAgIHJldHVybiBlLmxlbmd0aCA9PT0gMSA/IG9bMF0gOiBuZXcgdmUoe1xuICAgICAgICAgIHByb3BhZ2F0b3JzOiBvXG4gICAgICAgIH0pO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2J1aWxkRXhwb3J0ZXJGcm9tRW52ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IE9lKCkuT1RFTF9UUkFDRVNfRVhQT1JURVI7XG4gICAgICBpZiAoISh0ID09PSBcIm5vbmVcIiB8fCB0ID09PSBcIlwiKSkge1xuICAgICAgICB2YXIgZSA9IHRoaXMuX2dldFNwYW5FeHBvcnRlcih0KTtcbiAgICAgICAgcmV0dXJuIGUgfHwgci5lcnJvcignRXhwb3J0ZXIgXCInICsgdCArICdcIiByZXF1ZXN0ZWQgdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bmF2YWlsYWJsZS4nKSwgZTtcbiAgICAgIH1cbiAgICB9LCByJDEuX3JlZ2lzdGVyZWRQcm9wYWdhdG9ycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgIFtcInRyYWNlY29udGV4dFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZSgpO1xuICAgICAgfV0sXG4gICAgICBbXCJiYWdnYWdlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpyKCk7XG4gICAgICB9XVxuICAgIF0pLCByJDEuX3JlZ2lzdGVyZWRFeHBvcnRlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCByJDE7XG4gIH0pKClcbiksIEh0ID0gZnVuY3Rpb24ocikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHQgJiYgclt0XSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHIpO1xuICBpZiAociAmJiB0eXBlb2Ygci5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByICYmIG4gPj0gci5sZW5ndGggJiYgKHIgPSB2b2lkIDApLCB7IHZhbHVlOiByICYmIHJbbisrXSwgZG9uZTogIXIgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIGVlID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuZXhwb3J0ID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRTcGFucyh0LCBlKTtcbiAgICB9LCByLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRTcGFucyhbXSksIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgIH0sIHIucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCByLnByb3RvdHlwZS5fZXhwb3J0SW5mbyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB0LnJlc291cmNlLmF0dHJpYnV0ZXNcbiAgICAgICAgfSxcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uU2NvcGU6IHQuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSxcbiAgICAgICAgdHJhY2VJZDogdC5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAgIHBhcmVudElkOiB0LnBhcmVudFNwYW5JZCxcbiAgICAgICAgdHJhY2VTdGF0ZTogKGUgPSB0LnNwYW5Db250ZXh0KCkudHJhY2VTdGF0ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zZXJpYWxpemUoKSxcbiAgICAgICAgbmFtZTogdC5uYW1lLFxuICAgICAgICBpZDogdC5zcGFuQ29udGV4dCgpLnNwYW5JZCxcbiAgICAgICAga2luZDogdC5raW5kLFxuICAgICAgICB0aW1lc3RhbXA6IGplKHQuc3RhcnRUaW1lKSxcbiAgICAgICAgZHVyYXRpb246IGplKHQuZHVyYXRpb24pLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0LmF0dHJpYnV0ZXMsXG4gICAgICAgIHN0YXR1czogdC5zdGF0dXMsXG4gICAgICAgIGV2ZW50czogdC5ldmVudHMsXG4gICAgICAgIGxpbmtzOiB0LmxpbmtzXG4gICAgICB9O1xuICAgIH0sIHIucHJvdG90eXBlLl9zZW5kU3BhbnMgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICB2YXIgbiwgbztcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBIdCh0KSwgYSQxID0gaS5uZXh0KCk7ICFhJDEuZG9uZTsgYSQxID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgcyA9IGEkMS52YWx1ZTtcbiAgICAgICAgICBjb25zb2xlLmRpcih0aGlzLl9leHBvcnRJbmZvKHMpLCB7IGRlcHRoOiAzIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIG4gPSB7IGVycm9yOiBsIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEkMSAmJiAhYSQxLmRvbmUgJiYgKG8gPSBpLnJldHVybikgJiYgby5jYWxsKGkpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZSlcbiAgICAgICAgcmV0dXJuIGUoeyBjb2RlOiBhLlNVQ0NFU1MgfSk7XG4gICAgfSwgcjtcbiAgfSkoKVxuKSwgUXQgPSBmdW5jdGlvbihyLCB0LCBlLCBuKSB7XG4gIGZ1bmN0aW9uIG8oaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgZSA/IGkgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgYSkge1xuICAgIGZ1bmN0aW9uIHMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICBhKGMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgIGEoYyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUocCkge1xuICAgICAgcC5kb25lID8gaShwLnZhbHVlKSA6IG8ocC52YWx1ZSkudGhlbihzLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkociwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIFh0ID0gZnVuY3Rpb24ociwgdCkge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgaSwgYTtcbiAgcmV0dXJuIGEgPSB7IG5leHQ6IHMoMCksIHRocm93OiBzKDEpLCByZXR1cm46IHMoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gcyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBsKFt1LCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgbyAmJiAoaSA9IHVbMF0gJiAyID8gby5yZXR1cm4gOiB1WzBdID8gby50aHJvdyB8fCAoKGkgPSBvLnJldHVybikgJiYgaS5jYWxsKG8pLCAwKSA6IG8ubmV4dCkgJiYgIShpID0gaS5jYWxsKG8sIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAobyA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIG8gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSBlLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiBlLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIGUubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gaVsyXSwgZS5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKHIsIGUpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHUgPSBbNiwgcF0sIG8gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufSwgcmUgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIodCkge1xuICAgICAgdGhpcy5fZXhwb3J0ZXIgPSB0LCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgZnQodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl91bnJlc29sdmVkRXhwb3J0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJldHVybiByLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUXQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gWHQodGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgIHN3aXRjaCAodC5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMpKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiB0LnNlbnQoKSwgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCA/IFs0LCB0aGlzLl9leHBvcnRlci5mb3JjZUZsdXNoKCldIDogWzMsIDNdO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICB0LnNlbnQoKSwgdC5sYWJlbCA9IDM7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIC8qcmV0dXJuKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgci5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIGUpIHtcbiAgICB9LCByLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiwgbztcbiAgICAgIGlmICghdGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkICYmICh0LnNwYW5Db250ZXh0KCkudHJhY2VGbGFncyAmIEh0JDEuU0FNUExFRCkgIT09IDApIHtcbiAgICAgICAgdmFyIGkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gT3QkMS5fZXhwb3J0KGUuX2V4cG9ydGVyLCBbdF0pLnRoZW4oZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgdmFyIGw7XG4gICAgICAgICAgICBzLmNvZGUgIT09IGEuU1VDQ0VTUyAmJiBFcigobCA9IHMuZXJyb3IpICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiBuZXcgRXJyb3IoXCJTaW1wbGVTcGFuUHJvY2Vzc29yOiBzcGFuIGV4cG9ydCBmYWlsZWQgKHN0YXR1cyBcIiArIHMgKyBcIilcIikpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIEVyKHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodC5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgdmFyIGEkMSA9IChvID0gKG4gPSB0LnJlc291cmNlKS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvLmNhbGwobikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBhJDEgIT0gbnVsbCAmJiBlLl91bnJlc29sdmVkRXhwb3J0cy5kZWxldGUoYSQxKSwgaSgpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBFcihzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhJDEgIT0gbnVsbCAmJiB0aGlzLl91bnJlc29sdmVkRXhwb3J0cy5hZGQoYSQxKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgaSgpO1xuICAgICAgfVxuICAgIH0sIHIucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9LCByLnByb3RvdHlwZS5fc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgIH0sIHI7XG4gIH0pKClcbik7XG5cbmV4cG9ydCB7IEIsIER0IGFzIEQsIEd0IGFzIEcsIFAsIFIsIFMsIFcsIGVlIGFzIGUsIGcsIGp0IGFzIGosIHJlIGFzIHIsIHRlIGFzIHQsIHh0IGFzIHgsIHp0IGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUtBLEdBQU0sS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLElBQUksS0FBS0MsSUFBSSxLQUFLQyxJQUFJLEtBQUtDLElBQUksS0FBS0MsVUFBVTtBQUN6RixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsU0FBUyxNQUFNQyxH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LFdBQVc7QUFDakIsaUJBQU9WLEdBQUssUUFBUU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTSSxHQUFHO0FBQ3JELGdCQUFJaEI7QUFDSixZQUFBZ0IsRUFBRSxTQUFTUCxFQUFFLFdBQVdsQixHQUFJUyxJQUFJZ0IsRUFBRSxXQUFXLFFBQVFoQixNQUFNLFNBQVNBLElBQUksSUFBSSxNQUFNLHFEQUFxRGdCLElBQUksR0FBRyxDQUFDO0FBQUEsVUFDakosQ0FBQyxFQUFFLE1BQU0sU0FBU0EsR0FBRztBQUNuQixZQUFBekIsRUFBR3lCLENBQUM7QUFBQSxVQUNOLENBQUM7QUFBQSxRQUNIO0FBQ0EsWUFBSSxFQUFFLFNBQVMsd0JBQXdCO0FBQ3JDLGNBQUlULEtBQU9NLEtBQUssSUFBSSxFQUFFLFVBQVUsNEJBQTRCLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssV0FBVztBQUNwSCxtQkFBT04sS0FBTyxRQUFRSyxFQUFFLG1CQUFtQixPQUFPTCxDQUFHLEdBQUdRLEVBQUU7QUFBQSxVQUM1RCxHQUFHLFNBQVNDLEdBQUc7QUFDYixtQkFBT3pCLEVBQUd5QixDQUFDO0FBQUEsVUFDYixDQUFDO0FBQ0QsVUFBQVQsS0FBTyxRQUFRLEtBQUssbUJBQW1CLElBQUlBLENBQUc7QUFBQSxRQUNoRDtBQUNFLFVBQUFRLEVBQUU7QUFBQSxNQUNOO0FBQUEsSUFDRixHQUFHdEMsRUFBRSxVQUFVLFdBQVcsV0FBVztBQUNuQyxhQUFPLEtBQUssY0FBYyxLQUFLO0FBQUEsSUFDakMsR0FBR0EsRUFBRSxVQUFVLFlBQVksV0FBVztBQUNwQyxhQUFPLEtBQUssVUFBVSxTQUFTO0FBQUEsSUFDakMsR0FBR0E7QUFBQSxFQUNMLEdBQUc7QUFBQTsiLAogICJuYW1lcyI6IFsiSHQkMSIsICJNZSIsICJUZSIsICJhcyIsICJldCIsICJ3ZSIsICJobiIsICJkcyIsICJyIiwgImplIiwgInlfIiwgInFlIiwgIlhlIiwgIlIkMiIsICJwXyIsICJPJDEiLCAiTl8iLCAiYl8iLCAiTkEiLCAiTUEiLCAicl8iLCAiZUEiLCAiRXIiLCAiT2UiLCAidmUiLCAiVmUiLCAiWnIiLCAiZnQiLCAiU2UiLCAibnQiLCAiUXIiLCAibCIsICJjZSIsICJkIiwgInAiLCAiYXIiLCAiT3QkMSIsICJ1IiwgImEkMSIsICJSJDEiLCAiYSIsICJ3dCIsICJEIiwgImUiLCAibyIsICJDdCIsICJpIiwgInMiLCAieHQiLCAiciQxIiwgImMiLCAiUCIsICJnIiwgIkIiLCAiVyIsICJFIiwgIlkiLCAiTnQiLCAicCQxIiwgImYiLCAiTXQiLCAiQnQiLCAiRHQiLCAiR3QiLCAicSIsICJDIiwgImwkMSIsICJqIiwgIkciLCAiYiIsICJldCQxIiwgIksiLCAianQiLCAia3QiXQp9Cg==