@getopenpay/openpay-js-react
Version:
Accept payments through OpenPay, right on your site
431 lines • 55.3 kB
JavaScript
import { r as D } from "./diag-api-DC4dxlqZ-DOFCnxry.js";
import { J as B, q as z, Z as $, $ as W, y as v, a as X, x as Z, k as G, p as C, O as I, E as J, h as b } from "./url-CTAMV9Fr-n8hDYbJZ.js";
import { B as V, U as K, W as Q } from "./utils-DCVGrgLr-DxhyWIXT.js";
import { T as E, y as k, C as x, b as Y, V as tt } from "./utils-CKW-Vl9c-CCUGWG5V.js";
import { M as P, T as h, e as et } from "./index-BRlq-xUA.js";
var g;
(function(o) {
o.COMPONENT = "component", o.HTTP_ERROR_NAME = "http.error_name", o.HTTP_STATUS_TEXT = "http.status_text";
})(g || (g = {}));
var nt = function(o, i, t, n) {
function r(e) {
return e instanceof t ? e : new t(function(s) {
s(e);
});
}
return new (t || (t = Promise))(function(e, s) {
function a(l) {
try {
u(n.next(l));
} catch (y) {
s(y);
}
}
function c(l) {
try {
u(n.throw(l));
} catch (y) {
s(y);
}
}
function u(l) {
l.done ? e(l.value) : r(l.value).then(a, c);
}
u((n = n.apply(o, [])).next());
});
}, rt = function(o, i) {
var t = { label: 0, sent: function() {
if (e[0] & 1) throw e[1];
return e[1];
}, trys: [], ops: [] }, n, r, e, 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(l) {
return c([u, l]);
};
}
function c(u) {
if (n) throw new TypeError("Generator is already executing.");
for (; t; ) try {
if (n = 1, r && (e = u[0] & 2 ? r.return : u[0] ? r.throw || ((e = r.return) && e.call(r), 0) : r.next) && !(e = e.call(r, u[1])).done) return e;
switch (r = 0, e && (u = [u[0] & 2, e.value]), u[0]) {
case 0:
case 1:
e = u;
break;
case 4:
return t.label++, { value: u[1], done: !1 };
case 5:
t.label++, r = u[1], u = [0];
continue;
case 7:
u = t.ops.pop(), t.trys.pop();
continue;
default:
if (e = t.trys, !(e = e.length > 0 && e[e.length - 1]) && (u[0] === 6 || u[0] === 2)) {
t = 0;
continue;
}
if (u[0] === 3 && (!e || u[1] > e[0] && u[1] < e[3])) {
t.label = u[1];
break;
}
if (u[0] === 6 && t.label < e[1]) {
t.label = e[1], e = u;
break;
}
if (e && t.label < e[2]) {
t.label = e[2], t.ops.push(u);
break;
}
e[2] && t.ops.pop(), t.trys.pop();
continue;
}
u = i.call(o, t);
} catch (l) {
u = [6, l], r = 0;
} finally {
n = e = 0;
}
if (u[0] & 5) throw u[1];
return { value: u[0] ? u[1] : void 0, done: !0 };
}
}, ot = function(o) {
var i = typeof Symbol == "function" && Symbol.iterator, t = i && o[i], n = 0;
if (t) return t.call(o);
if (o && typeof o.length == "number") return {
next: function() {
return o && n >= o.length && (o = void 0), { value: o && o[n++], done: !o };
}
};
throw new TypeError(i ? "Object is not iterable." : "Symbol.iterator is not defined.");
}, it = function(o, i) {
var t = typeof Symbol == "function" && o[Symbol.iterator];
if (!t) return o;
var n = t.call(o), r, e = [], s;
try {
for (; (i === void 0 || i-- > 0) && !(r = n.next()).done; ) e.push(r.value);
} catch (a) {
s = { error: a };
} finally {
try {
r && !r.done && (t = n.return) && t.call(n);
} finally {
if (s) throw s.error;
}
}
return e;
}, N = D.createComponentLogger({
namespace: "@opentelemetry/opentelemetry-instrumentation-fetch/utils"
});
function st() {
for (var o = [], i = 0; i < arguments.length; i++)
o[i] = arguments[i];
if (o[0] instanceof URL || typeof o[0] == "string") {
var t = o[1];
if (!t?.body)
return Promise.resolve();
if (t.body instanceof ReadableStream) {
var n = at(t.body), r = n.body, e = n.length;
return t.body = r, e;
} else
return Promise.resolve(ut(t.body));
} else {
var s = o[0];
return s?.body ? s.clone().text().then(function(a) {
return S(a);
}) : Promise.resolve();
}
}
function at(o) {
if (!o.pipeThrough)
return N.warn("Platform has ReadableStream but not pipeThrough!"), {
body: o,
length: Promise.resolve(void 0)
};
var i = 0, t, n = new Promise(function(e) {
t = e;
}), r = new TransformStream({
start: function() {
},
transform: function(e, s) {
return nt(this, void 0, void 0, function() {
var a;
return rt(this, function(c) {
switch (c.label) {
case 0:
return [4, e];
case 1:
return a = c.sent(), i += a.byteLength, s.enqueue(e), [
2
/*return*/
];
}
});
});
},
flush: function() {
t(i);
}
});
return {
body: o.pipeThrough(r),
length: n
};
}
function ut(o) {
if (typeof Document < "u" && o instanceof Document)
return new XMLSerializer().serializeToString(document).length;
if (o instanceof Blob)
return o.size;
if (o.byteLength !== void 0)
return o.byteLength;
if (o instanceof FormData)
return ft(o);
if (o instanceof URLSearchParams)
return S(o.toString());
if (typeof o == "string")
return S(o);
N.warn("unknown body type");
}
var ct = new TextEncoder();
function S(o) {
return ct.encode(o).byteLength;
}
function ft(o) {
var i, t, n = 0;
try {
for (var r = ot(o.entries()), e = r.next(); !e.done; e = r.next()) {
var s = it(e.value, 2), a = s[0], c = s[1];
n += a.length, c instanceof Blob ? n += c.size : n += c.length;
}
} catch (u) {
i = { error: u };
} finally {
try {
e && !e.done && (t = r.return) && t.call(r);
} finally {
if (i) throw i.error;
}
}
return n;
}
var O = "0.57.2", lt = /* @__PURE__ */ (function() {
var o = function(i, t) {
return o = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, r) {
n.__proto__ = r;
} || function(n, r) {
for (var e in r) Object.prototype.hasOwnProperty.call(r, e) && (n[e] = r[e]);
}, o(i, t);
};
return function(i, t) {
if (typeof t != "function" && t !== null)
throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");
o(i, t);
function n() {
this.constructor = i;
}
i.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());
};
})(), pt = function(o, i) {
var t = typeof Symbol == "function" && o[Symbol.iterator];
if (!t) return o;
var n = t.call(o), r, e = [], s;
try {
for (; (i === void 0 || i-- > 0) && !(r = n.next()).done; ) e.push(r.value);
} catch (a) {
s = { error: a };
} finally {
try {
r && !r.done && (t = n.return) && t.call(n);
} finally {
if (s) throw s.error;
}
}
return e;
}, ht = function(o, i, t) {
if (arguments.length === 2) for (var n = 0, r = i.length, e; n < r; n++)
(e || !(n in i)) && (e || (e = Array.prototype.slice.call(i, 0, n)), e[n] = i[n]);
return o.concat(e || Array.prototype.slice.call(i));
}, _, yt = 300, U = typeof process == "object" && ((_ = process.release) === null || _ === void 0 ? void 0 : _.name) === "node", _t = (
/** @class */
(function(o) {
lt(i, o);
function i(t) {
t === void 0 && (t = {});
var n = o.call(this, "@opentelemetry/instrumentation-fetch", O, t) || this;
return n.component = "fetch", n.version = O, n.moduleName = n.component, n._usedResources = /* @__PURE__ */ new WeakSet(), n._tasksCount = 0, n;
}
return i.prototype.init = function() {
}, i.prototype._addChildSpan = function(t, n) {
var r = this.tracer.startSpan("CORS Preflight", {
startTime: n[E.FETCH_START]
}, P.setSpan(h.active(), t));
k(r, n, this.getConfig().ignoreNetworkEvents), r.end(n[E.RESPONSE_END]);
}, i.prototype._addFinalSpanAttributes = function(t, n) {
var r = x(n.url);
t.setAttribute(B, n.status), n.statusText != null && t.setAttribute(g.HTTP_STATUS_TEXT, n.statusText), t.setAttribute(z, r.host), t.setAttribute($, r.protocol.replace(":", "")), typeof navigator < "u" && t.setAttribute(W, navigator.userAgent);
}, i.prototype._addHeaders = function(t, n) {
if (!Y(n, this.getConfig().propagateTraceHeaderCorsUrls)) {
var r = {};
v.inject(h.active(), r), Object.keys(r).length > 0 && this._diag.debug("headers inject skipped due to CORS policy");
return;
}
if (t instanceof Request)
v.inject(h.active(), t.headers, {
set: function(e, s, a) {
return e.set(s, typeof a == "string" ? a : String(a));
}
});
else if (t.headers instanceof Headers)
v.inject(h.active(), t.headers, {
set: function(e, s, a) {
return e.set(s, typeof a == "string" ? a : String(a));
}
});
else if (t.headers instanceof Map)
v.inject(h.active(), t.headers, {
set: function(e, s, a) {
return e.set(s, typeof a == "string" ? a : String(a));
}
});
else {
var r = {};
v.inject(h.active(), r), t.headers = Object.assign({}, r, t.headers || {});
}
}, i.prototype._clearResources = function() {
this._tasksCount === 0 && this.getConfig().clearTimingResources && (performance.clearResourceTimings(), this._usedResources = /* @__PURE__ */ new WeakSet());
}, i.prototype._createSpan = function(t, n) {
var r;
if (n === void 0 && (n = {}), X(t, this.getConfig().ignoreUrls)) {
this._diag.debug("ignoring span as url matches ignored url");
return;
}
var e = (n.method || "GET").toUpperCase(), s = "HTTP " + e;
return this.tracer.startSpan(s, {
kind: et.CLIENT,
attributes: (r = {}, r[g.COMPONENT] = this.moduleName, r[Z] = e, r[G] = t, r)
});
}, i.prototype._findResourceAndAddNetworkEvents = function(t, n, r) {
var e = n.entries;
if (!e.length) {
if (!performance.getEntriesByType)
return;
e = performance.getEntriesByType("resource");
}
var s = tt(n.spanUrl, n.startTime, r, e, this._usedResources, "fetch");
if (s.mainRequest) {
var a = s.mainRequest;
this._markResourceAsUsed(a);
var c = s.corsPreFlightRequest;
c && (this._addChildSpan(t, c), this._markResourceAsUsed(c)), k(t, a, this.getConfig().ignoreNetworkEvents);
}
}, i.prototype._markResourceAsUsed = function(t) {
this._usedResources.add(t);
}, i.prototype._endSpan = function(t, n, r) {
var e = this, s = I(Date.now()), a = C();
this._addFinalSpanAttributes(t, r), setTimeout(function() {
var c;
(c = n.observer) === null || c === void 0 || c.disconnect(), e._findResourceAndAddNetworkEvents(t, n, a), e._tasksCount--, e._clearResources(), t.end(s);
}, yt);
}, i.prototype._patchConstructor = function() {
var t = this;
return function(n) {
var r = t;
return function() {
for (var e = [], s = 0; s < arguments.length; s++)
e[s] = arguments[s];
var a = this, c = x(e[0] instanceof Request ? e[0].url : String(e[0])).href, u = e[0] instanceof Request ? e[0] : e[1] || {}, l = r._createSpan(c, u);
if (!l)
return n.apply(this, e);
var y = r._prepareSpanData(c);
r.getConfig().measureRequestSize && st.apply(void 0, ht([], pt(e), !1)).then(function(f) {
f && l.setAttribute(J, f);
}).catch(function(f) {
r._diag.warn("getFetchBodyLength", f);
});
function T(f, p) {
r._applyAttributesAfterFetch(f, u, p), r._endSpan(f, y, {
status: p.status || 0,
statusText: p.message,
url: c
});
}
function w(f, p) {
r._applyAttributesAfterFetch(f, u, p), p.status >= 200 && p.status < 400 ? r._endSpan(f, y, p) : r._endSpan(f, y, {
status: p.status,
statusText: p.statusText,
url: c
});
}
function j(f, p, d) {
try {
var F = d.clone(), L = d.clone(), A = F.body;
if (A) {
var H = A.getReader(), R = function() {
H.read().then(function(m) {
var M = m.done;
M ? w(f, L) : R();
}, function(m) {
T(f, m);
});
};
R();
} else
w(f, d);
} finally {
p(d);
}
}
function q(f, p, d) {
try {
T(f, d);
} finally {
p(d);
}
}
return new Promise(function(f, p) {
return h.with(P.setSpan(h.active(), l), function() {
return r._addHeaders(u, c), r._tasksCount++, n.apply(a, u instanceof Request ? [u] : [c, u]).then(j.bind(a, l, f), q.bind(a, l, p));
});
});
};
};
}, i.prototype._applyAttributesAfterFetch = function(t, n, r) {
var e = this, s = this.getConfig().applyCustomAttributesOnSpan;
s && V(function() {
return s(t, n, r);
}, function(a) {
a && e._diag.error("applyCustomAttributesOnSpan", a);
});
}, i.prototype._prepareSpanData = function(t) {
var n = C(), r = [];
if (typeof PerformanceObserver != "function")
return { entries: r, startTime: n, spanUrl: t };
var e = new PerformanceObserver(function(s) {
var a = s.getEntries();
a.forEach(function(c) {
c.initiatorType === "fetch" && c.name === t && r.push(c);
});
});
return e.observe({
entryTypes: ["resource"]
}), { entries: r, observer: e, startTime: n, spanUrl: t };
}, i.prototype.enable = function() {
if (U) {
this._diag.warn("this instrumentation is intended for web usage only, it does not instrument Node.js's fetch()");
return;
}
K(fetch) && (this._unwrap(b, "fetch"), this._diag.debug("removing previous patch for constructor")), this._wrap(b, "fetch", this._patchConstructor());
}, i.prototype.disable = function() {
U || (this._unwrap(b, "fetch"), this._usedResources = /* @__PURE__ */ new WeakSet());
}, i;
})(Q)
);
export {
_t as FetchInstrumentation
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtQlh5b1RiclMtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHIgfSBmcm9tICcuL2RpYWctYXBpLURDNGR4bHFaLSF+ezAwYX1+LmpzJztcbmltcG9ydCB7IEogYXMgSkEsIHEgYXMgcUEsIFogYXMgWkEsICQgYXMgJEEsIHkgYXMgeV8sIGEgYXMgWmUsIHggYXMgeEEsIGsgYXMga0EsIHAgYXMgcF8sIE8sIEUgYXMgRXIsIGggYXMgaF8gfSBmcm9tICcuL3VybC1DVEFNVjlGci0hfnswMGJ9fi5qcyc7XG5pbXBvcnQgeyBCLCBVIGFzIFUkMSwgVyB9IGZyb20gJy4vdXRpbHMtRENWR3JnTHItIX57MDBjfX4uanMnO1xuaW1wb3J0IHsgVCwgeSBhcyB5JDEsIEMsIGIgYXMgYiQxLCBWIH0gZnJvbSAnLi91dGlscy1DS1ctVmw5Yy0hfnswMDh9fi5qcyc7XG5pbXBvcnQgeyBNIGFzIE1lLCBUIGFzIFRlLCBlIGFzIGV0IH0gZnJvbSAnLi9pbmRleC0hfnswMDd9fi5qcyc7XG5cbnZhciB5O1xuKGZ1bmN0aW9uKGEpIHtcbiAgYS5DT01QT05FTlQgPSBcImNvbXBvbmVudFwiLCBhLkhUVFBfRVJST1JfTkFNRSA9IFwiaHR0cC5lcnJvcl9uYW1lXCIsIGEuSFRUUF9TVEFUVVNfVEVYVCA9IFwiaHR0cC5zdGF0dXNfdGV4dFwiO1xufSkoeSB8fCAoeSA9IHt9KSk7XG52YXIgbmUgPSBmdW5jdGlvbihhLCBvLCBlLCByKSB7XG4gIGZ1bmN0aW9uIG4odCkge1xuICAgIHJldHVybiB0IGluc3RhbmNlb2YgZSA/IHQgOiBuZXcgZShmdW5jdGlvbihpKSB7XG4gICAgICBpKHQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24odCwgaSkge1xuICAgIGZ1bmN0aW9uIHMoYykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLm5leHQoYykpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBpKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmKGMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUoci50aHJvdyhjKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGkoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoYykge1xuICAgICAgYy5kb25lID8gdChjLnZhbHVlKSA6IG4oYy52YWx1ZSkudGhlbihzLCBmKTtcbiAgICB9XG4gICAgdSgociA9IHIuYXBwbHkoYSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIGFlID0gZnVuY3Rpb24oYSwgbykge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTtcbiAgICByZXR1cm4gdFsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgbiwgdCwgaTtcbiAgcmV0dXJuIGkgPSB7IG5leHQ6IHMoMCksIHRocm93OiBzKDEpLCByZXR1cm46IHMoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgaTtcbiAgZnVuY3Rpb24gcyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBmKFt1LCBjXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmKHUpIHtcbiAgICBpZiAocikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGU7ICkgdHJ5IHtcbiAgICAgIGlmIChyID0gMSwgbiAmJiAodCA9IHVbMF0gJiAyID8gbi5yZXR1cm4gOiB1WzBdID8gbi50aHJvdyB8fCAoKHQgPSBuLnJldHVybikgJiYgdC5jYWxsKG4pLCAwKSA6IG4ubmV4dCkgJiYgISh0ID0gdC5jYWxsKG4sIHVbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgIHN3aXRjaCAobiA9IDAsIHQgJiYgKHUgPSBbdVswXSAmIDIsIHQudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0ID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIG4gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHQgPSBlLnRyeXMsICEodCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIXQgfHwgdVsxXSA+IHRbMF0gJiYgdVsxXSA8IHRbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiBlLmxhYmVsIDwgdFsxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHRbMV0sIHQgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0ICYmIGUubGFiZWwgPCB0WzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdFsyXSwgZS5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0WzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gby5jYWxsKGEsIGUpO1xuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHUgPSBbNiwgY10sIG4gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByID0gdCA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufSwgaWUgPSBmdW5jdGlvbihhKSB7XG4gIHZhciBvID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gbyAmJiBhW29dLCByID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwoYSk7XG4gIGlmIChhICYmIHR5cGVvZiBhLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGEgJiYgciA+PSBhLmxlbmd0aCAmJiAoYSA9IHZvaWQgMCksIHsgdmFsdWU6IGEgJiYgYVtyKytdLCBkb25lOiAhYSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihvID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufSwgb2UgPSBmdW5jdGlvbihhLCBvKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiBhO1xuICB2YXIgciA9IGUuY2FsbChhKSwgbiwgdCA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAobyA9PT0gdm9pZCAwIHx8IG8tLSA+IDApICYmICEobiA9IHIubmV4dCgpKS5kb25lOyApIHQucHVzaChuLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGkgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG4gJiYgIW4uZG9uZSAmJiAoZSA9IHIucmV0dXJuKSAmJiBlLmNhbGwocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdDtcbn0sIFUgPSByLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7XG4gIG5hbWVzcGFjZTogXCJAb3BlbnRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWluc3RydW1lbnRhdGlvbi1mZXRjaC91dGlsc1wiXG59KTtcbmZ1bmN0aW9uIHNlKCkge1xuICBmb3IgKHZhciBhID0gW10sIG8gPSAwOyBvIDwgYXJndW1lbnRzLmxlbmd0aDsgbysrKVxuICAgIGFbb10gPSBhcmd1bWVudHNbb107XG4gIGlmIChhWzBdIGluc3RhbmNlb2YgVVJMIHx8IHR5cGVvZiBhWzBdID09IFwic3RyaW5nXCIpIHtcbiAgICB2YXIgZSA9IGFbMV07XG4gICAgaWYgKCFlPy5ib2R5KVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlLmJvZHkgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgdmFyIHIgPSB1ZShlLmJvZHkpLCBuID0gci5ib2R5LCB0ID0gci5sZW5ndGg7XG4gICAgICByZXR1cm4gZS5ib2R5ID0gbiwgdDtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmUoZS5ib2R5KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGkgPSBhWzBdO1xuICAgIHJldHVybiBpPy5ib2R5ID8gaS5jbG9uZSgpLnRleHQoKS50aGVuKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBiKHMpO1xuICAgIH0pIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVlKGEpIHtcbiAgaWYgKCFhLnBpcGVUaHJvdWdoKVxuICAgIHJldHVybiBVLndhcm4oXCJQbGF0Zm9ybSBoYXMgUmVhZGFibGVTdHJlYW0gYnV0IG5vdCBwaXBlVGhyb3VnaCFcIiksIHtcbiAgICAgIGJvZHk6IGEsXG4gICAgICBsZW5ndGg6IFByb21pc2UucmVzb2x2ZSh2b2lkIDApXG4gICAgfTtcbiAgdmFyIG8gPSAwLCBlLCByID0gbmV3IFByb21pc2UoZnVuY3Rpb24odCkge1xuICAgIGUgPSB0O1xuICB9KSwgbiA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgIHN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB9LFxuICAgIHRyYW5zZm9ybTogZnVuY3Rpb24odCwgaSkge1xuICAgICAgcmV0dXJuIG5lKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHM7XG4gICAgICAgIHJldHVybiBhZSh0aGlzLCBmdW5jdGlvbihmKSB7XG4gICAgICAgICAgc3dpdGNoIChmLmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiBbNCwgdF07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiBzID0gZi5zZW50KCksIG8gKz0gcy5ieXRlTGVuZ3RoLCBpLmVucXVldWUodCksIFtcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgLypyZXR1cm4qL1xuICAgICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGZsdXNoOiBmdW5jdGlvbigpIHtcbiAgICAgIGUobyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBib2R5OiBhLnBpcGVUaHJvdWdoKG4pLFxuICAgIGxlbmd0aDogclxuICB9O1xufVxuZnVuY3Rpb24gZmUoYSkge1xuICBpZiAodHlwZW9mIERvY3VtZW50IDwgXCJ1XCIgJiYgYSBpbnN0YW5jZW9mIERvY3VtZW50KVxuICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGRvY3VtZW50KS5sZW5ndGg7XG4gIGlmIChhIGluc3RhbmNlb2YgQmxvYilcbiAgICByZXR1cm4gYS5zaXplO1xuICBpZiAoYS5ieXRlTGVuZ3RoICE9PSB2b2lkIDApXG4gICAgcmV0dXJuIGEuYnl0ZUxlbmd0aDtcbiAgaWYgKGEgaW5zdGFuY2VvZiBGb3JtRGF0YSlcbiAgICByZXR1cm4gbGUoYSk7XG4gIGlmIChhIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKVxuICAgIHJldHVybiBiKGEudG9TdHJpbmcoKSk7XG4gIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBiKGEpO1xuICBVLndhcm4oXCJ1bmtub3duIGJvZHkgdHlwZVwiKTtcbn1cbnZhciBjZSA9IG5ldyBUZXh0RW5jb2RlcigpO1xuZnVuY3Rpb24gYihhKSB7XG4gIHJldHVybiBjZS5lbmNvZGUoYSkuYnl0ZUxlbmd0aDtcbn1cbmZ1bmN0aW9uIGxlKGEpIHtcbiAgdmFyIG8sIGUsIHIgPSAwO1xuICB0cnkge1xuICAgIGZvciAodmFyIG4gPSBpZShhLmVudHJpZXMoKSksIHQgPSBuLm5leHQoKTsgIXQuZG9uZTsgdCA9IG4ubmV4dCgpKSB7XG4gICAgICB2YXIgaSA9IG9lKHQudmFsdWUsIDIpLCBzID0gaVswXSwgZiA9IGlbMV07XG4gICAgICByICs9IHMubGVuZ3RoLCBmIGluc3RhbmNlb2YgQmxvYiA/IHIgKz0gZi5zaXplIDogciArPSBmLmxlbmd0aDtcbiAgICB9XG4gIH0gY2F0Y2ggKHUpIHtcbiAgICBvID0geyBlcnJvcjogdSB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICB0ICYmICF0LmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59XG52YXIgayA9IFwiMC41Ny4yXCIsIGRlID0gLyogQF9fUFVSRV9fICovIChmdW5jdGlvbigpIHtcbiAgdmFyIGEgPSBmdW5jdGlvbihvLCBlKSB7XG4gICAgcmV0dXJuIGEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihyLCBuKSB7XG4gICAgICByLl9fcHJvdG9fXyA9IG47XG4gICAgfSB8fCBmdW5jdGlvbihyLCBuKSB7XG4gICAgICBmb3IgKHZhciB0IGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCB0KSAmJiAoclt0XSA9IG5bdF0pO1xuICAgIH0sIGEobywgZSk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihvLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIGEobywgZSk7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBvO1xuICAgIH1cbiAgICBvLnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKHIucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyByKCkpO1xuICB9O1xufSkoKSwgaGUgPSBmdW5jdGlvbihhLCBvKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiBhO1xuICB2YXIgciA9IGUuY2FsbChhKSwgbiwgdCA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAobyA9PT0gdm9pZCAwIHx8IG8tLSA+IDApICYmICEobiA9IHIubmV4dCgpKS5kb25lOyApIHQucHVzaChuLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGkgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG4gJiYgIW4uZG9uZSAmJiAoZSA9IHIucmV0dXJuKSAmJiBlLmNhbGwocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdDtcbn0sIHBlID0gZnVuY3Rpb24oYSwgbywgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIG4gPSBvLmxlbmd0aCwgdDsgciA8IG47IHIrKylcbiAgICAodCB8fCAhKHIgaW4gbykpICYmICh0IHx8ICh0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobywgMCwgcikpLCB0W3JdID0gb1tyXSk7XG4gIHJldHVybiBhLmNvbmNhdCh0IHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8pKTtcbn0sIFMsIHZlID0gMzAwLCBIID0gdHlwZW9mIHByb2Nlc3MgPT0gXCJvYmplY3RcIiAmJiAoKFMgPSBwcm9jZXNzLnJlbGVhc2UpID09PSBudWxsIHx8IFMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFMubmFtZSkgPT09IFwibm9kZVwiLCBTZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oYSkge1xuICAgIGRlKG8sIGEpO1xuICAgIGZ1bmN0aW9uIG8oZSkge1xuICAgICAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pO1xuICAgICAgdmFyIHIgPSBhLmNhbGwodGhpcywgXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZmV0Y2hcIiwgaywgZSkgfHwgdGhpcztcbiAgICAgIHJldHVybiByLmNvbXBvbmVudCA9IFwiZmV0Y2hcIiwgci52ZXJzaW9uID0gaywgci5tb2R1bGVOYW1lID0gci5jb21wb25lbnQsIHIuX3VzZWRSZXNvdXJjZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSwgci5fdGFza3NDb3VudCA9IDAsIHI7XG4gICAgfVxuICAgIHJldHVybiBvLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgfSwgby5wcm90b3R5cGUuX2FkZENoaWxkU3BhbiA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICAgIHZhciBuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKFwiQ09SUyBQcmVmbGlnaHRcIiwge1xuICAgICAgICBzdGFydFRpbWU6IHJbVC5GRVRDSF9TVEFSVF1cbiAgICAgIH0sIE1lLnNldFNwYW4oVGUuYWN0aXZlKCksIGUpKTtcbiAgICAgIHkkMShuLCByLCB0aGlzLmdldENvbmZpZygpLmlnbm9yZU5ldHdvcmtFdmVudHMpLCBuLmVuZChyW1QuUkVTUE9OU0VfRU5EXSk7XG4gICAgfSwgby5wcm90b3R5cGUuX2FkZEZpbmFsU3BhbkF0dHJpYnV0ZXMgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgICB2YXIgbiA9IEMoci51cmwpO1xuICAgICAgZS5zZXRBdHRyaWJ1dGUoSkEsIHIuc3RhdHVzKSwgci5zdGF0dXNUZXh0ICE9IG51bGwgJiYgZS5zZXRBdHRyaWJ1dGUoeS5IVFRQX1NUQVRVU19URVhULCByLnN0YXR1c1RleHQpLCBlLnNldEF0dHJpYnV0ZShxQSwgbi5ob3N0KSwgZS5zZXRBdHRyaWJ1dGUoWkEsIG4ucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIikpLCB0eXBlb2YgbmF2aWdhdG9yIDwgXCJ1XCIgJiYgZS5zZXRBdHRyaWJ1dGUoJEEsIG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9hZGRIZWFkZXJzID0gZnVuY3Rpb24oZSwgcikge1xuICAgICAgaWYgKCFiJDEociwgdGhpcy5nZXRDb25maWcoKS5wcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzKSkge1xuICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICB5Xy5pbmplY3QoVGUuYWN0aXZlKCksIG4pLCBPYmplY3Qua2V5cyhuKS5sZW5ndGggPiAwICYmIHRoaXMuX2RpYWcuZGVidWcoXCJoZWFkZXJzIGluamVjdCBza2lwcGVkIGR1ZSB0byBDT1JTIHBvbGljeVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSZXF1ZXN0KVxuICAgICAgICB5Xy5pbmplY3QoVGUuYWN0aXZlKCksIGUuaGVhZGVycywge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24odCwgaSwgcykge1xuICAgICAgICAgICAgcmV0dXJuIHQuc2V0KGksIHR5cGVvZiBzID09IFwic3RyaW5nXCIgPyBzIDogU3RyaW5nKHMpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgZWxzZSBpZiAoZS5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycylcbiAgICAgICAgeV8uaW5qZWN0KFRlLmFjdGl2ZSgpLCBlLmhlYWRlcnMsIHtcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHQsIGksIHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0LnNldChpLCB0eXBlb2YgcyA9PSBcInN0cmluZ1wiID8gcyA6IFN0cmluZyhzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYgKGUuaGVhZGVycyBpbnN0YW5jZW9mIE1hcClcbiAgICAgICAgeV8uaW5qZWN0KFRlLmFjdGl2ZSgpLCBlLmhlYWRlcnMsIHtcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHQsIGksIHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0LnNldChpLCB0eXBlb2YgcyA9PSBcInN0cmluZ1wiID8gcyA6IFN0cmluZyhzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICB5Xy5pbmplY3QoVGUuYWN0aXZlKCksIG4pLCBlLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBuLCBlLmhlYWRlcnMgfHwge30pO1xuICAgICAgfVxuICAgIH0sIG8ucHJvdG90eXBlLl9jbGVhclJlc291cmNlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fdGFza3NDb3VudCA9PT0gMCAmJiB0aGlzLmdldENvbmZpZygpLmNsZWFyVGltaW5nUmVzb3VyY2VzICYmIChwZXJmb3JtYW5jZS5jbGVhclJlc291cmNlVGltaW5ncygpLCB0aGlzLl91c2VkUmVzb3VyY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9jcmVhdGVTcGFuID0gZnVuY3Rpb24oZSwgcikge1xuICAgICAgdmFyIG47XG4gICAgICBpZiAociA9PT0gdm9pZCAwICYmIChyID0ge30pLCBaZShlLCB0aGlzLmdldENvbmZpZygpLmlnbm9yZVVybHMpKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoXCJpZ25vcmluZyBzcGFuIGFzIHVybCBtYXRjaGVzIGlnbm9yZWQgdXJsXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdCA9IChyLm1ldGhvZCB8fCBcIkdFVFwiKS50b1VwcGVyQ2FzZSgpLCBpID0gXCJIVFRQIFwiICsgdDtcbiAgICAgIHJldHVybiB0aGlzLnRyYWNlci5zdGFydFNwYW4oaSwge1xuICAgICAgICBraW5kOiBldC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IChuID0ge30sIG5beS5DT01QT05FTlRdID0gdGhpcy5tb2R1bGVOYW1lLCBuW3hBXSA9IHQsIG5ba0FdID0gZSwgbilcbiAgICAgIH0pO1xuICAgIH0sIG8ucHJvdG90eXBlLl9maW5kUmVzb3VyY2VBbmRBZGROZXR3b3JrRXZlbnRzID0gZnVuY3Rpb24oZSwgciwgbikge1xuICAgICAgdmFyIHQgPSByLmVudHJpZXM7XG4gICAgICBpZiAoIXQubGVuZ3RoKSB7XG4gICAgICAgIGlmICghcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHQgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwicmVzb3VyY2VcIik7XG4gICAgICB9XG4gICAgICB2YXIgaSA9IFYoci5zcGFuVXJsLCByLnN0YXJ0VGltZSwgbiwgdCwgdGhpcy5fdXNlZFJlc291cmNlcywgXCJmZXRjaFwiKTtcbiAgICAgIGlmIChpLm1haW5SZXF1ZXN0KSB7XG4gICAgICAgIHZhciBzID0gaS5tYWluUmVxdWVzdDtcbiAgICAgICAgdGhpcy5fbWFya1Jlc291cmNlQXNVc2VkKHMpO1xuICAgICAgICB2YXIgZiA9IGkuY29yc1ByZUZsaWdodFJlcXVlc3Q7XG4gICAgICAgIGYgJiYgKHRoaXMuX2FkZENoaWxkU3BhbihlLCBmKSwgdGhpcy5fbWFya1Jlc291cmNlQXNVc2VkKGYpKSwgeSQxKGUsIHMsIHRoaXMuZ2V0Q29uZmlnKCkuaWdub3JlTmV0d29ya0V2ZW50cyk7XG4gICAgICB9XG4gICAgfSwgby5wcm90b3R5cGUuX21hcmtSZXNvdXJjZUFzVXNlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHRoaXMuX3VzZWRSZXNvdXJjZXMuYWRkKGUpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9lbmRTcGFuID0gZnVuY3Rpb24oZSwgciwgbikge1xuICAgICAgdmFyIHQgPSB0aGlzLCBpID0gTyhEYXRlLm5vdygpKSwgcyA9IHBfKCk7XG4gICAgICB0aGlzLl9hZGRGaW5hbFNwYW5BdHRyaWJ1dGVzKGUsIG4pLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZjtcbiAgICAgICAgKGYgPSByLm9ic2VydmVyKSA9PT0gbnVsbCB8fCBmID09PSB2b2lkIDAgfHwgZi5kaXNjb25uZWN0KCksIHQuX2ZpbmRSZXNvdXJjZUFuZEFkZE5ldHdvcmtFdmVudHMoZSwgciwgcyksIHQuX3Rhc2tzQ291bnQtLSwgdC5fY2xlYXJSZXNvdXJjZXMoKSwgZS5lbmQoaSk7XG4gICAgICB9LCB2ZSk7XG4gICAgfSwgby5wcm90b3R5cGUuX3BhdGNoQ29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gdGhpcztcbiAgICAgIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgICAgIHZhciBuID0gZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBpW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBmID0gdGhpcywgdSA9IEMoaVswXSBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpWzBdLnVybCA6IFN0cmluZyhpWzBdKSkuaHJlZiwgYyA9IGlbMF0gaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaVswXSA6IGlbMV0gfHwge30sIGggPSBuLl9jcmVhdGVTcGFuKHUsIGMpO1xuICAgICAgICAgIGlmICghaClcbiAgICAgICAgICAgIHJldHVybiByLmFwcGx5KHRoaXMsIGkpO1xuICAgICAgICAgIHZhciBnID0gbi5fcHJlcGFyZVNwYW5EYXRhKHUpO1xuICAgICAgICAgIG4uZ2V0Q29uZmlnKCkubWVhc3VyZVJlcXVlc3RTaXplICYmIHNlLmFwcGx5KHZvaWQgMCwgcGUoW10sIGhlKGkpLCBmYWxzZSkpLnRoZW4oZnVuY3Rpb24obCkge1xuICAgICAgICAgICAgbCAmJiBoLnNldEF0dHJpYnV0ZShFciwgbCk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgICAgbi5fZGlhZy53YXJuKFwiZ2V0RmV0Y2hCb2R5TGVuZ3RoXCIsIGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZ1bmN0aW9uIEUobCwgZCkge1xuICAgICAgICAgICAgbi5fYXBwbHlBdHRyaWJ1dGVzQWZ0ZXJGZXRjaChsLCBjLCBkKSwgbi5fZW5kU3BhbihsLCBnLCB7XG4gICAgICAgICAgICAgIHN0YXR1czogZC5zdGF0dXMgfHwgMCxcbiAgICAgICAgICAgICAgc3RhdHVzVGV4dDogZC5tZXNzYWdlLFxuICAgICAgICAgICAgICB1cmw6IHVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB3KGwsIGQpIHtcbiAgICAgICAgICAgIG4uX2FwcGx5QXR0cmlidXRlc0FmdGVyRmV0Y2gobCwgYywgZCksIGQuc3RhdHVzID49IDIwMCAmJiBkLnN0YXR1cyA8IDQwMCA/IG4uX2VuZFNwYW4obCwgZywgZCkgOiBuLl9lbmRTcGFuKGwsIGcsIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBkLnN0YXR1cyxcbiAgICAgICAgICAgICAgc3RhdHVzVGV4dDogZC5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICB1cmw6IHVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBNKGwsIGQsIHYpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBqID0gdi5jbG9uZSgpLCBEID0gdi5jbG9uZSgpLCBSID0gai5ib2R5O1xuICAgICAgICAgICAgICBpZiAoUikge1xuICAgICAgICAgICAgICAgIHZhciBCID0gUi5nZXRSZWFkZXIoKSwgQSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgQi5yZWFkKCkudGhlbihmdW5jdGlvbihtKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBGID0gbS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBGID8gdyhsLCBEKSA6IEEoKTtcbiAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgRShsLCBtKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgQSgpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICB3KGwsIHYpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTChsLCBkLCB2KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBFKGwsIHYpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBUZS53aXRoKE1lLnNldFNwYW4oVGUuYWN0aXZlKCksIGgpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG4uX2FkZEhlYWRlcnMoYywgdSksIG4uX3Rhc2tzQ291bnQrKywgci5hcHBseShmLCBjIGluc3RhbmNlb2YgUmVxdWVzdCA/IFtjXSA6IFt1LCBjXSkudGhlbihNLmJpbmQoZiwgaCwgbCksIEwuYmluZChmLCBoLCBkKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfSwgby5wcm90b3R5cGUuX2FwcGx5QXR0cmlidXRlc0FmdGVyRmV0Y2ggPSBmdW5jdGlvbihlLCByLCBuKSB7XG4gICAgICB2YXIgdCA9IHRoaXMsIGkgPSB0aGlzLmdldENvbmZpZygpLmFwcGx5Q3VzdG9tQXR0cmlidXRlc09uU3BhbjtcbiAgICAgIGkgJiYgQihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGkoZSwgciwgbik7XG4gICAgICB9LCBmdW5jdGlvbihzKSB7XG4gICAgICAgIHMgJiYgdC5fZGlhZy5lcnJvcihcImFwcGx5Q3VzdG9tQXR0cmlidXRlc09uU3BhblwiLCBzKTtcbiAgICAgIH0pO1xuICAgIH0sIG8ucHJvdG90eXBlLl9wcmVwYXJlU3BhbkRhdGEgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgciA9IHBfKCksIG4gPSBbXTtcbiAgICAgIGlmICh0eXBlb2YgUGVyZm9ybWFuY2VPYnNlcnZlciAhPSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IG4sIHN0YXJ0VGltZTogciwgc3BhblVybDogZSB9O1xuICAgICAgdmFyIHQgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBzID0gaS5nZXRFbnRyaWVzKCk7XG4gICAgICAgIHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgICAgZi5pbml0aWF0b3JUeXBlID09PSBcImZldGNoXCIgJiYgZi5uYW1lID09PSBlICYmIG4ucHVzaChmKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0Lm9ic2VydmUoe1xuICAgICAgICBlbnRyeVR5cGVzOiBbXCJyZXNvdXJjZVwiXVxuICAgICAgfSksIHsgZW50cmllczogbiwgb2JzZXJ2ZXI6IHQsIHN0YXJ0VGltZTogciwgc3BhblVybDogZSB9O1xuICAgIH0sIG8ucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKEgpIHtcbiAgICAgICAgdGhpcy5fZGlhZy53YXJuKFwidGhpcyBpbnN0cnVtZW50YXRpb24gaXMgaW50ZW5kZWQgZm9yIHdlYiB1c2FnZSBvbmx5LCBpdCBkb2VzIG5vdCBpbnN0cnVtZW50IE5vZGUuanMncyBmZXRjaCgpXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBVJDEoZmV0Y2gpICYmICh0aGlzLl91bndyYXAoaF8sIFwiZmV0Y2hcIiksIHRoaXMuX2RpYWcuZGVidWcoXCJyZW1vdmluZyBwcmV2aW91cyBwYXRjaCBmb3IgY29uc3RydWN0b3JcIikpLCB0aGlzLl93cmFwKGhfLCBcImZldGNoXCIsIHRoaXMuX3BhdGNoQ29uc3RydWN0b3IoKSk7XG4gICAgfSwgby5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgSCB8fCAodGhpcy5fdW53cmFwKGhfLCBcImZldGNoXCIpLCB0aGlzLl91c2VkUmVzb3VyY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xuICAgIH0sIG87XG4gIH0pKFcpXG4pO1xuXG5leHBvcnQgeyBTZSBhcyBGZXRjaEluc3RydW1lbnRhdGlvbiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBQUEsU0FBUztBQUNsQixTQUFTLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUFDLEdBQUcsS0FBS0MsR0FBSSxLQUFLQyxTQUFVO0FBQ3JILFNBQVMsS0FBQUMsR0FBRyxLQUFLQyxHQUFLLEtBQUFDLFNBQVM7QUFDL0IsU0FBUyxLQUFBQyxHQUFHLEtBQUtDLEdBQUssS0FBQUMsR0FBRyxLQUFLQyxHQUFLLEtBQUFDLFVBQVM7QUFDNUMsU0FBUyxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBSyxVQUFVO0FBRTFDLElBQUlDO0FBQUEsQ0FDSCxTQUFTQyxHQUFHO0FBQ1gsRUFBQUEsRUFBRSxZQUFZLGFBQWFBLEVBQUUsa0JBQWtCLG1CQUFtQkEsRUFBRSxtQkFBbUI7QUFDekYsR0FBR0QsTUFBTUEsSUFBSSxDQUFDLEVBQUU7QUFDaEIsSUFBSUUsS0FBSyxTQUFTRCxHQUFHRSxHQUFHQyxHQUFHM0IsR0FBRztBQUM1QixXQUFTNEIsRUFBRUMsR0FBRztBQUNaLFdBQU9BLGFBQWFGLElBQUlFLElBQUksSUFBSUYsRUFBRSxTQUFTRyxHQUFHO0FBQzVDLE1BQUFBLEVBQUVELENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTyxLQUFLRixNQUFNQSxJQUFJLFVBQVUsU0FBU0UsR0FBR0MsR0FBRztBQUM3QyxhQUFTQyxFQUFFQyxHQUFHO0FBQ1osVUFBSTtBQUNGLFVBQUVoQyxFQUFFLEtBQUtnQyxDQUFDLENBQUM7QUFBQSxNQUNiLFNBQVNDLEdBQUc7QUFDVixRQUFBSCxFQUFFRyxDQUFDO0FBQUEsTUFDTDtB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QixHQUFHO0FBQ0wsYUFBSyxNQUFNLEtBQUssK0ZBQStGO0FBQy9HO0FBQUEsTUFDRjtBQUNBLE1BQUFyQyxFQUFJLEtBQUssTUFBTSxLQUFLLFFBQVFGLEdBQUksT0FBTyxHQUFHLEtBQUssTUFBTSxNQUFNLHlDQUF5QyxJQUFJLEtBQUssTUFBTUEsR0FBSSxTQUFTLEtBQUssa0JBQWtCLENBQUM7QUFBQSxJQUMxSixHQUFHYyxFQUFFLFVBQVUsVUFBVSxXQUFXO0FBQ2xDLE1BQUF5QixNQUFNLEtBQUssUUFBUXZDLEdBQUksT0FBTyxHQUFHLEtBQUssaUJBQWlDLG9CQUFJLFFBQVE7QUFBQSxJQUNyRixHQUFHYztBQUFBLEVBQ0wsR0FBR1gsQ0FBQztBQUFBOyIsCiAgIm5hbWVzIjogWyJyIiwgIkpBIiwgInFBIiwgIlpBIiwgIiRBIiwgInlfIiwgIlplIiwgInhBIiwgImtBIiwgInBfIiwgIk8iLCAiRXIiLCAiaF8iLCAiQiIsICJVJDEiLCAiVyIsICJUIiwgInkkMSIsICJDIiwgImIkMSIsICJWIiwgIk1lIiwgIlRlIiwgInkiLCAiYSIsICJuZSIsICJvIiwgImUiLCAibiIsICJ0IiwgImkiLCAicyIsICJjIiwgImgiLCAiZiIsICJhZSIsICJpZSIsICJvZSIsICJVIiwgInNlIiwgInVlIiwgImZlIiwgImIiLCAibGUiLCAiY2UiLCAiayIsICJkZSIsICJoZSIsICJwZSIsICJTIiwgInZlIiwgIkgiLCAiU2UiLCAidSIsICJnIiwgImwiLCAiRSIsICJkIiwgIk0iLCAidiIsICJqIiwgIkQiLCAiUiIsICJBIiwgIkYiLCAiTCJdCn0K