@getopenpay/openpay-js-react 0.2.19-alpha.b8b43a7 → 0.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.js +410 -392
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createContext as Jr, useContext as Xr, useState as
|
|
1
|
+
import { createContext as Jr, useContext as Xr, useState as le, useCallback as Qr, useEffect as dt, useRef as en, useMemo as it } from "react";
|
|
2
2
|
import { jsx as Y, Fragment as st } from "react/jsx-runtime";
|
|
3
3
|
import { z as e } from "zod";
|
|
4
4
|
import { v4 as bt } from "uuid";
|
|
5
5
|
import { connectToChild as er } from "penpal";
|
|
6
|
-
import
|
|
6
|
+
import ue from "chalk";
|
|
7
7
|
const tr = Jr({
|
|
8
8
|
formId: "",
|
|
9
9
|
formHeight: "",
|
|
@@ -41,7 +41,7 @@ const tr = Jr({
|
|
|
41
41
|
${t.map((n) => `• ${pt(n.msg)}`).join(`
|
|
42
42
|
`)}`, un = (t) => `Encountered the following errors:
|
|
43
43
|
${t.map((n) => `- ${n.path.join("/")}: ${n.message}`).join(`
|
|
44
|
-
`)}`,
|
|
44
|
+
`)}`, re = (t) => {
|
|
45
45
|
if (t instanceof Error)
|
|
46
46
|
if (cn(t.message)) {
|
|
47
47
|
const n = JSON.parse(t.message);
|
|
@@ -65,15 +65,15 @@ ${t.message}`), t.message);
|
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
|
-
var
|
|
69
|
-
e.nativeEnum(
|
|
68
|
+
var G = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t.loopCrypto = "loop-crypto", t))(G || {});
|
|
69
|
+
e.nativeEnum(G);
|
|
70
70
|
const O = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), F = (t) => e.nullable(t.optional());
|
|
71
71
|
var p = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(p || {});
|
|
72
72
|
const rr = e.nativeEnum(p);
|
|
73
73
|
var nr = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(nr || {});
|
|
74
74
|
const or = e.nativeEnum(nr), ar = e.union([rr, or]);
|
|
75
|
-
var
|
|
76
|
-
const pn = e.nativeEnum(
|
|
75
|
+
var ae = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t.CDE_BRIDGE = "cde-bridge", t))(ae || {});
|
|
76
|
+
const pn = e.nativeEnum(ae), He = e.object({
|
|
77
77
|
provider: e.string(),
|
|
78
78
|
processor_name: F(e.string()),
|
|
79
79
|
metadata: F(e.record(e.string(), e.any()))
|
|
@@ -130,10 +130,10 @@ const Z = e.enum([
|
|
|
130
130
|
type: wn,
|
|
131
131
|
elementType: ar,
|
|
132
132
|
errors: e.array(e.string())
|
|
133
|
-
}),
|
|
133
|
+
}), En = e.object({
|
|
134
134
|
type: e.literal(Z.enum.LAYOUT),
|
|
135
135
|
height: O
|
|
136
|
-
}),
|
|
136
|
+
}), Cn = e.object({
|
|
137
137
|
type: e.literal(Z.enum.LOADED),
|
|
138
138
|
sessionId: O,
|
|
139
139
|
totalAmountAtoms: e.number(),
|
|
@@ -147,7 +147,7 @@ const Z = e.enum([
|
|
|
147
147
|
}), kn = e.object({
|
|
148
148
|
type: e.literal(Z.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
149
149
|
paymentMethodId: e.string()
|
|
150
|
-
}),
|
|
150
|
+
}), De = e.object({
|
|
151
151
|
firstName: O,
|
|
152
152
|
lastName: O,
|
|
153
153
|
email: O,
|
|
@@ -171,7 +171,7 @@ const Z = e.enum([
|
|
|
171
171
|
paymentFlowMetadata: e.any().optional(),
|
|
172
172
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
173
173
|
existingCCPMId: S
|
|
174
|
-
}).extend(
|
|
174
|
+
}).extend(De.shape), On = e.object({
|
|
175
175
|
type: e.literal(Z.enum.TOKENIZE_SUCCESS),
|
|
176
176
|
isReadyForCheckout: e.boolean()
|
|
177
177
|
}), Rn = e.object({
|
|
@@ -184,8 +184,8 @@ const Z = e.enum([
|
|
|
184
184
|
fn,
|
|
185
185
|
bn,
|
|
186
186
|
vn,
|
|
187
|
-
Cn,
|
|
188
187
|
En,
|
|
188
|
+
Cn,
|
|
189
189
|
In,
|
|
190
190
|
On,
|
|
191
191
|
Rn,
|
|
@@ -219,7 +219,8 @@ e.object({
|
|
|
219
219
|
const vt = e.object({
|
|
220
220
|
invoice_urls: e.array(e.string()),
|
|
221
221
|
subscription_ids: e.array(e.string()),
|
|
222
|
-
customer_id: e.string()
|
|
222
|
+
customer_id: e.string(),
|
|
223
|
+
processors_used: e.optional(e.array(e.string()))
|
|
223
224
|
}), jn = e.object({
|
|
224
225
|
elementType: e.string(),
|
|
225
226
|
errors: e.array(e.string())
|
|
@@ -231,14 +232,14 @@ const Nn = e.object({
|
|
|
231
232
|
success: e.literal(!1),
|
|
232
233
|
error_type: e.literal("validation_error"),
|
|
233
234
|
errors: e.array(jn)
|
|
234
|
-
}),
|
|
235
|
+
}), Dn = e.discriminatedUnion("success", [
|
|
235
236
|
e.object({ success: e.literal(!0) }),
|
|
236
237
|
Nn
|
|
237
238
|
]);
|
|
238
239
|
e.object({
|
|
239
240
|
session_id: e.string(),
|
|
240
241
|
checkout_payment_method: He,
|
|
241
|
-
non_cde_form_fields:
|
|
242
|
+
non_cde_form_fields: De,
|
|
242
243
|
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
243
244
|
existing_cc_pm_id: F(e.string()),
|
|
244
245
|
extra_metadata: e.record(e.string(), e.any())
|
|
@@ -246,11 +247,11 @@ e.object({
|
|
|
246
247
|
e.object({
|
|
247
248
|
session_id: e.string(),
|
|
248
249
|
checkout_payment_method: He,
|
|
249
|
-
non_cde_form_fields:
|
|
250
|
+
non_cde_form_fields: De,
|
|
250
251
|
extra_metadata: e.record(e.string(), e.any()).optional()
|
|
251
252
|
});
|
|
252
253
|
var T = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(T || {});
|
|
253
|
-
const
|
|
254
|
+
const Mn = e.object({
|
|
254
255
|
status: e.enum([
|
|
255
256
|
"success",
|
|
256
257
|
"failure",
|
|
@@ -300,23 +301,23 @@ const Ln = e.object({
|
|
|
300
301
|
type: e.string(),
|
|
301
302
|
client_secret: e.string(),
|
|
302
303
|
stripe_pk: e.string()
|
|
303
|
-
}),
|
|
304
|
+
}), Gn = {
|
|
304
305
|
usd: "usd",
|
|
305
306
|
brl: "brl"
|
|
306
307
|
}, Be = async (t) => {
|
|
307
308
|
for (let n = 0; n < 10; n++)
|
|
308
|
-
Ot() || await
|
|
309
|
+
Ot() || await Et(500);
|
|
309
310
|
if (!Ot())
|
|
310
311
|
throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
|
|
311
312
|
return new Stripe(t);
|
|
312
|
-
},
|
|
313
|
+
}, qn = async (t, n) => {
|
|
313
314
|
const r = await Be(t);
|
|
314
315
|
return {
|
|
315
316
|
elements: r.elements(n),
|
|
316
317
|
stripe: r
|
|
317
318
|
};
|
|
318
319
|
}, Vn = async (t, n, r, o, a) => {
|
|
319
|
-
const i = await Be(t), s =
|
|
320
|
+
const i = await Be(t), s = Gn[r.toLowerCase().trim()];
|
|
320
321
|
return i.paymentRequest({
|
|
321
322
|
// TODO: replace this with stripe account country as soon as we support it
|
|
322
323
|
country: "US",
|
|
@@ -331,7 +332,7 @@ const Ln = e.object({
|
|
|
331
332
|
requestPayerEmail: !0,
|
|
332
333
|
disableWallets: []
|
|
333
334
|
});
|
|
334
|
-
},
|
|
335
|
+
}, Et = (t) => new Promise((n) => {
|
|
335
336
|
setTimeout(n, t);
|
|
336
337
|
}), Ot = () => "Stripe" in window, Kn = async (t) => new Promise((n, r) => {
|
|
337
338
|
try {
|
|
@@ -364,7 +365,7 @@ const Ln = e.object({
|
|
|
364
365
|
else throw s === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
|
|
365
366
|
`${((r = i.error) == null ? void 0 : r.message) ?? ((a = (o = i.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : a.message) ?? "Payment failed, please click submit again to pay."}`
|
|
366
367
|
);
|
|
367
|
-
}, Bn = (t) => JSON.stringify(t),
|
|
368
|
+
}, Bn = (t) => JSON.stringify(t), te = (t, n) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
|
|
368
369
|
const a = o.getAttribute("data-opid");
|
|
369
370
|
return a ? { ...r, [a]: o.value } : r;
|
|
370
371
|
}, {}), Zn = (t) => {
|
|
@@ -444,7 +445,8 @@ const cr = e.object({
|
|
|
444
445
|
total_discount_amount_atoms: e.array(ur)
|
|
445
446
|
}), Rt = e.object({
|
|
446
447
|
created: e.array(ro),
|
|
447
|
-
invoices: e.array(ao)
|
|
448
|
+
invoices: e.array(ao),
|
|
449
|
+
processors_used: e.optional(e.array(e.string()))
|
|
448
450
|
}), dr = e.object({
|
|
449
451
|
preview: Rt,
|
|
450
452
|
preview_post_trial: b(Rt),
|
|
@@ -550,7 +552,7 @@ e.object({
|
|
|
550
552
|
});
|
|
551
553
|
e.object({
|
|
552
554
|
session_id: e.string(),
|
|
553
|
-
non_cde_form_fields:
|
|
555
|
+
non_cde_form_fields: De,
|
|
554
556
|
checkout_payment_method: ke,
|
|
555
557
|
extra_metadata: e.record(e.string(), e.any())
|
|
556
558
|
// This is optional in CDE, but not in OJS moving forward
|
|
@@ -648,14 +650,14 @@ class _r extends vo {
|
|
|
648
650
|
}
|
|
649
651
|
const L = async (t, n, r) => {
|
|
650
652
|
const o = await t.send(n);
|
|
651
|
-
if (
|
|
653
|
+
if (Co(o))
|
|
652
654
|
throw new _r(o);
|
|
653
|
-
if (!
|
|
655
|
+
if (!Eo(o, r)) {
|
|
654
656
|
const a = r.safeParse(o);
|
|
655
657
|
throw a.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", r, "Actual:", o), a.error);
|
|
656
658
|
}
|
|
657
659
|
return o;
|
|
658
|
-
},
|
|
660
|
+
}, Eo = (t, n) => n.safeParse(t).success, Co = (t) => Xn.safeParse(t).success, Po = async (t, n) => await L(t, { type: "get_checkout_preview", payload: n }, dr), D = async (t) => await L(t, { type: "get_prefill", payload: {} }, pr), Se = async (t, n) => await L(t, { type: "v2_start_payment_flow", payload: n }, yr), ko = async (t, n) => await L(t, { type: "start_payment_flow_for_cc", payload: n }, yo), So = async (t, n) => await L(t, { type: "start_payment_flow_for_pr", payload: n }, yr), H = async (t, n) => await L(t, { type: "confirm_payment_flow", payload: n }, Fn), Ao = async (t, n) => await L(t, { type: "finalize_setup_payment_method", payload: n }, mr), Io = async (t, n) => await L(
|
|
659
661
|
t,
|
|
660
662
|
{ type: "check_if_popup_window_verified", payload: n },
|
|
661
663
|
Un
|
|
@@ -684,7 +686,7 @@ const L = async (t, n, r) => {
|
|
|
684
686
|
throw new Error("No CDE connections found");
|
|
685
687
|
return await Promise.all(
|
|
686
688
|
Array.from(t.values()).map(
|
|
687
|
-
(r) => L(r, { type: "tokenize_card", payload: n },
|
|
689
|
+
(r) => L(r, { type: "tokenize_card", payload: n }, Dn)
|
|
688
690
|
)
|
|
689
691
|
);
|
|
690
692
|
}, Tt = async (t, n) => {
|
|
@@ -693,7 +695,7 @@ const L = async (t, n, r) => {
|
|
|
693
695
|
} catch (r) {
|
|
694
696
|
throw console.error("[cde-client] Error during checkoutCardElements:", r, JSON.stringify(r)), r;
|
|
695
697
|
}
|
|
696
|
-
}, xo = async (t, n) => await L(t, { type: "setup_payment_method", payload: n }, mr),
|
|
698
|
+
}, xo = async (t, n) => await L(t, { type: "setup_payment_method", payload: n }, mr), Ct = async (t, n) => await L(t, { type: "checkout", payload: n }, vt), hr = 1e3, To = async (t, n) => {
|
|
697
699
|
console.log(n);
|
|
698
700
|
const r = await er({
|
|
699
701
|
iframe: t,
|
|
@@ -701,7 +703,7 @@ const L = async (t, n, r) => {
|
|
|
701
703
|
timeout: hr,
|
|
702
704
|
childOrigin: "*"
|
|
703
705
|
// TODO: use with proper childOrigin
|
|
704
|
-
}).promise, o = await L(r, { type: "ping-3ds-status" },
|
|
706
|
+
}).promise, o = await L(r, { type: "ping-3ds-status" }, Mn);
|
|
705
707
|
return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
|
|
706
708
|
}, Pt = async (t, n) => await L(t, { type: "prepare_payment_flow", payload: n }, ho), fr = async (t, n) => {
|
|
707
709
|
try {
|
|
@@ -711,13 +713,13 @@ const L = async (t, n, r) => {
|
|
|
711
713
|
_o
|
|
712
714
|
)).error_code;
|
|
713
715
|
} catch (r) {
|
|
714
|
-
return console.error("[cde-client] Error during getStandardizedErrorCode:",
|
|
716
|
+
return console.error("[cde-client] Error during getStandardizedErrorCode:", re(r)), "PAYMENT_FAILED_GENERIC";
|
|
715
717
|
}
|
|
716
718
|
};
|
|
717
719
|
function Ze(t) {
|
|
718
720
|
throw new Error(`Unhandled case: ${t}`);
|
|
719
721
|
}
|
|
720
|
-
const
|
|
722
|
+
const se = (t) => async (n) => {
|
|
721
723
|
var r, o;
|
|
722
724
|
try {
|
|
723
725
|
(o = (r = n.formCallbacks.get).onCheckoutStarted) == null || o.call(r);
|
|
@@ -728,26 +730,27 @@ const ie = (t) => async (n) => {
|
|
|
728
730
|
n.formCallbacks.get.onCheckoutSuccess(
|
|
729
731
|
a.result.invoice_urls,
|
|
730
732
|
a.result.subscription_ids,
|
|
731
|
-
a.result.customer_id
|
|
733
|
+
a.result.customer_id,
|
|
734
|
+
a.result.processors_used ?? []
|
|
732
735
|
);
|
|
733
736
|
else
|
|
734
737
|
throw new Error(`Unhandled mode: ${a}`);
|
|
735
738
|
} catch (a) {
|
|
736
|
-
const i =
|
|
739
|
+
const i = re(a), s = await fr(n.context.anyCdeConnection, i);
|
|
737
740
|
n.formCallbacks.get.onCheckoutError(i, s);
|
|
738
741
|
}
|
|
739
|
-
},
|
|
742
|
+
}, fe = (t) => async (n) => {
|
|
740
743
|
try {
|
|
741
744
|
return await t(n);
|
|
742
745
|
} catch (r) {
|
|
743
|
-
const { err__: o } = I("init-error-catcher"), a =
|
|
746
|
+
const { err__: o } = I("init-error-catcher"), a = re(r), i = await fr(n.context.anyCdeConnection, a);
|
|
744
747
|
return o(i, a, r), { isAvailable: !1, reason: a, errorCode: i };
|
|
745
748
|
}
|
|
746
749
|
}, I = (t) => {
|
|
747
750
|
const n = (...o) => {
|
|
748
|
-
window.console.log(`${
|
|
751
|
+
window.console.log(`${ue.green.bold("ojs/")}${ue.bold.gray(`${t}`)} `, ...o);
|
|
749
752
|
}, r = (...o) => {
|
|
750
|
-
window.console.warn(`${
|
|
753
|
+
window.console.warn(`${ue.red.bold("ojs/")}${ue.bold.gray(`${t}`)} `, ...o);
|
|
751
754
|
};
|
|
752
755
|
return {
|
|
753
756
|
log: n,
|
|
@@ -755,7 +758,7 @@ const ie = (t) => async (n) => {
|
|
|
755
758
|
log__: n,
|
|
756
759
|
err__: r
|
|
757
760
|
};
|
|
758
|
-
}, { log__: lc, err__: jo } = I("common"),
|
|
761
|
+
}, { log__: lc, err__: jo } = I("common"), Me = (t) => {
|
|
759
762
|
if (t.payment_methods.length !== 1)
|
|
760
763
|
throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
|
|
761
764
|
return { payment_method_id: t.payment_methods[0].id };
|
|
@@ -773,7 +776,7 @@ const ie = (t) => async (n) => {
|
|
|
773
776
|
new_customer_first_name: t.firstName,
|
|
774
777
|
new_customer_last_name: t.lastName
|
|
775
778
|
}), We = async (t) => {
|
|
776
|
-
const { log__: n } = I(t.logPrefix), r = await
|
|
779
|
+
const { log__: n } = I(t.logPrefix), r = await D(t.anyCdeConnection), o = Me(t.confirmResult);
|
|
777
780
|
if (r.mode === "setup")
|
|
778
781
|
return n("Setting up payment method..."), { mode: "setup", result: await Ao(t.anyCdeConnection, {
|
|
779
782
|
secure_token: r.token,
|
|
@@ -796,15 +799,15 @@ const ie = (t) => async (n) => {
|
|
|
796
799
|
checkout_payment_method: t.checkoutPaymentMethod,
|
|
797
800
|
use_confirmed_pm_id: o.payment_method_id
|
|
798
801
|
};
|
|
799
|
-
return { mode: "checkout", result: await
|
|
802
|
+
return { mode: "checkout", result: await Ct(t.anyCdeConnection, a) };
|
|
800
803
|
}
|
|
801
|
-
}, { log__: gr, err__: br } = I("common-cc"),
|
|
804
|
+
}, { log__: gr, err__: br } = I("common-cc"), de = (t, n, r) => {
|
|
802
805
|
if (r) {
|
|
803
806
|
gr(`Received default field values: ${JSON.stringify(r)}`);
|
|
804
807
|
for (const [a, i] of Object.entries(r))
|
|
805
808
|
t[a] || (t[a] = i);
|
|
806
809
|
}
|
|
807
|
-
const o =
|
|
810
|
+
const o = De.safeParse(t);
|
|
808
811
|
if (!o.success) {
|
|
809
812
|
const a = o.error.format(), i = sr(a);
|
|
810
813
|
for (const [s, c] of Object.entries(i))
|
|
@@ -812,7 +815,7 @@ const ie = (t) => async (n) => {
|
|
|
812
815
|
throw br("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
|
|
813
816
|
}
|
|
814
817
|
return o.data;
|
|
815
|
-
},
|
|
818
|
+
}, Do = (t, n) => {
|
|
816
819
|
for (const r of t)
|
|
817
820
|
if (r.success === !1)
|
|
818
821
|
throw r.errors.forEach((o) => {
|
|
@@ -824,7 +827,7 @@ const ie = (t) => async (n) => {
|
|
|
824
827
|
n(i, o.errors);
|
|
825
828
|
}
|
|
826
829
|
}), gr(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
|
|
827
|
-
}, jt = "ojs-stripe-link-btn", { log__: j, err__:
|
|
830
|
+
}, jt = "ojs-stripe-link-btn", { log__: j, err__: Mo } = I("stripe-link"), Lo = e.object({
|
|
828
831
|
provider: e.literal("stripe_link"),
|
|
829
832
|
processor_name: e.literal("stripe"),
|
|
830
833
|
metadata: e.object({
|
|
@@ -834,15 +837,15 @@ const ie = (t) => async (n) => {
|
|
|
834
837
|
e.object({
|
|
835
838
|
our_existing_pm_id: e.string()
|
|
836
839
|
})
|
|
837
|
-
).length(1), Fo =
|
|
840
|
+
).length(1), Fo = fe(
|
|
838
841
|
async ({ context: t, formCallbacks: n }) => {
|
|
839
842
|
const r = t.customInitParams.stripeLink;
|
|
840
843
|
j("Checking if there are any CPMs for Stripe Link...");
|
|
841
844
|
const o = W(t.checkoutPaymentMethods, Lo);
|
|
842
845
|
j("Starting stripe link flow...");
|
|
843
|
-
const a = t.anyCdeConnection, i = await
|
|
846
|
+
const a = t.anyCdeConnection, i = await D(a), s = i.mode === "setup";
|
|
844
847
|
j("Creating stripe elements...");
|
|
845
|
-
const c = await Ae(a, i.token, s, void 0), { elements: l, stripe: u } = await
|
|
848
|
+
const c = await Ae(a, i.token, s, void 0), { elements: l, stripe: u } = await qn(o.metadata.stripe_pk, {
|
|
846
849
|
mode: "setup",
|
|
847
850
|
currency: c.currency,
|
|
848
851
|
setup_future_usage: "off_session",
|
|
@@ -876,10 +879,10 @@ const ie = (t) => async (n) => {
|
|
|
876
879
|
billing_details: m.billingDetails
|
|
877
880
|
}
|
|
878
881
|
});
|
|
879
|
-
y.error ? (
|
|
882
|
+
y.error ? (Mo("error", y.error), n.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (j("paymentMethod", y.paymentMethod), x.stripeLink.run({
|
|
880
883
|
context: t,
|
|
881
884
|
checkoutPaymentMethod: o,
|
|
882
|
-
nonCdeFormInputs:
|
|
885
|
+
nonCdeFormInputs: te(t.formDiv),
|
|
883
886
|
formCallbacks: n,
|
|
884
887
|
customParams: { stripePM: y.paymentMethod },
|
|
885
888
|
initResult: { isAvailable: !0 }
|
|
@@ -889,11 +892,11 @@ const ie = (t) => async (n) => {
|
|
|
889
892
|
controller: {
|
|
890
893
|
mountButton: _,
|
|
891
894
|
dismountButton: f,
|
|
892
|
-
waitForButtonToMount: async () => await
|
|
895
|
+
waitForButtonToMount: async () => await Go(jt)
|
|
893
896
|
}
|
|
894
897
|
};
|
|
895
898
|
}
|
|
896
|
-
), zo =
|
|
899
|
+
), zo = se(
|
|
897
900
|
async ({
|
|
898
901
|
context: t,
|
|
899
902
|
checkoutPaymentMethod: n,
|
|
@@ -904,7 +907,7 @@ const ie = (t) => async (n) => {
|
|
|
904
907
|
j("Running Stripe Link flow...");
|
|
905
908
|
const i = t.anyCdeConnection;
|
|
906
909
|
j("Merging PM fields with form fields...");
|
|
907
|
-
const s = $o(r, a.stripePM), c =
|
|
910
|
+
const s = $o(r, a.stripePM), c = de(s, o.get.onValidationError);
|
|
908
911
|
j("Starting payment flow...");
|
|
909
912
|
const l = await Se(i, {
|
|
910
913
|
payment_provider: n.provider,
|
|
@@ -919,14 +922,14 @@ const ie = (t) => async (n) => {
|
|
|
919
922
|
}
|
|
920
923
|
});
|
|
921
924
|
j("Start payment flow response", l);
|
|
922
|
-
const u = Uo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await
|
|
925
|
+
const u = Uo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await D(i);
|
|
923
926
|
if (d.mode === "setup") {
|
|
924
927
|
j("Doing payment setup...");
|
|
925
928
|
const _ = await H(i, {
|
|
926
929
|
secure_token: d.token,
|
|
927
930
|
existing_cc_pm_id: u
|
|
928
931
|
});
|
|
929
|
-
return { mode: "setup", result:
|
|
932
|
+
return { mode: "setup", result: Me(_) };
|
|
930
933
|
} else {
|
|
931
934
|
j("Doing checkout...");
|
|
932
935
|
const _ = {
|
|
@@ -943,7 +946,7 @@ const ie = (t) => async (n) => {
|
|
|
943
946
|
cancel_at_end: !1,
|
|
944
947
|
checkout_payment_method: n
|
|
945
948
|
};
|
|
946
|
-
return { mode: "checkout", result: await
|
|
949
|
+
return { mode: "checkout", result: await Ct(i, _) };
|
|
947
950
|
}
|
|
948
951
|
}
|
|
949
952
|
), $o = (t, n) => {
|
|
@@ -951,17 +954,17 @@ const ie = (t) => async (n) => {
|
|
|
951
954
|
const c = { ...t }, [l, ...u] = ((o = (r = n.billing_details.name) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], d = u.join(" ") || void 0;
|
|
952
955
|
return c[p.FIRST_NAME] = c[p.FIRST_NAME] || l || "_OP_UNKNOWN", c[p.LAST_NAME] = c[p.LAST_NAME] || d || "_OP_UNKNOWN", c[p.EMAIL] = c[p.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
953
956
|
((a = n.link) == null ? void 0 : a.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[p.ZIP_CODE] = c[p.ZIP_CODE] || ((i = n.billing_details.address) == null ? void 0 : i.postal_code) || "00000", c[p.COUNTRY] = c[p.COUNTRY] || ((s = n.billing_details.address) == null ? void 0 : s.country) || "US", j("Final form inputs:", c), c;
|
|
954
|
-
},
|
|
957
|
+
}, Go = (t) => new Promise((n) => {
|
|
955
958
|
const r = () => {
|
|
956
959
|
const o = document.getElementById(t);
|
|
957
960
|
o ? n(o) : requestAnimationFrame(r);
|
|
958
961
|
};
|
|
959
962
|
r();
|
|
960
|
-
}),
|
|
963
|
+
}), qo = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame,#adyen-container,#adyen-container>*{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", wr = (t) => {
|
|
961
964
|
const n = document.createElement("template");
|
|
962
965
|
n.innerHTML = `
|
|
963
966
|
<style>
|
|
964
|
-
${
|
|
967
|
+
${qo}
|
|
965
968
|
</style>
|
|
966
969
|
<div class="overlay">
|
|
967
970
|
<div class="container">
|
|
@@ -1038,11 +1041,11 @@ const vr = async (t) => {
|
|
|
1038
1041
|
else if (c.closed)
|
|
1039
1042
|
throw new Error(`${t} payment cancelled`);
|
|
1040
1043
|
} catch (u) {
|
|
1041
|
-
a(
|
|
1044
|
+
a(re(u)), clearInterval(l), s(re(u));
|
|
1042
1045
|
}
|
|
1043
1046
|
}, 1e3);
|
|
1044
1047
|
});
|
|
1045
|
-
}, { log__: Bo, err__:
|
|
1048
|
+
}, { log__: Bo, err__: Er } = I("pockyt-cc"), Zo = e.object({
|
|
1046
1049
|
"op-pockyt-3ds-url": e.string(),
|
|
1047
1050
|
"op-pockyt-txn-no": e.string(),
|
|
1048
1051
|
"op-pockyt-ref-no": e.string()
|
|
@@ -1050,10 +1053,10 @@ const vr = async (t) => {
|
|
|
1050
1053
|
const n = Zo.safeParse(t);
|
|
1051
1054
|
if (!n.success) {
|
|
1052
1055
|
const r = "Unable to process your credit card. Please contact support for assistance.", o = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
|
|
1053
|
-
throw
|
|
1056
|
+
throw Er(o), new Error(r);
|
|
1054
1057
|
}
|
|
1055
1058
|
return n.data;
|
|
1056
|
-
},
|
|
1059
|
+
}, Cr = (t) => {
|
|
1057
1060
|
try {
|
|
1058
1061
|
const n = new URL(t ?? "").searchParams.get("vaultId");
|
|
1059
1062
|
if (!n)
|
|
@@ -1061,14 +1064,14 @@ const vr = async (t) => {
|
|
|
1061
1064
|
return Bo(`3DS verification success. [Vault ID: ${n}]`), n;
|
|
1062
1065
|
} catch (n) {
|
|
1063
1066
|
const r = "Error verifying 3DS verification result.";
|
|
1064
|
-
throw
|
|
1065
|
-
Error: ${
|
|
1067
|
+
throw Er(r, `Resulting URL: ${t}.
|
|
1068
|
+
Error: ${re(n)}`), new Error(r);
|
|
1066
1069
|
}
|
|
1067
1070
|
}, Jo = (t, n) => new URL(t).searchParams.get(n), Xo = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, Qo = async (t, n) => {
|
|
1068
1071
|
const r = Wo(n), o = await vr({ url: r["op-pockyt-3ds-url"], baseUrl: t });
|
|
1069
1072
|
return {
|
|
1070
1073
|
existing_cc: {
|
|
1071
|
-
vault_id:
|
|
1074
|
+
vault_id: Cr(o.href ?? ""),
|
|
1072
1075
|
transaction_no: r["op-pockyt-txn-no"],
|
|
1073
1076
|
reference_no: r["op-pockyt-ref-no"]
|
|
1074
1077
|
}
|
|
@@ -1093,7 +1096,7 @@ Error: ${te(n)}`), new Error(r);
|
|
|
1093
1096
|
} catch (n) {
|
|
1094
1097
|
const r = "Error verifying Airwallex 3DS verification result.";
|
|
1095
1098
|
throw kt(r, `Resulting URL: ${t}.
|
|
1096
|
-
Error: ${
|
|
1099
|
+
Error: ${re(n)}`), new Error(r);
|
|
1097
1100
|
}
|
|
1098
1101
|
}, aa = async (t, n) => {
|
|
1099
1102
|
const r = ra(n), o = await vr({ url: r["op-airwallex-3ds-url"], baseUrl: t }), a = oa(o.href ?? ""), i = r["op-airwallex-initial-intent-id"];
|
|
@@ -1155,7 +1158,7 @@ Error: ${te(n)}`), new Error(r);
|
|
|
1155
1158
|
"sv-SE",
|
|
1156
1159
|
"zh-CN",
|
|
1157
1160
|
"zh-TW"
|
|
1158
|
-
]), { log__:
|
|
1161
|
+
]), { log__: Ce, err__: Ne } = I("adyen-cc"), ca = e.object({
|
|
1159
1162
|
"op-account-id": e.string(),
|
|
1160
1163
|
"op-adyen-client-key": e.string(),
|
|
1161
1164
|
"op-adyen-environment": ia,
|
|
@@ -1166,17 +1169,17 @@ Error: ${te(n)}`), new Error(r);
|
|
|
1166
1169
|
throw Ne(`Adyen 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`), new Error(Sr);
|
|
1167
1170
|
return n.data;
|
|
1168
1171
|
}, ua = (t) => JSON.parse(t), Nt = () => "AdyenWeb" in window && "AdyenCheckout" in window.AdyenWeb, da = async () => {
|
|
1169
|
-
|
|
1172
|
+
Ce("Waiting for Adyen SDK to load...");
|
|
1170
1173
|
for (let t = 0; t < 10; t++)
|
|
1171
|
-
Nt() || await
|
|
1174
|
+
Nt() || await Et(500);
|
|
1172
1175
|
if (!Nt())
|
|
1173
1176
|
throw Ne("Adyen SDK not loaded properly"), new Error(Sr);
|
|
1174
|
-
return
|
|
1177
|
+
return Ce("Adyen SDK loaded successfully"), window.AdyenWeb.AdyenCheckout;
|
|
1175
1178
|
}, pa = (t) => {
|
|
1176
1179
|
const { headers: n, locale: r, countryCode: o, component: a, host: i, cancelButton: s } = t, c = ua(n["op-adyen-action"]);
|
|
1177
|
-
return
|
|
1180
|
+
return Ce(`Running Adyen 3DS flow for action type: ${c.type}`), new Promise((l) => {
|
|
1178
1181
|
const u = () => {
|
|
1179
|
-
|
|
1182
|
+
Ce("Cleaning up Adyen 3DS flow"), s.removeEventListener("click", f), i.remove();
|
|
1180
1183
|
}, d = (y) => {
|
|
1181
1184
|
Ne("Authentication failed. Result:", y), l({ status: T.FAILURE, cleanup: u });
|
|
1182
1185
|
}, _ = (y) => {
|
|
@@ -1185,7 +1188,7 @@ Error: ${te(n)}`), new Error(r);
|
|
|
1185
1188
|
l({ status: T.CANCELLED, cleanup: u });
|
|
1186
1189
|
};
|
|
1187
1190
|
s.addEventListener("click", f);
|
|
1188
|
-
const m = (y, h,
|
|
1191
|
+
const m = (y, h, E) => {
|
|
1189
1192
|
i.remove(), l({ status: T.SUCCESS, additionalDetails: y, cleanup: u });
|
|
1190
1193
|
};
|
|
1191
1194
|
da().then(
|
|
@@ -1204,7 +1207,7 @@ Error: ${te(n)}`), new Error(r);
|
|
|
1204
1207
|
});
|
|
1205
1208
|
}, ma = (t) => {
|
|
1206
1209
|
const n = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language, r = t ?? n, o = sa.safeParse(r);
|
|
1207
|
-
return o.success ? (
|
|
1210
|
+
return o.success ? (Ce(`Resolved locale: ${o.data}`), o.data) : (Ne(`Resolved invalid locale: ${r}. Defaulting to en-US.`), "en-US");
|
|
1208
1211
|
}, ya = (t) => (t == null ? void 0 : t["op-adyen-action"]) !== void 0, _a = async (t, n, r) => {
|
|
1209
1212
|
const o = la(n), a = document.createElement("div");
|
|
1210
1213
|
a.id = "adyen-container";
|
|
@@ -1225,20 +1228,20 @@ Error: ${te(n)}`), new Error(r);
|
|
|
1225
1228
|
if (l.status === T.SUCCESS) {
|
|
1226
1229
|
if (!l.additionalDetails)
|
|
1227
1230
|
throw new Error("3DS verification succeeded but no additional details were returned");
|
|
1228
|
-
return
|
|
1231
|
+
return Ce("3DS verification succeeded"), {
|
|
1229
1232
|
existing_cc: {
|
|
1230
1233
|
additional_details: l.additionalDetails.data
|
|
1231
1234
|
}
|
|
1232
1235
|
};
|
|
1233
1236
|
} else
|
|
1234
1237
|
Ze(l.status);
|
|
1235
|
-
}, { log__: k, err__:
|
|
1238
|
+
}, { log__: k, err__: Dt } = I("common-cc"), { log__: Mt } = I("stripe-cc");
|
|
1236
1239
|
e.array(
|
|
1237
1240
|
e.object({
|
|
1238
1241
|
our_existing_pm_id: e.string()
|
|
1239
1242
|
})
|
|
1240
1243
|
).length(1);
|
|
1241
|
-
const ha =
|
|
1244
|
+
const ha = se(
|
|
1242
1245
|
async ({
|
|
1243
1246
|
context: t,
|
|
1244
1247
|
checkoutPaymentMethod: n,
|
|
@@ -1248,9 +1251,9 @@ const ha = ie(
|
|
|
1248
1251
|
}) => {
|
|
1249
1252
|
var i;
|
|
1250
1253
|
k("├ Running common CC flow...", { checkoutPaymentMethod: n });
|
|
1251
|
-
const s = t.anyCdeConnection, c = await
|
|
1254
|
+
const s = t.anyCdeConnection, c = await D(s);
|
|
1252
1255
|
k(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
|
|
1253
|
-
const l =
|
|
1256
|
+
const l = de(r, o.get.onValidationError), u = {
|
|
1254
1257
|
session_id: t.elementsSessionId,
|
|
1255
1258
|
checkout_payment_method: n,
|
|
1256
1259
|
non_cde_form_fields: l,
|
|
@@ -1263,7 +1266,7 @@ const ha = ie(
|
|
|
1263
1266
|
const d = await Ro(a.currentCdeConnections, {
|
|
1264
1267
|
session_id: t.elementsSessionId
|
|
1265
1268
|
});
|
|
1266
|
-
if (
|
|
1269
|
+
if (Do(d, o.get.onValidationError), c.mode === "setup") {
|
|
1267
1270
|
k(`├ Setting up payment method in CDE [Token: ${c.token}]`);
|
|
1268
1271
|
const _ = await xo(s, u);
|
|
1269
1272
|
return k(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
|
|
@@ -1307,8 +1310,8 @@ const ha = ie(
|
|
|
1307
1310
|
existing_cc_pm_id: y
|
|
1308
1311
|
});
|
|
1309
1312
|
k("├ Confirm payment flow result received Result:", h);
|
|
1310
|
-
const
|
|
1311
|
-
return k(`╰ Setup completed successfully [PM ID: ${
|
|
1313
|
+
const E = Me(h);
|
|
1314
|
+
return k(`╰ Setup completed successfully [PM ID: ${E.payment_method_id}]`), { mode: "setup", result: E };
|
|
1312
1315
|
} else {
|
|
1313
1316
|
k(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
|
|
1314
1317
|
const h = await Tt(s, {
|
|
@@ -1319,7 +1322,7 @@ const ha = ie(
|
|
|
1319
1322
|
return k("╰ Checkout completed successfully."), { mode: "checkout", result: h };
|
|
1320
1323
|
}
|
|
1321
1324
|
}
|
|
1322
|
-
throw
|
|
1325
|
+
throw Dt("╰ Error checking out card info in CDE"), Dt(d), d;
|
|
1323
1326
|
}
|
|
1324
1327
|
}
|
|
1325
1328
|
), fa = (t) => {
|
|
@@ -1346,37 +1349,37 @@ const ha = ie(
|
|
|
1346
1349
|
throw new Error("3DS verification failed");
|
|
1347
1350
|
}, va = async (t) => {
|
|
1348
1351
|
const n = fa(t);
|
|
1349
|
-
|
|
1352
|
+
Mt(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await Hn(n), Mt("╰ Stripe 3DS flow completed successfully");
|
|
1350
1353
|
}, B = e.enum(["stripe", "airwallex", "authorize_net"]);
|
|
1351
1354
|
B.Enum.stripe;
|
|
1352
|
-
const { log__:
|
|
1355
|
+
const { log__: M, err__: Ea } = I("stripe-pr"), Ca = e.object({
|
|
1353
1356
|
provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
|
|
1354
1357
|
processor_name: e.literal("stripe"),
|
|
1355
1358
|
metadata: e.object({
|
|
1356
1359
|
stripe_pk: e.string()
|
|
1357
1360
|
})
|
|
1358
|
-
}), Pa =
|
|
1361
|
+
}), Pa = fe(
|
|
1359
1362
|
async ({ context: t, formCallbacks: n }) => {
|
|
1360
|
-
|
|
1361
|
-
const r = W(t.checkoutPaymentMethods,
|
|
1362
|
-
|
|
1363
|
-
const o = t.anyCdeConnection, a = await
|
|
1364
|
-
|
|
1363
|
+
M("Checking if there are any CPMs for Stripe PR...");
|
|
1364
|
+
const r = W(t.checkoutPaymentMethods, Ca);
|
|
1365
|
+
M("Initializing Stripe PR flow...");
|
|
1366
|
+
const o = t.anyCdeConnection, a = await D(o), i = a.mode === "setup";
|
|
1367
|
+
M("Getting initial preview amount");
|
|
1365
1368
|
const s = await Ae(o, a.token, i, void 0), c = await Vn(
|
|
1366
1369
|
r.metadata.stripe_pk,
|
|
1367
1370
|
s.amountAtom,
|
|
1368
1371
|
s.currency,
|
|
1369
1372
|
i
|
|
1370
1373
|
);
|
|
1371
|
-
|
|
1374
|
+
M("Checking if can make payment");
|
|
1372
1375
|
const l = await c.canMakePayment();
|
|
1373
1376
|
if (l === null)
|
|
1374
|
-
return
|
|
1375
|
-
|
|
1377
|
+
return Ea("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" };
|
|
1378
|
+
M("Stripe PR flow initialized successfully. Can make payment", l);
|
|
1376
1379
|
const u = (d, _) => x.stripePR.run({
|
|
1377
1380
|
context: t,
|
|
1378
1381
|
checkoutPaymentMethod: je(t.checkoutPaymentMethods, d),
|
|
1379
|
-
nonCdeFormInputs:
|
|
1382
|
+
nonCdeFormInputs: te(t.formDiv),
|
|
1380
1383
|
formCallbacks: n,
|
|
1381
1384
|
customParams: { provider: d, overridePaymentRequest: _ == null ? void 0 : _.overridePaymentRequest },
|
|
1382
1385
|
initResult: {
|
|
@@ -1398,7 +1401,7 @@ const { log__: D, err__: Ca } = I("stripe-pr"), Ea = e.object({
|
|
|
1398
1401
|
startFlow: u
|
|
1399
1402
|
};
|
|
1400
1403
|
}
|
|
1401
|
-
), ka =
|
|
1404
|
+
), ka = se(
|
|
1402
1405
|
async ({
|
|
1403
1406
|
context: t,
|
|
1404
1407
|
checkoutPaymentMethod: n,
|
|
@@ -1407,32 +1410,32 @@ const { log__: D, err__: Ca } = I("stripe-pr"), Ea = e.object({
|
|
|
1407
1410
|
customParams: a,
|
|
1408
1411
|
initResult: i
|
|
1409
1412
|
}) => {
|
|
1410
|
-
if (
|
|
1413
|
+
if (M("Running Stripe PR flow..."), a.provider !== n.provider)
|
|
1411
1414
|
throw new Error(`Provider mismatch. Expected ${a.provider}, got ${n.provider}`);
|
|
1412
1415
|
const s = t.anyCdeConnection, c = i.pr;
|
|
1413
1416
|
if (a != null && a.overridePaymentRequest) {
|
|
1414
1417
|
const y = a.overridePaymentRequest;
|
|
1415
|
-
|
|
1418
|
+
M("Overriding PR amount with", y), Aa(c, y.amount, y.pending, y.applePayPaymentRequest);
|
|
1416
1419
|
}
|
|
1417
|
-
|
|
1420
|
+
M("Showing PR dialog..."), c.show();
|
|
1418
1421
|
const l = await Kn(c);
|
|
1419
|
-
|
|
1420
|
-
const u = Sa(r, l), d =
|
|
1421
|
-
|
|
1422
|
+
M("Stripe PM added event:", l), M("Merging PM fields with form fields...");
|
|
1423
|
+
const u = Sa(r, l), d = de(u, o.get.onValidationError);
|
|
1424
|
+
M("PR dialog finished. Starting payment flow...", d);
|
|
1422
1425
|
const _ = await So(s, {
|
|
1423
1426
|
fields: d,
|
|
1424
1427
|
checkoutPaymentMethod: n
|
|
1425
1428
|
}), f = Ia(_);
|
|
1426
|
-
|
|
1427
|
-
const m = await
|
|
1429
|
+
M("Confirming PR with Stripe..."), await Yn(f, l);
|
|
1430
|
+
const m = await D(s);
|
|
1428
1431
|
if (m.mode === "setup") {
|
|
1429
|
-
|
|
1432
|
+
M("Confirming payment flow for setup...");
|
|
1430
1433
|
const y = await H(s, {
|
|
1431
1434
|
secure_token: m.token
|
|
1432
1435
|
});
|
|
1433
|
-
return { mode: "setup", result:
|
|
1436
|
+
return { mode: "setup", result: Me(y) };
|
|
1434
1437
|
} else {
|
|
1435
|
-
|
|
1438
|
+
M("Performing checkout...");
|
|
1436
1439
|
const y = {
|
|
1437
1440
|
secure_token: m.token,
|
|
1438
1441
|
payment_input: {
|
|
@@ -1449,13 +1452,13 @@ const { log__: D, err__: Ca } = I("stripe-pr"), Ea = e.object({
|
|
|
1449
1452
|
cancel_at_end: !1,
|
|
1450
1453
|
checkout_payment_method: n
|
|
1451
1454
|
};
|
|
1452
|
-
return { mode: "checkout", result: await
|
|
1455
|
+
return { mode: "checkout", result: await Ct(s, y) };
|
|
1453
1456
|
}
|
|
1454
1457
|
}
|
|
1455
1458
|
), Sa = (t, n) => {
|
|
1456
1459
|
var r, o, a, i;
|
|
1457
1460
|
const s = { ...t }, [c, ...l] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (i = (a = n.paymentMethod) == null ? void 0 : a.billing_details) == null ? void 0 : i.address, _ = n.shippingAddress;
|
|
1458
|
-
return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (_ == null ? void 0 : _.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (_ == null ? void 0 : _.country) || "US",
|
|
1461
|
+
return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (_ == null ? void 0 : _.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (_ == null ? void 0 : _.country) || "US", M("Final form inputs:", s), s;
|
|
1459
1462
|
}, Aa = (t, n, r, o) => {
|
|
1460
1463
|
t.update({
|
|
1461
1464
|
total: {
|
|
@@ -1484,7 +1487,7 @@ e.array(
|
|
|
1484
1487
|
verify_token: e.string()
|
|
1485
1488
|
})
|
|
1486
1489
|
).length(1);
|
|
1487
|
-
const Ra =
|
|
1490
|
+
const Ra = se(
|
|
1488
1491
|
async ({
|
|
1489
1492
|
context: t,
|
|
1490
1493
|
checkoutPaymentMethod: n,
|
|
@@ -1494,11 +1497,11 @@ const Ra = ie(
|
|
|
1494
1497
|
}) => {
|
|
1495
1498
|
var i, s;
|
|
1496
1499
|
X("Running Pockyt Paypal flow...");
|
|
1497
|
-
const c = t.anyCdeConnection, l = await
|
|
1500
|
+
const c = t.anyCdeConnection, l = await D(c);
|
|
1498
1501
|
X("Verifying CPM...");
|
|
1499
1502
|
const u = Oa.parse(n);
|
|
1500
1503
|
X("├ Validating non-CDE form fields");
|
|
1501
|
-
const d = a == null ? void 0 : a.settings, _ =
|
|
1504
|
+
const d = a == null ? void 0 : a.settings, _ = de(
|
|
1502
1505
|
r,
|
|
1503
1506
|
o.get.onValidationError,
|
|
1504
1507
|
d == null ? void 0 : d.defaultFieldValues
|
|
@@ -1518,12 +1521,12 @@ const Ra = ie(
|
|
|
1518
1521
|
frontend_token_for_redirect_flow: m
|
|
1519
1522
|
},
|
|
1520
1523
|
...f
|
|
1521
|
-
},
|
|
1524
|
+
}, E = new URL("/app/pre-action/start/", t.baseUrl).toString(), C = btoa(JSON.stringify(h)), v = new URLSearchParams({
|
|
1522
1525
|
st: l.token,
|
|
1523
|
-
r:
|
|
1524
|
-
}), g = `${
|
|
1526
|
+
r: C
|
|
1527
|
+
}), g = `${E}?${v.toString()}`;
|
|
1525
1528
|
if ((s = a == null ? void 0 : a.settings) != null && s.useRedirectFlow)
|
|
1526
|
-
throw X("Starting redirect mode for PayPal..."), window.location.href = g, await
|
|
1529
|
+
throw X("Starting redirect mode for PayPal..."), window.location.href = g, await Et(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
|
|
1527
1530
|
X("Starting popup mode for PayPal..."), X("Opening paypal iframe...");
|
|
1528
1531
|
const P = await Ho(
|
|
1529
1532
|
"PayPal",
|
|
@@ -1532,27 +1535,27 @@ const Ra = ie(
|
|
|
1532
1535
|
g
|
|
1533
1536
|
);
|
|
1534
1537
|
X("Paypal flow result", P);
|
|
1535
|
-
const $ =
|
|
1536
|
-
if (!
|
|
1538
|
+
const $ = Cr(P.href), ne = Jo(P.href, "catt");
|
|
1539
|
+
if (!ne)
|
|
1537
1540
|
throw Lt("Checkout attempt ID not found in redirect URL:", P.href), new Error("Checkout attempt ID not found in redirect URL");
|
|
1538
1541
|
X(`Confirming payment flow using vault ID ${$}`);
|
|
1539
|
-
const
|
|
1542
|
+
const ce = await H(c, {
|
|
1540
1543
|
secure_token: l.token,
|
|
1541
1544
|
their_pm_id: $,
|
|
1542
|
-
checkout_attempt_id: y ?
|
|
1545
|
+
checkout_attempt_id: y ? ne : void 0
|
|
1543
1546
|
});
|
|
1544
|
-
if (X("Confirm payment flow result",
|
|
1547
|
+
if (X("Confirm payment flow result", ce), l.mode === "setup")
|
|
1545
1548
|
return {
|
|
1546
1549
|
mode: "setup",
|
|
1547
1550
|
result: {
|
|
1548
|
-
payment_method_id:
|
|
1551
|
+
payment_method_id: ce.payment_methods[0].id
|
|
1549
1552
|
}
|
|
1550
1553
|
};
|
|
1551
|
-
if (!
|
|
1552
|
-
throw Lt("Checkout failed, no pay-first success response:",
|
|
1554
|
+
if (!ce.pay_first_success_response)
|
|
1555
|
+
throw Lt("Checkout failed, no pay-first success response:", ce), new Error("Checkout failed, please try again with another payment method.");
|
|
1553
1556
|
return {
|
|
1554
1557
|
mode: "checkout",
|
|
1555
|
-
result:
|
|
1558
|
+
result: ce.pay_first_success_response
|
|
1556
1559
|
};
|
|
1557
1560
|
}
|
|
1558
1561
|
), Xe = ({
|
|
@@ -1627,7 +1630,7 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1627
1630
|
s[p.EMAIL] = s[p.EMAIL] || n.email || "op_unfilled@getopenpay.com", s[p.COUNTRY] = s[p.COUNTRY] || c.countryCode || "US", s[p.ADDRESS] = s[p.ADDRESS] || c.address1 || "", s[p.CITY] = s[p.CITY] || c.locality || "", s[p.ZIP_CODE] = s[p.ZIP_CODE] || c.postalCode || "00000", s[p.STATE] = s[p.STATE] || c.administrativeArea || "", s[p.FIRST_NAME] = s[p.FIRST_NAME] || l || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || d || "_OP_UNKNOWN";
|
|
1628
1631
|
}
|
|
1629
1632
|
return s;
|
|
1630
|
-
}, { log__: K, err__:
|
|
1633
|
+
}, { log__: K, err__: ge } = I("awx-google-pay"), Ta = fe(
|
|
1631
1634
|
async ({ context: t, formCallbacks: n }) => {
|
|
1632
1635
|
var r, o;
|
|
1633
1636
|
const a = {
|
|
@@ -1642,11 +1645,11 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1642
1645
|
K("Google Pay CPM", i);
|
|
1643
1646
|
const s = i.metadata;
|
|
1644
1647
|
if (!s.processor_account_id)
|
|
1645
|
-
return
|
|
1648
|
+
return ge("No gateway merchant ID found in processor account"), a;
|
|
1646
1649
|
if (K("Loading Google Pay SDK..."), await Ar(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
|
|
1647
|
-
return
|
|
1650
|
+
return ge("Google Pay SDK not loaded properly"), a;
|
|
1648
1651
|
if (Ir(t.baseUrl) === "PRODUCTION" && !s.google_pay_merchant_id)
|
|
1649
|
-
return
|
|
1652
|
+
return ge("Google Pay merchant ID is required for production environment"), a;
|
|
1650
1653
|
K("Google Pay SDK loaded", window.google.payments);
|
|
1651
1654
|
try {
|
|
1652
1655
|
const f = Xe({
|
|
@@ -1665,14 +1668,14 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1665
1668
|
if (!m)
|
|
1666
1669
|
return K("Google Pay is not available for this user"), a;
|
|
1667
1670
|
} catch (f) {
|
|
1668
|
-
return
|
|
1671
|
+
return ge("Error checking Google Pay availability", f), a;
|
|
1669
1672
|
}
|
|
1670
|
-
const c = t.anyCdeConnection, l = await
|
|
1673
|
+
const c = t.anyCdeConnection, l = await D(c), u = l.mode === "setup", d = await Ae(c, l.token, u, void 0), _ = async (f) => {
|
|
1671
1674
|
try {
|
|
1672
1675
|
x.airwallexGooglePay.run({
|
|
1673
1676
|
context: t,
|
|
1674
1677
|
checkoutPaymentMethod: i,
|
|
1675
|
-
nonCdeFormInputs:
|
|
1678
|
+
nonCdeFormInputs: te(t.formDiv),
|
|
1676
1679
|
formCallbacks: n,
|
|
1677
1680
|
initResult: void 0,
|
|
1678
1681
|
customParams: {
|
|
@@ -1681,7 +1684,7 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1681
1684
|
}
|
|
1682
1685
|
});
|
|
1683
1686
|
} catch (m) {
|
|
1684
|
-
|
|
1687
|
+
ge("Google Pay payment error", m), n.get.onCheckoutError((m == null ? void 0 : m.message) ?? "Unknown error");
|
|
1685
1688
|
}
|
|
1686
1689
|
};
|
|
1687
1690
|
return {
|
|
@@ -1691,7 +1694,7 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1691
1694
|
startFlow: _
|
|
1692
1695
|
};
|
|
1693
1696
|
}
|
|
1694
|
-
), ja =
|
|
1697
|
+
), ja = se(
|
|
1695
1698
|
async ({
|
|
1696
1699
|
context: t,
|
|
1697
1700
|
checkoutPaymentMethod: n,
|
|
@@ -1704,37 +1707,37 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1704
1707
|
const f = W(t.checkoutPaymentMethods, kr), { initialPreview: m, overridePaymentRequest: y } = a, h = f.metadata;
|
|
1705
1708
|
if (!h.processor_account_id)
|
|
1706
1709
|
throw new Error("No gateway merchant ID found in processor account");
|
|
1707
|
-
const
|
|
1710
|
+
const E = Xe({
|
|
1708
1711
|
gateway: "airwallex",
|
|
1709
1712
|
gatewayMerchantId: h.processor_account_id,
|
|
1710
1713
|
merchantName: h.processor_account_name,
|
|
1711
1714
|
merchantId: h.google_pay_merchant_id ?? "",
|
|
1712
1715
|
initialPreview: m,
|
|
1713
1716
|
overridePaymentRequest: y
|
|
1714
|
-
}),
|
|
1717
|
+
}), C = Qe(t.baseUrl, E);
|
|
1715
1718
|
try {
|
|
1716
|
-
const v = await
|
|
1719
|
+
const v = await C.loadPaymentData(E);
|
|
1717
1720
|
K("Google Pay Payment data", v);
|
|
1718
|
-
const g = t.anyCdeConnection, P = await
|
|
1721
|
+
const g = t.anyCdeConnection, P = await D(g), $ = Or(r, v), ne = de(
|
|
1719
1722
|
$,
|
|
1720
1723
|
o.get.onValidationError,
|
|
1721
1724
|
a == null ? void 0 : a.defaultFieldValues
|
|
1722
|
-
),
|
|
1723
|
-
if (!
|
|
1725
|
+
), ce = (s = (i = v.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
|
|
1726
|
+
if (!ce)
|
|
1724
1727
|
throw new Error("No payment token received from Google Pay");
|
|
1725
1728
|
const Wr = await Se(g, {
|
|
1726
1729
|
payment_provider: n.provider,
|
|
1727
1730
|
checkout_payment_method: n,
|
|
1728
|
-
new_customer_email:
|
|
1729
|
-
new_customer_first_name:
|
|
1730
|
-
new_customer_last_name:
|
|
1731
|
+
new_customer_email: ne[p.EMAIL],
|
|
1732
|
+
new_customer_first_name: ne[p.FIRST_NAME],
|
|
1733
|
+
new_customer_last_name: ne[p.LAST_NAME],
|
|
1731
1734
|
new_customer_address: {
|
|
1732
|
-
zip_code:
|
|
1733
|
-
country:
|
|
1735
|
+
zip_code: ne[p.ZIP_CODE],
|
|
1736
|
+
country: ne[p.COUNTRY]
|
|
1734
1737
|
}
|
|
1735
1738
|
}), ot = xa(Wr);
|
|
1736
1739
|
K("Start flow next actions", ot);
|
|
1737
|
-
let
|
|
1740
|
+
let me = await H(g, {
|
|
1738
1741
|
secure_token: P.token,
|
|
1739
1742
|
processor_specific_metadata: {
|
|
1740
1743
|
payment_provider: n.provider,
|
|
@@ -1744,20 +1747,20 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1744
1747
|
type: "googlepay",
|
|
1745
1748
|
googlepay: {
|
|
1746
1749
|
payment_data_type: "encrypted_payment_token",
|
|
1747
|
-
encrypted_payment_token:
|
|
1750
|
+
encrypted_payment_token: ce
|
|
1748
1751
|
}
|
|
1749
1752
|
}
|
|
1750
1753
|
}
|
|
1751
1754
|
});
|
|
1752
|
-
K("[1st] Confirm payment flow response",
|
|
1753
|
-
let at = (l = (c =
|
|
1754
|
-
const
|
|
1755
|
+
K("[1st] Confirm payment flow response", me);
|
|
1756
|
+
let at = (l = (c = me.payment_methods) == null ? void 0 : c[0]) == null ? void 0 : l.id;
|
|
1757
|
+
const ye = (u = me.required_user_actions) == null ? void 0 : u.find(
|
|
1755
1758
|
(Re) => Re.type === "airwallex_payment_consent"
|
|
1756
1759
|
);
|
|
1757
|
-
if (
|
|
1758
|
-
K("3DS Required, starting verification...",
|
|
1760
|
+
if (ye && ye.redirect_url) {
|
|
1761
|
+
K("3DS Required, starting verification...", ye);
|
|
1759
1762
|
const { status: Re } = await Je({
|
|
1760
|
-
url:
|
|
1763
|
+
url: ye.redirect_url,
|
|
1761
1764
|
baseUrl: t.baseUrl
|
|
1762
1765
|
});
|
|
1763
1766
|
if (K(`╰ 3DS verification completed [Status: ${Re}]`), Re === T.CANCELLED)
|
|
@@ -1765,25 +1768,25 @@ const Ir = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
|
|
|
1765
1768
|
if (Re === T.FAILURE)
|
|
1766
1769
|
throw new Error("3DS verification failed");
|
|
1767
1770
|
}
|
|
1768
|
-
if (
|
|
1771
|
+
if (ye && !at && (me = await H(g, {
|
|
1769
1772
|
secure_token: P.token,
|
|
1770
|
-
their_pm_id:
|
|
1773
|
+
their_pm_id: ye.their_pm_id,
|
|
1771
1774
|
processor_specific_metadata: {
|
|
1772
1775
|
payment_provider: n.provider,
|
|
1773
|
-
airwallex_consent_id:
|
|
1776
|
+
airwallex_consent_id: ye.consent_id
|
|
1774
1777
|
}
|
|
1775
|
-
}), K("[2nd] Confirm payment flow response",
|
|
1778
|
+
}), K("[2nd] Confirm payment flow response", me), at = (_ = (d = me.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id), !at)
|
|
1776
1779
|
throw new Error("No PM ID found");
|
|
1777
1780
|
return We({
|
|
1778
1781
|
logPrefix: "awx-googlepay",
|
|
1779
1782
|
anyCdeConnection: g,
|
|
1780
1783
|
checkoutPaymentMethod: n,
|
|
1781
|
-
requiredFormFields:
|
|
1782
|
-
confirmResult:
|
|
1784
|
+
requiredFormFields: ne,
|
|
1785
|
+
confirmResult: me,
|
|
1783
1786
|
usePayFirstFlow: !1
|
|
1784
1787
|
});
|
|
1785
1788
|
} catch (v) {
|
|
1786
|
-
throw
|
|
1789
|
+
throw ge("Google Pay payment error", v), new Error((v == null ? void 0 : v.message) ?? "Unknown error");
|
|
1787
1790
|
}
|
|
1788
1791
|
}
|
|
1789
1792
|
), Rr = () => new Promise((t, n) => {
|
|
@@ -1872,7 +1875,7 @@ async function Na(t, n) {
|
|
|
1872
1875
|
throw n.session.abort(), r;
|
|
1873
1876
|
}
|
|
1874
1877
|
}
|
|
1875
|
-
async function
|
|
1878
|
+
async function Da(t, n) {
|
|
1876
1879
|
if (!t.redirect_url)
|
|
1877
1880
|
throw new Error("No redirect URL found");
|
|
1878
1881
|
Fe("3DS Required, starting verification...", t);
|
|
@@ -1894,10 +1897,10 @@ async function Ma(t, n) {
|
|
|
1894
1897
|
});
|
|
1895
1898
|
return Fe("[2nd] Confirm payment flow response", o), o;
|
|
1896
1899
|
}
|
|
1897
|
-
async function
|
|
1900
|
+
async function Ma(t, n) {
|
|
1898
1901
|
var r, o, a, i, s;
|
|
1899
1902
|
try {
|
|
1900
|
-
const c = t.payment, l = xr(n.nonCdeFormInputs, c), u =
|
|
1903
|
+
const c = t.payment, l = xr(n.nonCdeFormInputs, c), u = de(
|
|
1901
1904
|
l,
|
|
1902
1905
|
n.formCallbacks.get.onValidationError,
|
|
1903
1906
|
n.defaultFieldValues
|
|
@@ -1933,7 +1936,7 @@ async function Da(t, n) {
|
|
|
1933
1936
|
const m = (a = _.required_user_actions) == null ? void 0 : a.find(
|
|
1934
1937
|
(h) => h.type === "airwallex_payment_consent"
|
|
1935
1938
|
);
|
|
1936
|
-
if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (_ = await
|
|
1939
|
+
if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (_ = await Da(m, n), f = (s = (i = _.payment_methods) == null ? void 0 : i[0]) == null ? void 0 : s.id), !f)
|
|
1937
1940
|
throw new Error("No PM ID found");
|
|
1938
1941
|
const y = {
|
|
1939
1942
|
status: ApplePaySession.STATUS_SUCCESS
|
|
@@ -1953,7 +1956,7 @@ async function Da(t, n) {
|
|
|
1953
1956
|
throw n.session.completePayment(l), c;
|
|
1954
1957
|
}
|
|
1955
1958
|
}
|
|
1956
|
-
const { log__:
|
|
1959
|
+
const { log__: be, err__: mt } = I("awx-apple-pay"), La = fe(
|
|
1957
1960
|
async ({ context: t, formCallbacks: n }) => {
|
|
1958
1961
|
const r = {
|
|
1959
1962
|
processor: B.Enum.airwallex,
|
|
@@ -1964,24 +1967,24 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
1964
1967
|
}, o = W(t.checkoutPaymentMethods, Pr);
|
|
1965
1968
|
if (!o)
|
|
1966
1969
|
return r;
|
|
1967
|
-
|
|
1970
|
+
be("Loading Apple Pay SDK...");
|
|
1968
1971
|
try {
|
|
1969
|
-
await Rr(),
|
|
1972
|
+
await Rr(), be("Apple Pay SDK loaded successfully");
|
|
1970
1973
|
} catch (u) {
|
|
1971
1974
|
return mt("Failed to load Apple Pay SDK", u), r;
|
|
1972
1975
|
}
|
|
1973
1976
|
if (!window.ApplePaySession || !ApplePaySession.canMakePayments())
|
|
1974
|
-
return
|
|
1975
|
-
if (
|
|
1976
|
-
return
|
|
1977
|
+
return be("Apple Pay is not available on this device/browser"), r;
|
|
1978
|
+
if (be("Apple Pay Loaded"), !await ApplePaySession.canMakePayments())
|
|
1979
|
+
return be("No active cards available for Apple Pay"), r;
|
|
1977
1980
|
if (!o.metadata.processor_account_id)
|
|
1978
1981
|
throw new Error("No gateway merchant ID found in processor account");
|
|
1979
|
-
const a = t.anyCdeConnection, i = await
|
|
1982
|
+
const a = t.anyCdeConnection, i = await D(a), s = i.mode === "setup", c = await Ae(a, i.token, s, void 0), l = async (u) => {
|
|
1980
1983
|
try {
|
|
1981
1984
|
await x.airwallexApplePay.run({
|
|
1982
1985
|
context: t,
|
|
1983
1986
|
checkoutPaymentMethod: o,
|
|
1984
|
-
nonCdeFormInputs:
|
|
1987
|
+
nonCdeFormInputs: te(t.formDiv),
|
|
1985
1988
|
formCallbacks: n,
|
|
1986
1989
|
customParams: {
|
|
1987
1990
|
...u,
|
|
@@ -2000,7 +2003,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2000
2003
|
startFlow: l
|
|
2001
2004
|
};
|
|
2002
2005
|
}
|
|
2003
|
-
), Ua =
|
|
2006
|
+
), Ua = se(
|
|
2004
2007
|
async ({
|
|
2005
2008
|
context: t,
|
|
2006
2009
|
checkoutPaymentMethod: n,
|
|
@@ -2009,7 +2012,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2009
2012
|
formCallbacks: a
|
|
2010
2013
|
}) => {
|
|
2011
2014
|
var i;
|
|
2012
|
-
const s = W(t.checkoutPaymentMethods, Pr), { overridePaymentRequest: c, initialPreview: l } = o, u = t.anyCdeConnection, d = await
|
|
2015
|
+
const s = W(t.checkoutPaymentMethods, Pr), { overridePaymentRequest: c, initialPreview: l } = o, u = t.anyCdeConnection, d = await D(u), _ = d.mode === "setup", { currencyCode: f, total: m } = jr({
|
|
2013
2016
|
overridePaymentRequest: c,
|
|
2014
2017
|
initialPreview: l,
|
|
2015
2018
|
defaultLabel: (i = s == null ? void 0 : s.metadata) == null ? void 0 : i.processor_account_name
|
|
@@ -2031,7 +2034,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2031
2034
|
prefill: d
|
|
2032
2035
|
}),
|
|
2033
2036
|
...(c == null ? void 0 : c.applePayPaymentRequest) ?? {}
|
|
2034
|
-
}, h = new ApplePaySession(3, y),
|
|
2037
|
+
}, h = new ApplePaySession(3, y), E = {
|
|
2035
2038
|
session: h,
|
|
2036
2039
|
connection: t.anyCdeConnection,
|
|
2037
2040
|
checkoutPaymentMethod: n,
|
|
@@ -2043,13 +2046,13 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2043
2046
|
formCallbacks: a,
|
|
2044
2047
|
defaultFieldValues: o == null ? void 0 : o.defaultFieldValues
|
|
2045
2048
|
};
|
|
2046
|
-
return new Promise((
|
|
2049
|
+
return new Promise((C, v) => {
|
|
2047
2050
|
const g = () => {
|
|
2048
|
-
|
|
2051
|
+
be("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
|
|
2049
2052
|
};
|
|
2050
2053
|
h.oncancel = g, h.onvalidatemerchant = async (P) => {
|
|
2051
2054
|
try {
|
|
2052
|
-
await Na(P,
|
|
2055
|
+
await Na(P, E);
|
|
2053
2056
|
} catch ($) {
|
|
2054
2057
|
v($);
|
|
2055
2058
|
}
|
|
@@ -2060,14 +2063,14 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2060
2063
|
h.completePaymentMethodSelection(P);
|
|
2061
2064
|
}, h.onpaymentauthorized = async (P) => {
|
|
2062
2065
|
try {
|
|
2063
|
-
const $ = await
|
|
2064
|
-
|
|
2066
|
+
const $ = await Ma(P, E);
|
|
2067
|
+
C($);
|
|
2065
2068
|
} catch ($) {
|
|
2066
2069
|
v($);
|
|
2067
2070
|
}
|
|
2068
2071
|
}, h.begin();
|
|
2069
|
-
}).catch((
|
|
2070
|
-
throw mt("Apple Pay payment error",
|
|
2072
|
+
}).catch((C) => {
|
|
2073
|
+
throw mt("Apple Pay payment error", C), C;
|
|
2071
2074
|
});
|
|
2072
2075
|
}
|
|
2073
2076
|
), Fa = 1, za = e.object({
|
|
@@ -2085,7 +2088,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2085
2088
|
loopLastName: O,
|
|
2086
2089
|
loopEmail: O,
|
|
2087
2090
|
[p.PROMOTION_CODE]: S
|
|
2088
|
-
}),
|
|
2091
|
+
}), Ga = (t, n, r) => {
|
|
2089
2092
|
const o = $a.safeParse(t);
|
|
2090
2093
|
if (!o.success) {
|
|
2091
2094
|
const a = o.error.format(), i = sr(a);
|
|
@@ -2094,12 +2097,12 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2094
2097
|
throw Nr("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
|
|
2095
2098
|
}
|
|
2096
2099
|
return o.data;
|
|
2097
|
-
},
|
|
2100
|
+
}, qa = fe(
|
|
2098
2101
|
async ({ context: t }) => {
|
|
2099
2102
|
U("Checking if there are any CPMs for Loop Crypto...");
|
|
2100
2103
|
const n = W(t.checkoutPaymentMethods, za);
|
|
2101
2104
|
U(`checkoutPaymentMethod: ${JSON.stringify(n)}`), U("Starting Loop Crypto flow...");
|
|
2102
|
-
const r = await
|
|
2105
|
+
const r = await D(t.anyCdeConnection), o = await Pt(t.anyCdeConnection, {
|
|
2103
2106
|
checkout_payment_method: n
|
|
2104
2107
|
});
|
|
2105
2108
|
if (r.mode !== "setup" && !n.metadata.supported_currencies.includes(r.currency))
|
|
@@ -2127,7 +2130,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2127
2130
|
initLoopConnectProps: d
|
|
2128
2131
|
};
|
|
2129
2132
|
}
|
|
2130
|
-
), Va =
|
|
2133
|
+
), Va = se(
|
|
2131
2134
|
async ({
|
|
2132
2135
|
context: t,
|
|
2133
2136
|
checkoutPaymentMethod: n,
|
|
@@ -2136,7 +2139,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2136
2139
|
customParams: a
|
|
2137
2140
|
}) => {
|
|
2138
2141
|
U("Running Loop flow..."), U("context", t), U("checkoutPaymentMethod", n), U("nonCdeFormInputs", r), U("flowCallbacks", o), U("customParams", a);
|
|
2139
|
-
const i =
|
|
2142
|
+
const i = Ga(r, o.get.onValidationError), s = t.anyCdeConnection, c = await D(t.anyCdeConnection), l = c.mode !== "setup", u = await Se(t.anyCdeConnection, {
|
|
2140
2143
|
checkout_payment_method: n,
|
|
2141
2144
|
payment_provider: n.provider,
|
|
2142
2145
|
new_customer_email: i.loopEmail,
|
|
@@ -2164,7 +2167,7 @@ const { log__: ge, err__: mt } = I("awx-apple-pay"), La = he(
|
|
|
2164
2167
|
});
|
|
2165
2168
|
if (U(`Confirm result: ${d}`), c.mode === "setup") {
|
|
2166
2169
|
U("Doing payment setup..."), U("├ Confirm payment flow result received Result:", d);
|
|
2167
|
-
const _ =
|
|
2170
|
+
const _ = Me(d);
|
|
2168
2171
|
return U(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
|
|
2169
2172
|
} else {
|
|
2170
2173
|
if (U("Doing checkout..."), !d.pay_first_success_response)
|
|
@@ -2198,7 +2201,7 @@ async function Ka(t, n) {
|
|
|
2198
2201
|
async function Ya(t, n) {
|
|
2199
2202
|
var r, o;
|
|
2200
2203
|
try {
|
|
2201
|
-
const a = t.payment, i = xr(n.nonCdeFormInputs, a), s =
|
|
2204
|
+
const a = t.payment, i = xr(n.nonCdeFormInputs, a), s = de(i, n.formCallbacks.get.onValidationError);
|
|
2202
2205
|
await Se(n.connection, {
|
|
2203
2206
|
payment_provider: n.checkoutPaymentMethod.provider,
|
|
2204
2207
|
checkout_payment_method: n.checkoutPaymentMethod,
|
|
@@ -2240,14 +2243,14 @@ async function Ya(t, n) {
|
|
|
2240
2243
|
throw n.session.completePayment(i), a;
|
|
2241
2244
|
}
|
|
2242
2245
|
}
|
|
2243
|
-
const
|
|
2246
|
+
const Dr = e.object({
|
|
2244
2247
|
provider: e.literal("apple_pay"),
|
|
2245
2248
|
processor_name: e.literal("authorize_net"),
|
|
2246
2249
|
metadata: e.object({
|
|
2247
2250
|
processor_account_id: e.string(),
|
|
2248
2251
|
processor_account_name: e.string()
|
|
2249
2252
|
})
|
|
2250
|
-
}),
|
|
2253
|
+
}), Mr = e.object({
|
|
2251
2254
|
provider: e.literal("google_pay"),
|
|
2252
2255
|
processor_name: e.literal("authorize_net"),
|
|
2253
2256
|
metadata: e.object({
|
|
@@ -2255,7 +2258,7 @@ const Mr = e.object({
|
|
|
2255
2258
|
processor_account_name: e.string(),
|
|
2256
2259
|
google_pay_merchant_id: e.string().nullish()
|
|
2257
2260
|
})
|
|
2258
|
-
}), { log__: xe, err__: yt } = I("authnet-applepay"), Ha =
|
|
2261
|
+
}), { log__: xe, err__: yt } = I("authnet-applepay"), Ha = fe(
|
|
2259
2262
|
async ({ context: t, formCallbacks: n }) => {
|
|
2260
2263
|
const r = {
|
|
2261
2264
|
processor: B.Enum.authorize_net,
|
|
@@ -2263,7 +2266,7 @@ const Mr = e.object({
|
|
|
2263
2266
|
isLoading: !1,
|
|
2264
2267
|
startFlow: async () => {
|
|
2265
2268
|
}
|
|
2266
|
-
}, o = W(t.checkoutPaymentMethods,
|
|
2269
|
+
}, o = W(t.checkoutPaymentMethods, Dr);
|
|
2267
2270
|
if (!o)
|
|
2268
2271
|
return r;
|
|
2269
2272
|
xe("Loading Apple Pay SDK...");
|
|
@@ -2278,12 +2281,12 @@ const Mr = e.object({
|
|
|
2278
2281
|
return xe("No active cards available for Apple Pay"), r;
|
|
2279
2282
|
if (!o.metadata.processor_account_id)
|
|
2280
2283
|
throw new Error("No gateway merchant ID found in processor account");
|
|
2281
|
-
const a = t.anyCdeConnection, i = await
|
|
2284
|
+
const a = t.anyCdeConnection, i = await D(a), s = i.mode === "setup", c = await Ae(a, i.token, s, void 0), l = async (u) => {
|
|
2282
2285
|
try {
|
|
2283
2286
|
await x.authorizeNetApplePay.run({
|
|
2284
2287
|
context: t,
|
|
2285
2288
|
checkoutPaymentMethod: o,
|
|
2286
|
-
nonCdeFormInputs:
|
|
2289
|
+
nonCdeFormInputs: te(t.formDiv),
|
|
2287
2290
|
formCallbacks: n,
|
|
2288
2291
|
customParams: {
|
|
2289
2292
|
...u,
|
|
@@ -2302,7 +2305,7 @@ const Mr = e.object({
|
|
|
2302
2305
|
startFlow: l
|
|
2303
2306
|
};
|
|
2304
2307
|
}
|
|
2305
|
-
), Ba =
|
|
2308
|
+
), Ba = se(
|
|
2306
2309
|
async ({
|
|
2307
2310
|
context: t,
|
|
2308
2311
|
checkoutPaymentMethod: n,
|
|
@@ -2311,11 +2314,11 @@ const Mr = e.object({
|
|
|
2311
2314
|
formCallbacks: a
|
|
2312
2315
|
}) => {
|
|
2313
2316
|
var i;
|
|
2314
|
-
const { initialPreview: s, overridePaymentRequest: c } = o, l = W(t.checkoutPaymentMethods,
|
|
2317
|
+
const { initialPreview: s, overridePaymentRequest: c } = o, l = W(t.checkoutPaymentMethods, Dr), { currencyCode: u, total: d } = jr({
|
|
2315
2318
|
overridePaymentRequest: c,
|
|
2316
2319
|
initialPreview: s,
|
|
2317
2320
|
defaultLabel: (i = l == null ? void 0 : l.metadata) == null ? void 0 : i.processor_account_name
|
|
2318
|
-
}), _ = t.anyCdeConnection, f = await
|
|
2321
|
+
}), _ = t.anyCdeConnection, f = await D(_), m = f.mode === "setup", y = {
|
|
2319
2322
|
countryCode: "US",
|
|
2320
2323
|
currencyCode: u,
|
|
2321
2324
|
total: d,
|
|
@@ -2328,7 +2331,7 @@ const Mr = e.object({
|
|
|
2328
2331
|
prefill: f
|
|
2329
2332
|
}),
|
|
2330
2333
|
...(c == null ? void 0 : c.applePayPaymentRequest) ?? {}
|
|
2331
|
-
}, h = new ApplePaySession(3, y),
|
|
2334
|
+
}, h = new ApplePaySession(3, y), E = {
|
|
2332
2335
|
session: h,
|
|
2333
2336
|
connection: t.anyCdeConnection,
|
|
2334
2337
|
checkoutPaymentMethod: n,
|
|
@@ -2339,12 +2342,12 @@ const Mr = e.object({
|
|
|
2339
2342
|
baseUrl: t.baseUrl,
|
|
2340
2343
|
formCallbacks: a
|
|
2341
2344
|
};
|
|
2342
|
-
return new Promise((
|
|
2345
|
+
return new Promise((C, v) => {
|
|
2343
2346
|
h.oncancel = () => {
|
|
2344
2347
|
xe("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
|
|
2345
2348
|
}, h.onvalidatemerchant = async (g) => {
|
|
2346
2349
|
try {
|
|
2347
|
-
await Ka(g,
|
|
2350
|
+
await Ka(g, E);
|
|
2348
2351
|
} catch (P) {
|
|
2349
2352
|
v(P);
|
|
2350
2353
|
}
|
|
@@ -2355,36 +2358,36 @@ const Mr = e.object({
|
|
|
2355
2358
|
h.completePaymentMethodSelection(g);
|
|
2356
2359
|
}, h.onpaymentauthorized = async (g) => {
|
|
2357
2360
|
try {
|
|
2358
|
-
const P = await Ya(g,
|
|
2359
|
-
|
|
2361
|
+
const P = await Ya(g, E);
|
|
2362
|
+
C(P);
|
|
2360
2363
|
} catch (P) {
|
|
2361
2364
|
v(P);
|
|
2362
2365
|
}
|
|
2363
2366
|
}, h.begin();
|
|
2364
|
-
}).catch((
|
|
2365
|
-
throw yt("Apple Pay payment error",
|
|
2367
|
+
}).catch((C) => {
|
|
2368
|
+
throw yt("Apple Pay payment error", C), C;
|
|
2366
2369
|
});
|
|
2367
2370
|
}
|
|
2368
|
-
), { log__:
|
|
2371
|
+
), { log__: he, err__: Te } = I("authnet-googlepay"), Za = fe(
|
|
2369
2372
|
async ({ context: t, formCallbacks: n }) => {
|
|
2370
2373
|
var r, o;
|
|
2371
|
-
|
|
2374
|
+
he("Initializing Authnet GooglePay flow");
|
|
2372
2375
|
const a = {
|
|
2373
2376
|
processor: B.Enum.authorize_net,
|
|
2374
2377
|
isAvailable: !1,
|
|
2375
2378
|
isLoading: !1,
|
|
2376
2379
|
startFlow: async () => {
|
|
2377
2380
|
}
|
|
2378
|
-
}, i = W(t.checkoutPaymentMethods,
|
|
2381
|
+
}, i = W(t.checkoutPaymentMethods, Mr);
|
|
2379
2382
|
if (!i)
|
|
2380
2383
|
return a;
|
|
2381
|
-
|
|
2384
|
+
he("Google Pay CPM", i);
|
|
2382
2385
|
const s = i.metadata;
|
|
2383
2386
|
if (!s.processor_account_id)
|
|
2384
2387
|
return Te("No gateway merchant ID found in processor account"), a;
|
|
2385
|
-
if (
|
|
2388
|
+
if (he("Loading Google Pay SDK..."), await Ar(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
|
|
2386
2389
|
return Te("Google Pay SDK not loaded properly"), a;
|
|
2387
|
-
|
|
2390
|
+
he("Google Pay SDK loaded", window.google.payments);
|
|
2388
2391
|
try {
|
|
2389
2392
|
const f = Xe({
|
|
2390
2393
|
gateway: "authorizenet",
|
|
@@ -2400,16 +2403,16 @@ const Mr = e.object({
|
|
|
2400
2403
|
f
|
|
2401
2404
|
);
|
|
2402
2405
|
if (!m)
|
|
2403
|
-
return
|
|
2406
|
+
return he("Google Pay is not available for this user"), a;
|
|
2404
2407
|
} catch (f) {
|
|
2405
2408
|
return Te("Error checking Google Pay availability", f), a;
|
|
2406
2409
|
}
|
|
2407
|
-
const c = t.anyCdeConnection, l = await
|
|
2410
|
+
const c = t.anyCdeConnection, l = await D(c), u = l.mode === "setup", d = await Ae(c, l.token, u, void 0), _ = async (f) => {
|
|
2408
2411
|
try {
|
|
2409
2412
|
x.authorizeNetGooglePay.run({
|
|
2410
2413
|
context: t,
|
|
2411
2414
|
checkoutPaymentMethod: i,
|
|
2412
|
-
nonCdeFormInputs:
|
|
2415
|
+
nonCdeFormInputs: te(t.formDiv),
|
|
2413
2416
|
formCallbacks: n,
|
|
2414
2417
|
initResult: void 0,
|
|
2415
2418
|
customParams: {
|
|
@@ -2428,7 +2431,7 @@ const Mr = e.object({
|
|
|
2428
2431
|
startFlow: _
|
|
2429
2432
|
};
|
|
2430
2433
|
}
|
|
2431
|
-
), Wa =
|
|
2434
|
+
), Wa = se(
|
|
2432
2435
|
async ({
|
|
2433
2436
|
context: t,
|
|
2434
2437
|
nonCdeFormInputs: n,
|
|
@@ -2437,7 +2440,7 @@ const Mr = e.object({
|
|
|
2437
2440
|
customParams: a
|
|
2438
2441
|
}) => {
|
|
2439
2442
|
var i, s, c, l;
|
|
2440
|
-
const { initialPreview: u, overridePaymentRequest: d } = a, _ = W(t.checkoutPaymentMethods,
|
|
2443
|
+
const { initialPreview: u, overridePaymentRequest: d } = a, _ = W(t.checkoutPaymentMethods, Mr).metadata, f = Xe({
|
|
2441
2444
|
gateway: "authorizenet",
|
|
2442
2445
|
gatewayMerchantId: _.processor_account_id,
|
|
2443
2446
|
merchantName: _.processor_account_name,
|
|
@@ -2447,8 +2450,8 @@ const Mr = e.object({
|
|
|
2447
2450
|
}), m = Qe(t.baseUrl, f);
|
|
2448
2451
|
try {
|
|
2449
2452
|
const y = await m.loadPaymentData(f);
|
|
2450
|
-
|
|
2451
|
-
const h = t.anyCdeConnection,
|
|
2453
|
+
he("Google Pay Payment data", y);
|
|
2454
|
+
const h = t.anyCdeConnection, E = await D(h), C = Or(n, y), v = de(C, o.get.onValidationError), g = (s = (i = y.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
|
|
2452
2455
|
if (!g)
|
|
2453
2456
|
throw new Error("No payment token received from Google Pay");
|
|
2454
2457
|
const P = await Se(h, {
|
|
@@ -2462,9 +2465,9 @@ const Mr = e.object({
|
|
|
2462
2465
|
country: v[p.COUNTRY]
|
|
2463
2466
|
}
|
|
2464
2467
|
});
|
|
2465
|
-
|
|
2468
|
+
he("Start payment flow response", P);
|
|
2466
2469
|
const $ = await H(h, {
|
|
2467
|
-
secure_token:
|
|
2470
|
+
secure_token: E.token,
|
|
2468
2471
|
processor_specific_metadata: {
|
|
2469
2472
|
payment_provider: r.provider,
|
|
2470
2473
|
mobile_wallet_payment_data: {
|
|
@@ -2529,7 +2532,7 @@ const Mr = e.object({
|
|
|
2529
2532
|
},
|
|
2530
2533
|
// Loop
|
|
2531
2534
|
loopCrypto: {
|
|
2532
|
-
init:
|
|
2535
|
+
init: qa,
|
|
2533
2536
|
run: Va
|
|
2534
2537
|
},
|
|
2535
2538
|
authorizeNetApplePay: {
|
|
@@ -2550,7 +2553,7 @@ var _t = function(t, n) {
|
|
|
2550
2553
|
for (var a in o) Object.prototype.hasOwnProperty.call(o, a) && (r[a] = o[a]);
|
|
2551
2554
|
}, _t(t, n);
|
|
2552
2555
|
};
|
|
2553
|
-
function
|
|
2556
|
+
function pe(t, n) {
|
|
2554
2557
|
if (typeof n != "function" && n !== null)
|
|
2555
2558
|
throw new TypeError("Class extends value " + String(n) + " is not a constructor or null");
|
|
2556
2559
|
_t(t, n);
|
|
@@ -2656,7 +2659,7 @@ function Pe(t) {
|
|
|
2656
2659
|
};
|
|
2657
2660
|
throw new TypeError(n ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
2658
2661
|
}
|
|
2659
|
-
function
|
|
2662
|
+
function qe(t, n) {
|
|
2660
2663
|
var r = typeof Symbol == "function" && t[Symbol.iterator];
|
|
2661
2664
|
if (!r) return t;
|
|
2662
2665
|
var o = r.call(t), a, i = [], s;
|
|
@@ -2678,8 +2681,8 @@ function Ve(t, n, r) {
|
|
|
2678
2681
|
(i || !(o in n)) && (i || (i = Array.prototype.slice.call(n, 0, o)), i[o] = n[o]);
|
|
2679
2682
|
return t.concat(i || Array.prototype.slice.call(n));
|
|
2680
2683
|
}
|
|
2681
|
-
function
|
|
2682
|
-
return this instanceof
|
|
2684
|
+
function Ee(t) {
|
|
2685
|
+
return this instanceof Ee ? (this.v = t, this) : new Ee(t);
|
|
2683
2686
|
}
|
|
2684
2687
|
function Xa(t, n, r) {
|
|
2685
2688
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
@@ -2694,8 +2697,8 @@ function Xa(t, n, r) {
|
|
|
2694
2697
|
}
|
|
2695
2698
|
function c(m, y) {
|
|
2696
2699
|
o[m] && (a[m] = function(h) {
|
|
2697
|
-
return new Promise(function(
|
|
2698
|
-
i.push([m, h,
|
|
2700
|
+
return new Promise(function(E, C) {
|
|
2701
|
+
i.push([m, h, E, C]) > 1 || l(m, h);
|
|
2699
2702
|
});
|
|
2700
2703
|
}, y && (a[m] = y(a[m])));
|
|
2701
2704
|
}
|
|
@@ -2707,7 +2710,7 @@ function Xa(t, n, r) {
|
|
|
2707
2710
|
}
|
|
2708
2711
|
}
|
|
2709
2712
|
function u(m) {
|
|
2710
|
-
m.value instanceof
|
|
2713
|
+
m.value instanceof Ee ? Promise.resolve(m.value.v).then(d, _) : f(i[0][2], m);
|
|
2711
2714
|
}
|
|
2712
2715
|
function d(m) {
|
|
2713
2716
|
l("next", m);
|
|
@@ -2805,7 +2808,7 @@ var Le = function() {
|
|
|
2805
2808
|
try {
|
|
2806
2809
|
Ut(y);
|
|
2807
2810
|
} catch (h) {
|
|
2808
|
-
i = i ?? [], h instanceof lt ? i = Ve(Ve([],
|
|
2811
|
+
i = i ?? [], h instanceof lt ? i = Ve(Ve([], qe(i)), qe(h.errors)) : i.push(h);
|
|
2809
2812
|
}
|
|
2810
2813
|
}
|
|
2811
2814
|
} catch (h) {
|
|
@@ -2867,7 +2870,7 @@ var zr = {
|
|
|
2867
2870
|
setTimeout: function(t, n) {
|
|
2868
2871
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
2869
2872
|
r[o - 2] = arguments[o];
|
|
2870
|
-
return setTimeout.apply(void 0, Ve([t, n],
|
|
2873
|
+
return setTimeout.apply(void 0, Ve([t, n], qe(r)));
|
|
2871
2874
|
},
|
|
2872
2875
|
clearTimeout: function(t) {
|
|
2873
2876
|
return clearTimeout(t);
|
|
@@ -2885,7 +2888,7 @@ function ze(t) {
|
|
|
2885
2888
|
t();
|
|
2886
2889
|
}
|
|
2887
2890
|
var St = function(t) {
|
|
2888
|
-
|
|
2891
|
+
pe(n, t);
|
|
2889
2892
|
function n(r) {
|
|
2890
2893
|
var o = t.call(this) || this;
|
|
2891
2894
|
return o.isStopped = !1, r ? (o.destination = r, Fr(r) && r.add(o)) : o.destination = oi, o;
|
|
@@ -2951,7 +2954,7 @@ var ri = function() {
|
|
|
2951
2954
|
}
|
|
2952
2955
|
}, t;
|
|
2953
2956
|
}(), ht = function(t) {
|
|
2954
|
-
|
|
2957
|
+
pe(n, t);
|
|
2955
2958
|
function n(r, o, a) {
|
|
2956
2959
|
var i = t.call(this) || this, s;
|
|
2957
2960
|
if (N(r) || !r)
|
|
@@ -2998,7 +3001,7 @@ function ii(t) {
|
|
|
2998
3001
|
}, n);
|
|
2999
3002
|
};
|
|
3000
3003
|
}
|
|
3001
|
-
var
|
|
3004
|
+
var ie = function() {
|
|
3002
3005
|
function t(n) {
|
|
3003
3006
|
n && (this._subscribe = n);
|
|
3004
3007
|
}
|
|
@@ -3088,7 +3091,7 @@ function di(t, n, r, o, a) {
|
|
|
3088
3091
|
return new pi(t, n, r, o, a);
|
|
3089
3092
|
}
|
|
3090
3093
|
var pi = function(t) {
|
|
3091
|
-
|
|
3094
|
+
pe(n, t);
|
|
3092
3095
|
function n(r, o, a, i, s, c) {
|
|
3093
3096
|
var l = t.call(this, r) || this;
|
|
3094
3097
|
return l.onFinalize = s, l.shouldUnsubscribe = c, l._next = o ? function(u) {
|
|
@@ -3126,8 +3129,8 @@ var pi = function(t) {
|
|
|
3126
3129
|
return function() {
|
|
3127
3130
|
t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
|
|
3128
3131
|
};
|
|
3129
|
-
}),
|
|
3130
|
-
|
|
3132
|
+
}), Gr = function(t) {
|
|
3133
|
+
pe(n, t);
|
|
3131
3134
|
function n() {
|
|
3132
3135
|
var r = t.call(this) || this;
|
|
3133
3136
|
return r.closed = !1, r.currentObservers = null, r.observers = [], r.isStopped = !1, r.hasError = !1, r.thrownError = null, r;
|
|
@@ -3200,13 +3203,13 @@ var pi = function(t) {
|
|
|
3200
3203
|
var o = this, a = o.hasError, i = o.thrownError, s = o.isStopped;
|
|
3201
3204
|
a ? r.error(i) : s && r.complete();
|
|
3202
3205
|
}, n.prototype.asObservable = function() {
|
|
3203
|
-
var r = new
|
|
3206
|
+
var r = new ie();
|
|
3204
3207
|
return r.source = this, r;
|
|
3205
3208
|
}, n.create = function(r, o) {
|
|
3206
3209
|
return new $t(r, o);
|
|
3207
3210
|
}, n;
|
|
3208
|
-
}(
|
|
3209
|
-
|
|
3211
|
+
}(ie), $t = function(t) {
|
|
3212
|
+
pe(n, t);
|
|
3210
3213
|
function n(r, o) {
|
|
3211
3214
|
var a = t.call(this) || this;
|
|
3212
3215
|
return a.destination = r, a.source = o, a;
|
|
@@ -3224,31 +3227,31 @@ var pi = function(t) {
|
|
|
3224
3227
|
var o, a;
|
|
3225
3228
|
return (a = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && a !== void 0 ? a : Ur;
|
|
3226
3229
|
}, n;
|
|
3227
|
-
}(
|
|
3230
|
+
}(Gr), yi = {
|
|
3228
3231
|
now: function() {
|
|
3229
3232
|
return Date.now();
|
|
3230
3233
|
},
|
|
3231
3234
|
delegate: void 0
|
|
3232
3235
|
}, _i = function(t) {
|
|
3233
|
-
|
|
3236
|
+
pe(n, t);
|
|
3234
3237
|
function n(r, o) {
|
|
3235
3238
|
return t.call(this) || this;
|
|
3236
3239
|
}
|
|
3237
3240
|
return n.prototype.schedule = function(r, o) {
|
|
3238
3241
|
return this;
|
|
3239
3242
|
}, n;
|
|
3240
|
-
}(Le),
|
|
3243
|
+
}(Le), Gt = {
|
|
3241
3244
|
setInterval: function(t, n) {
|
|
3242
3245
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
3243
3246
|
r[o - 2] = arguments[o];
|
|
3244
|
-
return setInterval.apply(void 0, Ve([t, n],
|
|
3247
|
+
return setInterval.apply(void 0, Ve([t, n], qe(r)));
|
|
3245
3248
|
},
|
|
3246
3249
|
clearInterval: function(t) {
|
|
3247
3250
|
return clearInterval(t);
|
|
3248
3251
|
},
|
|
3249
3252
|
delegate: void 0
|
|
3250
3253
|
}, hi = function(t) {
|
|
3251
|
-
|
|
3254
|
+
pe(n, t);
|
|
3252
3255
|
function n(r, o) {
|
|
3253
3256
|
var a = t.call(this, r, o) || this;
|
|
3254
3257
|
return a.scheduler = r, a.work = o, a.pending = !1, a;
|
|
@@ -3261,11 +3264,11 @@ var pi = function(t) {
|
|
|
3261
3264
|
var i = this.id, s = this.scheduler;
|
|
3262
3265
|
return i != null && (this.id = this.recycleAsyncId(s, i, o)), this.pending = !0, this.delay = o, this.id = (a = this.id) !== null && a !== void 0 ? a : this.requestAsyncId(s, this.id, o), this;
|
|
3263
3266
|
}, n.prototype.requestAsyncId = function(r, o, a) {
|
|
3264
|
-
return a === void 0 && (a = 0),
|
|
3267
|
+
return a === void 0 && (a = 0), Gt.setInterval(r.flush.bind(r, this), a);
|
|
3265
3268
|
}, n.prototype.recycleAsyncId = function(r, o, a) {
|
|
3266
3269
|
if (a === void 0 && (a = 0), a != null && this.delay === a && this.pending === !1)
|
|
3267
3270
|
return o;
|
|
3268
|
-
o != null &&
|
|
3271
|
+
o != null && Gt.clearInterval(o);
|
|
3269
3272
|
}, n.prototype.execute = function(r, o) {
|
|
3270
3273
|
if (this.closed)
|
|
3271
3274
|
return new Error("executing a cancelled action");
|
|
@@ -3289,7 +3292,7 @@ var pi = function(t) {
|
|
|
3289
3292
|
this.work = this.state = this.scheduler = null, this.pending = !1, Ke(i, this), o != null && (this.id = this.recycleAsyncId(a, o, null)), this.delay = null, t.prototype.unsubscribe.call(this);
|
|
3290
3293
|
}
|
|
3291
3294
|
}, n;
|
|
3292
|
-
}(_i),
|
|
3295
|
+
}(_i), qt = function() {
|
|
3293
3296
|
function t(n, r) {
|
|
3294
3297
|
r === void 0 && (r = t.now), this.schedulerActionCtor = n, this.now = r;
|
|
3295
3298
|
}
|
|
@@ -3297,9 +3300,9 @@ var pi = function(t) {
|
|
|
3297
3300
|
return r === void 0 && (r = 0), new this.schedulerActionCtor(this, n).schedule(o, r);
|
|
3298
3301
|
}, t.now = yi.now, t;
|
|
3299
3302
|
}(), fi = function(t) {
|
|
3300
|
-
|
|
3303
|
+
pe(n, t);
|
|
3301
3304
|
function n(r, o) {
|
|
3302
|
-
o === void 0 && (o =
|
|
3305
|
+
o === void 0 && (o = qt.now);
|
|
3303
3306
|
var a = t.call(this, r, o) || this;
|
|
3304
3307
|
return a.actions = [], a._active = !1, a;
|
|
3305
3308
|
}
|
|
@@ -3321,7 +3324,7 @@ var pi = function(t) {
|
|
|
3321
3324
|
throw a;
|
|
3322
3325
|
}
|
|
3323
3326
|
}, n;
|
|
3324
|
-
}(
|
|
3327
|
+
}(qt), gi = new fi(hi), bi = function(t) {
|
|
3325
3328
|
return t && typeof t.length == "number" && typeof t != "function";
|
|
3326
3329
|
};
|
|
3327
3330
|
function wi(t) {
|
|
@@ -3330,10 +3333,10 @@ function wi(t) {
|
|
|
3330
3333
|
function vi(t) {
|
|
3331
3334
|
return N(t[At]);
|
|
3332
3335
|
}
|
|
3333
|
-
function
|
|
3336
|
+
function Ei(t) {
|
|
3334
3337
|
return Symbol.asyncIterator && N(t == null ? void 0 : t[Symbol.asyncIterator]);
|
|
3335
3338
|
}
|
|
3336
|
-
function
|
|
3339
|
+
function Ci(t) {
|
|
3337
3340
|
return new TypeError("You provided " + (t !== null && typeof t == "object" ? "an invalid object" : "'" + t + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
|
3338
3341
|
}
|
|
3339
3342
|
function Pi() {
|
|
@@ -3353,13 +3356,13 @@ function Ai(t) {
|
|
|
3353
3356
|
case 1:
|
|
3354
3357
|
i.trys.push([1, , 9, 10]), i.label = 2;
|
|
3355
3358
|
case 2:
|
|
3356
|
-
return [4,
|
|
3359
|
+
return [4, Ee(n.read())];
|
|
3357
3360
|
case 3:
|
|
3358
|
-
return r = i.sent(), o = r.value, a = r.done, a ? [4,
|
|
3361
|
+
return r = i.sent(), o = r.value, a = r.done, a ? [4, Ee(void 0)] : [3, 5];
|
|
3359
3362
|
case 4:
|
|
3360
3363
|
return [2, i.sent()];
|
|
3361
3364
|
case 5:
|
|
3362
|
-
return [4,
|
|
3365
|
+
return [4, Ee(o)];
|
|
3363
3366
|
case 6:
|
|
3364
3367
|
return [4, i.sent()];
|
|
3365
3368
|
case 7:
|
|
@@ -3378,7 +3381,7 @@ function Ii(t) {
|
|
|
3378
3381
|
return N(t == null ? void 0 : t.getReader);
|
|
3379
3382
|
}
|
|
3380
3383
|
function Oi(t) {
|
|
3381
|
-
if (t instanceof
|
|
3384
|
+
if (t instanceof ie)
|
|
3382
3385
|
return t;
|
|
3383
3386
|
if (t != null) {
|
|
3384
3387
|
if (vi(t))
|
|
@@ -3387,17 +3390,17 @@ function Oi(t) {
|
|
|
3387
3390
|
return xi(t);
|
|
3388
3391
|
if (wi(t))
|
|
3389
3392
|
return Ti(t);
|
|
3390
|
-
if (
|
|
3391
|
-
return
|
|
3393
|
+
if (Ei(t))
|
|
3394
|
+
return qr(t);
|
|
3392
3395
|
if (Si(t))
|
|
3393
3396
|
return ji(t);
|
|
3394
3397
|
if (Ii(t))
|
|
3395
3398
|
return Ni(t);
|
|
3396
3399
|
}
|
|
3397
|
-
throw
|
|
3400
|
+
throw Ci(t);
|
|
3398
3401
|
}
|
|
3399
3402
|
function Ri(t) {
|
|
3400
|
-
return new
|
|
3403
|
+
return new ie(function(n) {
|
|
3401
3404
|
var r = t[At]();
|
|
3402
3405
|
if (N(r.subscribe))
|
|
3403
3406
|
return r.subscribe(n);
|
|
@@ -3405,14 +3408,14 @@ function Ri(t) {
|
|
|
3405
3408
|
});
|
|
3406
3409
|
}
|
|
3407
3410
|
function xi(t) {
|
|
3408
|
-
return new
|
|
3411
|
+
return new ie(function(n) {
|
|
3409
3412
|
for (var r = 0; r < t.length && !n.closed; r++)
|
|
3410
3413
|
n.next(t[r]);
|
|
3411
3414
|
n.complete();
|
|
3412
3415
|
});
|
|
3413
3416
|
}
|
|
3414
3417
|
function Ti(t) {
|
|
3415
|
-
return new
|
|
3418
|
+
return new ie(function(n) {
|
|
3416
3419
|
t.then(function(r) {
|
|
3417
3420
|
n.closed || (n.next(r), n.complete());
|
|
3418
3421
|
}, function(r) {
|
|
@@ -3421,7 +3424,7 @@ function Ti(t) {
|
|
|
3421
3424
|
});
|
|
3422
3425
|
}
|
|
3423
3426
|
function ji(t) {
|
|
3424
|
-
return new
|
|
3427
|
+
return new ie(function(n) {
|
|
3425
3428
|
var r, o;
|
|
3426
3429
|
try {
|
|
3427
3430
|
for (var a = Pe(t), i = a.next(); !i.done; i = a.next()) {
|
|
@@ -3441,17 +3444,17 @@ function ji(t) {
|
|
|
3441
3444
|
n.complete();
|
|
3442
3445
|
});
|
|
3443
3446
|
}
|
|
3444
|
-
function
|
|
3445
|
-
return new
|
|
3446
|
-
|
|
3447
|
+
function qr(t) {
|
|
3448
|
+
return new ie(function(n) {
|
|
3449
|
+
Di(t, n).catch(function(r) {
|
|
3447
3450
|
return n.error(r);
|
|
3448
3451
|
});
|
|
3449
3452
|
});
|
|
3450
3453
|
}
|
|
3451
3454
|
function Ni(t) {
|
|
3452
|
-
return
|
|
3455
|
+
return qr(Ai(t));
|
|
3453
3456
|
}
|
|
3454
|
-
function
|
|
3457
|
+
function Di(t, n) {
|
|
3455
3458
|
var r, o, a, i;
|
|
3456
3459
|
return Ja(this, void 0, void 0, function() {
|
|
3457
3460
|
var s, c;
|
|
@@ -3489,7 +3492,7 @@ function Mi(t, n) {
|
|
|
3489
3492
|
});
|
|
3490
3493
|
});
|
|
3491
3494
|
}
|
|
3492
|
-
function
|
|
3495
|
+
function Mi(t, n, r, o, a) {
|
|
3493
3496
|
o === void 0 && (o = 0), a === void 0 && (a = !1);
|
|
3494
3497
|
var i = n.schedule(function() {
|
|
3495
3498
|
r(), a ? t.add(this.schedule(null, o)) : this.unsubscribe();
|
|
@@ -3503,7 +3506,7 @@ function Li(t, n) {
|
|
|
3503
3506
|
}, o = function(a) {
|
|
3504
3507
|
return a.error(r());
|
|
3505
3508
|
};
|
|
3506
|
-
return new
|
|
3509
|
+
return new ie(o);
|
|
3507
3510
|
}
|
|
3508
3511
|
var Ui = et(function(t) {
|
|
3509
3512
|
return function() {
|
|
@@ -3532,18 +3535,18 @@ var $i = et(function(t) {
|
|
|
3532
3535
|
n === void 0 && (n = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = n;
|
|
3533
3536
|
};
|
|
3534
3537
|
});
|
|
3535
|
-
function
|
|
3536
|
-
var r = zi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = r.first, a = r.each, i = r.with, s = i === void 0 ?
|
|
3538
|
+
function Gi(t, n) {
|
|
3539
|
+
var r = zi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = r.first, a = r.each, i = r.with, s = i === void 0 ? qi : i, c = r.scheduler, l = c === void 0 ? gi : c, u = r.meta, d = u === void 0 ? null : u;
|
|
3537
3540
|
if (o == null && a == null)
|
|
3538
3541
|
throw new TypeError("No timeout provided.");
|
|
3539
3542
|
return ui(function(_, f) {
|
|
3540
|
-
var m, y, h = null,
|
|
3541
|
-
y =
|
|
3543
|
+
var m, y, h = null, E = 0, C = function(v) {
|
|
3544
|
+
y = Mi(f, l, function() {
|
|
3542
3545
|
try {
|
|
3543
3546
|
m.unsubscribe(), Oi(s({
|
|
3544
3547
|
meta: d,
|
|
3545
3548
|
lastValue: h,
|
|
3546
|
-
seen:
|
|
3549
|
+
seen: E
|
|
3547
3550
|
})).subscribe(f);
|
|
3548
3551
|
} catch (g) {
|
|
3549
3552
|
f.error(g);
|
|
@@ -3551,13 +3554,13 @@ function qi(t, n) {
|
|
|
3551
3554
|
}, v);
|
|
3552
3555
|
};
|
|
3553
3556
|
m = _.subscribe(di(f, function(v) {
|
|
3554
|
-
y == null || y.unsubscribe(),
|
|
3557
|
+
y == null || y.unsubscribe(), E++, f.next(h = v), a > 0 && C(a);
|
|
3555
3558
|
}, void 0, void 0, function() {
|
|
3556
3559
|
y != null && y.closed || y == null || y.unsubscribe(), h = null;
|
|
3557
|
-
})), !
|
|
3560
|
+
})), !E && C(o != null ? typeof o == "number" ? o : +o - l.now() : a);
|
|
3558
3561
|
});
|
|
3559
3562
|
}
|
|
3560
|
-
function
|
|
3563
|
+
function qi(t) {
|
|
3561
3564
|
throw new $i(t);
|
|
3562
3565
|
}
|
|
3563
3566
|
class $e {
|
|
@@ -3596,14 +3599,14 @@ class $e {
|
|
|
3596
3599
|
first: n.timeoutSec * 1e3,
|
|
3597
3600
|
with: () => Li(() => new Error(n.timeoutErrMsg))
|
|
3598
3601
|
};
|
|
3599
|
-
return Fi(this._subject.pipe(
|
|
3600
|
-
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new
|
|
3602
|
+
return Fi(this._subject.pipe(Gi(r)));
|
|
3603
|
+
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new Gr();
|
|
3601
3604
|
}
|
|
3602
3605
|
get current() {
|
|
3603
3606
|
return this._current;
|
|
3604
3607
|
}
|
|
3605
3608
|
}
|
|
3606
|
-
const { log__: Vi, err__: Ki } = I("init-flows"),
|
|
3609
|
+
const { log__: Vi, err__: Ki } = I("init-flows"), _e = (t, n) => {
|
|
3607
3610
|
const r = new $e();
|
|
3608
3611
|
return {
|
|
3609
3612
|
publisher: r,
|
|
@@ -3614,7 +3617,7 @@ const { log__: Vi, err__: Ki } = I("init-flows"), ye = (t, n) => {
|
|
|
3614
3617
|
const a = await n(o);
|
|
3615
3618
|
Vi(`✔ ${t} flow initialized successfully. Result:`, a), r.set(a);
|
|
3616
3619
|
} catch (a) {
|
|
3617
|
-
Ki(`𝙭 ${t} flow initialization failed. Error:`,
|
|
3620
|
+
Ki(`𝙭 ${t} flow initialization failed. Error:`, re(a), "Details:", a), r.throw(a, re(a));
|
|
3618
3621
|
}
|
|
3619
3622
|
}
|
|
3620
3623
|
};
|
|
@@ -3623,40 +3626,40 @@ const { log__: Vi, err__: Ki } = I("init-flows"), ye = (t, n) => {
|
|
|
3623
3626
|
}, Hi = () => ({
|
|
3624
3627
|
// 💡 Add new init flows here
|
|
3625
3628
|
// Stripe PR
|
|
3626
|
-
stripePR:
|
|
3629
|
+
stripePR: _e("Stripe PR", x.stripePR.init),
|
|
3627
3630
|
// Stripe Link
|
|
3628
|
-
stripeLink:
|
|
3631
|
+
stripeLink: _e("Stripe Link", x.stripeLink.init),
|
|
3629
3632
|
// Airwallex GooglePay
|
|
3630
|
-
airwallexGooglePay:
|
|
3633
|
+
airwallexGooglePay: _e("Airwallex GooglePay", x.airwallexGooglePay.init),
|
|
3631
3634
|
// Airwallex ApplePay
|
|
3632
|
-
airwallexApplePay:
|
|
3635
|
+
airwallexApplePay: _e("Airwallex ApplePay", x.airwallexApplePay.init),
|
|
3633
3636
|
// Loop
|
|
3634
|
-
loop:
|
|
3637
|
+
loop: _e("Loop", x.loopCrypto.init),
|
|
3635
3638
|
// Authnet GooglePay
|
|
3636
|
-
authorizeNetGooglePay:
|
|
3639
|
+
authorizeNetGooglePay: _e("Authnet GooglePay", x.authorizeNetGooglePay.init),
|
|
3637
3640
|
// Authnet ApplePay
|
|
3638
|
-
authorizeNetApplePay:
|
|
3641
|
+
authorizeNetApplePay: _e("Authnet ApplePay", x.authorizeNetApplePay.init)
|
|
3639
3642
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3640
|
-
}), { err__: Bi } = I("form-callbacks"),
|
|
3641
|
-
onFocus:
|
|
3642
|
-
onBlur:
|
|
3643
|
-
onChange:
|
|
3644
|
-
onLoad:
|
|
3645
|
-
onLoadError:
|
|
3646
|
-
onValidationError:
|
|
3647
|
-
onCheckoutStarted:
|
|
3648
|
-
onCheckoutSuccess:
|
|
3649
|
-
onSetupPaymentMethodSuccess:
|
|
3650
|
-
onCheckoutError:
|
|
3651
|
-
onPaymentRequestLoad:
|
|
3652
|
-
}),
|
|
3643
|
+
}), { err__: Bi } = I("form-callbacks"), q = e.function().optional(), Vt = e.object({
|
|
3644
|
+
onFocus: q,
|
|
3645
|
+
onBlur: q,
|
|
3646
|
+
onChange: q,
|
|
3647
|
+
onLoad: q,
|
|
3648
|
+
onLoadError: q,
|
|
3649
|
+
onValidationError: q,
|
|
3650
|
+
onCheckoutStarted: q,
|
|
3651
|
+
onCheckoutSuccess: q,
|
|
3652
|
+
onSetupPaymentMethodSuccess: q,
|
|
3653
|
+
onCheckoutError: q,
|
|
3654
|
+
onPaymentRequestLoad: q
|
|
3655
|
+
}), we = class Ge {
|
|
3653
3656
|
constructor() {
|
|
3654
3657
|
this.setCallbacks = (n) => {
|
|
3655
|
-
this._callbacks =
|
|
3656
|
-
const a = dn(r, o ??
|
|
3658
|
+
this._callbacks = Ge.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
|
|
3659
|
+
const a = dn(r, o ?? Ge.NOOP, Bi);
|
|
3657
3660
|
this._callbacks[r] = a;
|
|
3658
3661
|
});
|
|
3659
|
-
}, this._callbacks =
|
|
3662
|
+
}, this._callbacks = Ge.createEmptyCallbacks();
|
|
3660
3663
|
}
|
|
3661
3664
|
/**
|
|
3662
3665
|
* Returns a read-only version of the callbacks object.
|
|
@@ -3665,17 +3668,17 @@ const { log__: Vi, err__: Ki } = I("init-flows"), ye = (t, n) => {
|
|
|
3665
3668
|
return { ...this._callbacks };
|
|
3666
3669
|
}
|
|
3667
3670
|
};
|
|
3668
|
-
|
|
3669
|
-
},
|
|
3671
|
+
we.NOOP = () => {
|
|
3672
|
+
}, we.createEmptyCallbacks = () => {
|
|
3670
3673
|
const t = {};
|
|
3671
3674
|
return Object.keys(Vt.keyof().enum).forEach((n) => {
|
|
3672
|
-
t[n] =
|
|
3675
|
+
t[n] = we.NOOP;
|
|
3673
3676
|
}), t;
|
|
3674
|
-
},
|
|
3675
|
-
const n = new
|
|
3677
|
+
}, we.fromObject = (t) => {
|
|
3678
|
+
const n = new we();
|
|
3676
3679
|
return n.setCallbacks(Vt.parse(t)), n;
|
|
3677
3680
|
};
|
|
3678
|
-
let Zi =
|
|
3681
|
+
let Zi = we;
|
|
3679
3682
|
class Wi {
|
|
3680
3683
|
constructor(n, r, o, a) {
|
|
3681
3684
|
this.handleMessage = (i) => {
|
|
@@ -3775,39 +3778,51 @@ const Qi = (t, n, r) => {
|
|
|
3775
3778
|
}, Yt = (t, n, r, o, a) => x.stripePR.run({
|
|
3776
3779
|
context: r,
|
|
3777
3780
|
checkoutPaymentMethod: je(r.checkoutPaymentMethods, t),
|
|
3778
|
-
nonCdeFormInputs:
|
|
3781
|
+
nonCdeFormInputs: te(r.formDiv),
|
|
3779
3782
|
formCallbacks: o,
|
|
3780
3783
|
customParams: { provider: t, overridePaymentRequest: a == null ? void 0 : a.overridePaymentRequest },
|
|
3781
3784
|
initResult: n
|
|
3782
|
-
}), Ht = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__:
|
|
3785
|
+
}), Ht = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: Q, err__: oe } = I("op-form"), ve = class ft {
|
|
3783
3786
|
constructor(n) {
|
|
3784
3787
|
this.cdeLoadEvent = new $e(), this.anyCdeConn = new $e(), this.context = new $e(), this.initFlows = Hi(), this.startFormInit = async () => {
|
|
3785
3788
|
try {
|
|
3786
|
-
|
|
3787
|
-
|
|
3789
|
+
const r = this.createElement(ae.CDE_BRIDGE);
|
|
3790
|
+
r.node.id = "__op_internal_cde_bridge", r.node.ariaHidden = "true", Object.assign(r.node.style, {
|
|
3791
|
+
border: "none",
|
|
3792
|
+
margin: "0px",
|
|
3793
|
+
padding: "0px",
|
|
3794
|
+
width: "1px",
|
|
3795
|
+
height: "1px",
|
|
3796
|
+
overflow: "hidden",
|
|
3797
|
+
visibility: "hidden",
|
|
3798
|
+
position: "fixed",
|
|
3799
|
+
pointerEvents: "none",
|
|
3800
|
+
userSelect: "none"
|
|
3801
|
+
}), r.mount("body"), Q("CDE bridge element mounted"), Q("Initializing OpenPay form:"), Q("├ Waiting for CDE load event...");
|
|
3802
|
+
const o = await this.cdeLoadEvent.waitForLoad({
|
|
3788
3803
|
timeoutSec: 120,
|
|
3789
3804
|
timeoutErrMsg: Ht
|
|
3790
3805
|
});
|
|
3791
|
-
|
|
3792
|
-
const
|
|
3806
|
+
Q("├ CDE load event received"), Q("├ Waiting for CDE connection...");
|
|
3807
|
+
const a = await this.anyCdeConn.waitForLoad({
|
|
3793
3808
|
timeoutSec: 120,
|
|
3794
3809
|
timeoutErrMsg: Ht
|
|
3795
3810
|
});
|
|
3796
|
-
|
|
3797
|
-
const
|
|
3811
|
+
Q("├ CDE connection received"), Q("├ Creating OJS context, setting up handlers...");
|
|
3812
|
+
const i = ft.buildOjsFlowContext(
|
|
3798
3813
|
this.config,
|
|
3799
|
-
r,
|
|
3800
3814
|
o,
|
|
3815
|
+
a,
|
|
3801
3816
|
this.getFormDiv()
|
|
3802
3817
|
);
|
|
3803
|
-
this.context.set(
|
|
3818
|
+
this.context.set(i), Qi(this.initFlows, i, this.formCallbacks), Q("├ Starting OJS init flows..."), await Yi(this.initFlows, i, this.formCallbacks), this.formCallbacks.get.onLoad(o.totalAmountAtoms, o.currency), Q("╰ Done initializing OJS flows.");
|
|
3804
3819
|
} catch (r) {
|
|
3805
|
-
const o =
|
|
3820
|
+
const o = re(r);
|
|
3806
3821
|
oe("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
|
|
3807
3822
|
}
|
|
3808
3823
|
}, this.setFormHeight = (r) => {
|
|
3809
3824
|
this.formProperties.height = r, this.registeredElements && Object.values(this.registeredElements).forEach((o) => {
|
|
3810
|
-
o
|
|
3825
|
+
!o || o.type === ae.CDE_BRIDGE || (o.node.style.height = r);
|
|
3811
3826
|
});
|
|
3812
3827
|
}, this.onCdeLoaded = (r) => {
|
|
3813
3828
|
this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.set(r);
|
|
@@ -3829,10 +3844,11 @@ const Qi = (t, n, r) => {
|
|
|
3829
3844
|
}
|
|
3830
3845
|
};
|
|
3831
3846
|
return this.connectToElement({ type: a.type, node: a.node }), this.registeredElements || (this.registeredElements = {
|
|
3832
|
-
[
|
|
3833
|
-
[
|
|
3834
|
-
[
|
|
3835
|
-
[
|
|
3847
|
+
[ae.CARD]: void 0,
|
|
3848
|
+
[ae.CARD_NUMBER]: void 0,
|
|
3849
|
+
[ae.CARD_EXPIRY]: void 0,
|
|
3850
|
+
[ae.CARD_CVC]: void 0,
|
|
3851
|
+
[ae.CDE_BRIDGE]: void 0
|
|
3836
3852
|
}), this.registeredElements[r] = a, a;
|
|
3837
3853
|
}, this.buildQueryString = (r) => {
|
|
3838
3854
|
const o = new URLSearchParams();
|
|
@@ -3850,7 +3866,7 @@ const Qi = (t, n, r) => {
|
|
|
3850
3866
|
x.commonCC.run({
|
|
3851
3867
|
context: r,
|
|
3852
3868
|
checkoutPaymentMethod: je(r.checkoutPaymentMethods, "credit_card"),
|
|
3853
|
-
nonCdeFormInputs:
|
|
3869
|
+
nonCdeFormInputs: te(r.formDiv),
|
|
3854
3870
|
formCallbacks: this.formCallbacks,
|
|
3855
3871
|
customParams: {
|
|
3856
3872
|
currentCdeConnections: this.connectionManager.getAllConnections()
|
|
@@ -3864,10 +3880,10 @@ const Qi = (t, n, r) => {
|
|
|
3864
3880
|
return;
|
|
3865
3881
|
}
|
|
3866
3882
|
const r = {
|
|
3867
|
-
airwallexGooglePay:
|
|
3868
|
-
airwallexApplePay:
|
|
3869
|
-
authorizeNetGooglePay:
|
|
3870
|
-
authorizeNetApplePay:
|
|
3883
|
+
airwallexGooglePay: G.airwallexGooglePay,
|
|
3884
|
+
airwallexApplePay: G.airwallexApplePay,
|
|
3885
|
+
authorizeNetGooglePay: G.authorizenetGooglePay,
|
|
3886
|
+
authorizeNetApplePay: G.authorizenetApplePay
|
|
3871
3887
|
};
|
|
3872
3888
|
return Object.entries(this.initFlows).map(([o, a]) => ({
|
|
3873
3889
|
name: r[o] ?? o,
|
|
@@ -3880,16 +3896,16 @@ const Qi = (t, n, r) => {
|
|
|
3880
3896
|
return;
|
|
3881
3897
|
}
|
|
3882
3898
|
switch (r) {
|
|
3883
|
-
case
|
|
3899
|
+
case G.pockytPaypal:
|
|
3884
3900
|
return x.pockytPaypal.run({
|
|
3885
3901
|
context: a,
|
|
3886
3902
|
checkoutPaymentMethod: je(a.checkoutPaymentMethods, "paypal", "pockyt"),
|
|
3887
|
-
nonCdeFormInputs:
|
|
3903
|
+
nonCdeFormInputs: te(a.formDiv),
|
|
3888
3904
|
formCallbacks: this.formCallbacks,
|
|
3889
3905
|
customParams: { settings: o },
|
|
3890
3906
|
initResult: void 0
|
|
3891
3907
|
});
|
|
3892
|
-
case
|
|
3908
|
+
case G.airwallexGooglePay: {
|
|
3893
3909
|
const i = this.initFlows.airwallexGooglePay.publisher.getValueIfLoadedElse(null);
|
|
3894
3910
|
if (!i) {
|
|
3895
3911
|
oe(
|
|
@@ -3899,7 +3915,7 @@ const Qi = (t, n, r) => {
|
|
|
3899
3915
|
}
|
|
3900
3916
|
return i.startFlow(o);
|
|
3901
3917
|
}
|
|
3902
|
-
case
|
|
3918
|
+
case G.airwallexApplePay: {
|
|
3903
3919
|
const i = this.initFlows.airwallexApplePay.publisher.getValueIfLoadedElse(null);
|
|
3904
3920
|
if (!i) {
|
|
3905
3921
|
oe(
|
|
@@ -3909,7 +3925,7 @@ const Qi = (t, n, r) => {
|
|
|
3909
3925
|
}
|
|
3910
3926
|
return i.startFlow(o);
|
|
3911
3927
|
}
|
|
3912
|
-
case
|
|
3928
|
+
case G.authorizenetGooglePay: {
|
|
3913
3929
|
const i = this.initFlows.authorizeNetGooglePay.publisher.getValueIfLoadedElse(null);
|
|
3914
3930
|
if (!i) {
|
|
3915
3931
|
oe(
|
|
@@ -3919,7 +3935,7 @@ const Qi = (t, n, r) => {
|
|
|
3919
3935
|
}
|
|
3920
3936
|
return i.startFlow(o);
|
|
3921
3937
|
}
|
|
3922
|
-
case
|
|
3938
|
+
case G.authorizenetApplePay: {
|
|
3923
3939
|
const i = this.initFlows.authorizeNetApplePay.publisher.getValueIfLoadedElse(null);
|
|
3924
3940
|
if (!i) {
|
|
3925
3941
|
oe(
|
|
@@ -3929,11 +3945,11 @@ const Qi = (t, n, r) => {
|
|
|
3929
3945
|
}
|
|
3930
3946
|
return i.startFlow(o);
|
|
3931
3947
|
}
|
|
3932
|
-
case
|
|
3948
|
+
case G.loopCrypto:
|
|
3933
3949
|
return x.loopCrypto.run({
|
|
3934
3950
|
context: a,
|
|
3935
3951
|
checkoutPaymentMethod: je(a.checkoutPaymentMethods, "crypto", "loop"),
|
|
3936
|
-
nonCdeFormInputs:
|
|
3952
|
+
nonCdeFormInputs: te(a.formDiv),
|
|
3937
3953
|
formCallbacks: this.formCallbacks,
|
|
3938
3954
|
customParams: o,
|
|
3939
3955
|
initResult: void 0
|
|
@@ -3942,13 +3958,13 @@ const Qi = (t, n, r) => {
|
|
|
3942
3958
|
Ze(r);
|
|
3943
3959
|
}
|
|
3944
3960
|
}, this.submit = this.submitCard, this.destroy = () => {
|
|
3945
|
-
|
|
3961
|
+
Q("Destroying OpenPay form...");
|
|
3946
3962
|
for (const r of Object.values(this.registeredElements ?? {}))
|
|
3947
3963
|
r && r.node.remove();
|
|
3948
3964
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
|
|
3949
3965
|
}, this.updateCallbacks = (r) => {
|
|
3950
3966
|
this.formCallbacks.setCallbacks(r);
|
|
3951
|
-
}, ft.assignAsSingleton(this), this.ojsVersion = "0.2.
|
|
3967
|
+
}, ft.assignAsSingleton(this), this.ojsVersion = "0.2.21", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Zi.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${bt()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Xi(), this.eventHandler = new Wi(this.formId, this.baseUrl, this.formCallbacks, {
|
|
3952
3968
|
setFormHeight: this.setFormHeight,
|
|
3953
3969
|
onCdeLoaded: this.onCdeLoaded,
|
|
3954
3970
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -3958,11 +3974,11 @@ const Qi = (t, n, r) => {
|
|
|
3958
3974
|
return this.config.checkoutSecureToken;
|
|
3959
3975
|
}
|
|
3960
3976
|
};
|
|
3961
|
-
|
|
3962
|
-
if (
|
|
3977
|
+
ve.ojsFlows = x, ve.assignAsSingleton = (t) => {
|
|
3978
|
+
if (ve.getInstance())
|
|
3963
3979
|
throw new Error("OpenPay instance already exists. Only one instance is allowed.");
|
|
3964
3980
|
window.ojs = t;
|
|
3965
|
-
},
|
|
3981
|
+
}, ve.getInstance = () => window.ojs ?? null, ve.buildOjsFlowContext = (t, n, r, o) => ({
|
|
3966
3982
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
3967
3983
|
baseUrl: new URL(t.baseUrl ?? wt).origin,
|
|
3968
3984
|
formDiv: o,
|
|
@@ -3971,7 +3987,7 @@ we.ojsFlows = x, we.assignAsSingleton = (t) => {
|
|
|
3971
3987
|
anyCdeConnection: r,
|
|
3972
3988
|
customInitParams: t.customInitParams ?? {}
|
|
3973
3989
|
});
|
|
3974
|
-
let Ye =
|
|
3990
|
+
let Ye = ve;
|
|
3975
3991
|
const es = e.object({
|
|
3976
3992
|
type: e.string(),
|
|
3977
3993
|
loc: e.array(e.string()),
|
|
@@ -4000,7 +4016,7 @@ var It = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "las
|
|
|
4000
4016
|
const ns = e.nativeEnum(It);
|
|
4001
4017
|
var Kr = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Kr || {});
|
|
4002
4018
|
const Yr = e.nativeEnum(Kr), os = e.union([ns, Yr]);
|
|
4003
|
-
var Ie = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(Ie || {});
|
|
4019
|
+
var Ie = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t.CDE_BRIDGE = "cde-bridge", t))(Ie || {});
|
|
4004
4020
|
e.nativeEnum(Ie);
|
|
4005
4021
|
const tt = e.object({
|
|
4006
4022
|
provider: e.string(),
|
|
@@ -4103,12 +4119,12 @@ const J = e.enum([
|
|
|
4103
4119
|
}).extend(rt.shape), vs = e.object({
|
|
4104
4120
|
type: e.literal(J.enum.TOKENIZE_SUCCESS),
|
|
4105
4121
|
isReadyForCheckout: e.boolean()
|
|
4106
|
-
}),
|
|
4122
|
+
}), Es = e.object({
|
|
4107
4123
|
type: e.literal(J.enum.CHECKOUT_SUCCESS),
|
|
4108
4124
|
invoiceUrls: e.array(e.string()),
|
|
4109
4125
|
subscriptionIds: e.array(e.string()),
|
|
4110
4126
|
customerId: e.string()
|
|
4111
|
-
}),
|
|
4127
|
+
}), Cs = e.discriminatedUnion("type", [
|
|
4112
4128
|
ss,
|
|
4113
4129
|
ls,
|
|
4114
4130
|
ds,
|
|
@@ -4117,12 +4133,12 @@ const J = e.enum([
|
|
|
4117
4133
|
_s,
|
|
4118
4134
|
ws,
|
|
4119
4135
|
vs,
|
|
4120
|
-
|
|
4136
|
+
Es,
|
|
4121
4137
|
hs,
|
|
4122
4138
|
fs
|
|
4123
4139
|
]);
|
|
4124
4140
|
e.object({
|
|
4125
|
-
payload:
|
|
4141
|
+
payload: Cs,
|
|
4126
4142
|
nonce: R,
|
|
4127
4143
|
formId: R,
|
|
4128
4144
|
elementId: R
|
|
@@ -4149,7 +4165,8 @@ e.object({
|
|
|
4149
4165
|
const Ps = e.object({
|
|
4150
4166
|
invoice_urls: e.array(e.string()),
|
|
4151
4167
|
subscription_ids: e.array(e.string()),
|
|
4152
|
-
customer_id: e.string()
|
|
4168
|
+
customer_id: e.string(),
|
|
4169
|
+
processors_used: e.optional(e.array(e.string()))
|
|
4153
4170
|
}), ks = e.object({
|
|
4154
4171
|
elementType: e.string(),
|
|
4155
4172
|
errors: e.array(e.string())
|
|
@@ -4276,7 +4293,7 @@ const Hr = e.object({
|
|
|
4276
4293
|
subscription_item_id: e.string()
|
|
4277
4294
|
}), Ns = e.object({
|
|
4278
4295
|
coupon: Hr
|
|
4279
|
-
}),
|
|
4296
|
+
}), Ds = e.object({
|
|
4280
4297
|
currency: e.string(),
|
|
4281
4298
|
discounts: e.array(Ns),
|
|
4282
4299
|
hosted_invoice_url: w(e.string()),
|
|
@@ -4287,8 +4304,9 @@ const Hr = e.object({
|
|
|
4287
4304
|
total_discount_amount_atoms: e.array(Zr)
|
|
4288
4305
|
}), Bt = e.object({
|
|
4289
4306
|
created: e.array(Ts),
|
|
4290
|
-
invoices: e.array(
|
|
4291
|
-
|
|
4307
|
+
invoices: e.array(Ds),
|
|
4308
|
+
processors_used: e.optional(e.array(e.string()))
|
|
4309
|
+
}), Ms = e.object({
|
|
4292
4310
|
preview: Bt,
|
|
4293
4311
|
preview_post_trial: w(Bt),
|
|
4294
4312
|
coupons: e.array(Hr)
|
|
@@ -4301,7 +4319,7 @@ const Hr = e.object({
|
|
|
4301
4319
|
amount_subtotal_atom: e.number().int(),
|
|
4302
4320
|
amount_total_atom: e.number().int(),
|
|
4303
4321
|
brand: Rs,
|
|
4304
|
-
subs_preview: w(
|
|
4322
|
+
subs_preview: w(Ms),
|
|
4305
4323
|
// Null in setup mode
|
|
4306
4324
|
methods_available: e.array(Oe)
|
|
4307
4325
|
}), Ls = e.discriminatedUnion("mode", [
|
|
@@ -4365,11 +4383,11 @@ const $s = e.object({
|
|
|
4365
4383
|
new_customer_address: e.record(e.string(), e.any()).optional(),
|
|
4366
4384
|
new_customer_first_name: e.string().optional(),
|
|
4367
4385
|
new_customer_last_name: e.string().optional()
|
|
4368
|
-
}),
|
|
4386
|
+
}), Gs = e.object({
|
|
4369
4387
|
price_id: e.string(),
|
|
4370
4388
|
quantity: e.number().int()
|
|
4371
|
-
}),
|
|
4372
|
-
line_items: e.array(
|
|
4389
|
+
}), qs = e.object({
|
|
4390
|
+
line_items: e.array(Gs),
|
|
4373
4391
|
promotion_code: e.string().optional(),
|
|
4374
4392
|
displayed_total_amount_atom: e.number().int()
|
|
4375
4393
|
}), Vs = e.object({
|
|
@@ -4381,7 +4399,7 @@ e.object({
|
|
|
4381
4399
|
existing_cc_pm_id: e.string().optional(),
|
|
4382
4400
|
their_existing_pm_id: e.string().optional(),
|
|
4383
4401
|
use_pay_first_flow: e.boolean().optional(),
|
|
4384
|
-
pay_first_flow_cart_info:
|
|
4402
|
+
pay_first_flow_cart_info: qs.optional()
|
|
4385
4403
|
}).extend($s.shape).extend(Vs.shape);
|
|
4386
4404
|
e.object({
|
|
4387
4405
|
required_user_actions: e.array(e.record(e.string(), e.any())),
|
|
@@ -4483,9 +4501,9 @@ var Hs = /* @__PURE__ */ function() {
|
|
|
4483
4501
|
})(Error);
|
|
4484
4502
|
const Bs = (t) => {
|
|
4485
4503
|
const n = (...o) => {
|
|
4486
|
-
window.console.log(`${
|
|
4504
|
+
window.console.log(`${ue.green.bold("ojs/")}${ue.bold.gray(`${t}`)} `, ...o);
|
|
4487
4505
|
}, r = (...o) => {
|
|
4488
|
-
window.console.warn(`${
|
|
4506
|
+
window.console.warn(`${ue.red.bold("ojs/")}${ue.bold.gray(`${t}`)} `, ...o);
|
|
4489
4507
|
};
|
|
4490
4508
|
return {
|
|
4491
4509
|
log: n,
|
|
@@ -4675,14 +4693,14 @@ const Jt = {
|
|
|
4675
4693
|
onSetupPaymentMethodSuccess: V,
|
|
4676
4694
|
onCheckoutError: V,
|
|
4677
4695
|
onPaymentRequestLoad: V
|
|
4678
|
-
}),
|
|
4696
|
+
}), ee = class ee {
|
|
4679
4697
|
constructor() {
|
|
4680
4698
|
this.setCallbacks = (n) => {
|
|
4681
|
-
this._callbacks =
|
|
4682
|
-
const a = rs(r, o ??
|
|
4699
|
+
this._callbacks = ee.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
|
|
4700
|
+
const a = rs(r, o ?? ee.NOOP, Qs);
|
|
4683
4701
|
this._callbacks[r] = a;
|
|
4684
4702
|
});
|
|
4685
|
-
}, this._callbacks =
|
|
4703
|
+
}, this._callbacks = ee.createEmptyCallbacks();
|
|
4686
4704
|
}
|
|
4687
4705
|
/**
|
|
4688
4706
|
* Returns a read-only version of the callbacks object.
|
|
@@ -4691,17 +4709,17 @@ const Jt = {
|
|
|
4691
4709
|
return { ...this._callbacks };
|
|
4692
4710
|
}
|
|
4693
4711
|
};
|
|
4694
|
-
|
|
4695
|
-
},
|
|
4712
|
+
ee.NOOP = () => {
|
|
4713
|
+
}, ee.createEmptyCallbacks = () => {
|
|
4696
4714
|
const n = {};
|
|
4697
4715
|
return Object.keys(Xt.keyof().enum).forEach((r) => {
|
|
4698
|
-
n[r] =
|
|
4716
|
+
n[r] = ee.NOOP;
|
|
4699
4717
|
}), n;
|
|
4700
|
-
},
|
|
4701
|
-
const r = new
|
|
4718
|
+
}, ee.fromObject = (n) => {
|
|
4719
|
+
const r = new ee();
|
|
4702
4720
|
return r.setCallbacks(Xt.parse(n)), r;
|
|
4703
4721
|
};
|
|
4704
|
-
let gt =
|
|
4722
|
+
let gt = ee;
|
|
4705
4723
|
const ec = (t) => {
|
|
4706
4724
|
var r;
|
|
4707
4725
|
const n = gt.fromObject({
|
|
@@ -4719,7 +4737,7 @@ const ec = (t) => {
|
|
|
4719
4737
|
});
|
|
4720
4738
|
return Ye.getInstance() && ((r = Ye.getInstance()) == null || r.updateCallbacks(n.get)), n.get;
|
|
4721
4739
|
}, tc = (t) => {
|
|
4722
|
-
const [n, r] =
|
|
4740
|
+
const [n, r] = le({
|
|
4723
4741
|
apple_pay: Jt,
|
|
4724
4742
|
google_pay: Jt
|
|
4725
4743
|
}), o = Qr(
|
|
@@ -4730,31 +4748,31 @@ const ec = (t) => {
|
|
|
4730
4748
|
);
|
|
4731
4749
|
return { paymentRequests: n, overridenOnPaymentRequestLoad: o };
|
|
4732
4750
|
}, Qt = "op_ojs_form", uc = (t) => {
|
|
4733
|
-
const [n, r] =
|
|
4751
|
+
const [n, r] = le(), [o, a] = le(null), { paymentRequests: i, overridenOnPaymentRequestLoad: s } = tc(t.onPaymentRequestLoad), [c, l] = le(!1), [u, d] = le(null), [_, f] = le(Xs), [m, y] = le({
|
|
4734
4752
|
googlePay: Wt,
|
|
4735
4753
|
applePay: Wt
|
|
4736
4754
|
}), h = ec({
|
|
4737
4755
|
...t,
|
|
4738
4756
|
onPaymentRequestLoad: s,
|
|
4739
|
-
onLoad: (
|
|
4757
|
+
onLoad: (C, v) => {
|
|
4740
4758
|
var g;
|
|
4741
|
-
l(!0), (g = t.onLoad) == null || g.call(t,
|
|
4759
|
+
l(!0), (g = t.onLoad) == null || g.call(t, C, v);
|
|
4742
4760
|
}
|
|
4743
4761
|
});
|
|
4744
4762
|
if (dt(() => {
|
|
4745
4763
|
if (n) return;
|
|
4746
|
-
const
|
|
4764
|
+
const C = Ye.getInstance() ?? new Ye({
|
|
4747
4765
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
4748
4766
|
formTarget: `#${Qt}`,
|
|
4749
4767
|
baseUrl: t.baseUrl,
|
|
4750
4768
|
customInitParams: t.customInitParams,
|
|
4751
4769
|
...h
|
|
4752
4770
|
});
|
|
4753
|
-
r(
|
|
4754
|
-
const v = rc(
|
|
4755
|
-
return a(v),
|
|
4771
|
+
r(C);
|
|
4772
|
+
const v = rc(C);
|
|
4773
|
+
return a(v), C.initFlows.stripeLink.publisher.subscribe((g) => {
|
|
4756
4774
|
g.isSuccess && g.loadedValue.isAvailable && d(g.loadedValue.controller);
|
|
4757
|
-
}),
|
|
4775
|
+
}), C.initFlows.loop.publisher.subscribe((g) => {
|
|
4758
4776
|
g.isSuccess && g.loadedValue.isAvailable ? f({
|
|
4759
4777
|
isAvailable: !0,
|
|
4760
4778
|
isLoading: !1,
|
|
@@ -4766,12 +4784,12 @@ const ec = (t) => {
|
|
|
4766
4784
|
widget: null,
|
|
4767
4785
|
config: null
|
|
4768
4786
|
});
|
|
4769
|
-
}),
|
|
4787
|
+
}), C.initFlows.airwallexGooglePay.publisher.subscribe((g) => {
|
|
4770
4788
|
g.isSuccess && g.loadedValue.isAvailable && y((P) => ({
|
|
4771
4789
|
applePay: P.applePay,
|
|
4772
4790
|
googlePay: g.loadedValue
|
|
4773
4791
|
}));
|
|
4774
|
-
}),
|
|
4792
|
+
}), C.initFlows.airwallexApplePay.publisher.subscribe((g) => {
|
|
4775
4793
|
g.isSuccess && g.loadedValue.isAvailable && y((P) => ({
|
|
4776
4794
|
googlePay: P.googlePay,
|
|
4777
4795
|
applePay: {
|
|
@@ -4780,11 +4798,11 @@ const ec = (t) => {
|
|
|
4780
4798
|
}
|
|
4781
4799
|
}));
|
|
4782
4800
|
}), () => {
|
|
4783
|
-
|
|
4801
|
+
C.destroy();
|
|
4784
4802
|
};
|
|
4785
4803
|
}, []), !n)
|
|
4786
4804
|
return /* @__PURE__ */ Y(st, {});
|
|
4787
|
-
const
|
|
4805
|
+
const E = {
|
|
4788
4806
|
submit: n.submitCard,
|
|
4789
4807
|
submitWith: n.generalSubmit,
|
|
4790
4808
|
applePay: i.apple_pay,
|
|
@@ -4800,7 +4818,7 @@ const ec = (t) => {
|
|
|
4800
4818
|
airwallex: m,
|
|
4801
4819
|
loop: _
|
|
4802
4820
|
};
|
|
4803
|
-
return /* @__PURE__ */ Y(st, { children: o ? /* @__PURE__ */ Y(tr.Provider, { value: o, children: /* @__PURE__ */ Y("div", { id: Qt, className: t.className, children: t.children(
|
|
4821
|
+
return /* @__PURE__ */ Y(st, { children: o ? /* @__PURE__ */ Y(tr.Provider, { value: o, children: /* @__PURE__ */ Y("div", { id: Qt, className: t.className, children: t.children(E) }) }) : /* @__PURE__ */ Y(st, {}) });
|
|
4804
4822
|
}, rc = (t) => ({
|
|
4805
4823
|
formId: t.formId,
|
|
4806
4824
|
formHeight: t.formProperties.height,
|
|
@@ -4809,14 +4827,14 @@ const ec = (t) => {
|
|
|
4809
4827
|
registerIframe: t.registerIframe,
|
|
4810
4828
|
baseUrl: t.baseUrl
|
|
4811
4829
|
}), nt = (t) => {
|
|
4812
|
-
const { elementType: n, styles: r } = t, { formId: o, referrer: a, formHeight: i, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = tn(), u = n.toLowerCase(), [d, _] =
|
|
4830
|
+
const { elementType: n, styles: r } = t, { formId: o, referrer: a, formHeight: i, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = tn(), u = n.toLowerCase(), [d, _] = le(!1), f = en(null), m = it(() => r ? Is(r) : "", [r]), y = it(() => ({
|
|
4813
4831
|
border: "none",
|
|
4814
4832
|
width: "100%",
|
|
4815
4833
|
height: i
|
|
4816
4834
|
}), [i]), h = it(() => {
|
|
4817
4835
|
if (!s || !a) return "";
|
|
4818
|
-
const
|
|
4819
|
-
return
|
|
4836
|
+
const E = new URLSearchParams();
|
|
4837
|
+
return E.append("referer", a), E.append("styles", m), E.append("formId", o), E.append("secureToken", s), E.toString();
|
|
4820
4838
|
}, [m, o, a, s]);
|
|
4821
4839
|
return dt(() => _(!0), []), dt(() => {
|
|
4822
4840
|
!f.current || !d || c(n, f.current);
|
|
@@ -4842,4 +4860,4 @@ export {
|
|
|
4842
4860
|
Js as PayInState,
|
|
4843
4861
|
tn as useOpenPayElements
|
|
4844
4862
|
};
|
|
4845
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBBZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBldCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgYm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCB2biA9IHokMS5hcnJheShibiksIEVuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIENuID0geiQxLmFycmF5KEVuKSwgU24gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFdlID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBTbltuXSA/PyB0O1xufSwgUG4gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIGtuID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gV2UodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7V2UoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgQW4gPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEogPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChQbih0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHZuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8ga24obikgOiBDbi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IEFuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFdlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIEluID0gKHQsIG4sIGUpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgdC5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIHQuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgdC5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIHQuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgdC5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCB0KSkoeCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSh4KTsgY29uc3QgQSA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgUyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgVSA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIHQuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCB0LkVNQUlMID0gXCJlbWFpbFwiLCB0LlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIHQuQ0lUWSA9IFwiY2l0eVwiLCB0LlNUQVRFID0gXCJzdGF0ZVwiLCB0LkNPVU5UUlkgPSBcImNvdW50cnlcIiwgdC5BRERSRVNTID0gXCJhZGRyZXNzXCIsIHQuUEhPTkUgPSBcInBob25lXCIsIHQuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgdCkpKHAgfHwge30pO1xuY29uc3QgUnQgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBGdCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCB0KSkoRnQgfHwge30pO1xuY29uc3QgTXQgPSB6JDEubmF0aXZlRW51bShGdCksIER0ID0geiQxLnVuaW9uKFtSdCwgTXRdKTtcbnZhciBkZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKGRlIHx8IHt9KTtcbmNvbnN0IFJuID0geiQxLm5hdGl2ZUVudW0oZGUpLCBOZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogVSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBGbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBTLFxuICBleHBpcnk6IFMsXG4gIGN2YzogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBTLFxuICBjb2xvcjogUyxcbiAgZm9udEZhbWlseTogUyxcbiAgZm9udFNpemU6IFMsXG4gIGZvbnRXZWlnaHQ6IFMsXG4gIG1hcmdpbjogUyxcbiAgcGFkZGluZzogUyxcbiAgbGV0dGVyU3BhY2luZzogUyxcbiAgbGluZUhlaWdodDogUyxcbiAgaGlkZUljb246IFNcbn0pO1xuY29uc3QgcSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBNbiA9IHEuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIERuID0geiQxLm9iamVjdCh7IHR5cGU6IE1uIH0pLCBPbiA9IHEuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBUbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBPbixcbiAgZWxlbWVudFR5cGU6IE10LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBObiA9IHEuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIExuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE5uLFxuICBtZXNzYWdlOiBBLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVW4gPSBxLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIGpuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFVuLFxuICBlbGVtZW50VHlwZTogRHQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCB4biA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBBXG59KSwgJG4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogQSxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogUyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KE5lKVxufSksIHpuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBHbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgQ2UgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBBLFxuICBsYXN0TmFtZTogQSxcbiAgZW1haWw6IEEsXG4gIHppcENvZGU6IEEsXG4gIGNvdW50cnk6IEEsXG4gIHByb21vdGlvbkNvZGU6IFNcbn0pLCBWbiA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogQSxcbiAgemlwQ29kZTogQSxcbiAgY291bnRyeTogQSxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgYWRkcmVzczogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFNcbn0pLCBxbiA9IHEuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgWW4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogcW4sXG4gIHNlc3Npb25JZDogQSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBOZSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTXG59KS5leHRlbmQoQ2Uuc2hhcGUpLCBLbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIFduID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBIbiA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgRG4sXG4gIFRuLFxuICBMbixcbiAgam4sXG4gIHhuLFxuICAkbixcbiAgWW4sXG4gIEtuLFxuICBXbixcbiAgem4sXG4gIEduXG5dKSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogSG4sXG4gIG5vbmNlOiBBLFxuICBmb3JtSWQ6IEEsXG4gIGVsZW1lbnRJZDogQVxufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBBXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgdHQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBabiA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgQm4gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KFpuKVxufSksIFFuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBCblxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogTmUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogTmUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgUiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKFIgfHwge30pO1xuY29uc3QgWG4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBlciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIE90ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBVKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBVKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHRyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBuciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShGbiksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBVKHR0KSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBVKHokMS5hcnJheShPdCkpXG59KSwgVHQgPSAodCkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgcl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IFJ0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShyKSA/IG5bYV0gPSByIDogQXJyYXkuaXNBcnJheShyLl9lcnJvcnMpICYmIChuW2FdID0gci5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCBuO1xufSwgcnIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBhciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIExlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIGN0KCkgfHwgYXdhaXQgbnQoNTAwKTtcbiAgaWYgKCFjdCgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIGlyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IExlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKG4pLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgc3IgPSBhc3luYyAodCwgbiwgZSwgciwgYSkgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgTGUodCksIHMgPSBhcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiBuLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBudCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBzZXRUaW1lb3V0KG4sIHQpO1xufSksIGN0ID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIGNyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChuLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgciksIG4ocik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgcik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgZShyKTtcbiAgfVxufSksIGxyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgTGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChyLmVycm9yKVxuICAgIHRocm93IG4uY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke3IuZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIG4uY29tcGxldGUoXCJzdWNjZXNzXCIpLCByO1xufSwgdXIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgYSwgaSwgcywgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBMZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCByID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXM7XG4gIGlmIChyID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyByID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChpID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gKChjID0gKHMgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogcy5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBkciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgSCA9ICh0LCBuKSA9PiBBcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gcyA/IHsgLi4uYSwgW3NdOiBpLnZhbHVlIH0gOiBhO1xufSwge30pLCBwciA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpuLnBhcnNlKHQpO1xuICB9IGNhdGNoIChuKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgdCwgbiksIG47XG4gIH1cbn0sIG1yID0gYXN5bmMgKHQpID0+IHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgIXQpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0geyB0eXBlOiBcInBpbmdcIiB9LCBlID0gYXdhaXQgdC5zZW5kKG4pO1xuICAgIGlmIChlICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgbiksICExO1xuICB9XG59LCB5ciA9ICh0LCBuKSA9PiAhIXQgJiYgbiwgZyA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IGZyID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IE50ID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBnKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogZyh6JDEubnVtYmVyKCkpXG59KSwgTHQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IGcoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBociA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBfciA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBnKGhyKVxufSksIGZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGdyID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBpZDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoZ3IpLFxuICB0cmlhbF9zdGFydDogZyh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IGcoeiQxLnN0cmluZygpKVxufSksIFV0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFV0KSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogTnRcbn0pLCBFciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheSh2ciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KGJyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShVdClcbn0pLCBsdCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkod3IpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEVyKVxufSksIGp0ID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGx0LFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IGcobHQpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoTnQpXG59KSwgdXQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogZyh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTHQpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogX3IsXG4gIHN1YnNfcHJldmlldzogZyhqdCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KGZlKVxufSksIHh0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQodXQuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZCh1dC5zaGFwZSlcbl0pLCBDciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBTciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW3h0LCBDciwgU3JdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMdCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCAkdCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFByKTtcbmNvbnN0IGtyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgQXIgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIElyID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShBciksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBSciA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IElyLm9wdGlvbmFsKClcbn0pLmV4dGVuZChrci5zaGFwZSkuZXh0ZW5kKFJyLnNoYXBlKTtcbmNvbnN0IHp0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFZuLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZmUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgRnIgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogZyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBnKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBnKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IGcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IGcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogZyh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBNciA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBEciA9IHokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KSwgT3IgPSAodCkgPT4gdC5yZWR1Y2UoKG4sIGUpID0+IG4gKyBlLCAwKTtcbmZ1bmN0aW9uIFRyKHQsIG4pIHtcbiAgdmFyIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIGUgPyBlKHQsIG4pIDogdC5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gTnIodCwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSB0LmNvbnN0cnVjdG9yKTtcbiAgdmFyIGUgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgZSAmJiBlKHQsIG4pO1xufVxudmFyIExyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGEuX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChhW3NdID0gaVtzXSk7XG4gICAgfSwgdChlLCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIGUpIHtcbiAgICBpZiAodHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiICYmIGUgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICB0KG4sIGUpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChyLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgVXIgPSBmdW5jdGlvbih0KSB7XG4gIExyKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIGkgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIFRyKGksIGEucHJvdG90eXBlKSwgTnIoaSksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNsYXNzIEd0IGV4dGVuZHMgVXIge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgY29uc3QgZSA9IGAke24ubWVzc2FnZX1gO1xuICAgIHN1cGVyKGUpLCB0aGlzLnJlc3BvbnNlID0gbjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgTiA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCB0LnNlbmQobik7XG4gIGlmICh4cihyKSlcbiAgICB0aHJvdyBuZXcgR3Qocik7XG4gIGlmICghanIociwgZSkpIHtcbiAgICBjb25zdCBhID0gZS5zYWZlUGFyc2Uocik7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCBlLCBcIkFjdHVhbDpcIiwgciksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiByO1xufSwganIgPSAodCwgbikgPT4gbi5zYWZlUGFyc2UodCkuc3VjY2VzcywgeHIgPSAodCkgPT4gZnIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsICRyID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IE4odCwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwganQpLCBEID0gYXN5bmMgKHQpID0+IGF3YWl0IE4odCwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIHh0KSwgaGUgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgTih0LCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgenQpLCB6ciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBOKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IG4gfSwgRnIpLCBHciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBOKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IG4gfSwgenQpLCBHID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IE4odCwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgbnIpLCBWciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBOKHQsIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sICR0KSwgcXIgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgTihcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiBuIH0sXG4gIHRyXG4pLCBZciA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCAkcih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiBuLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBhID0gbmV3IFNldChyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBpID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IE9yKHIucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IGksXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgX2UgPSBhc3luYyAodCwgbiwgZSwgcikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgciA9IHIgfHwgdm9pZCAwO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBZcih0LCBuLCByKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIEtyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChyKSA9PiBOKHIsIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IG4gfSwgUW4pXG4gICAgKVxuICApO1xufSwgZHQgPSBhc3luYyAodCwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBOKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSwgdHQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgV3IgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgTih0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LCAkdCksIHJ0ID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IE4odCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IG4gfSwgdHQpLCBWdCA9IDFlMywgSHIgPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zb2xlLmxvZyhuKTtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IFZ0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgTihyLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgWG4pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBhKSwgYTtcbn0sIG90ID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IE4odCwgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgRHIpLCBxdCA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBOKFxuICAgICAgdCxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiBuIH0gfSxcbiAgICAgIE1yXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIEooZSkpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmZ1bmN0aW9uIFVlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgZWUgPSAodCkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdmFyIGUsIHI7XG4gIHRyeSB7XG4gICAgKHIgPSAoZSA9IG4uZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IHIuY2FsbChlKTtcbiAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhhLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoYS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBhLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGEucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7YX1gKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGkgPSBKKGEpLCBzID0gYXdhaXQgcXQobi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGkpO1xuICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGksIHMpO1xuICB9XG59LCBzZSA9ICh0KSA9PiBhc3luYyAobikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KG4pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogciB9ID0gUChcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IEooZSksIGkgPSBhd2FpdCBxdChuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIHIoaSwgYSwgZSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogaSB9O1xuICB9XG59LCBQID0gKHQpID0+IHtcbiAgY29uc3QgbiA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0FlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5yKTtcbiAgfSwgZSA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtBZS5yZWQuYm9sZChcIm9qcy9cIil9JHtBZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLnIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogbixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IG4sXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IGJpLCBlcnJfXzogSnIgfSA9IFAoXCJjb21tb25cIiksIFNlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgWSA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKHIpID0+IG4uc2FmZVBhcnNlKHIpLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgSnIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gbi5wYXJzZShlKTtcbn0sIFpyID0gKHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogdC5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogdC56aXBDb2RlLFxuICAgIGNvdW50cnk6IHQuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdC5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHQubGFzdE5hbWVcbn0pLCBqZSA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IG4gfSA9IFAodC5sb2dQcmVmaXgpLCBlID0gYXdhaXQgRCh0LmFueUNkZUNvbm5lY3Rpb24pLCByID0gU2UodC5jb25maXJtUmVzdWx0KTtcbiAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBuKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgVnIodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGUudG9rZW4sXG4gICAgICBwbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBuKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogZS50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiB0LnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogZS5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IGUuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydCh0LmFueUNkZUNvbm5lY3Rpb24sIGEpIH07XG4gIH1cbn0sIHsgbG9nX186IFl0LCBlcnJfXzogS3QgfSA9IFAoXCJjb21tb24tY2NcIiksIHRlID0gKHQsIG4sIGUpID0+IHtcbiAgaWYgKGUpIHtcbiAgICBZdChgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgZm9yIChjb25zdCBbYSwgaV0gb2YgT2JqZWN0LmVudHJpZXMoZSkpXG4gICAgICB0W2FdIHx8ICh0W2FdID0gaSk7XG4gIH1cbiAgY29uc3QgciA9IENlLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gci5lcnJvci5mb3JtYXQoKSwgaSA9IFR0KGEpO1xuICAgIGZvciAoY29uc3QgW3MsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgbihzLCBjLCBzKTtcbiAgICB0aHJvdyBLdChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgQnIgPSAodCwgbikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IER0LnNhZmVQYXJzZShyLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgS3QoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtyLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIHIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gYS5kYXRhO1xuICAgICAgICAgIG4oaSwgci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgWXQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHB0ID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEYsIGVycl9fOiBRciB9ID0gUChcInN0cmlwZS1saW5rXCIpLCBYciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBlbyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCB0byA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgRihcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgciA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBYcik7XG4gICAgRihcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IEQoYSksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBGKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBfZShhLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IGlyKHIubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgRihcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtwdH1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEYoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEYoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgaWYgKEYoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEYoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHkucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgRihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgeSk7XG4gICAgICBjb25zdCBtID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogeS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG0uZXJyb3IgPyAoUXIoXCJlcnJvclwiLCBtLmVycm9yKSwgbi5nZXQub25DaGVja291dEVycm9yKG0uZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEYoXCJwYXltZW50TWV0aG9kXCIsIG0ucGF5bWVudE1ldGhvZCksIEkuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBtLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBmLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IG9vKHB0KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIG5vID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgRihcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIEYoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHMgPSBybyhlLCBhLnN0cmlwZVBNKSwgYyA9IHRlKHMsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBGKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBoZShpLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogYS5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBjW3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBGKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBlby5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCBmID0gYXdhaXQgRChpKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEYoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEcoaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBTZShoKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBGKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBoID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1twLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHJ0KGksIGgpIH07XG4gICAgfVxuICB9XG4pLCBybyA9ICh0LCBuKSA9PiB7XG4gIHZhciBzLCBjLCBsLCB1LCBkO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtyLCAuLi5hXSA9ICgoYyA9IChzID0gbi5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVtwLkZJUlNUX05BTUVdID0gZVtwLkZJUlNUX05BTUVdIHx8IHIgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuTEFTVF9OQU1FXSA9IGVbcC5MQVNUX05BTUVdIHx8IGkgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSBuLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCBuLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbcC5aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdIHx8ICgodSA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbcC5DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSB8fCAoKGQgPSBuLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZC5jb3VudHJ5KSB8fCBcIlVTXCIsIEYoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBvbyA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIGFvID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgV3QgPSAodCkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke2FvfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgYSA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBhLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBpbyh0LCBuLCBlKSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBIcih0LCBlKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwoYSksIG4oaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBhID0gc2V0SW50ZXJ2YWwociwgVnQpO1xuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIHNvKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIHQuaG9zdC5yZW1vdmUoKSwgZSh7IHN0YXR1czogUi5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiB4ZSh0KSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiBlIH0gPSB0LCByID0gV3Qobik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSkgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIGEobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IGlvKHIuaWZyYW1lLCBpLCBuZXcgVVJMKGUpLm9yaWdpbiksIGMgPSBzbyh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IGFcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBIdCA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCB4ZSh0KTtcbiAgaWYgKG4uc3RhdHVzID09PSBSLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBSLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gUi5TVUNDRVNTICYmIFVlKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwgY28gPSAodCwgbikgPT4ge1xuICBjb25zdCBlID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIGU7XG59LCBsbyA9IGFzeW5jICh0LCBuLCBlLCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IFAoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBjbyh0LCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBxcihuLCBlKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0fSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKEoodSkpLCBjbGVhckludGVydmFsKGwpLCBzKEoodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogdW8sIGVycl9fOiBKdCB9ID0gUChcInBvY2t5dC1jY1wiKSwgcG8gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pLCBtbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSBwby5zYWZlUGFyc2UodCk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IEp0KHIpLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIFp0ID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiB1byhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgSnQoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtKKG4pfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIHlvID0gKHQsIG4pID0+IG5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldChuKSwgZm8gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgaG8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gbW8obiksIHIgPSBhd2FpdCBIdCh7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogWnQoci5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IF9vLCBlcnJfXzogYXQgfSA9IFAoXCJhaXJ3YWxsZXgtY2NcIiksIGdvID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgd28gPSAodCkgPT4ge1xuICBjb25zdCBuID0gZ28uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBhdChyKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBibyA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCB2byA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gX28oYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IGF0KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7SihuKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBFbyA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSB3byhuKSwgciA9IGF3YWl0IEh0KHsgdXJsOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSksIGEgPSB2byhyLmhyZWYgPz8gXCJcIiksIGkgPSBlW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaSAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpfSkuYDtcbiAgICB0aHJvdyBhdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogZVtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgQnQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIFF0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBDbyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgU28gPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogbWUsIGVycl9fOiBFZSB9ID0gUChcImFkeWVuLWNjXCIpLCBQbyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IENvLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBYdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwga28gPSAodCkgPT4ge1xuICBjb25zdCBuID0gUG8uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2VzcylcbiAgICB0aHJvdyBFZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgbmV3IEVycm9yKFh0KTtcbiAgcmV0dXJuIG4uZGF0YTtcbn0sIEFvID0gKHQpID0+IEpTT04ucGFyc2UodCksIG10ID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIElvID0gYXN5bmMgKCkgPT4ge1xuICBtZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCB0ID0gMDsgdCA8IDEwOyB0KyspXG4gICAgbXQoKSB8fCBhd2FpdCBudCg1MDApO1xuICBpZiAoIW10KCkpXG4gICAgdGhyb3cgRWUoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKFh0KTtcbiAgcmV0dXJuIG1lKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgUm8gPSAodCkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IG4sIGxvY2FsZTogZSwgY291bnRyeUNvZGU6IHIsIGNvbXBvbmVudDogYSwgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSB0LCBjID0gQW8obltcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBtZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBtZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKG0pID0+IHtcbiAgICAgIEVlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIG0pLCBsKHsgc3RhdHVzOiBSLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9IChtKSA9PiB7XG4gICAgICBFZShcIkFkeWVuIGVycm9yOlwiLCBtKSwgbCh7IHN0YXR1czogUi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGggPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBSLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGgpO1xuICAgIGNvbnN0IHkgPSAobSwgXywgdikgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgbCh7IHN0YXR1czogUi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogbSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIElvKCkudGhlbihcbiAgICAgIChtKSA9PiBtKHtcbiAgICAgICAgY2xpZW50S2V5OiBuW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG5bXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiBlLFxuICAgICAgICBjb3VudHJ5Q29kZTogcixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigobSkgPT4ge1xuICAgICAgbS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIEZvID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCBlID0gdCA/PyBuLCByID0gU28uc2FmZVBhcnNlKGUpO1xuICByZXR1cm4gci5zdWNjZXNzID8gKG1lKGBSZXNvbHZlZCBsb2NhbGU6ICR7ci5kYXRhfWApLCByLmRhdGEpIDogKEVlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIE1vID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBEbyA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBrbyhuKSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBXdChcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IFJvKHtcbiAgICBoZWFkZXJzOiByLFxuICAgIGxvY2FsZTogRm8oZSksXG4gICAgY291bnRyeUNvZGU6IHQsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBSLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gUi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gUi5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBtZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIFVlKGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IEMsIGVycl9fOiB5dCB9ID0gUChcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogZnQgfSA9IFAoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IE9vID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgQyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuIH0pO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBEKGkpO1xuICAgIEMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gdGUoZSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIEMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgS3IoYS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoQnIoZCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBDKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgV3IoaSwgbCk7XG4gICAgICAgIHJldHVybiBDKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Zi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEMoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgZHQoaSwgbCk7XG4gICAgICAgIHJldHVybiBDKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBHdCAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIEMoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBDKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGYgPSBmbyhkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoZikge1xuICAgICAgICAgIEMoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IGhvKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBDKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBFbyh0LmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNbyhkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgQyhcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IERvKFxuICAgICAgICAgICAgZVtwLkNPVU5UUlldLFxuICAgICAgICAgICAgZC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgcy5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSB3O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCB6cihpLCBsKTtcbiAgICAgICAgQyhcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBtKTtcbiAgICAgICAgY29uc3QgXyA9ICgodSA9IGQucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IHVbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIGYgPyBDKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBfID8gKEMoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCBqbyhtKSkgOiAoQyhcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IFVvKG0sIHQuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCB2ID0gbS5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgQyhg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHt2fV1gKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgRyhpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogdlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIEMoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgdyk7XG4gICAgICAgICAgY29uc3QgYiA9IFNlKHcpO1xuICAgICAgICAgIHJldHVybiBDKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Yi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBDKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke18gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IGR0KGksIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogdixcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IF9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gQyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyB5dChcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgeXQoZCksIGQ7XG4gICAgfVxuICB9XG4pLCBUbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gcnIucGFyc2Uobik7XG59LCBObyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgTG8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gTm8uaW5jbHVkZXMoZS50eXBlKSk7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGVyLnBhcnNlKG4pO1xufSwgVW8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gTG8odCk7XG4gIGlmIChlLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIEMoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgQyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IHhlKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogbiB9KTtcbiAgaWYgKEMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBSLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IFIuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIGpvID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgbiA9IFRvKHQpO1xuICBmdChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgdXIobiksIGZ0KFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgViA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuVi5FbnVtLnN0cmlwZTtcbmNvbnN0IHsgbG9nX186IFQsIGVycl9fOiB4byB9ID0gUChcInN0cmlwZS1wclwiKSwgJG8gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHpvID0gc2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIFQoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCBlID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRvKTtcbiAgICBUKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBEKHIpLCBpID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgVChcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgX2UociwgYS50b2tlbiwgaSwgdm9pZCAwKSwgYyA9IGF3YWl0IHNyKFxuICAgICAgZS5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgVChcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiB4byhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgVChcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIGYpID0+IEkuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBIKHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBmID09IG51bGwgPyB2b2lkIDAgOiBmLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBWLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgR28gPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IGlcbiAgfSkgPT4ge1xuICAgIGlmIChUKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGkucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG0gPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBUKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBtKSwgcW8oYywgbS5hbW91bnQsIG0ucGVuZGluZywgbS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KTtcbiAgICB9XG4gICAgVChcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgY3IoYyk7XG4gICAgVChcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIFQoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBWbyhlLCBsKSwgZCA9IHRlKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBUKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IEdyKHMsIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogblxuICAgIH0pLCBoID0gWW8oZik7XG4gICAgVChcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGxyKGgsIGwpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBEKHMpO1xuICAgIGlmICh5Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgVChcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCBHKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBTZShtKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBUKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydChzLCBtKSB9O1xuICAgIH1cbiAgfVxuKSwgVm8gPSAodCwgbikgPT4ge1xuICB2YXIgbCwgdSwgZCwgZjtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbciwgLi4uYV0gPSAoKHUgPSAobCA9IG4ucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBpID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIHMgPSAoZiA9IChkID0gbi5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogZC5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBmLmFkZHJlc3MsIGMgPSBuLnNoaXBwaW5nQWRkcmVzcztcbiAgcmV0dXJuIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgbi5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIiwgVChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIHFvID0gKHQsIG4sIGUsIHIpID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IG4uYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogbi5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiByXG4gIH0pO1xufSwgWW8gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gb3IucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogSywgZXJyX186IGh0IH0gPSBQKFwicG9ja3l0LXBheXBhbFwiKSwgS28gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IFdvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGosIGNlO1xuICAgIEsoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRChpKTtcbiAgICBLKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gS28ucGFyc2Uobik7XG4gICAgSyhcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MsIHUgPSB0ZShcbiAgICAgIGUsXG4gICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IFpyKHUpO1xuICAgIEsoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCBmID0gdjQoKSwgaCA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBoLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBoID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChqID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBqLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmXG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIG0gPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCB0LmJhc2VVcmwpLnRvU3RyaW5nKCksIF8gPSBidG9hKEpTT04uc3RyaW5naWZ5KHkpKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBfXG4gICAgfSksIHcgPSBgJHttfT8ke3YudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoY2UgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGNlLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IEsoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgbnQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBLKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBLKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IGIgPSBhd2FpdCBsbyhcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBpLFxuICAgICAgZixcbiAgICAgIHdcbiAgICApO1xuICAgIEsoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgYik7XG4gICAgY29uc3QgRSA9IFp0KGIuaHJlZiksIGsgPSB5byhiLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWspXG4gICAgICB0aHJvdyBodChcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgYi5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIEsoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7RX1gKTtcbiAgICBjb25zdCBPID0gYXdhaXQgRyhpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogRSxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGggPyBrIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKEsoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTyksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTy5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIU8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBodChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIE8pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgJGUgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogbixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiByLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgaDtcbiAgY29uc3QgYyA9ICgoZiA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChoID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBoLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IHIgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogaSAhPSBudWxsICYmIGkucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBpICE9IG51bGwgJiYgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIGVuID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IG4obmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgR29vZ2xlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSk7XG5sZXQgcWUgPSBudWxsO1xuY29uc3QgdG4gPSAodCkgPT4gdCA9PT0gZXQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIHplID0gKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IHRuKHQpO1xuICByZXR1cm4gcWUgPT09IG51bGwgJiYgKHFlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IG4ubWVyY2hhbnRJbmZvXG4gIH0pKSwgcWU7XG59LCBIbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIG4gPyBPdC5wYXJzZShuKSA6IG51bGw7XG59LCBubiA9ICh0LCBuKSA9PiB7XG4gIHZhciBhLCBpLCBzLCBjO1xuICBjb25zdCBlID0geyAuLi50IH0sIHIgPSAoaSA9IChhID0gbi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChyKSB7XG4gICAgY29uc3QgW2wsIC4uLnVdID0gKChjID0gKHMgPSByLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBzLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGQgPSB1LmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCBuLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IHIuY291bnRyeUNvZGUgfHwgXCJVU1wiLCBlW3AuQUREUkVTU10gPSBlW3AuQUREUkVTU10gfHwgci5hZGRyZXNzMSB8fCBcIlwiLCBlW3AuQ0lUWV0gPSBlW3AuQ0lUWV0gfHwgci5sb2NhbGl0eSB8fCBcIlwiLCBlW3AuWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSB8fCByLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCBlW3AuU1RBVEVdID0gZVtwLlNUQVRFXSB8fCByLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCBlW3AuRklSU1RfTkFNRV0gPSBlW3AuRklSU1RfTkFNRV0gfHwgbCB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5MQVNUX05BTUVdID0gZVtwLkxBU1RfTkFNRV0gfHwgZCB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGU7XG59LCB7IGxvZ19fOiB6LCBlcnJfXzogbGUgfSA9IFAoXCJhd3gtZ29vZ2xlLXBheVwiKSwgSm8gPSBzZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGYsIGg7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFF0KTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICB6KFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgYSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGxlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgZTtcbiAgICBpZiAoeihcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IGVuKCksICEoKGggPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIGguYXBpKSlcbiAgICAgIHJldHVybiBsZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIGU7XG4gICAgaWYgKHRuKHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gbGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCBlO1xuICAgIHooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHkgPSAkZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeyByZXN1bHQ6IG0gfSA9IGF3YWl0IHplKHQuYmFzZVVybCwgeSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB5XG4gICAgICApO1xuICAgICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4geihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIHJldHVybiBsZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHkpLCBlO1xuICAgIH1cbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgX2UocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBJLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGxlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBabyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmLCBoLCB5LCBtLCBfLCB2LCB3O1xuICAgIHooXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBRdCksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9ICRlKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IHplKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBiKTtcbiAgICAgIGNvbnN0IEUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGsgPSBhd2FpdCBEKEUpLCBPID0gbm4oZSwgYiksIGogPSB0ZShcbiAgICAgICAgTyxcbiAgICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBjZSA9IChoID0gKGYgPSBiLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3Qgd24gPSBhd2FpdCBoZShFLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGpbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBqW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGpbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBqW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IGpbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwga2UgPSBIbyh3bik7XG4gICAgICB6KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwga2UpO1xuICAgICAgbGV0IHJlID0gYXdhaXQgRyhFLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogay50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDoga2UgPT0gbnVsbCA/IHZvaWQgMCA6IGtlLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByZSk7XG4gICAgICBsZXQgVmUgPSAobSA9ICh5ID0gcmUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogeVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uaWQ7XG4gICAgICBjb25zdCBvZSA9IChfID0gcmUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogXy5maW5kKFxuICAgICAgICAoZ2UpID0+IGdlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG9lICYmIG9lLnJlZGlyZWN0X3VybCkge1xuICAgICAgICB6KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgb2UpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogZ2UgfSA9IGF3YWl0IHhlKHtcbiAgICAgICAgICB1cmw6IG9lLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh6KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtnZX1dYCksIGdlID09PSBSLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKGdlID09PSBSLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAob2UgJiYgIVZlICYmIChyZSA9IGF3YWl0IEcoRSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGsudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBvZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogb2UuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgeihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHJlKSwgVmUgPSAodyA9ICh2ID0gcmUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcuaWQpLCAhVmUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGplKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogRSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGosXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHJlLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChiKSB7XG4gICAgICB0aHJvdyBsZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBiKSwgbmV3IEVycm9yKChiID09IG51bGwgPyB2b2lkIDAgOiBiLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHJuID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLCBlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gbihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBvbiA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBuLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIHIgPSBuLmJpbGxpbmdDb250YWN0LCBhID0gbi5zaGlwcGluZ0NvbnRhY3QsIGkgPSB7IC4uLnQgfTtcbiAgcmV0dXJuIChlIHx8IHIgfHwgYSkgJiYgKGlbcC5FTUFJTF0gPSBpW3AuRU1BSUxdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmVtYWlsQWRkcmVzcykgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIGlbcC5DT1VOVFJZXSA9IGlbcC5DT1VOVFJZXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jb3VudHJ5Q29kZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIGlbcC5aSVBfQ09ERV0gPSBpW3AuWklQX0NPREVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnBvc3RhbENvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLnBvc3RhbENvZGUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgaVtwLkZJUlNUX05BTUVdID0gaVtwLkZJUlNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdpdmVuTmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5naXZlbk5hbWUpIHx8IFwiX09QX1VOS05PV05cIiwgaVtwLkxBU1RfTkFNRV0gPSBpW3AuTEFTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5mYW1pbHlOYW1lKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5mYW1pbHlOYW1lKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5mYW1pbHlOYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIpLCBpO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBhbiA9ICh7XG4gIHRvdGFsOiB0LFxuICBwcmVmaWxsOiBuXG59KSA9PiB7XG4gIHZhciByO1xuICBpZiAobi5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiB0LmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke24udG9rZW59YCwgZXQpLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCBlID0gKHIgPSBuLmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdO1xuICBpZiAoZSlcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7bi50b2tlbn1gXG4gICAgfTtcbn0sIHNuID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogdCxcbiAgaW5pdGlhbFByZXZpZXc6IG4sXG4gIHByZWZpbGw6IGUsXG4gIGRlZmF1bHRMYWJlbDogciA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmN1cnJlbmN5KSA/PyBuLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGFiZWwpID8/IHIgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogdCAhPSBudWxsICYmIHQucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogUmUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gQm8odCwgbikge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSAoYXdhaXQgb3Qobi5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogbi5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIGEgPSByID09IG51bGwgPyB2b2lkIDAgOiByLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBuLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuLnNlc3Npb24uYWJvcnQoKSwgZTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gUW8odCwgbikge1xuICBpZiAoIXQucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgUmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCB0KTtcbiAgY29uc3QgeyBzdGF0dXM6IGUgfSA9IGF3YWl0IHhlKHtcbiAgICB1cmw6IHQucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IG4uYmFzZVVybFxuICB9KTtcbiAgaWYgKFJlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtlfV1gKSwgZSA9PT0gUi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChlID09PSBSLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IHIgPSBhd2FpdCBHKG4uY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IHQudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdC5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gUmUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByKSwgcjtcbn1cbmFzeW5jIGZ1bmN0aW9uIFhvKHQsIG4pIHtcbiAgdmFyIGUsIHIsIGEsIGksIHM7XG4gIHRyeSB7XG4gICAgY29uc3QgYyA9IHQucGF5bWVudCwgbCA9IG9uKG4ubm9uQ2RlRm9ybUlucHV0cywgYyksIHUgPSB0ZShcbiAgICAgIGwsXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBoID0gKGF3YWl0IGhlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghaClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IHkgPSBhd2FpdCBHKG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBoLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFJlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeSk7XG4gICAgbGV0IG0gPSAociA9IChlID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogci5pZDtcbiAgICBjb25zdCBfID0gKGEgPSB5LnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmluZChcbiAgICAgICh3KSA9PiB3LnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoXyAhPSBudWxsICYmIF8ucmVkaXJlY3RfdXJsICYmIF8uY29uc2VudF9pZCAmJiBfLnRoZWlyX3BtX2lkICYmICh5ID0gYXdhaXQgUW8oXywgbiksIG0gPSAocyA9IChpID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZCksICFtKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh2KSwgamUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbi5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IHksXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHVlLCBlcnJfXzogSGUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpLCBlYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQnQpO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiBlO1xuICAgIHVlKFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBybigpLCB1ZShcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICByZXR1cm4gSGUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIGYpLCBlO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB1ZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIGU7XG4gICAgaWYgKHVlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB1ZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgZTtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBfZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEkuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBIKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBIZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCB0YSA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB2O1xuICAgIGNvbnN0IGkgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQnQpLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSByLCBsID0gdC5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB7IGN1cnJlbmN5Q29kZTogZiwgdG90YWw6IGggfSA9IHNuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHYgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBmLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWw6IGgsXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogYW4oe1xuICAgICAgICB0b3RhbDogaCxcbiAgICAgICAgcHJlZmlsbDogdVxuICAgICAgfSksXG4gICAgICAuLi4ocyA9PSBudWxsID8gdm9pZCAwIDogcy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH0sIG0gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBfID0ge1xuICAgICAgc2Vzc2lvbjogbSxcbiAgICAgIGNvbm5lY3Rpb246IHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBpLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogdC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYSxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogciA9PSBudWxsID8gdm9pZCAwIDogci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgodywgYikgPT4ge1xuICAgICAgY29uc3QgRSA9ICgpID0+IHtcbiAgICAgICAgdWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIG0ub25jYW5jZWwgPSBFLCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgQm8oaywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKE8pIHtcbiAgICAgICAgICBiKE8pO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBrID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmggfVxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihrKTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgTyA9IGF3YWl0IFhvKGssIF8pO1xuICAgICAgICAgIHcoTyk7XG4gICAgICAgIH0gY2F0Y2ggKE8pIHtcbiAgICAgICAgICBiKE8pO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEhlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIHc7XG4gICAgfSk7XG4gIH1cbiksIG5hID0gMSwgcmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IEwsIGVycl9fOiBjbiB9ID0gUChcImxvb3AtY3J5cHRvXCIpLCBvYSA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBBLFxuICBsb29wTGFzdE5hbWU6IEEsXG4gIGxvb3BFbWFpbDogQSxcbiAgW3AuUFJPTU9USU9OX0NPREVdOiBTXG59KSwgYWEgPSAodCwgbiwgZSkgPT4ge1xuICBjb25zdCByID0gb2Euc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGEgPSByLmVycm9yLmZvcm1hdCgpLCBpID0gVHQoYSk7XG4gICAgZm9yIChjb25zdCBbcywgY10gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICBuKHMsIGMsIHMpO1xuICAgIHRocm93IGNuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBpYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBMKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHJhKTtcbiAgICBMKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksIEwoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSBhd2FpdCBEKHQuYW55Q2RlQ29ubmVjdGlvbiksIHIgPSBhd2FpdCBvdCh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgfSk7XG4gICAgaWYgKGUubW9kZSAhPT0gXCJzZXR1cFwiICYmICFuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKGUuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke2UuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7bi5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghciB8fCAhci5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IGEgPSByLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBpO1xuICAgIGUubW9kZSA9PT0gXCJzZXR1cFwiID8gaSA9IG5hIDogaSA9IGUuYW1vdW50X3RvdGFsX2F0b20gKiBhLnRva2VuX3ByaWNlO1xuICAgIGNvbnN0IHMgPSBpLCBjID0gYS5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHY0KCksIHUgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50OiBzLFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudDogYyxcbiAgICAgIGN1c3RvbWVyUmVmSWQ6IGxcbiAgICB9LCBkID0ge1xuICAgICAgYXBpS2V5OiBuLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBuLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IG4ubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogbi5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB1LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGRcbiAgICB9O1xuICB9XG4pLCBzYSA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEwoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgTChcImNvbnRleHRcIiwgdCksIEwoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgbiksIEwoXCJub25DZGVGb3JtSW5wdXRzXCIsIGUpLCBMKFwiZmxvd0NhbGxiYWNrc1wiLCByKSwgTChcImN1c3RvbVBhcmFtc1wiLCBhKTtcbiAgICBjb25zdCBpID0gYWEoZSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRCh0LmFueUNkZUNvbm5lY3Rpb24pLCBsID0gYy5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBhd2FpdCBoZSh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogaS5sb29wRW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogaS5sb29wRmlyc3ROYW1lLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogaS5sb29wTGFzdE5hbWUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGwsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGwgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgRyhzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5zdWNjZXNzID8gYS5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCA6IHZvaWQgMCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGMubW9kZSAhPT0gXCJzZXR1cFwiID8gdS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGEuc3VjY2VzcyA/IGEuY3VzdG9tZXIgOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfcGF5aW46IGEuc3VjY2VzcyA/IGEucGF5aW4gOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfZmFpbHVyZV9kZXRhaWxzOiBhLnN1Y2Nlc3MgPyB2b2lkIDAgOiBhLmZhaWx1cmVEZXRhaWxzLFxuICAgICAgICBsb29wX3N1Y2Nlc3M6IGEuc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChMKGBDb25maXJtIHJlc3VsdDogJHtkfWApLCBjLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgTChcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIiksIEwoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgZCk7XG4gICAgICBjb25zdCBmID0gU2UoZCk7XG4gICAgICByZXR1cm4gTChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBmIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChMKFwiRG9pbmcgY2hlY2tvdXQuLi5cIiksICFkLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBjbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBkLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcbmFzeW5jIGZ1bmN0aW9uIGNhKHQsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IG90KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogbi5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIGEgPSByID09IG51bGwgPyB2b2lkIDAgOiByLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBuLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuLnNlc3Npb24uYWJvcnQoKSwgZTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gbGEodCwgbikge1xuICB2YXIgZSwgcjtcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gdC5wYXltZW50LCBpID0gb24obi5ub25DZGVGb3JtSW5wdXRzLCBhKSwgcyA9IHRlKGksIG4uZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGF3YWl0IGhlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1twLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1twLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH0sIGwgPSBhd2FpdCBHKG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBjXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCEoKHIgPSAoZSA9IGwucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChkKSwgamUoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICBjb25maXJtUmVzdWx0OiBsLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgaSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KGkpLCBhO1xuICB9XG59XG5jb25zdCBsbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHVuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzogd2UsIGVycl9fOiBKZSB9ID0gUChcImF1dGhuZXQtYXBwbGVwYXlcIiksIHVhID0gc2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgbG4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiBlO1xuICAgIHdlKFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBybigpLCB3ZShcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICByZXR1cm4gSmUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIGYpLCBlO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB3ZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIGU7XG4gICAgaWYgKCFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gd2UoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIGU7XG4gICAgaWYgKCFyLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgX2UocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBJLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSCh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgSmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgbi5nZXQub25DaGVja291dEVycm9yKChoID09IG51bGwgPyB2b2lkIDAgOiBoLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIGRhID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gciwgYyA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBsbiksIHsgY3VycmVuY3lDb2RlOiBsLCB0b3RhbDogdSB9ID0gc24oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgZGVmYXVsdExhYmVsOiAodiA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB2LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgZCA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgZiA9IGF3YWl0IEQoZCksIGggPSBmLm1vZGUgPT09IFwic2V0dXBcIiwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGwsXG4gICAgICB0b3RhbDogdSxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1wic3VwcG9ydHMzRFNcIiwgXCJzdXBwb3J0c0NyZWRpdFwiLCBcInN1cHBvcnRzRGViaXRcIl0sXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogYW4oe1xuICAgICAgICB0b3RhbDogdSxcbiAgICAgICAgcHJlZmlsbDogZlxuICAgICAgfSksXG4gICAgICAuLi4ocyA9PSBudWxsID8gdm9pZCAwIDogcy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH0sIG0gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBfID0ge1xuICAgICAgc2Vzc2lvbjogbSxcbiAgICAgIGNvbm5lY3Rpb246IHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBuLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogZixcbiAgICAgIGlzU2V0dXBNb2RlOiBoLFxuICAgICAgYmFzZVVybDogdC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCh3LCBiKSA9PiB7XG4gICAgICBtLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICB3ZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIGIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChFKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgY2EoRSwgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICBiKGspO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBFID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB5LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEUpO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBrID0gYXdhaXQgbGEoRSwgXyk7XG4gICAgICAgICAgdyhrKTtcbiAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgIGIoayk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgodykgPT4ge1xuICAgICAgdGhyb3cgSmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB3KSwgdztcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogaWUsIGVycl9fOiBiZSB9ID0gUChcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBwYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICB2YXIgZCwgZjtcbiAgICBpZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IGUgPSB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdW4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiBlO1xuICAgIGllKFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgYSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGJlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgZTtcbiAgICBpZiAoaWUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uXCIpLCBhd2FpdCBlbigpLCAhKChmID0gKGQgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZC5wYXltZW50cykgIT0gbnVsbCAmJiBmLmFwaSkpXG4gICAgICByZXR1cm4gYmUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBlO1xuICAgIGllKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoID0gJGUoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCB6ZSh0LmJhc2VVcmwsIGgpLmlzUmVhZHlUb1BheShcbiAgICAgICAgaFxuICAgICAgKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIGllKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIGU7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgcmV0dXJuIGJlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgaCksIGU7XG4gICAgfVxuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBEKGkpLCBjID0gcy5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCBfZShpLCBzLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKGgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEkuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSCh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uaCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgYmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgeSksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoeSA9PSBudWxsID8gdm9pZCAwIDogeS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBtYSA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmLCBoLCB5LCBtO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IGEsIGwgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdW4pLm1ldGFkYXRhLCB1ID0gJGUoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBkID0gemUodC5iYXNlVXJsLCB1KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9IGF3YWl0IGQubG9hZFBheW1lbnREYXRhKHUpO1xuICAgICAgaWUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBfKTtcbiAgICAgIGNvbnN0IHYgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHcgPSBhd2FpdCBEKHYpLCBiID0gbm4obiwgXyksIEUgPSB0ZShiLCByLmdldC5vblZhbGlkYXRpb25FcnJvciksIGsgPSAoaCA9IChmID0gXy5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW47XG4gICAgICBpZiAoIWspXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgTyA9IGF3YWl0IGhlKHYsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogZS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogRVtwLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IEVbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogRVtwLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IEVbcC5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogRVtwLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgTyk7XG4gICAgICBjb25zdCBqID0gYXdhaXQgRyh2LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdy50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogZS5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGspXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghKChtID0gKHkgPSBqLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBtLmlkKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gamUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IEUsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGosXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHRocm93IGJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCBuZXcgRXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgdmUgPSAodCwgbiwgZSkgPT4ge1xuICBjb25zdCByID0gdC5maWx0ZXIoKGEpID0+IHtcbiAgICBjb25zdCBpID0gZSA9PT0gdm9pZCAwID8gITAgOiBhLnByb2Nlc3Nvcl9uYW1lID09PSBlLCBzID0gYS5wcm92aWRlciA9PT0gbjtcbiAgICByZXR1cm4gaSAmJiBzO1xuICB9KTtcbiAgaWYgKHIubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke259JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAoci5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke259JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gclswXTtcbn0sIEkgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogT29cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogem8sXG4gICAgcnVuOiBHb1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogdG8sXG4gICAgcnVuOiBub1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBXb1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogSm8sXG4gICAgcnVuOiBab1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGVhLFxuICAgIHJ1bjogdGFcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogaWEsXG4gICAgcnVuOiBzYVxuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IHVhLFxuICAgIHJ1bjogZGFcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogcGEsXG4gICAgcnVuOiBtYVxuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBaZSA9IGZ1bmN0aW9uKHQsIG4pIHtcbiAgcmV0dXJuIFplID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgcikge1xuICAgIGUuX19wcm90b19fID0gcjtcbiAgfSB8fCBmdW5jdGlvbihlLCByKSB7XG4gICAgZm9yICh2YXIgYSBpbiByKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgYSkgJiYgKGVbYV0gPSByW2FdKTtcbiAgfSwgWmUodCwgbik7XG59O1xuZnVuY3Rpb24gbmUodCwgbikge1xuICBpZiAodHlwZW9mIG4gIT0gXCJmdW5jdGlvblwiICYmIG4gIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcobikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBaZSh0LCBuKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IG4gPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKG4pIDogKGUucHJvdG90eXBlID0gbi5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24geWEodCwgbiwgZSwgcikge1xuICBmdW5jdGlvbiBhKGkpIHtcbiAgICByZXR1cm4gaSBpbnN0YW5jZW9mIGUgPyBpIDogbmV3IGUoZnVuY3Rpb24ocykge1xuICAgICAgcyhpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKGksIHMpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUoci5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIudGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBzKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IGkoZC52YWx1ZSkgOiBhKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKHIgPSByLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkbih0LCBuKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGlbMF0gJiAxKSB0aHJvdyBpWzFdO1xuICAgIHJldHVybiBpWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCByLCBhLCBpLCBzID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gcy5uZXh0ID0gYygwKSwgcy50aHJvdyA9IGMoMSksIHMucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKHNbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgcztcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAocikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHMgJiYgKHMgPSAwLCB1WzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAociA9IDEsIGEgJiYgKGkgPSB1WzBdICYgMiA/IGEucmV0dXJuIDogdVswXSA/IGEudGhyb3cgfHwgKChpID0gYS5yZXR1cm4pICYmIGkuY2FsbChhKSwgMCkgOiBhLm5leHQpICYmICEoaSA9IGkuY2FsbChhLCB1WzFdKSkuZG9uZSkgcmV0dXJuIGk7XG4gICAgICBzd2l0Y2ggKGEgPSAwLCBpICYmICh1ID0gW3VbMF0gJiAyLCBpLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaSA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBhID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpID0gZS50cnlzLCAhKGkgPSBpLmxlbmd0aCA+IDAgJiYgaVtpLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFpIHx8IHVbMV0gPiBpWzBdICYmIHVbMV0gPCBpWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IGlbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBpWzFdLCBpID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSAmJiBlLmxhYmVsIDwgaVsyXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IGlbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaVsyXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IG4uY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBhID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgciA9IGkgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiB5ZSh0KSB7XG4gIHZhciBuID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gbiAmJiB0W25dLCByID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgciA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtyKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihuID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gRGUodCwgbikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIHIgPSBlLmNhbGwodCksIGEsIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKGEgPSByLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKGUgPSByLnJldHVybikgJiYgZS5jYWxsKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBPZSh0LCBuLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciByID0gMCwgYSA9IG4ubGVuZ3RoLCBpOyByIDwgYTsgcisrKVxuICAgIChpIHx8ICEociBpbiBuKSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLCAwLCByKSksIGlbcl0gPSBuW3JdKTtcbiAgcmV0dXJuIHQuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobikpO1xufVxuZnVuY3Rpb24gcGUodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHBlID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IHBlKHQpO1xufVxuZnVuY3Rpb24gZmEodCwgbiwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IGUuYXBwbHkodCwgbiB8fCBbXSksIGEsIGkgPSBbXTtcbiAgcmV0dXJuIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIHMpLCBhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBhO1xuICBmdW5jdGlvbiBzKHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtKS50aGVuKHksIGYpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyh5LCBtKSB7XG4gICAgclt5XSAmJiAoYVt5XSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCB3KSB7XG4gICAgICAgIGkucHVzaChbeSwgXywgdiwgd10pID4gMSB8fCBsKHksIF8pO1xuICAgICAgfSk7XG4gICAgfSwgbSAmJiAoYVt5XSA9IG0oYVt5XSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKHksIG0pIHtcbiAgICB0cnkge1xuICAgICAgdShyW3ldKG0pKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBoKGlbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KHkpIHtcbiAgICB5LnZhbHVlIGluc3RhbmNlb2YgcGUgPyBQcm9taXNlLnJlc29sdmUoeS52YWx1ZS52KS50aGVuKGQsIGYpIDogaChpWzBdWzJdLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBkKHkpIHtcbiAgICBsKFwibmV4dFwiLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBmKHkpIHtcbiAgICBsKFwidGhyb3dcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gaCh5LCBtKSB7XG4gICAgeShtKSwgaS5zaGlmdCgpLCBpLmxlbmd0aCAmJiBsKGlbMF1bMF0sIGlbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBoYSh0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiBuID8gbi5jYWxsKHQpIDogKHQgPSB0eXBlb2YgeWUgPT0gXCJmdW5jdGlvblwiID8geWUodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCByKFwibmV4dFwiKSwgcihcInRocm93XCIpLCByKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gcihpKSB7XG4gICAgZVtpXSA9IHRbaV0gJiYgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgcyA9IHRbaV0ocyksIGEoYywgbCwgcy5kb25lLCBzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYShpLCBzLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgaSh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIHMpO1xuICB9XG59XG5mdW5jdGlvbiBNKHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIEdlKHQpIHtcbiAgdmFyIG4gPSBmdW5jdGlvbihyKSB7XG4gICAgRXJyb3IuY2FsbChyKSwgci5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChuKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgWWUgPSBHZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKHIsIGEpIHtcbiAgICAgIHJldHVybiBhICsgMSArIFwiKSBcIiArIHIudG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBUZSh0LCBuKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yobik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgUGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBuLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiwgZSwgciwgYSwgaTtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIHMgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAocylcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkocykpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSB5ZShzKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICBuID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcy5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKE0oZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgaSA9IF8gaW5zdGFuY2VvZiBZZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgZiA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoZikge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBoID0geWUoZiksIHkgPSBoLm5leHQoKTsgIXkuZG9uZTsgeSA9IGgubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbSA9IHkudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBfdChtKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgaSA9IGkgPz8gW10sIF8gaW5zdGFuY2VvZiBZZSA/IGkgPSBPZShPZShbXSwgRGUoaSkpLCBEZShfLmVycm9ycykpIDogaS5wdXNoKF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHIgPSB7IGVycm9yOiBfIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHkgJiYgIXkuZG9uZSAmJiAoYSA9IGgucmV0dXJuKSAmJiBhLmNhbGwoaCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkpXG4gICAgICAgIHRocm93IG5ldyBZZShpKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZTtcbiAgICBpZiAobiAmJiBuICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBfdChuKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobiBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAobi5jbG9zZWQgfHwgbi5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIG4uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSBuIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhuKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChuKSwgZSkgOiBlID8gW2UsIG5dIDogbjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSBuID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgVGUoZSwgbik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiBUZShlLCBuKSwgbiBpbnN0YW5jZW9mIHQgJiYgbi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSBuZXcgdCgpO1xuICAgIHJldHVybiBuLmNsb3NlZCA9ICEwLCBuO1xuICB9KCksIHQ7XG59KCksIHBuID0gUGUuRU1QVFk7XG5mdW5jdGlvbiBtbih0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgUGUgfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgTSh0LnJlbW92ZSkgJiYgTSh0LmFkZCkgJiYgTSh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIF90KHQpIHtcbiAgTSh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciB5biA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBmbiA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgbikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgciA9IDI7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICBlW3IgLSAyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIE9lKFt0LCBuXSwgRGUoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gaG4odCkge1xuICBmbi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ3QoKSB7XG59XG5mdW5jdGlvbiBGZSh0KSB7XG4gIHQoKTtcbn1cbnZhciBpdCA9IGZ1bmN0aW9uKHQpIHtcbiAgbmUobiwgdCk7XG4gIGZ1bmN0aW9uIG4oZSkge1xuICAgIHZhciByID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuaXNTdG9wcGVkID0gITEsIGUgPyAoci5kZXN0aW5hdGlvbiA9IGUsIG1uKGUpICYmIGUuYWRkKHIpKSA6IHIuZGVzdGluYXRpb24gPSBiYSwgcjtcbiAgfVxuICByZXR1cm4gbi5jcmVhdGUgPSBmdW5jdGlvbihlLCByLCBhKSB7XG4gICAgcmV0dXJuIG5ldyBCZShlLCByLCBhKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KGUpO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IoZSkpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCBuLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSk7XG4gIH0sIG4ucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgbi5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgbjtcbn0oUGUpLCBfYSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gS2UodCwgbikge1xuICByZXR1cm4gX2EuY2FsbCh0LCBuKTtcbn1cbnZhciBnYSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KG4pIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IG47XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBJZShyKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGUuZXJyb3Iobik7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIEllKHIpO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIEllKG4pO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKG4uY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICBuLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEllKGUpO1xuICAgICAgfVxuICB9LCB0O1xufSgpLCBCZSA9IGZ1bmN0aW9uKHQpIHtcbiAgbmUobiwgdCk7XG4gIGZ1bmN0aW9uIG4oZSwgciwgYSkge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgaWYgKE0oZSkgfHwgIWUpXG4gICAgICBzID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IHIgPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIGkgJiYgeW4udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBzID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgS2UoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgS2UoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIEtlKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IHMgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IG5ldyBnYShzKSwgaTtcbiAgfVxuICByZXR1cm4gbjtcbn0oaXQpO1xuZnVuY3Rpb24gSWUodCkge1xuICBobih0KTtcbn1cbmZ1bmN0aW9uIHdhKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBiYSA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogZ3QsXG4gIGVycm9yOiB3YSxcbiAgY29tcGxldGU6IGd0XG59LCBzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIHZhKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBFYSh0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IHZhIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihyLCBhKSB7XG4gICAgICByZXR1cm4gYShyKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBYID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIG4gJiYgKHRoaXMuX3N1YnNjcmliZSA9IG4pO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gbiwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24obiwgZSwgcikge1xuICAgIHZhciBhID0gdGhpcywgaSA9IFNhKG4pID8gbiA6IG5ldyBCZShuLCBlLCByKTtcbiAgICByZXR1cm4gRmUoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IGEsIGMgPSBzLm9wZXJhdG9yLCBsID0gcy5zb3VyY2U7XG4gICAgICBpLmFkZChjID8gYy5jYWxsKGksIGwpIDogbCA/IGEuX3N1YnNjcmliZShpKSA6IGEuX3RyeVN1YnNjcmliZShpKSk7XG4gICAgfSksIGk7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUobik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbi5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihuLCBlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHJldHVybiBlID0gd3QoZSksIG5ldyBlKGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIHZhciBzID0gbmV3IEJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIGkobCksIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBpLFxuICAgICAgICBjb21wbGV0ZTogYVxuICAgICAgfSk7XG4gICAgICByLnN1YnNjcmliZShzKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUobik7XG4gIH0sIHQucHJvdG90eXBlW3N0XSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIG5bZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIEVhKG4pKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiBuID0gd3QobiksIG5ldyBuKGZ1bmN0aW9uKHIsIGEpIHtcbiAgICAgIHZhciBpO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gaSA9IHM7XG4gICAgICB9LCBmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBhKHMpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByKGkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24obikge1xuICAgIHJldHVybiBuZXcgdChuKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIHd0KHQpIHtcbiAgdmFyIG47XG4gIHJldHVybiAobiA9IHQgPz8geW4uUHJvbWlzZSkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBDYSh0KSB7XG4gIHJldHVybiB0ICYmIE0odC5uZXh0KSAmJiBNKHQuZXJyb3IpICYmIE0odC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBTYSh0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiBpdCB8fCBDYSh0KSAmJiBtbih0KTtcbn1cbmZ1bmN0aW9uIFBhKHQpIHtcbiAgcmV0dXJuIE0odCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIGthKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICBpZiAoUGEobikpXG4gICAgICByZXR1cm4gbi5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iocik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIEFhKHQsIG4sIGUsIHIsIGEpIHtcbiAgcmV0dXJuIG5ldyBJYSh0LCBuLCBlLCByLCBhKTtcbn1cbnZhciBJYSA9IGZ1bmN0aW9uKHQpIHtcbiAgbmUobiwgdCk7XG4gIGZ1bmN0aW9uIG4oZSwgciwgYSwgaSwgcywgYykge1xuICAgIHZhciBsID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IHMsIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gciA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIodSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIGUuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IGkgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gYSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSgpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBlLmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIHIgPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFyICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCBuO1xufShpdCksIFJhID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBfbiA9IGZ1bmN0aW9uKHQpIHtcbiAgbmUobiwgdCk7XG4gIGZ1bmN0aW9uIG4oKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IG5ldyBidCh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gci5vcGVyYXRvciA9IGUsIHI7XG4gIH0sIG4ucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IFJhKCk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIEZlKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEsIGk7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5jdXJyZW50T2JzZXJ2ZXJzIHx8IChyLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKHIub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgcyA9IHllKHIuY3VycmVudE9ic2VydmVycyksIGMgPSBzLm5leHQoKTsgIWMuZG9uZTsgYyA9IHMubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgYSA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChpID0gcy5yZXR1cm4pICYmIGkuY2FsbChzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBGZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmhhc0Vycm9yID0gci5pc1N0b3BwZWQgPSAhMCwgci50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGEgPSByLm9ic2VydmVyczsgYS5sZW5ndGg7IClcbiAgICAgICAgICBhLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIEZlKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUuX3Rocm93SWZDbG9zZWQoKSwgIWUuaXNTdG9wcGVkKSB7XG4gICAgICAgIGUuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIHIgPSBlLm9ic2VydmVyczsgci5sZW5ndGg7IClcbiAgICAgICAgICByLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKChlID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBuLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBlKTtcbiAgfSwgbi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLCB0aGlzLl9pbm5lclN1YnNjcmliZShlKTtcbiAgfSwgbi5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByID0gdGhpcywgYSA9IHRoaXMsIGkgPSBhLmhhc0Vycm9yLCBzID0gYS5pc1N0b3BwZWQsIGMgPSBhLm9ic2VydmVycztcbiAgICByZXR1cm4gaSB8fCBzID8gcG4gOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKGUpLCBuZXcgUGUoZnVuY3Rpb24oKSB7XG4gICAgICByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBUZShjLCBlKTtcbiAgICB9KSk7XG4gIH0sIG4ucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByID0gdGhpcywgYSA9IHIuaGFzRXJyb3IsIGkgPSByLnRocm93bkVycm9yLCBzID0gci5pc1N0b3BwZWQ7XG4gICAgYSA/IGUuZXJyb3IoaSkgOiBzICYmIGUuY29tcGxldGUoKTtcbiAgfSwgbi5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgWCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIG4uY3JlYXRlID0gZnVuY3Rpb24oZSwgcikge1xuICAgIHJldHVybiBuZXcgYnQoZSwgcik7XG4gIH0sIG47XG59KFgpLCBidCA9IGZ1bmN0aW9uKHQpIHtcbiAgbmUobiwgdCk7XG4gIGZ1bmN0aW9uIG4oZSwgcikge1xuICAgIHZhciBhID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSBlLCBhLnNvdXJjZSA9IHIsIGE7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIsIGE7XG4gICAgKGEgPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIubmV4dCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwIHx8IGEuY2FsbChyLCBlKTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIsIGE7XG4gICAgKGEgPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuZXJyb3IpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwociwgZSk7XG4gIH0sIG4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIHI7XG4gICAgKHIgPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwoZSk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIsIGE7XG4gICAgcmV0dXJuIChhID0gKHIgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBwbjtcbiAgfSwgbjtcbn0oX24pLCBGYSA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgTWEgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgcikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBuO1xufShQZSksIHZ0ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgbikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgciA9IDI7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICBlW3IgLSAyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBPZShbdCwgbl0sIERlKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgRGEgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHQuY2FsbCh0aGlzLCBlLCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLnNjaGVkdWxlciA9IGUsIGEud29yayA9IHIsIGEucGVuZGluZyA9ICExLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICB2YXIgYTtcbiAgICBpZiAociA9PT0gdm9pZCAwICYmIChyID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIGkgPSB0aGlzLmlkLCBzID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIGkgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQocywgaSwgcikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IHIsIHRoaXMuaWQgPSAoYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHMsIHRoaXMuaWQsIHIpLCB0aGlzO1xuICB9LCBuLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIHIsIGEpIHtcbiAgICByZXR1cm4gYSA9PT0gdm9pZCAwICYmIChhID0gMCksIHZ0LnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgYSk7XG4gIH0sIG4ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgciwgYSkge1xuICAgIGlmIChhID09PSB2b2lkIDAgJiYgKGEgPSAwKSwgYSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGEgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiByO1xuICAgIHIgIT0gbnVsbCAmJiB2dC5jbGVhckludGVydmFsKHIpO1xuICB9LCBuLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgcikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBhID0gdGhpcy5fZXhlY3V0ZShlLCByKTtcbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiBhO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCBuLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICB2YXIgYSA9ICExLCBpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgYSA9ICEwLCBpID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIGk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCByID0gZS5pZCwgYSA9IGUuc2NoZWR1bGVyLCBpID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIFRlKGksIHRoaXMpLCByICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHIsIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCBuO1xufShNYSksIEV0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQobiwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gbiwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKG4sIGUsIHIpIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgbikuc2NoZWR1bGUociwgZSk7XG4gIH0sIHQubm93ID0gRmEubm93LCB0O1xufSgpLCBPYSA9IGZ1bmN0aW9uKHQpIHtcbiAgbmUobiwgdCk7XG4gIGZ1bmN0aW9uIG4oZSwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IEV0Lm5vdyk7XG4gICAgdmFyIGEgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5hY3Rpb25zID0gW10sIGEuX2FjdGl2ZSA9ICExLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICByLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBhO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSByLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgYSkge1xuICAgICAgZm9yICg7IGUgPSByLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIG47XG59KEV0KSwgVGEgPSBuZXcgT2EoRGEpLCBOYSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIExhKHQpIHtcbiAgcmV0dXJuIE0odCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIFVhKHQpIHtcbiAgcmV0dXJuIE0odFtzdF0pO1xufVxuZnVuY3Rpb24gamEodCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgTSh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiB4YSh0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gJGEoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgemEgPSAkYSgpO1xuZnVuY3Rpb24gR2EodCkge1xuICByZXR1cm4gTSh0ID09IG51bGwgPyB2b2lkIDAgOiB0W3phXSk7XG59XG5mdW5jdGlvbiBWYSh0KSB7XG4gIHJldHVybiBmYSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCByLCBhLCBpO1xuICAgIHJldHVybiBkbih0aGlzLCBmdW5jdGlvbihzKSB7XG4gICAgICBzd2l0Y2ggKHMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBzLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIHMubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBwZShlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIHIgPSBzLnNlbnQoKSwgYSA9IHIudmFsdWUsIGkgPSByLmRvbmUsIGkgPyBbNCwgcGUodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgcGUoYSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gcy5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcWEodCkge1xuICByZXR1cm4gTSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBZYSh0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgWClcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmIChVYSh0KSlcbiAgICAgIHJldHVybiBLYSh0KTtcbiAgICBpZiAoTmEodCkpXG4gICAgICByZXR1cm4gV2EodCk7XG4gICAgaWYgKExhKHQpKVxuICAgICAgcmV0dXJuIEhhKHQpO1xuICAgIGlmIChqYSh0KSlcbiAgICAgIHJldHVybiBnbih0KTtcbiAgICBpZiAoR2EodCkpXG4gICAgICByZXR1cm4gSmEodCk7XG4gICAgaWYgKHFhKHQpKVxuICAgICAgcmV0dXJuIFphKHQpO1xuICB9XG4gIHRocm93IHhhKHQpO1xufVxuZnVuY3Rpb24gS2EodCkge1xuICByZXR1cm4gbmV3IFgoZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdFtzdF0oKTtcbiAgICBpZiAoTShlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUobik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFdhKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKG4pIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFuLmNsb3NlZDsgZSsrKVxuICAgICAgbi5uZXh0KHRbZV0pO1xuICAgIG4uY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBIYSh0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihuKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIG4uY2xvc2VkIHx8IChuLm5leHQoZSksIG4uY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBobik7XG4gIH0pO1xufVxuZnVuY3Rpb24gSmEodCkge1xuICByZXR1cm4gbmV3IFgoZnVuY3Rpb24obikge1xuICAgIHZhciBlLCByO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0geWUodCksIGkgPSBhLm5leHQoKTsgIWkuZG9uZTsgaSA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gaS52YWx1ZTtcbiAgICAgICAgaWYgKG4ubmV4dChzKSwgbi5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkgJiYgIWkuZG9uZSAmJiAociA9IGEucmV0dXJuKSAmJiByLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgbi5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGduKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKG4pIHtcbiAgICBCYSh0LCBuKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gbi5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBaYSh0KSB7XG4gIHJldHVybiBnbihWYSh0KSk7XG59XG5mdW5jdGlvbiBCYSh0LCBuKSB7XG4gIHZhciBlLCByLCBhLCBpO1xuICByZXR1cm4geWEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBjO1xuICAgIHJldHVybiBkbih0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gaGEodCksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAociA9IGwuc2VudCgpLCAhIXIuZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IHIudmFsdWUsIG4ubmV4dChzKSwgbi5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCByICYmICFyLmRvbmUgJiYgKGkgPSBlLnJldHVybikgPyBbNCwgaS5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiBuLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBRYSh0LCBuLCBlLCByLCBhKSB7XG4gIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSAhMSk7XG4gIHZhciBpID0gbi5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGEgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIHIpKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgcik7XG4gIGlmICh0LmFkZChpKSwgIWEpXG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBYYSh0LCBuKSB7XG4gIHZhciBlID0gTSh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgciA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFgocik7XG59XG52YXIgZWkgPSBHZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiB0aSh0LCBuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGEgPSAhMSwgaTtcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihzKSB7XG4gICAgICAgIGkgPSBzLCBhID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IHIsXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGEgPyBlKGkpIDogcihuZXcgZWkoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbmkodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIHJpID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIG9pKHQsIG4pIHtcbiAgdmFyIGUgPSBuaSh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIHIgPSBlLmZpcnN0LCBhID0gZS5lYWNoLCBpID0gZS53aXRoLCBzID0gaSA9PT0gdm9pZCAwID8gYWkgOiBpLCBjID0gZS5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyBUYSA6IGMsIHUgPSBlLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKHIgPT0gbnVsbCAmJiBhID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4ga2EoZnVuY3Rpb24oZiwgaCkge1xuICAgIHZhciB5LCBtLCBfID0gbnVsbCwgdiA9IDAsIHcgPSBmdW5jdGlvbihiKSB7XG4gICAgICBtID0gUWEoaCwgbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgeS51bnN1YnNjcmliZSgpLCBZYShzKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IF8sXG4gICAgICAgICAgICBzZWVuOiB2XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShoKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGguZXJyb3IoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGIpO1xuICAgIH07XG4gICAgeSA9IGYuc3Vic2NyaWJlKEFhKGgsIGZ1bmN0aW9uKGIpIHtcbiAgICAgIG0gPT0gbnVsbCB8fCBtLnVuc3Vic2NyaWJlKCksIHYrKywgaC5uZXh0KF8gPSBiKSwgYSA+IDAgJiYgdyhhKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBtICE9IG51bGwgJiYgbS5jbG9zZWQgfHwgbSA9PSBudWxsIHx8IG0udW5zdWJzY3JpYmUoKSwgXyA9IG51bGw7XG4gICAgfSkpLCAhdiAmJiB3KHIgIT0gbnVsbCA/IHR5cGVvZiByID09IFwibnVtYmVyXCIgPyByIDogK3IgLSBsLm5vdygpIDogYSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYWkodCkge1xuICB0aHJvdyBuZXcgcmkodCk7XG59XG5jbGFzcyBNZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IG4gfSwgdGhpcy5fc3ViamVjdC5uZXh0KG4pLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChuLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogbiwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iobik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChuKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogbiwgdGhpcy5zdWJzY3JpYmUgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIG4odGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgbih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBVZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiBuLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IFhhKCgpID0+IG5ldyBFcnJvcihuLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aSh0aGlzLl9zdWJqZWN0LnBpcGUob2koZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgX24oKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogaWksIGVycl9fOiBzaSB9ID0gUChcImluaXQtZmxvd3NcIiksIGFlID0gKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IG5ldyBNZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogZSxcbiAgICBpbml0aWFsaXplOiBhc3luYyAocikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGUuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgbihyKTtcbiAgICAgICAgaWkoYOKclCAke3R9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgYSksIGUuc2V0KGEpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICBzaShg8J2ZrSAke3R9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBKKGEpLCBcIkRldGFpbHM6XCIsIGEpLCBlLnRocm93KGEsIEooYSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIGNpID0gYXN5bmMgKHQsIG4sIGUpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0KS5tYXAoKHIpID0+IHIuaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IG4sIGZvcm1DYWxsYmFja3M6IGUgfSkpKTtcbn0sIGxpID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IGFlKFwiU3RyaXBlIFBSXCIsIEkuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IGFlKFwiU3RyaXBlIExpbmtcIiwgSS5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogYWUoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIEkuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IGFlKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIEkuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogYWUoXCJMb29wXCIsIEkubG9vcENyeXB0by5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBhZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIEkuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBhZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgSS5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IHVpIH0gPSBQKFwiZm9ybS1jYWxsYmFja3NcIiksICQgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBDdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiAkLFxuICBvbkJsdXI6ICQsXG4gIG9uQ2hhbmdlOiAkLFxuICBvbkxvYWQ6ICQsXG4gIG9uTG9hZEVycm9yOiAkLFxuICBvblZhbGlkYXRpb25FcnJvcjogJCxcbiAgb25DaGVja291dFN0YXJ0ZWQ6ICQsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiAkLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6ICQsXG4gIG9uQ2hlY2tvdXRFcnJvcjogJCxcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6ICRcbn0pLCBXID0gY2xhc3MgVyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKG4pID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFcuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW2UsIHJdKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBJbihlLCByID8/IFcuTk9PUCwgdWkpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBhO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gVy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuVy5OT09QID0gKCkgPT4ge1xufSwgVy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgbiA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoQ3Qua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgbltlXSA9IFcuTk9PUDtcbiAgfSksIG47XG59LCBXLmZyb21PYmplY3QgPSAobikgPT4ge1xuICBjb25zdCBlID0gbmV3IFcoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKEN0LnBhcnNlKG4pKSwgZTtcbn07XG5sZXQgUWUgPSBXO1xuY2xhc3MgZGkge1xuICBjb25zdHJ1Y3RvcihuLCBlLCByLCBhKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGkpID0+IHtcbiAgICAgIGlmICghaS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoU3QoaS5vcmlnaW4pICE9PSBTdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEucGVucGFsIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEuc291cmNlICYmIGkuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBwcihKU09OLnBhcnNlKGkuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gaS5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGkpID0+IGkuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhaS5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGkuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGkpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoaS5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgaSksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoaS5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IG4sIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IHIsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCBTdCA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIHBpKHQsIG4pIHtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiBuXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBtcihyKTtcbiAgaWYgKCF5cihyLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiByO1xufVxuY2xhc3MgbWkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKG4sIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChuLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IG4gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgeWkgPSAodCwgbiwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiByIH0gPSB0O1xuICByLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGkgPSBhLmxvYWRlZFZhbHVlLCBzID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgUHQoXCJhcHBsZV9wYXlcIiwgaSwgbiwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIFB0KFwiZ29vZ2xlX3BheVwiLCBpLCBuLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgUHQgPSAodCwgbiwgZSwgciwgYSkgPT4gSS5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IEgoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogcixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogblxufSksIGt0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogWiwgZXJyX186IEIgfSA9IFAoXCJvcC1mb3JtXCIpLCBRID0gY2xhc3MgUSB7XG4gIGNvbnN0cnVjdG9yKG4pIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBNZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTWUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IE1lKCksIHRoaXMuaW5pdEZsb3dzID0gbGkoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgWihcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBaKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBrdFxuICAgICAgICB9KTtcbiAgICAgICAgWihcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgWihcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGt0XG4gICAgICAgIH0pO1xuICAgICAgICBaKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBaKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBhID0gUS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgcixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGEpLCB5aSh0aGlzLmluaXRGbG93cywgYSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgWihcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgY2kodGhpcy5pbml0Rmxvd3MsIGEsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIFooXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgciA9IEooZSk7XG4gICAgICAgIEIoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIHIpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKHIpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgciAmJiAoci5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCByID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBhID0gUm4ucGFyc2UoZSksIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBzID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHIpO1xuICAgICAgaS5uYW1lID0gYCR7YX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke2kubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBzLnRvU3RyaW5nKCksIGkuc3JjID0gYy5ocmVmLCBpLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBpLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYSwgaSk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCByKSA9PiB7XG4gICAgICBjb25zdCBhID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiByLFxuICAgICAgICBtb3VudDogKGkpID0+IHtcbiAgICAgICAgICB2YXIgcztcbiAgICAgICAgICByZXR1cm4gKHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKSA9PSBudWxsID8gdm9pZCAwIDogcy5hcHBlbmRDaGlsZChyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBhLnR5cGUsIG5vZGU6IGEubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbZGUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW2RlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbZGUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtkZS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gYSwgYTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgciA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiByLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIHIuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgci5hcHBlbmQoXCJzdHlsZXNcIiwgZHIoZS5zdHlsZXMpKSwgci5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgcjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAgcGkoZS5ub2RlKS50aGVuKChyKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIHIpLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChyKTtcbiAgICAgIH0pLmNhdGNoKChyKSA9PiBCKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCByKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEkuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCkpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiB4LmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IHguYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogeC5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB4LmF1dGhvcml6ZW5ldEFwcGxlUGF5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFthLCBpXSkgPT4gKHtcbiAgICAgICAgbmFtZTogclthXSA/PyBhLFxuICAgICAgICAuLi5pLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlLCByKSA9PiB7XG4gICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFhKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgY2FzZSB4LnBvY2t5dFBheXBhbDpcbiAgICAgICAgICByZXR1cm4gSS5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBIKGEuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHIgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIHguYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5zdGFydEZsb3cocik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkuc3RhcnRGbG93KHIpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5zdGFydEZsb3cocik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnN0YXJ0RmxvdyhyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHgubG9vcENyeXB0bzpcbiAgICAgICAgICByZXR1cm4gSS5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBhLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZShhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3J5cHRvXCIsIFwibG9vcFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgoYS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcixcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIFVlKGUpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBaKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGUgJiYgZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoZSk7XG4gICAgfSwgUS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMTlcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gbi5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLm4sIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBRZS5mcm9tT2JqZWN0KG4pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IG4uZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgbWkoKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgZGkodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5RLm9qc0Zsb3dzID0gSSwgUS5hc3NpZ25Bc1NpbmdsZXRvbiA9IChuKSA9PiB7XG4gIGlmIChRLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSBuO1xufSwgUS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgUS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKG4sIGUsIHIsIGEpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IG4uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChuLmJhc2VVcmwgPz8gZXQpLm9yaWdpbixcbiAgZm9ybURpdjogYSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IHIsXG4gIGN1c3RvbUluaXRQYXJhbXM6IG4uY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgQXQgPSBRO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtBZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0FlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7QWUucmVkLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbnokMS5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xueiQxLm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIlBST0NFU1NJTkdfUEFZTUVOVFwiXSA9IFwicHJvY2Vzc2luZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UXCJdID0gXCJjcmVhdGluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX1BBWU1FTlRcIl0gPSBcImNvbmZpcm1pbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09NUExFVEVcIl0gPSBcImNvbXBsZXRlXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcbnokMS5vYmplY3Qoe1xuICBbXCJsb29wRmlyc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcExhc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcEVtYWlsXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV06IE9wdGlvbmFsU3RyaW5nXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKEF0LmdldEluc3RhbmNlKCkpIHtcbiAgICBBdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gQXQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgQXQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCBQYXlJblN0YXRlLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVE7QUFFZixNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUtjLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWQsR0FBV1ksRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FBQ1QsR0FFTUMsS0FBSyw4QkFBOEJDLEtBQUtSLEVBQUksT0FBTztBQUFBLEVBQ3ZELE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLEtBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQixLQUFLQSxFQUFJLE9BQU87QUFBQSxFQUNoQixLQUFLQSxFQUFJLE9BQU87QUFDbEIsQ0FBQyxHQUFHUyxLQUFLVCxFQUFJLE1BQU1RLEVBQUUsR0FBR0UsS0FBS1YsRUFBSSxPQUFP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IjogWyJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiQWUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImV0IiwgImJuIiwgInZuIiwgIkVuIiwgIkNuIiwgIlNuIiwgIldlIiwgIlBuIiwgImtuIiwgImUiLCAiQW4iLCAiSiIsICJJbiIsICJyIiwgIngiLCAiQSIsICJVIiwgIlJ0IiwgIkZ0IiwgIk10IiwgIkR0IiwgImRlIiwgIlJuIiwgIk5lIiwgIkZuIiwgInEiLCAiTW4iLCAiRG4iLCAiT24iLCAiVG4iLCAiTm4iLCAiTG4iLCAiVW4iLCAiam4iLCAieG4iLCAiJG4iLCAiem4iLCAiR24iLCAiQ2UiLCAiVm4iLCAicW4iLCAiWW4iLCAiS24iLCAiV24iLCAiSG4iLCAiSm4iLCAidHQiLCAiWm4iLCAiQm4iLCAiUW4iLCAiUiIsICJYbiIsICJlciIsICJPdCIsICJ0ciIsICJuciIsICJUdCIsICJyciIsICJvciIsICJhciIsICJMZSIsICJjdCIsICJudCIsICJpciIsICJzciIsICJjciIsICJsciIsICJ1ciIsICJhIiwgImkiLCAicyIsICJjIiwgImRyIiwgIkgiLCAicHIiLCAibXIiLCAieXIiLCAiZyIsICJmciIsICJOdCIsICJMdCIsICJociIsICJfciIsICJmZSIsICJnciIsICJ3ciIsICJVdCIsICJiciIsICJ2ciIsICJFciIsICJsdCIsICJqdCIsICJ1dCIsICJ4dCIsICJDciIsICJTciIsICIkdCIsICJQciIsICJrciIsICJBciIsICJJciIsICJSciIsICJ6dCIsICJGciIsICJNciIsICJEciIsICJPciIsICJUciIsICJOciIsICJMciIsICJVciIsICJHdCIsICJOIiwgInhyIiwgImpyIiwgIiRyIiwgIkQiLCAiaGUiLCAienIiLCAiR3IiLCAiRyIsICJWciIsICJxciIsICJZciIsICJfZSIsICJLciIsICJkdCIsICJXciIsICJydCIsICJWdCIsICJIciIsICJvdCIsICJxdCIsICJVZSIsICJlZSIsICJzZSIsICJQIiwgImJpIiwgIkpyIiwgIlNlIiwgIlkiLCAiWnIiLCAiamUiLCAiWXQiLCAiS3QiLCAidGUiLCAiQnIiLCAicHQiLCAiRiIsICJRciIsICJYciIsICJlbyIsICJ0byIsICJmIiwgImgiLCAieSIsICJtIiwgIkkiLCAib28iLCAibm8iLCAicm8iLCAiZCIsICJsIiwgInUiLCAiYW8iLCAiV3QiLCAiaW8iLCAic28iLCAieGUiLCAiSHQiLCAiY28iLCAibG8iLCAidW8iLCAiSnQiLCAicG8iLCAibW8iLCAiWnQiLCAieW8iLCAiZm8iLCAiaG8iLCAiX28iLCAiYXQiLCAiZ28iLCAid28iLCAiYm8iLCAidm8iLCAiRW8iLCAiQnQiLCAiUXQiLCAiQ28iLCAiU28iLCAibWUiLCAiRWUiLCAiUG8iLCAiWHQiLCAia28iLCAiQW8iLCAibXQiLCAiSW8iLCAiUm8iLCAiXyIsICJ2IiwgIkZvIiwgIk1vIiwgIkRvIiwgIkMiLCAieXQiLCAiZnQiLCAiT28iLCAidyIsICJqbyIsICJVbyIsICJiIiwgIlRvIiwgIk5vIiwgIkxvIiwgIlYiLCAiVCIsICJ4byIsICIkbyIsICJ6byIsICJ2ZSIsICJHbyIsICJxbyIsICJWbyIsICJZbyIsICJLIiwgImh0IiwgIktvIiwgIldvIiwgImoiLCAiY2UiLCAiRSIsICJrIiwgIk8iLCAiJGUiLCAiZW4iLCAicWUiLCAidG4iLCAiemUiLCAiSG8iLCAibm4iLCAieiIsICJsZSIsICJKbyIsICJabyIsICJ3biIsICJrZSIsICJyZSIsICJWZSIsICJvZSIsICJnZSIsICJybiIsICJvbiIsICJhbiIsICJzbiIsICJSZSIsICJCbyIsICJRbyIsICJYbyIsICJ1ZSIsICJIZSIsICJlYSIsICJ0YSIsICJuYSIsICJyYSIsICJMIiwgImNuIiwgIm9hIiwgImFhIiwgImlhIiwgInNhIiwgImNhIiwgImxhIiwgImxuIiwgInVuIiwgIndlIiwgIkplIiwgInVhIiwgImRhIiwgImllIiwgImJlIiwgInBhIiwgIm1hIiwgIlplIiwgIm5lIiwgInlhIiwgImRuIiwgInllIiwgIkRlIiwgIk9lIiwgInBlIiwgImZhIiwgImhhIiwgIk0iLCAiR2UiLCAiWWUiLCAiVGUiLCAiUGUiLCAiX3QiLCAicG4iLCAibW4iLCAieW4iLCAiZm4iLCAiaG4iLCAiZ3QiLCAiRmUiLCAiaXQiLCAiYmEiLCAiQmUiLCAiX2EiLCAiS2UiLCAiZ2EiLCAiSWUiLCAid2EiLCAic3QiLCAidmEiLCAiRWEiLCAiWCIsICJTYSIsICJ3dCIsICJDYSIsICJQYSIsICJrYSIsICJBYSIsICJJYSIsICJSYSIsICJfbiIsICJidCIsICJGYSIsICJNYSIsICJ2dCIsICJEYSIsICJFdCIsICJPYSIsICJUYSIsICJOYSIsICJMYSIsICJVYSIsICJqYSIsICJ4YSIsICIkYSIsICJ6YSIsICJHYSIsICJWYSIsICJxYSIsICJZYSIsICJLYSIsICJXYSIsICJIYSIsICJnbiIsICJKYSIsICJaYSIsICJCYSIsICJRYSIsICJYYSIsICJlaSIsICJ0aSIsICJuaSIsICJyaSIsICJvaSIsICJhaSIsICJNZSIsICJpaSIsICJzaSIsICJhZSIsICJjaSIsICJsaSIsICJ1aSIsICIkIiwgIkN0IiwgIlciLCAibiIsICJRZSIsICJkaSIsICJTdCIsICJwaSIsICJtaSIsICJ5aSIsICJQdCIsICJrdCIsICJaIiwgIkIiLCAiUSIsICJBdCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5bWVudFByb2Nlc3NvciIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImZvcm0iLCAidmFsdWUiLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgInByZXYiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAiZWxlbWVudFN0eWxlIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50Il0KfQo=
|
|
4863
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBBZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBldCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgYm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCB2biA9IHokMS5hcnJheShibiksIEVuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIENuID0geiQxLmFycmF5KEVuKSwgU24gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFdlID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBTbltuXSA/PyB0O1xufSwgUG4gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIGtuID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gV2UodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7V2UoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgQW4gPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFogPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChQbih0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHZuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8ga24obikgOiBDbi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IEFuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFdlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIEluID0gKHQsIG4sIGUpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgdC5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIHQuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgdC5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIHQuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgdC5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCB0KSkoeCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSh4KTsgY29uc3QgQSA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgUyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgVSA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIHQuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCB0LkVNQUlMID0gXCJlbWFpbFwiLCB0LlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIHQuQ0lUWSA9IFwiY2l0eVwiLCB0LlNUQVRFID0gXCJzdGF0ZVwiLCB0LkNPVU5UUlkgPSBcImNvdW50cnlcIiwgdC5BRERSRVNTID0gXCJhZGRyZXNzXCIsIHQuUEhPTkUgPSBcInBob25lXCIsIHQuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgdCkpKHAgfHwge30pO1xuY29uc3QgUnQgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBGdCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCB0KSkoRnQgfHwge30pO1xuY29uc3QgRHQgPSB6JDEubmF0aXZlRW51bShGdCksIE10ID0geiQxLnVuaW9uKFtSdCwgRHRdKTtcbnZhciBRID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0LkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgdCkpKFEgfHwge30pO1xuY29uc3QgUm4gPSB6JDEubmF0aXZlRW51bShRKSwgVGUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFUoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgRm4gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogUyxcbiAgZXhwaXJ5OiBTLFxuICBjdmM6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogUyxcbiAgY29sb3I6IFMsXG4gIGZvbnRGYW1pbHk6IFMsXG4gIGZvbnRTaXplOiBTLFxuICBmb250V2VpZ2h0OiBTLFxuICBtYXJnaW46IFMsXG4gIHBhZGRpbmc6IFMsXG4gIGxldHRlclNwYWNpbmc6IFMsXG4gIGxpbmVIZWlnaHQ6IFMsXG4gIGhpZGVJY29uOiBTXG59KTtcbmNvbnN0IHEgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgRG4gPSBxLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBNbiA9IHokMS5vYmplY3QoeyB0eXBlOiBEbiB9KSwgT24gPSBxLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgTm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogT24sXG4gIGVsZW1lbnRUeXBlOiBEdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVG4gPSBxLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBMbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBUbixcbiAgbWVzc2FnZTogQSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIFVuID0gcS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBqbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBVbixcbiAgZWxlbWVudFR5cGU6IE10LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgeG4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogQVxufSksICRuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEEsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShUZSlcbn0pLCB6biA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgR24gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIENlID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogQSxcbiAgbGFzdE5hbWU6IEEsXG4gIGVtYWlsOiBBLFxuICB6aXBDb2RlOiBBLFxuICBjb3VudHJ5OiBBLFxuICBwcm9tb3Rpb25Db2RlOiBTXG59KSwgVm4gPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgZW1haWw6IEEsXG4gIHppcENvZGU6IEEsXG4gIGNvdW50cnk6IEEsXG4gIHByb21vdGlvbkNvZGU6IFMsXG4gIGFkZHJlc3M6IFMsXG4gIGNpdHk6IFMsXG4gIHN0YXRlOiBTXG59KSwgcW4gPSBxLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIFluID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHFuLFxuICBzZXNzaW9uSWQ6IEEsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVGUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogU1xufSkuZXh0ZW5kKENlLnNoYXBlKSwgS24gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCBXbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgSG4gPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIE1uLFxuICBObixcbiAgTG4sXG4gIGpuLFxuICB4bixcbiAgJG4sXG4gIFluLFxuICBLbixcbiAgV24sXG4gIHpuLFxuICBHblxuXSksIEpuID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEhuLFxuICBub25jZTogQSxcbiAgZm9ybUlkOiBBLFxuICBlbGVtZW50SWQ6IEFcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogQVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IHR0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IHokMS5vcHRpb25hbCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBabiA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgQm4gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KFpuKVxufSksIFFuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBCblxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgUiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKFIgfHwge30pO1xuY29uc3QgWG4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBlciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIE90ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBVKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBVKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHRyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBuciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShGbiksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBVKHR0KSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBVKHokMS5hcnJheShPdCkpXG59KSwgTnQgPSAodCkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgcl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IFJ0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShyKSA/IG5bYV0gPSByIDogQXJyYXkuaXNBcnJheShyLl9lcnJvcnMpICYmIChuW2FdID0gci5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCBuO1xufSwgcnIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBhciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIExlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIGN0KCkgfHwgYXdhaXQgbnQoNTAwKTtcbiAgaWYgKCFjdCgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIGlyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IExlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKG4pLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgc3IgPSBhc3luYyAodCwgbiwgZSwgciwgYSkgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgTGUodCksIHMgPSBhcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiBuLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBudCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBzZXRUaW1lb3V0KG4sIHQpO1xufSksIGN0ID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIGNyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChuLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgciksIG4ocik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgcik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgZShyKTtcbiAgfVxufSksIGxyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgTGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChyLmVycm9yKVxuICAgIHRocm93IG4uY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke3IuZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIG4uY29tcGxldGUoXCJzdWNjZXNzXCIpLCByO1xufSwgdXIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgYSwgaSwgcywgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBMZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCByID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXM7XG4gIGlmIChyID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyByID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChpID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gKChjID0gKHMgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogcy5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBkciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgSiA9ICh0LCBuKSA9PiBBcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gcyA/IHsgLi4uYSwgW3NdOiBpLnZhbHVlIH0gOiBhO1xufSwge30pLCBwciA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpuLnBhcnNlKHQpO1xuICB9IGNhdGNoIChuKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgdCwgbiksIG47XG4gIH1cbn0sIG1yID0gYXN5bmMgKHQpID0+IHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgIXQpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0geyB0eXBlOiBcInBpbmdcIiB9LCBlID0gYXdhaXQgdC5zZW5kKG4pO1xuICAgIGlmIChlICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgbiksICExO1xuICB9XG59LCB5ciA9ICh0LCBuKSA9PiAhIXQgJiYgbiwgZyA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IGZyID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IFR0ID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBnKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogZyh6JDEubnVtYmVyKCkpXG59KSwgTHQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IGcoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBociA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBfciA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBnKGhyKVxufSksIGZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGdyID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBpZDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoZ3IpLFxuICB0cmlhbF9zdGFydDogZyh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IGcoeiQxLnN0cmluZygpKVxufSksIFV0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFV0KSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogVHRcbn0pLCBFciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheSh2ciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KGJyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShVdClcbn0pLCBsdCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkod3IpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEVyKSxcbiAgcHJvY2Vzc29yc191c2VkOiB6JDEub3B0aW9uYWwoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwganQgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogbHQsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogZyhsdCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShUdClcbn0pLCB1dCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBnKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBnKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMdCksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBfcixcbiAgc3Vic19wcmV2aWV3OiBnKGp0KSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoZmUpXG59KSwgeHQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh1dC5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHV0LnNoYXBlKVxuXSksIENyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIFNyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbeHQsIENyLCBTcl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEx0KSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGZlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogZyh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0ICR0ID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHIpO1xuY29uc3Qga3IgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBBciA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgSXIgPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEFyKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSksIFJyID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGZlLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogSXIub3B0aW9uYWwoKVxufSkuZXh0ZW5kKGtyLnNoYXBlKS5leHRlbmQoUnIuc2hhcGUpO1xuY29uc3QgenQgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBnKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogVm4sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmVcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogQ2UsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG5jb25zdCBGciA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBnKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBnKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBnKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IGcoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IGcoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogZyh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogZyh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBnKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogZyh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBnKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERyID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGZlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IE1yID0geiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pLCBPciA9ICh0KSA9PiB0LnJlZHVjZSgobiwgZSkgPT4gbiArIGUsIDApO1xuZnVuY3Rpb24gTnIodCwgbikge1xuICB2YXIgZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgZSA/IGUodCwgbikgOiB0Ll9fcHJvdG9fXyA9IG47XG59XG5mdW5jdGlvbiBUcih0LCBuKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IHQuY29uc3RydWN0b3IpO1xuICB2YXIgZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBlICYmIGUodCwgbik7XG59XG52YXIgTHIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24oZSwgcikge1xuICAgIHJldHVybiB0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oYSwgaSkge1xuICAgICAgYS5fX3Byb3RvX18gPSBpO1xuICAgIH0gfHwgZnVuY3Rpb24oYSwgaSkge1xuICAgICAgZm9yICh2YXIgcyBpbiBpKVxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSwgcykgJiYgKGFbc10gPSBpW3NdKTtcbiAgICB9LCB0KGUsIHIpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24obiwgZSkge1xuICAgIGlmICh0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCIgJiYgZSAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIHQobiwgZSk7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBuO1xuICAgIH1cbiAgICBuLnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKHIucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyByKCkpO1xuICB9O1xufSgpLCBVciA9IGZ1bmN0aW9uKHQpIHtcbiAgTHIobiwgdCk7XG4gIGZ1bmN0aW9uIG4oZSwgcikge1xuICAgIHZhciBhID0gdGhpcy5jb25zdHJ1Y3RvciwgaSA9IHQuY2FsbCh0aGlzLCBlLCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBhLm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgTnIoaSwgYS5wcm90b3R5cGUpLCBUcihpKSwgaTtcbiAgfVxuICByZXR1cm4gbjtcbn0oRXJyb3IpO1xuY2xhc3MgR3QgZXh0ZW5kcyBVciB7XG4gIGNvbnN0cnVjdG9yKG4pIHtcbiAgICBjb25zdCBlID0gYCR7bi5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZSksIHRoaXMucmVzcG9uc2UgPSBuO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBUID0gYXN5bmMgKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IHQuc2VuZChuKTtcbiAgaWYgKHhyKHIpKVxuICAgIHRocm93IG5ldyBHdChyKTtcbiAgaWYgKCFqcihyLCBlKSkge1xuICAgIGNvbnN0IGEgPSBlLnNhZmVQYXJzZShyKTtcbiAgICB0aHJvdyBhLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIGUsIFwiQWN0dWFsOlwiLCByKSwgYS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIHI7XG59LCBqciA9ICh0LCBuKSA9PiBuLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCB4ciA9ICh0KSA9PiBmci5zYWZlUGFyc2UodCkuc3VjY2VzcywgJHIgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogbiB9LCBqdCksIE0gPSBhc3luYyAodCkgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgeHQpLCBoZSA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LCB6dCksIHpyID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogbiB9LCBGciksIEdyID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogbiB9LCB6dCksIEcgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LCBuciksIFZyID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IG4gfSwgJHQpLCBxciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBUKFxuICB0LFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IG4gfSxcbiAgdHJcbiksIFlyID0gYXN5bmMgKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0ICRyKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IG4sXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGEgPSBuZXcgU2V0KHIucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGEuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHthLnNpemV9YCk7XG4gIGNvbnN0IGkgPSBhLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBzID0gT3Ioci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogaSxcbiAgICBhbW91bnRBdG9tOiBzXG4gIH07XG59LCBfZSA9IGFzeW5jICh0LCBuLCBlLCByKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICByID0gciB8fCB2b2lkIDA7XG4gICAgY29uc3QgYSA9IGF3YWl0IFlyKHQsIG4sIHIpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGEuYW1vdW50QXRvbSwgY3VycmVuY3k6IGEuY3VycmVuY3kgfTtcbiAgfVxufSwgS3IgPSBhc3luYyAodCwgbikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKHIpID0+IFQociwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogbiB9LCBRbilcbiAgICApXG4gICk7XG59LCBkdCA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogbiB9LCB0dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBXciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sICR0KSwgcnQgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogbiB9LCB0dCksIFZ0ID0gMWUzLCBIciA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIGNvbnNvbGUubG9nKG4pO1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogVnQsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBUKHIsIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBYbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGEpLCBhO1xufSwgb3QgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LCBNciksIHF0ID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IFQoXG4gICAgICB0LFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IG4gfSB9LFxuICAgICAgRHJcbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgWihlKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59O1xuZnVuY3Rpb24gVWUodCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3R9YCk7XG59XG5jb25zdCB0ZSA9ICh0KSA9PiBhc3luYyAobikgPT4ge1xuICB2YXIgZSwgcjtcbiAgdHJ5IHtcbiAgICAociA9IChlID0gbi5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgci5jYWxsKGUpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCB0KG4pO1xuICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGEucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICBlbHNlIGlmIChhLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgIGEucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgYS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgYS5yZXN1bHQuY3VzdG9tZXJfaWQsXG4gICAgICAgIGEucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgKTtcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2F9YCk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBpID0gWihhKSwgcyA9IGF3YWl0IHF0KG4uY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBpKTtcbiAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihpLCBzKTtcbiAgfVxufSwgY2UgPSAodCkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdChuKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgZXJyX186IHIgfSA9IFAoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIGEgPSBaKGUpLCBpID0gYXdhaXQgcXQobi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGEpO1xuICAgIHJldHVybiByKGksIGEsIGUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBhLCBlcnJvckNvZGU6IGkgfTtcbiAgfVxufSwgUCA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSAoLi4ucikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtBZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0FlLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ucik7XG4gIH0sIGUgPSAoLi4ucikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7QWUucmVkLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5yKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IG4sXG4gICAgZXJyOiBlLFxuICAgIGxvZ19fOiBuLFxuICAgIGVycl9fOiBlXG4gIH07XG59LCB7IGxvZ19fOiBiaSwgZXJyX186IEpyIH0gPSBQKFwiY29tbW9uXCIpLCBTZSA9ICh0KSA9PiB7XG4gIGlmICh0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7dC5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogdC5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIFkgPSAodCwgbikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChyKSA9PiBuLnNhZmVQYXJzZShyKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEpyKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIG4ucGFyc2UoZSk7XG59LCBaciA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgamUgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBuIH0gPSBQKHQubG9nUHJlZml4KSwgZSA9IGF3YWl0IE0odC5hbnlDZGVDb25uZWN0aW9uKSwgciA9IFNlKHQuY29uZmlybVJlc3VsdCk7XG4gIGlmIChlLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gbihcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IFZyKHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBlLnRva2VuLFxuICAgICAgcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgbihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IGUudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiB0LnJlcXVpcmVkRm9ybUZpZWxkc1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IGUubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBlLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiByLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnQodC5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCB7IGxvZ19fOiBZdCwgZXJyX186IEt0IH0gPSBQKFwiY29tbW9uLWNjXCIpLCBuZSA9ICh0LCBuLCBlKSA9PiB7XG4gIGlmIChlKSB7XG4gICAgWXQoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICAgIGZvciAoY29uc3QgW2EsIGldIG9mIE9iamVjdC5lbnRyaWVzKGUpKVxuICAgICAgdFthXSB8fCAodFthXSA9IGkpO1xuICB9XG4gIGNvbnN0IHIgPSBDZS5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgYSA9IHIuZXJyb3IuZm9ybWF0KCksIGkgPSBOdChhKTtcbiAgICBmb3IgKGNvbnN0IFtzLCBjXSBvZiBPYmplY3QuZW50cmllcyhpKSlcbiAgICAgIG4ocywgYywgcyk7XG4gICAgdGhyb3cgS3QoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBpKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEJyID0gKHQsIG4pID0+IHtcbiAgZm9yIChjb25zdCBlIG9mIHQpXG4gICAgaWYgKGUuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyBlLmVycm9ycy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBNdC5zYWZlUGFyc2Uoci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgICAgIEt0KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCByKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgaSA9IGEuZGF0YTtcbiAgICAgICAgICBuKGksIHIuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIFl0KGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShlLmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCBwdCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBGLCBlcnJfXzogUXIgfSA9IFAoXCJzdHJpcGUtbGlua1wiKSwgWHIgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgZW8gPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgdG8gPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgZSA9IHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEYoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWHIpO1xuICAgIEYoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBNKGEpLCBzID0gaS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgX2UoYSwgaS50b2tlbiwgcywgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBpcihyLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEYoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBmID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7cHR9YCk7XG4gICAgfSwgaCA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyBGKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChGKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBmKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKHkpID0+IHtcbiAgICAgIGlmIChGKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBGKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB5LnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKHkpID0+IHtcbiAgICAgIEYoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIHkpO1xuICAgICAgY29uc3QgbSA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHkuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBtLmVycm9yID8gKFFyKFwiZXJyb3JcIiwgbS5lcnJvciksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcihtLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChGKFwicGF5bWVudE1ldGhvZFwiLCBtLnBheW1lbnRNZXRob2QpLCBJLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogbS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGgsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBvbyhwdClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBubyA9IHRlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEYoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBGKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBzID0gcm8oZSwgYS5zdHJpcGVQTSksIGMgPSBuZShzLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgRihcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgaGUoaSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGEuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1twLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgRihcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gZW8ucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgZiA9IGF3YWl0IE0oaSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBGKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCBHKGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogU2UoaCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgRihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgaCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogbi5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGYubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGYuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydChpLCBoKSB9O1xuICAgIH1cbiAgfVxuKSwgcm8gPSAodCwgbikgPT4ge1xuICB2YXIgcywgYywgbCwgdSwgZDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbciwgLi4uYV0gPSAoKGMgPSAocyA9IG4uYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBzLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGkgPSBhLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChsID0gbi5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogbC5lbWFpbCkgfHwgbi5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW3AuWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSB8fCAoKHUgPSBuLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogdS5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW3AuQ09VTlRSWV0gPSBlW3AuQ09VTlRSWV0gfHwgKChkID0gbi5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY291bnRyeSkgfHwgXCJVU1wiLCBGKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgb28gPSAodCkgPT4gbmV3IFByb21pc2UoKG4pID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCByID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgciA/IG4ocikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBhbyA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWUsI2FkeWVuLWNvbnRhaW5lciwjYWR5ZW4tY29udGFpbmVyPip7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIFd0ID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgbi5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHthb31cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCByID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgci5hcHBlbmRDaGlsZChuLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGEgPSByLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBpID0gci5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogYSwgY2FuY2VsQnV0dG9uOiBpIH07XG59O1xuZnVuY3Rpb24gaW8odCwgbiwgZSkge1xuICBjb25zdCByID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gYXdhaXQgSHIodCwgZSk7XG4gICAgICBpICYmIChjbGVhckludGVydmFsKGEpLCBuKGkpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIHIoKTtcbiAgY29uc3QgYSA9IHNldEludGVydmFsKHIsIFZ0KTtcbiAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBzbyh7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IG4sXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgciA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKG4pLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IFIuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24geGUodCkge1xuICBjb25zdCB7IHVybDogbiwgYmFzZVVybDogZSB9ID0gdCwgciA9IFd0KG4pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGEpID0+IHtcbiAgICBjb25zdCBpID0gKGwpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBhKGwpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIHMgPSBpbyhyLmlmcmFtZSwgaSwgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gc28oe1xuICAgICAgZWxlbWVudHM6IHIsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IHMsXG4gICAgICByZXNvbHZlOiBhXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgSHQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgeGUodCk7XG4gIGlmIChuLnN0YXR1cyA9PT0gUi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuLnN0YXR1cyA9PT0gUi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gbi5zdGF0dXMgIT09IFIuU1VDQ0VTUyAmJiBVZShuLnN0YXR1cyksIHtcbiAgICBocmVmOiBuLmhyZWZcbiAgfTtcbn0sIGNvID0gKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKG4sIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgbG8gPSBhc3luYyAodCwgbiwgZSwgcikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBhIH0gPSBQKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGksIHMpID0+IHtcbiAgICBjb25zdCBjID0gY28odCwgciksIGwgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1ID0gYXdhaXQgcXIobiwgZSk7XG4gICAgICAgIGlmICh1LnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChsKSwgYy5jbG9zZSgpLCBpKHsgaHJlZjogdS5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgYShaKHUpKSwgY2xlYXJJbnRlcnZhbChsKSwgcyhaKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IHVvLCBlcnJfXzogSnQgfSA9IFAoXCJwb2NreXQtY2NcIiksIHBvID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgbW8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gcG8uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBKdChyKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBadCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gdW8oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke259XWApLCBuO1xuICB9IGNhdGNoIChuKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEp0KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WihuKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCB5byA9ICh0LCBuKSA9PiBuZXcgVVJMKHQpLnNlYXJjaFBhcmFtcy5nZXQobiksIGZvID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtcG9ja3l0LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIGhvID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IG1vKG4pLCByID0gYXdhaXQgSHQoeyB1cmw6IGVbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KTtcbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IFp0KHIuaHJlZiA/PyBcIlwiKSxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBlW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogZVtcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBfbywgZXJyX186IGF0IH0gPSBQKFwiYWlyd2FsbGV4LWNjXCIpLCBnbyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSksIHdvID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IGdvLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCByID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgYXQociksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgYm8gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgdm8gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInBheW1lbnRfaW50ZW50X2lkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGludGVudCBJRCBmb3VuZCBpbiBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIF9vKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke259XWApLCBuO1xuICB9IGNhdGNoIChuKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBhdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke1oobil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgRW8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gd28obiksIHIgPSBhd2FpdCBIdCh7IHVybDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pLCBhID0gdm8oci5ocmVmID8/IFwiXCIpLCBpID0gZVtcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGkgIT09IGEpIHtcbiAgICBjb25zdCBjID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBsID0gYEludGVudCBJRCBmcm9tIGNhbGxiYWNrICgke2F9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aX0pLmA7XG4gICAgdGhyb3cgYXQobCksIG5ldyBFcnJvcihjKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICBpbml0aWFsX2ludGVudF9pZDogYSxcbiAgICAgIGNvbnNlbnRfaWQ6IGVbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbn0sIEJ0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBRdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgQ28gPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSksIFNvID0geiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IG1lLCBlcnJfXzogRWUgfSA9IFAoXCJhZHllbi1jY1wiKSwgUG8gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBDbyxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KSwgWHQgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGtvID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IFBvLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFuLnN1Y2Nlc3MpXG4gICAgdGhyb3cgRWUoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIG5ldyBFcnJvcihYdCk7XG4gIHJldHVybiBuLmRhdGE7XG59LCBBbyA9ICh0KSA9PiBKU09OLnBhcnNlKHQpLCBtdCA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCBJbyA9IGFzeW5jICgpID0+IHtcbiAgbWUoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgdCA9IDA7IHQgPCAxMDsgdCsrKVxuICAgIG10KCkgfHwgYXdhaXQgbnQoNTAwKTtcbiAgaWYgKCFtdCgpKVxuICAgIHRocm93IEVlKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcihYdCk7XG4gIHJldHVybiBtZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sIFJvID0gKHQpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiBuLCBsb2NhbGU6IGUsIGNvdW50cnlDb2RlOiByLCBjb21wb25lbnQ6IGEsIGhvc3Q6IGksIGNhbmNlbEJ1dHRvbjogcyB9ID0gdCwgYyA9IEFvKG5bXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gbWUoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgbWUoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaCksIGkucmVtb3ZlKCk7XG4gICAgfSwgZCA9IChtKSA9PiB7XG4gICAgICBFZShcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBtKSwgbCh7IHN0YXR1czogUi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGYgPSAobSkgPT4ge1xuICAgICAgRWUoXCJBZHllbiBlcnJvcjpcIiwgbSksIGwoeyBzdGF0dXM6IFIuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogUi5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoKTtcbiAgICBjb25zdCB5ID0gKG0sIF8sIHYpID0+IHtcbiAgICAgIGkucmVtb3ZlKCksIGwoeyBzdGF0dXM6IFIuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IG0sIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBJbygpLnRoZW4oXG4gICAgICAobSkgPT4gbSh7XG4gICAgICAgIGNsaWVudEtleTogbltcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBuW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogZSxcbiAgICAgICAgY291bnRyeUNvZGU6IHIsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IHksXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogZCxcbiAgICAgICAgb25FcnJvcjogZlxuICAgICAgfSlcbiAgICApLnRoZW4oKG0pID0+IHtcbiAgICAgIG0uY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChhKTtcbiAgICB9KTtcbiAgfSk7XG59LCBGbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgZSA9IHQgPz8gbiwgciA9IFNvLnNhZmVQYXJzZShlKTtcbiAgcmV0dXJuIHIuc3VjY2VzcyA/IChtZShgUmVzb2x2ZWQgbG9jYWxlOiAke3IuZGF0YX1gKSwgci5kYXRhKSA6IChFZShgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7ZX0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBEbyA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgTW8gPSBhc3luYyAodCwgbiwgZSkgPT4ge1xuICBjb25zdCByID0ga28obiksIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBhLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBpLCBpZnJhbWU6IHMsIGNhbmNlbEJ1dHRvbjogYyB9ID0gV3QoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIHMucmVwbGFjZVdpdGgoYSk7XG4gIGNvbnN0IGwgPSBhd2FpdCBSbyh7XG4gICAgaGVhZGVyczogcixcbiAgICBsb2NhbGU6IEZvKGUpLFxuICAgIGNvdW50cnlDb2RlOiB0LFxuICAgIGNvbXBvbmVudDogYSxcbiAgICBob3N0OiBpLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gUi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IFIuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IFIuU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gbWUoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBVZShsLnN0YXR1cyk7XG59LCB7IGxvZ19fOiBDLCBlcnJfXzogeXQgfSA9IFAoXCJjb21tb24tY2NcIiksIHsgbG9nX186IGZ0IH0gPSBQKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBPbyA9IHRlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB1O1xuICAgIEMoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbiB9KTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShpKTtcbiAgICBDKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG5lKGUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgbCA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBDKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgZCA9IGF3YWl0IEtyKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKEJyKGQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgQyhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IFdyKGksIGwpO1xuICAgICAgICByZXR1cm4gQyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBDKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IGR0KGksIGwpO1xuICAgICAgICByZXR1cm4gQyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogZiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIGlmIChkIGluc3RhbmNlb2YgR3QgJiYgZC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBDKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgQyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBmID0gZm8oZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICBDKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBobyh0LmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChibyhkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgQyhcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgRW8odC5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoRG8oZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIEMoXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBNbyhcbiAgICAgICAgICAgIGVbcC5DT1VOVFJZXSxcbiAgICAgICAgICAgIGQucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHMubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtID0gYXdhaXQgenIoaSwgbCk7XG4gICAgICAgIEMoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgbSk7XG4gICAgICAgIGNvbnN0IF8gPSAoKHUgPSBkLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB1W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBmID8gQyhcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogXyA/IChDKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgam8obSkpIDogKEMoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBVbyhtLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgdiA9IG0uY2NfcG1faWQ7XG4gICAgICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIEMoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7dn1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEcoaSwge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHZcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBDKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IGIgPSBTZSh3KTtcbiAgICAgICAgICByZXR1cm4gQyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2IucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBiIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQyhg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtfID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBkdChpLCB7XG4gICAgICAgICAgICAuLi5sLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHYsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBfXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEMoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgeXQoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIHl0KGQpLCBkO1xuICAgIH1cbiAgfVxuKSwgTm8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIHJyLnBhcnNlKG4pO1xufSwgVG8gPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl0sIExvID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IFRvLmluY2x1ZGVzKGUudHlwZSkpO1xuICBpZiAoIW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBlci5wYXJzZShuKTtcbn0sIFVvID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IExvKHQpO1xuICBpZiAoZS5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBDKFwi4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIEMoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtlLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IHsgc3RhdHVzOiByIH0gPSBhd2FpdCB4ZSh7IHVybDogZS5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IG4gfSk7XG4gIGlmIChDKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtyfV1gKSwgciA9PT0gUi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyID09PSBSLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCBqbyA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IG4gPSBObyh0KTtcbiAgZnQoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bi5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IHVyKG4pLCBmdChcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIFYgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcblYuRW51bS5zdHJpcGU7XG5jb25zdCB7IGxvZ19fOiBOLCBlcnJfXzogeG8gfSA9IFAoXCJzdHJpcGUtcHJcIiksICRvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCB6byA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBOKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgZSA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCAkbyk7XG4gICAgTihcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCByID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgTShyKSwgaSA9IGEubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIE4oXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IF9lKHIsIGEudG9rZW4sIGksIHZvaWQgMCksIGMgPSBhd2FpdCBzcihcbiAgICAgIGUubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIGlcbiAgICApO1xuICAgIE4oXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBjLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGwgPT09IG51bGwpXG4gICAgICByZXR1cm4geG8oXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIE4oXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgbCk7XG4gICAgY29uc3QgdSA9IChkLCBmKSA9PiBJLnN0cmlwZVBSLnJ1bih7XG4gICAgICBjb250ZXh0OiB0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGQpLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogSih0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZiA9PSBudWxsID8gdm9pZCAwIDogZi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgIHByb2Nlc3NvcjogVi5FbnVtLnN0cmlwZSxcbiAgICAgICAgcHI6IGMsXG4gICAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBsLmFwcGxlUGF5LCBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5IH0sXG4gICAgICAgIHN0YXJ0RmxvdzogdVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYyxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogbC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIEdvID0gdGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICBpbml0UmVzdWx0OiBpXG4gIH0pID0+IHtcbiAgICBpZiAoTihcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGEucHJvdmlkZXIgIT09IG4ucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2EucHJvdmlkZXJ9LCBnb3QgJHtuLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBpLnByO1xuICAgIGlmIChhICE9IG51bGwgJiYgYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBtID0gYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgTihcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgbSksIHFvKGMsIG0uYW1vdW50LCBtLnBlbmRpbmcsIG0uYXBwbGVQYXlQYXltZW50UmVxdWVzdCk7XG4gICAgfVxuICAgIE4oXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IGNyKGMpO1xuICAgIE4oXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCBOKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0gVm8oZSwgbCksIGQgPSBuZSh1LCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgTihcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IGYgPSBhd2FpdCBHcihzLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG5cbiAgICB9KSwgaCA9IFlvKGYpO1xuICAgIE4oXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBscihoLCBsKTtcbiAgICBjb25zdCB5ID0gYXdhaXQgTShzKTtcbiAgICBpZiAoeS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE4oXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBtID0gYXdhaXQgRyhzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogU2UobSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgTihcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBtID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiB5LmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB5LmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnQocywgbSkgfTtcbiAgICB9XG4gIH1cbiksIFZvID0gKHQsIG4pID0+IHtcbiAgdmFyIGwsIHUsIGQsIGY7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW3IsIC4uLmFdID0gKCh1ID0gKGwgPSBuLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogdS5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwLCBzID0gKGYgPSAoZCA9IG4ucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IGQuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogZi5hZGRyZXNzLCBjID0gbi5zaGlwcGluZ0FkZHJlc3M7XG4gIHJldHVybiBlW3AuRklSU1RfTkFNRV0gPSBlW3AuRklSU1RfTkFNRV0gfHwgciB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5MQVNUX05BTUVdID0gZVtwLkxBU1RfTkFNRV0gfHwgaSB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5FTUFJTF0gPSBlW3AuRU1BSUxdIHx8IG4ucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbcC5aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGVbcC5DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCIsIE4oXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBxbyA9ICh0LCBuLCBlLCByKSA9PiB7XG4gIHQudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBuLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogZVxuICAgIH0sXG4gICAgY3VycmVuY3k6IG4uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogclxuICB9KTtcbn0sIFlvID0gKHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7dC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIG9yLnBhcnNlKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIHsgbG9nX186IEssIGVycl9fOiBodCB9ID0gUChcInBvY2t5dC1wYXlwYWxcIiksIEtvID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBXbyA9IHRlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBqLCBsZTtcbiAgICBLKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0oaSk7XG4gICAgSyhcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYyA9IEtvLnBhcnNlKG4pO1xuICAgIEsoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzLCB1ID0gbmUoXG4gICAgICBlLFxuICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBsID09IG51bGwgPyB2b2lkIDAgOiBsLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGQgPSBacih1KTtcbiAgICBLKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgY29uc3QgZiA9IHY0KCksIGggPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgeSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoaiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MpICE9IG51bGwgJiYgai51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZlxuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCBtID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgdC5iYXNlVXJsKS50b1N0cmluZygpLCBfID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIHYgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgcjogX1xuICAgIH0pLCB3ID0gYCR7bX0/JHt2LnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKGxlID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBsZS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBLKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHcsIGF3YWl0IG50KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgSyhcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgSyhcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBiID0gYXdhaXQgbG8oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgaSxcbiAgICAgIGYsXG4gICAgICB3XG4gICAgKTtcbiAgICBLKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIGIpO1xuICAgIGNvbnN0IEUgPSBadChiLmhyZWYpLCBrID0geW8oYi5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFrKVxuICAgICAgdGhyb3cgaHQoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIGIuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBLKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke0V9YCk7XG4gICAgY29uc3QgTyA9IGF3YWl0IEcoaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IEUsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBoID8gayA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChLKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIE8pLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IE8ucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgaHQoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBPKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksICRlID0gKHtcbiAgZ2F0ZXdheTogdCxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4sXG4gIG1lcmNoYW50TmFtZTogZSxcbiAgbWVyY2hhbnRJZDogcixcbiAgaW5pdGlhbFByZXZpZXc6IGEsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksXG4gIHByZWZpbGw6IHNcbn0pID0+IHtcbiAgdmFyIGYsIGg7XG4gIGNvbnN0IGMgPSAoKGYgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYW1vdW50QXRvbSkgPz8gKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgoaCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogaC5jdXJyZW5jeSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY3VycmVuY3kpID8/IGEuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiB0LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiByID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IGVcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGkgIT0gbnVsbCAmJiBpLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gaSAhPSBudWxsICYmIGkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB7IC4uLmQsIC4uLmkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgfSA6IGQ7XG59LCBlbiA9ICgpID0+IG5ldyBQcm9taXNlKCh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICBlLnNyYyA9IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiBuKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pO1xubGV0IHFlID0gbnVsbDtcbmNvbnN0IHRuID0gKHQpID0+IHQgPT09IGV0IHx8IHQgPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCB6ZSA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSB0bih0KTtcbiAgcmV0dXJuIHFlID09PSBudWxsICYmIChxZSA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IGUsXG4gICAgbWVyY2hhbnRJbmZvOiBuLm1lcmNoYW50SW5mb1xuICB9KSksIHFlO1xufSwgSG8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiBuID8gT3QucGFyc2UobikgOiBudWxsO1xufSwgbm4gPSAodCwgbikgPT4ge1xuICB2YXIgYSwgaSwgcywgYztcbiAgY29uc3QgZSA9IHsgLi4udCB9LCByID0gKGkgPSAoYSA9IG4ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBhLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBpLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAocikge1xuICAgIGNvbnN0IFtsLCAuLi51XSA9ICgoYyA9IChzID0gci5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogcy50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBkID0gdS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgbi5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbcC5DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSB8fCByLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgZVtwLkFERFJFU1NdID0gZVtwLkFERFJFU1NdIHx8IHIuYWRkcmVzczEgfHwgXCJcIiwgZVtwLkNJVFldID0gZVtwLkNJVFldIHx8IHIubG9jYWxpdHkgfHwgXCJcIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgci5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgZVtwLlNUQVRFXSA9IGVbcC5TVEFURV0gfHwgci5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgZVtwLkZJUlNUX05BTUVdID0gZVtwLkZJUlNUX05BTUVdIHx8IGwgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuTEFTVF9OQU1FXSA9IGVbcC5MQVNUX05BTUVdIHx8IGQgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBlO1xufSwgeyBsb2dfXzogeiwgZXJyX186IHVlIH0gPSBQKFwiYXd4LWdvb2dsZS1wYXlcIiksIEpvID0gY2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIHZhciBmLCBoO1xuICAgIGNvbnN0IGUgPSB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBRdCk7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIGU7XG4gICAgeihcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGEgPSByLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB1ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIGU7XG4gICAgaWYgKHooXCJMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uXCIpLCBhd2FpdCBlbigpLCAhKChoID0gKGYgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZi5wYXltZW50cykgIT0gbnVsbCAmJiBoLmFwaSkpXG4gICAgICByZXR1cm4gdWUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBlO1xuICAgIGlmICh0bih0LmJhc2VVcmwpID09PSBcIlBST0RVQ1RJT05cIiAmJiAhYS5nb29nbGVfcGF5X21lcmNoYW50X2lkKVxuICAgICAgcmV0dXJuIHVlKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKSwgZTtcbiAgICB6KFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB5ID0gJGUoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHsgcmVzdWx0OiBtIH0gPSBhd2FpdCB6ZSh0LmJhc2VVcmwsIHkpLmlzUmVhZHlUb1BheShcbiAgICAgICAgeVxuICAgICAgKTtcbiAgICAgIGlmICghbSlcbiAgICAgICAgcmV0dXJuIHooXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgZTtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICByZXR1cm4gdWUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB5KSwgZTtcbiAgICB9XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IF9lKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgSS5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICB1ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgbi5nZXQub25DaGVja291dEVycm9yKChtID09IG51bGwgPyB2b2lkIDAgOiBtLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgWm8gPSB0ZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgaCwgeSwgbSwgXywgdiwgdztcbiAgICB6KFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUXQpLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBhLCBsID0gaS5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSAkZSh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSksIGQgPSB6ZSh0LmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiID0gYXdhaXQgZC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICB6KFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgYik7XG4gICAgICBjb25zdCBFID0gdC5hbnlDZGVDb25uZWN0aW9uLCBrID0gYXdhaXQgTShFKSwgTyA9IG5uKGUsIGIpLCBqID0gbmUoXG4gICAgICAgIE8sXG4gICAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBhID09IG51bGwgPyB2b2lkIDAgOiBhLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKSwgbGUgPSAoaCA9IChmID0gYi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW47XG4gICAgICBpZiAoIWxlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHduID0gYXdhaXQgaGUoRSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBqW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogaltwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBqW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogaltwLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBqW3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSksIGtlID0gSG8od24pO1xuICAgICAgeihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIGtlKTtcbiAgICAgIGxldCBvZSA9IGF3YWl0IEcoRSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGsudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGtlID09IG51bGwgPyB2b2lkIDAgOiBrZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBsZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB6KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgb2UpO1xuICAgICAgbGV0IFZlID0gKG0gPSAoeSA9IG9lLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBtLmlkO1xuICAgICAgY29uc3QgYWUgPSAoXyA9IG9lLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uZmluZChcbiAgICAgICAgKGdlKSA9PiBnZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChhZSAmJiBhZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgeihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGFlKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGdlIH0gPSBhd2FpdCB4ZSh7XG4gICAgICAgICAgdXJsOiBhZS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogdC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoeihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7Z2V9XWApLCBnZSA9PT0gUi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChnZSA9PT0gUi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGFlICYmICFWZSAmJiAob2UgPSBhd2FpdCBHKEUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBrLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogYWUudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGFlLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHooXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBvZSksIFZlID0gKHcgPSAodiA9IG9lLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB3LmlkKSwgIVZlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBqZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IEUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBqLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBvZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgdWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBybiA9ICgpID0+IG5ldyBQcm9taXNlKCh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICBlLnNyYyA9IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIiwgZS5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IG4obmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgb24gPSAodCwgbikgPT4ge1xuICBjb25zdCBlID0gbi50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0LCByID0gbi5iaWxsaW5nQ29udGFjdCwgYSA9IG4uc2hpcHBpbmdDb250YWN0LCBpID0geyAuLi50IH07XG4gIHJldHVybiAoZSB8fCByIHx8IGEpICYmIChpW3AuRU1BSUxdID0gaVtwLkVNQUlMXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5lbWFpbEFkZHJlc3MpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmVtYWlsQWRkcmVzcykgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBpW3AuQ09VTlRSWV0gPSBpW3AuQ09VTlRSWV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY291bnRyeUNvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBpW3AuWklQX0NPREVdID0gaVtwLlpJUF9DT0RFXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5wb3N0YWxDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGlbcC5GSVJTVF9OQU1FXSA9IGlbcC5GSVJTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5naXZlbk5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmdpdmVuTmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZ2l2ZW5OYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIsIGlbcC5MQVNUX05BTUVdID0gaVtwLkxBU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZmFtaWx5TmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmFtaWx5TmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiKSwgaTtcbn07XG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgYW4gPSAoe1xuICB0b3RhbDogdCxcbiAgcHJlZmlsbDogblxufSkgPT4ge1xuICB2YXIgcjtcbiAgaWYgKG4ubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGJpbGxpbmcgcG9ydGFsIHVybFxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vcGFzc2tpdC9wa3JlY3VycmluZ3BheW1lbnRyZXF1ZXN0L21hbmFnZW1lbnR1cmwjRGlzY3Vzc2lvblxuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB1c2VkIHdoZW4gdXNlciByZW1vdmUgYSBjYXJkIGZyb20gdGhlaXIgQXBwbGVQYXkgd2FsbGV0LlxuICAgICAgLy8gQ3VycmVudHkgc2V0IHRvIGNoZWNrb3V0IHNlc3Npb24gdXJsIHRvIHNhdGlzZnkgQXBwbGVQYXkgdHlwZXNcbiAgICAgIG1hbmFnZW1lbnRVUkw6IG5ldyBVUkwoYC9wYXkvJHtuLnRva2VufWAsIGV0KS50b1N0cmluZygpXG4gICAgfTtcbiAgY29uc3QgZSA9IChyID0gbi5saW5lX2l0ZW1zKSA9PSBudWxsID8gdm9pZCAwIDogclswXTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGVzY3JpcHRpb24pID8/IFwiXCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHQuYW1vdW50LFxuICAgICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGVzY3JpcHRpb24pID8/IFwiXCIsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmJpbGxpbmdfaW50ZXJ2YWxfY291bnQpID8/IHZvaWQgMCxcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke24udG9rZW59YFxuICAgIH07XG59LCBzbiA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHQsXG4gIGluaXRpYWxQcmV2aWV3OiBuLFxuICBwcmVmaWxsOiBlLFxuICBkZWZhdWx0TGFiZWw6IHIgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgdmFyIGMsIGw7XG4gIGNvbnN0IGEgPSAoKChjID0gdCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBjLmN1cnJlbmN5KSA/PyAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jdXJyZW5jeSkgPz8gbi5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcyA9ICgoKChsID0gdCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudEF0b20pID8/IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmFtb3VudEF0b20pID8/IDApIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZTogYSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxhYmVsKSA/PyByID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IHQgIT0gbnVsbCAmJiB0LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudDogc1xuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IFJlIH0gPSBQKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIEJvKHQsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IG90KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogdC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFFvKHQsIG4pIHtcbiAgaWYgKCF0LnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIFJlKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgdCk7XG4gIGNvbnN0IHsgc3RhdHVzOiBlIH0gPSBhd2FpdCB4ZSh7XG4gICAgdXJsOiB0LnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBuLmJhc2VVcmxcbiAgfSk7XG4gIGlmIChSZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7ZX1dYCksIGUgPT09IFIuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoZSA9PT0gUi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCByID0gYXdhaXQgRyhuLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiB0LnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHQuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFJlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgciksIHI7XG59XG5hc3luYyBmdW5jdGlvbiBYbyh0LCBuKSB7XG4gIHZhciBlLCByLCBhLCBpLCBzO1xuICB0cnkge1xuICAgIGNvbnN0IGMgPSB0LnBheW1lbnQsIGwgPSBvbihuLm5vbkNkZUZvcm1JbnB1dHMsIGMpLCB1ID0gbmUoXG4gICAgICBsLFxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgaCA9IChhd2FpdCBoZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB1W3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHVbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHVbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IHVbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IHVbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIWgpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCB5ID0gYXdhaXQgRyhuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogaCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBSZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHkpO1xuICAgIGxldCBtID0gKHIgPSAoZSA9IHkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQ7XG4gICAgY29uc3QgXyA9IChhID0geS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKF8gIT0gbnVsbCAmJiBfLnJlZGlyZWN0X3VybCAmJiBfLmNvbnNlbnRfaWQgJiYgXy50aGVpcl9wbV9pZCAmJiAoeSA9IGF3YWl0IFFvKF8sIG4pLCBtID0gKHMgPSAoaSA9IHkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAhbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodiksIGplKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBkZSwgZXJyX186IEhlIH0gPSBQKFwiYXd4LWFwcGxlLXBheVwiKSwgZWEgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEJ0KTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICBkZShcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcm4oKSwgZGUoXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIEhlKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBmKSwgZTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gZGUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCBlO1xuICAgIGlmIChkZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gZGUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIGU7XG4gICAgaWYgKCFyLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgX2UocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBJLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSih0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgSGUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgbi5nZXQub25DaGVja291dEVycm9yKChoID09IG51bGwgPyB2b2lkIDAgOiBoLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgdGEgPSB0ZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGN1c3RvbVBhcmFtczogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdjtcbiAgICBjb25zdCBpID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEJ0KSwgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLCBpbml0aWFsUHJldmlldzogYyB9ID0gciwgbCA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE0obCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgeyBjdXJyZW5jeUNvZGU6IGYsIHRvdGFsOiBoIH0gPSBzbih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBkZWZhdWx0TGFiZWw6ICh2ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCB5ID0ge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogZixcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgICAgXSxcbiAgICAgIHRvdGFsOiBoLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IGFuKHtcbiAgICAgICAgdG90YWw6IGgsXG4gICAgICAgIHByZWZpbGw6IHVcbiAgICAgIH0pLFxuICAgICAgLi4uKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9LCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgXyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogaS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGEsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHcsIGIpID0+IHtcbiAgICAgIGNvbnN0IEUgPSAoKSA9PiB7XG4gICAgICAgIGRlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgYihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBtLm9uY2FuY2VsID0gRSwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEJvKGssIF8pO1xuICAgICAgICB9IGNhdGNoIChPKSB7XG4gICAgICAgICAgYihPKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgayA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5oIH1cbiAgICAgICAgfTtcbiAgICAgICAgbS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oayk7XG4gICAgICB9LCBtLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IE8gPSBhd2FpdCBYbyhrLCBfKTtcbiAgICAgICAgICB3KE8pO1xuICAgICAgICB9IGNhdGNoIChPKSB7XG4gICAgICAgICAgYihPKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKCh3KSA9PiB7XG4gICAgICB0aHJvdyBIZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHcpLCB3O1xuICAgIH0pO1xuICB9XG4pLCBuYSA9IDEsIHJhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCB7IGxvZ19fOiBMLCBlcnJfXzogY24gfSA9IFAoXCJsb29wLWNyeXB0b1wiKSwgb2EgPSB6JDEub2JqZWN0KHtcbiAgbG9vcEZpcnN0TmFtZTogQSxcbiAgbG9vcExhc3ROYW1lOiBBLFxuICBsb29wRW1haWw6IEEsXG4gIFtwLlBST01PVElPTl9DT0RFXTogU1xufSksIGFhID0gKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgciA9IG9hLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gci5lcnJvci5mb3JtYXQoKSwgaSA9IE50KGEpO1xuICAgIGZvciAoY29uc3QgW3MsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgbihzLCBjLCBzKTtcbiAgICB0aHJvdyBjbihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgaWEgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgTChcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5cIik7XG4gICAgY29uc3QgbiA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCByYSk7XG4gICAgTChgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KG4pfWApLCBMKFwiU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLlwiKTtcbiAgICBjb25zdCBlID0gYXdhaXQgTSh0LmFueUNkZUNvbm5lY3Rpb24pLCByID0gYXdhaXQgb3QodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgIH0pO1xuICAgIGlmIChlLm1vZGUgIT09IFwic2V0dXBcIiAmJiAhbi5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhlLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtlLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke24ubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIXIgfHwgIXIubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBhID0gci5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgaTtcbiAgICBlLm1vZGUgPT09IFwic2V0dXBcIiA/IGkgPSBuYSA6IGkgPSBlLmFtb3VudF90b3RhbF9hdG9tICogYS50b2tlbl9wcmljZTtcbiAgICBjb25zdCBzID0gaSwgYyA9IGEuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSB2NCgpLCB1ID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogcyxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBjdXN0b21lclJlZklkOiBsXG4gICAgfSwgZCA9IHtcbiAgICAgIGFwaUtleTogbi5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogbi5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBuLm1ldGFkYXRhLm1lcmNoYW50X2lkLFxuICAgICAgZW52aXJvbm1lbnQ6IG4ubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICB3aWRnZXRQcm9wczogdSxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzOiBkXG4gICAgfTtcbiAgfVxuKSwgc2EgPSB0ZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBMKFwiUnVubmluZyBMb29wIGZsb3cuLi5cIiksIEwoXCJjb250ZXh0XCIsIHQpLCBMKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIG4pLCBMKFwibm9uQ2RlRm9ybUlucHV0c1wiLCBlKSwgTChcImZsb3dDYWxsYmFja3NcIiwgciksIEwoXCJjdXN0b21QYXJhbXNcIiwgYSk7XG4gICAgY29uc3QgaSA9IGFhKGUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0odC5hbnlDZGVDb25uZWN0aW9uKSwgbCA9IGMubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgaGUodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGkubG9vcEVtYWlsLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGkubG9vcEZpcnN0TmFtZSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGkubG9vcExhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgY29uc3QgZCA9IGF3YWl0IEcocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IGEuc3VjY2VzcyA/IGEucGF5aW4ucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQgOiB2b2lkIDAsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLm1vZGUgIT09IFwic2V0dXBcIiA/IHUuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBhLnN1Y2Nlc3MgPyBhLmN1c3RvbWVyIDogdm9pZCAwLFxuICAgICAgICBsb29wX3BheWluOiBhLnN1Y2Nlc3MgPyBhLnBheWluIDogdm9pZCAwLFxuICAgICAgICBsb29wX2ZhaWx1cmVfZGV0YWlsczogYS5zdWNjZXNzID8gdm9pZCAwIDogYS5mYWlsdXJlRGV0YWlscyxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBhLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoTChgQ29uZmlybSByZXN1bHQ6ICR7ZH1gKSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEwoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBMKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGQpO1xuICAgICAgY29uc3QgZiA9IFNlKGQpO1xuICAgICAgcmV0dXJuIEwoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtmLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoTChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgY24oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBkKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5hc3luYyBmdW5jdGlvbiBjYSh0LCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCBvdChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogdC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGxhKHQsIG4pIHtcbiAgdmFyIGUsIHI7XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgaSA9IG9uKG4ubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBuZShpLCBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhd2FpdCBoZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IHNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IHNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgRyhuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChyID0gKGUgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZCksIGplKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChpKSwgYTtcbiAgfVxufVxuY29uc3QgbG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCB1biA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHdlLCBlcnJfXzogSmUgfSA9IFAoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCB1YSA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGxuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICB3ZShcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcm4oKSwgd2UoXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIEplKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBmKSwgZTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gd2UoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCBlO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHdlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCBlO1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IF9lKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgSS5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIEplKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBkYSA9IHRlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB2O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IHIsIGMgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgbG4pLCB7IGN1cnJlbmN5Q29kZTogbCwgdG90YWw6IHUgfSA9IHNuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHYgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIGQgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGYgPSBhd2FpdCBNKGQpLCBoID0gZi5tb2RlID09PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBsLFxuICAgICAgdG90YWw6IHUsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IGFuKHtcbiAgICAgICAgdG90YWw6IHUsXG4gICAgICAgIHByZWZpbGw6IGZcbiAgICAgIH0pLFxuICAgICAgLi4uKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9LCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgXyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogbi5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IGYsXG4gICAgICBpc1NldHVwTW9kZTogaCxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgodywgYikgPT4ge1xuICAgICAgbS5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgd2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGNhKEUsIF8pO1xuICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgYihrKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgRSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihFKTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChFKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgayA9IGF3YWl0IGxhKEUsIF8pO1xuICAgICAgICAgIHcoayk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICBiKGspO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEplKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIHc7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHNlLCBlcnJfXzogYmUgfSA9IFAoXCJhdXRobmV0LWdvb2dsZXBheVwiKSwgcGEgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGQsIGY7XG4gICAgc2UoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHVuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICBzZShcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGEgPSByLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBiZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIGU7XG4gICAgaWYgKHNlKFwiTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLlwiKSwgYXdhaXQgZW4oKSwgISgoZiA9IChkID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQucGF5bWVudHMpICE9IG51bGwgJiYgZi5hcGkpKVxuICAgICAgcmV0dXJuIGJlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgZTtcbiAgICBzZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaCA9ICRlKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgemUodC5iYXNlVXJsLCBoKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIGhcbiAgICAgICk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiBzZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHJldHVybiBiZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGgpLCBlO1xuICAgIH1cbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShpKSwgYyA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgX2UoaSwgcy50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBJLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmgsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIGJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgbWEgPSB0ZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgaCwgeSwgbTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzIH0gPSBhLCBsID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHVuKS5tZXRhZGF0YSwgdSA9ICRlKHtcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgZCA9IHplKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHNlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgXyk7XG4gICAgICBjb25zdCB2ID0gdC5hbnlDZGVDb25uZWN0aW9uLCB3ID0gYXdhaXQgTSh2KSwgYiA9IG5uKG4sIF8pLCBFID0gbmUoYiwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBrID0gKGggPSAoZiA9IF8ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBoLnRva2VuO1xuICAgICAgaWYgKCFrKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBoZSh2LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBFW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IEVbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE8pO1xuICAgICAgY29uc3QgaiA9IGF3YWl0IEcodiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHcudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShrKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgobSA9ICh5ID0gai5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB5WzBdKSA9PSBudWxsID8gdm9pZCAwIDogbS5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGplKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHYsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBqLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0aHJvdyBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgbmV3IEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHZlID0gKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgciA9IHQuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgaSA9IGUgPT09IHZvaWQgMCA/ICEwIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgcyA9IGEucHJvdmlkZXIgPT09IG47XG4gICAgcmV0dXJuIGkgJiYgcztcbiAgfSk7XG4gIGlmIChyLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKHIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIHJbMF07XG59LCBJID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IE9vXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IHpvLFxuICAgIHJ1bjogR29cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IHRvLFxuICAgIHJ1bjogbm9cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogV29cbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IEpvLFxuICAgIHJ1bjogWm9cbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBlYSxcbiAgICBydW46IHRhXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGlhLFxuICAgIHJ1bjogc2FcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiB1YSxcbiAgICBydW46IGRhXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IHBhLFxuICAgIHJ1bjogbWFcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgWmUgPSBmdW5jdGlvbih0LCBuKSB7XG4gIHJldHVybiBaZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIHIpIHtcbiAgICBlLl9fcHJvdG9fXyA9IHI7XG4gIH0gfHwgZnVuY3Rpb24oZSwgcikge1xuICAgIGZvciAodmFyIGEgaW4gcikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGEpICYmIChlW2FdID0gclthXSk7XG4gIH0sIFplKHQsIG4pO1xufTtcbmZ1bmN0aW9uIHJlKHQsIG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9IFwiZnVuY3Rpb25cIiAmJiBuICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKG4pICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgWmUodCwgbik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSBuID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShuKSA6IChlLnByb3RvdHlwZSA9IG4ucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIHlhKHQsIG4sIGUsIHIpIHtcbiAgZnVuY3Rpb24gYShpKSB7XG4gICAgcmV0dXJuIGkgaW5zdGFuY2VvZiBlID8gaSA6IG5ldyBlKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMoaSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihpLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBpKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZG4odCwgbikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgYSwgaSwgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBhICYmIChpID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgoaSA9IGEucmV0dXJuKSAmJiBpLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKGkgPSBpLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBpO1xuICAgICAgc3dpdGNoIChhID0gMCwgaSAmJiAodSA9IFt1WzBdICYgMiwgaS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGkgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaSA9IGUudHJ5cywgIShpID0gaS5sZW5ndGggPiAwICYmIGlbaS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghaSB8fCB1WzFdID4gaVswXSAmJiB1WzFdIDwgaVszXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCBpWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gaVsxXSwgaSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgJiYgZS5sYWJlbCA8IGlbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBpWzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBuLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSBpID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24geWUodCkge1xuICB2YXIgbiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IG4gJiYgdFtuXSwgciA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIHIgPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbcisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IobiA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIE1lKHQsIG4pIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciByID0gZS5jYWxsKHQpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7IChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShhID0gci5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChlID0gci5yZXR1cm4pICYmIGUuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gT2UodCwgbiwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIGEgPSBuLmxlbmd0aCwgaTsgciA8IGE7IHIrKylcbiAgICAoaSB8fCAhKHIgaW4gbikpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobiwgMCwgcikpLCBpW3JdID0gbltyXSk7XG4gIHJldHVybiB0LmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKTtcbn1cbmZ1bmN0aW9uIHBlKHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBwZSA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBwZSh0KTtcbn1cbmZ1bmN0aW9uIGZhKHQsIG4sIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSBlLmFwcGx5KHQsIG4gfHwgW10pLCBhLCBpID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobSkudGhlbih5LCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoeSwgbSkge1xuICAgIHJbeV0gJiYgKGFbeV0gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odiwgdykge1xuICAgICAgICBpLnB1c2goW3ksIF8sIHYsIHddKSA+IDEgfHwgbCh5LCBfKTtcbiAgICAgIH0pO1xuICAgIH0sIG0gJiYgKGFbeV0gPSBtKGFbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbCh5LCBtKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoclt5XShtKSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaChpWzBdWzNdLCBfKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIHBlID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBmKSA6IGgoaVswXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgbChcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZih5KSB7XG4gICAgbChcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIGgoeSwgbSkge1xuICAgIHkobSksIGkuc2hpZnQoKSwgaS5sZW5ndGggJiYgbChpWzBdWzBdLCBpWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gaGEodCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gbiA/IG4uY2FsbCh0KSA6ICh0ID0gdHlwZW9mIHllID09IFwiZnVuY3Rpb25cIiA/IHllKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgcihcIm5leHRcIiksIHIoXCJ0aHJvd1wiKSwgcihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIHIoaSkge1xuICAgIGVbaV0gPSB0W2ldICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSB0W2ldKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEoaSwgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGkoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gRCh0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBHZSh0KSB7XG4gIHZhciBuID0gZnVuY3Rpb24ocikge1xuICAgIEVycm9yLmNhbGwociksIHIuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQobik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIFllID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihyLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyByLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gTmUodCwgbikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKG4pO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIFBlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gbiwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIGUsIHIsIGEsIGk7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0geWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbiA9IHsgZXJyb3I6IF8gfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChEKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIGkgPSBfIGluc3RhbmNlb2YgWWUgPyBfLmVycm9ycyA6IFtfXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgaCA9IHllKGYpLCB5ID0gaC5uZXh0KCk7ICF5LmRvbmU7IHkgPSBoLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIG0gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgX3QobSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgIGkgPSBpID8/IFtdLCBfIGluc3RhbmNlb2YgWWUgPyBpID0gT2UoT2UoW10sIE1lKGkpKSwgTWUoXy5lcnJvcnMpKSA6IGkucHVzaChfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGEgPSBoLnJldHVybikgJiYgYS5jYWxsKGgpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpKVxuICAgICAgICB0aHJvdyBuZXcgWWUoaSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKG4gJiYgbiAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgX3Qobik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKG4uY2xvc2VkIHx8IG4uX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBuLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gbiB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMobik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gobiksIGUpIDogZSA/IFtlLCBuXSA6IG47XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gbiA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIE5lKGUsIG4pO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgTmUoZSwgbiksIG4gaW5zdGFuY2VvZiB0ICYmIG4uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gbmV3IHQoKTtcbiAgICByZXR1cm4gbi5jbG9zZWQgPSAhMCwgbjtcbiAgfSgpLCB0O1xufSgpLCBwbiA9IFBlLkVNUFRZO1xuZnVuY3Rpb24gbW4odCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIFBlIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIEQodC5yZW1vdmUpICYmIEQodC5hZGQpICYmIEQodC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBfdCh0KSB7XG4gIEQodCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgeW4gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgZm4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIG4pIHtcbiAgICBmb3IgKHZhciBlID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgZVtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBPZShbdCwgbl0sIE1lKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGhuKHQpIHtcbiAgZm4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIGd0KCkge1xufVxuZnVuY3Rpb24gRmUodCkge1xuICB0KCk7XG59XG52YXIgaXQgPSBmdW5jdGlvbih0KSB7XG4gIHJlKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUpIHtcbiAgICB2YXIgciA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmlzU3RvcHBlZCA9ICExLCBlID8gKHIuZGVzdGluYXRpb24gPSBlLCBtbihlKSAmJiBlLmFkZChyKSkgOiByLmRlc3RpbmF0aW9uID0gYmEsIHI7XG4gIH1cbiAgcmV0dXJuIG4uY3JlYXRlID0gZnVuY3Rpb24oZSwgciwgYSkge1xuICAgIHJldHVybiBuZXcgQmUoZSwgciwgYSk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgbi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCBuLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG4ucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG47XG59KFBlKSwgX2EgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEtlKHQsIG4pIHtcbiAgcmV0dXJuIF9hLmNhbGwodCwgbik7XG59XG52YXIgZ2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBuO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgSWUocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBJZShyKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBJZShuKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChuLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgbi5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBJZShlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgQmUgPSBmdW5jdGlvbih0KSB7XG4gIHJlKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIsIGEpIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChEKGUpIHx8ICFlKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiByID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBpICYmIHluLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIEtlKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIEtlKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBLZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBuZXcgZ2EocyksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KGl0KTtcbmZ1bmN0aW9uIEllKHQpIHtcbiAgaG4odCk7XG59XG5mdW5jdGlvbiB3YSh0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgYmEgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGd0LFxuICBlcnJvcjogd2EsXG4gIGNvbXBsZXRlOiBndFxufSwgc3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiB2YSh0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gRWEodCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyB2YSA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24ociwgYSkge1xuICAgICAgcmV0dXJuIGEocik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgZWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgbiAmJiAodGhpcy5fc3Vic2NyaWJlID0gbik7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSBuZXcgdCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGUub3BlcmF0b3IgPSBuLCBlO1xuICB9LCB0LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihuLCBlLCByKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBpID0gU2EobikgPyBuIDogbmV3IEJlKG4sIGUsIHIpO1xuICAgIHJldHVybiBGZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIGkuYWRkKGMgPyBjLmNhbGwoaSwgbCkgOiBsID8gYS5fc3Vic2NyaWJlKGkpIDogYS5fdHJ5U3Vic2NyaWJlKGkpKTtcbiAgICB9KSwgaTtcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBuLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG4sIGUpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSB3dChlKSwgbmV3IGUoZnVuY3Rpb24oYSwgaSkge1xuICAgICAgdmFyIHMgPSBuZXcgQmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG4oYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgaShsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGksXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIHIuc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShuKTtcbiAgfSwgdC5wcm90b3R5cGVbc3RdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgbltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gRWEobikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIG4gPSB3dChuKSwgbmV3IG4oZnVuY3Rpb24ociwgYSkge1xuICAgICAgdmFyIGk7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBpID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIoaSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIG5ldyB0KG4pO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gd3QodCkge1xuICB2YXIgbjtcbiAgcmV0dXJuIChuID0gdCA/PyB5bi5Qcm9taXNlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIENhKHQpIHtcbiAgcmV0dXJuIHQgJiYgRCh0Lm5leHQpICYmIEQodC5lcnJvcikgJiYgRCh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIFNhKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIGl0IHx8IENhKHQpICYmIG1uKHQpO1xufVxuZnVuY3Rpb24gUGEodCkge1xuICByZXR1cm4gRCh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24ga2EodCkge1xuICByZXR1cm4gZnVuY3Rpb24obikge1xuICAgIGlmIChQYShuKSlcbiAgICAgIHJldHVybiBuLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gQWEodCwgbiwgZSwgciwgYSkge1xuICByZXR1cm4gbmV3IElhKHQsIG4sIGUsIHIsIGEpO1xufVxudmFyIElhID0gZnVuY3Rpb24odCkge1xuICByZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByLCBhLCBpLCBzLCBjKSB7XG4gICAgdmFyIGwgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSByID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gaSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkodSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIGUuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGUuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgciA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIXIgJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIG47XG59KGl0KSwgUmEgPSBHZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIF9uID0gZnVuY3Rpb24odCkge1xuICByZShuLCB0KTtcbiAgZnVuY3Rpb24gbigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByID0gbmV3IGJ0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiByLm9wZXJhdG9yID0gZSwgcjtcbiAgfSwgbi5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgUmEoKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgRmUoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSwgaTtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmN1cnJlbnRPYnNlcnZlcnMgfHwgKHIuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oci5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0geWUoci5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBhID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKGkgPSBzLnJldHVybikgJiYgaS5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIEZlKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaGFzRXJyb3IgPSByLmlzU3RvcHBlZCA9ICEwLCByLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgYSA9IHIub2JzZXJ2ZXJzOyBhLmxlbmd0aDsgKVxuICAgICAgICAgIGEuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgRmUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgciA9IGUub2JzZXJ2ZXJzOyByLmxlbmd0aDsgKVxuICAgICAgICAgIHIuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG4ucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCBuLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzLCBhID0gdGhpcywgaSA9IGEuaGFzRXJyb3IsIHMgPSBhLmlzU3RvcHBlZCwgYyA9IGEub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBpIHx8IHMgPyBwbiA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBQZShmdW5jdGlvbigpIHtcbiAgICAgIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIE5lKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgbi5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzLCBhID0gci5oYXNFcnJvciwgaSA9IHIudGhyb3duRXJyb3IsIHMgPSByLmlzU3RvcHBlZDtcbiAgICBhID8gZS5lcnJvcihpKSA6IHMgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCBuLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBlZSgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIG4uY3JlYXRlID0gZnVuY3Rpb24oZSwgcikge1xuICAgIHJldHVybiBuZXcgYnQoZSwgcik7XG4gIH0sIG47XG59KGVlKSwgYnQgPSBmdW5jdGlvbih0KSB7XG4gIHJlKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gZSwgYS5zb3VyY2UgPSByLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIChhID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwociwgZSk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIChhID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKHIsIGUpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCByO1xuICAgIChyID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKGUpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIHJldHVybiAoYSA9IChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogcG47XG4gIH0sIG47XG59KF9uKSwgRmEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIERhID0gZnVuY3Rpb24odCkge1xuICByZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbjtcbn0oUGUpLCB2dCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIG4pIHtcbiAgICBmb3IgKHZhciBlID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgZVtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgT2UoW3QsIG5dLCBNZShlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE1hID0gZnVuY3Rpb24odCkge1xuICByZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByKSB7XG4gICAgdmFyIGEgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSBlLCBhLndvcmsgPSByLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBpID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBpICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIGksIHIpKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSByLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCByKSwgdGhpcztcbiAgfSwgbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCByLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCB2dC5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGEpO1xuICB9LCBuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIHIsIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gcjtcbiAgICByICE9IG51bGwgJiYgdnQuY2xlYXJJbnRlcnZhbChyKTtcbiAgfSwgbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUoZSwgcik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGEgPSAhMSwgaTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgaSA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBpO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgciA9IGUuaWQsIGEgPSBlLnNjaGVkdWxlciwgaSA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBOZShpLCB0aGlzKSwgciAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCByLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgbjtcbn0oRGEpLCBFdCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KG4sIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IG4sIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihuLCBlLCByKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIG4pLnNjaGVkdWxlKHIsIGUpO1xuICB9LCB0Lm5vdyA9IEZhLm5vdywgdDtcbn0oKSwgT2EgPSBmdW5jdGlvbih0KSB7XG4gIHJlKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBFdC5ub3cpO1xuICAgIHZhciBhID0gdC5jYWxsKHRoaXMsIGUsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgci5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gci5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyBlID0gci5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCBuO1xufShFdCksIE5hID0gbmV3IE9hKE1hKSwgVGEgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBMYSh0KSB7XG4gIHJldHVybiBEKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiBVYSh0KSB7XG4gIHJldHVybiBEKHRbc3RdKTtcbn1cbmZ1bmN0aW9uIGphKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEQodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24geGEodCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uICRhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIHphID0gJGEoKTtcbmZ1bmN0aW9uIEdhKHQpIHtcbiAgcmV0dXJuIEQodCA9PSBudWxsID8gdm9pZCAwIDogdFt6YV0pO1xufVxuZnVuY3Rpb24gVmEodCkge1xuICByZXR1cm4gZmEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgciwgYSwgaTtcbiAgICByZXR1cm4gZG4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgcGUoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiByID0gcy5zZW50KCksIGEgPSByLnZhbHVlLCBpID0gci5kb25lLCBpID8gWzQsIHBlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIHBlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHFhKHQpIHtcbiAgcmV0dXJuIEQodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gWWEodCkge1xuICBpZiAodCBpbnN0YW5jZW9mIGVlKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKFVhKHQpKVxuICAgICAgcmV0dXJuIEthKHQpO1xuICAgIGlmIChUYSh0KSlcbiAgICAgIHJldHVybiBXYSh0KTtcbiAgICBpZiAoTGEodCkpXG4gICAgICByZXR1cm4gSGEodCk7XG4gICAgaWYgKGphKHQpKVxuICAgICAgcmV0dXJuIGduKHQpO1xuICAgIGlmIChHYSh0KSlcbiAgICAgIHJldHVybiBKYSh0KTtcbiAgICBpZiAocWEodCkpXG4gICAgICByZXR1cm4gWmEodCk7XG4gIH1cbiAgdGhyb3cgeGEodCk7XG59XG5mdW5jdGlvbiBLYSh0KSB7XG4gIHJldHVybiBuZXcgZWUoZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdFtzdF0oKTtcbiAgICBpZiAoRChlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUobik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFdhKHQpIHtcbiAgcmV0dXJuIG5ldyBlZShmdW5jdGlvbihuKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhbi5jbG9zZWQ7IGUrKylcbiAgICAgIG4ubmV4dCh0W2VdKTtcbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSGEodCkge1xuICByZXR1cm4gbmV3IGVlKGZ1bmN0aW9uKG4pIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgbi5jbG9zZWQgfHwgKG4ubmV4dChlKSwgbi5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gbi5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsIGhuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBKYSh0KSB7XG4gIHJldHVybiBuZXcgZWUoZnVuY3Rpb24obikge1xuICAgIHZhciBlLCByO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0geWUodCksIGkgPSBhLm5leHQoKTsgIWkuZG9uZTsgaSA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gaS52YWx1ZTtcbiAgICAgICAgaWYgKG4ubmV4dChzKSwgbi5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkgJiYgIWkuZG9uZSAmJiAociA9IGEucmV0dXJuKSAmJiByLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgbi5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGduKHQpIHtcbiAgcmV0dXJuIG5ldyBlZShmdW5jdGlvbihuKSB7XG4gICAgQmEodCwgbikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWmEodCkge1xuICByZXR1cm4gZ24oVmEodCkpO1xufVxuZnVuY3Rpb24gQmEodCwgbikge1xuICB2YXIgZSwgciwgYSwgaTtcbiAgcmV0dXJuIHlhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gZG4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IGhhKHQpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHIgPSBsLnNlbnQoKSwgISFyLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSByLnZhbHVlLCBuLm5leHQocyksIG4uY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgciAmJiAhci5kb25lICYmIChpID0gZS5yZXR1cm4pID8gWzQsIGkuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gbi5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gUWEodCwgbiwgZSwgciwgYSkge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgaSA9IG4uc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBhID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCByKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIHIpO1xuICBpZiAodC5hZGQoaSksICFhKVxuICAgIHJldHVybiBpO1xufVxuZnVuY3Rpb24gWGEodCwgbikge1xuICB2YXIgZSA9IEQodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIHIgPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBlZShyKTtcbn1cbnZhciBlaSA9IEdlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHRpKHQsIG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIHIpIHtcbiAgICB2YXIgYSA9ICExLCBpO1xuICAgIHQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgaSA9IHMsIGEgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogcixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYSA/IGUoaSkgOiByKG5ldyBlaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBuaSh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odCk7XG59XG52YXIgcmkgPSBHZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gbnVsbCksIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gb2kodCwgbikge1xuICB2YXIgZSA9IG5pKHQpID8geyBmaXJzdDogdCB9IDogdHlwZW9mIHQgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogdCB9IDogdCwgciA9IGUuZmlyc3QsIGEgPSBlLmVhY2gsIGkgPSBlLndpdGgsIHMgPSBpID09PSB2b2lkIDAgPyBhaSA6IGksIGMgPSBlLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IE5hIDogYywgdSA9IGUubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAociA9PSBudWxsICYmIGEgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBrYShmdW5jdGlvbihmLCBoKSB7XG4gICAgdmFyIHksIG0sIF8gPSBudWxsLCB2ID0gMCwgdyA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgIG0gPSBRYShoLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB5LnVuc3Vic2NyaWJlKCksIFlhKHMoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogXyxcbiAgICAgICAgICAgIHNlZW46IHZcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKGgpO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgaC5lcnJvcihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgYik7XG4gICAgfTtcbiAgICB5ID0gZi5zdWJzY3JpYmUoQWEoaCwgZnVuY3Rpb24oYikge1xuICAgICAgbSA9PSBudWxsIHx8IG0udW5zdWJzY3JpYmUoKSwgdisrLCBoLm5leHQoXyA9IGIpLCBhID4gMCAmJiB3KGEpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIG0gIT0gbnVsbCAmJiBtLmNsb3NlZCB8fCBtID09IG51bGwgfHwgbS51bnN1YnNjcmliZSgpLCBfID0gbnVsbDtcbiAgICB9KSksICF2ICYmIHcociAhPSBudWxsID8gdHlwZW9mIHIgPT0gXCJudW1iZXJcIiA/IHIgOiArciAtIGwubm93KCkgOiBhKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhaSh0KSB7XG4gIHRocm93IG5ldyByaSh0KTtcbn1cbmNsYXNzIERlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogbiB9LCB0aGlzLl9zdWJqZWN0Lm5leHQobiksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKG4sIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiBuLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihuKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKG4pID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiBuLCB0aGlzLnN1YnNjcmliZSA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIFVlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IG4udGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gWGEoKCkgPT4gbmV3IEVycm9yKG4udGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRpKHRoaXMuX3N1YmplY3QucGlwZShvaShlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBfbigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBpaSwgZXJyX186IHNpIH0gPSBQKFwiaW5pdC1mbG93c1wiKSwgaWUgPSAodCwgbikgPT4ge1xuICBjb25zdCBlID0gbmV3IERlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCBuKHIpO1xuICAgICAgICBpaShg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBhKSwgZS5zZXQoYSk7XG4gICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgIHNpKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFooYSksIFwiRGV0YWlsczpcIiwgYSksIGUudGhyb3coYSwgWihhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgY2kgPSBhc3luYyAodCwgbiwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgocikgPT4gci5pbml0aWFsaXplKHsgY29udGV4dDogbiwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgbGkgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogaWUoXCJTdHJpcGUgUFJcIiwgSS5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogaWUoXCJTdHJpcGUgTGlua1wiLCBJLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBpZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgSS5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogaWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgSS5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBpZShcIkxvb3BcIiwgSS5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGllKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgSS5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGllKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBJLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogdWkgfSA9IFAoXCJmb3JtLWNhbGxiYWNrc1wiKSwgJCA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIEN0ID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6ICQsXG4gIG9uQmx1cjogJCxcbiAgb25DaGFuZ2U6ICQsXG4gIG9uTG9hZDogJCxcbiAgb25Mb2FkRXJyb3I6ICQsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiAkLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogJCxcbiAgb25DaGVja291dFN1Y2Nlc3M6ICQsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogJCxcbiAgb25DaGVja291dEVycm9yOiAkLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogJFxufSksIEggPSBjbGFzcyBIIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAobikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gSC5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbZSwgcl0pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IEluKGUsIHIgPz8gSC5OT09QLCB1aSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGE7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSBILmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5ILk5PT1AgPSAoKSA9PiB7XG59LCBILmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhDdC5rZXlvZigpLmVudW0pLmZvckVhY2goKGUpID0+IHtcbiAgICBuW2VdID0gSC5OT09QO1xuICB9KSwgbjtcbn0sIEguZnJvbU9iamVjdCA9IChuKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgSCgpO1xuICByZXR1cm4gZS5zZXRDYWxsYmFja3MoQ3QucGFyc2UobikpLCBlO1xufTtcbmxldCBRZSA9IEg7XG5jbGFzcyBkaSB7XG4gIGNvbnN0cnVjdG9yKG4sIGUsIHIsIGEpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoaSkgPT4ge1xuICAgICAgaWYgKCFpLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChTdChpLm9yaWdpbikgIT09IFN0KHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5wZW5wYWwgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5zb3VyY2UgJiYgaS5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IHByKEpTT04ucGFyc2UoaS5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBpLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoaSkgPT4gaS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFpLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgaS5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgaSksICExKSA6IHRoaXMubm9uY2VzLmhhcyhpLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBpKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChpLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gbiwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gciwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGE7XG4gIH1cbn1cbmNvbnN0IFN0ID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gcGkodCwgbikge1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IG5cbiAgfSkucHJvbWlzZSwgYSA9IGF3YWl0IG1yKHIpO1xuICBpZiAoIXlyKHIsIGEpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIHI7XG59XG5jbGFzcyBtaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24obiwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KG4sIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiBuO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCB5aSA9ICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IHIgfSA9IHQ7XG4gIHIucHVibGlzaGVyLnN1YnNjcmliZSgoYSkgPT4ge1xuICAgIGlmIChhLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaSA9IGEubG9hZGVkVmFsdWUsIHMgPSBpLmlzQXZhaWxhYmxlICYmIGkuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgcyAmJiBQdChcImFwcGxlX3BheVwiLCBpLCBuLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgUHQoXCJnb29nbGVfcGF5XCIsIGksIG4sIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBQdCA9ICh0LCBuLCBlLCByLCBhKSA9PiBJLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdmUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogSihlLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiByLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IHQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiBuXG59KSwga3QgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBXLCBlcnJfXzogQiB9ID0gUChcIm9wLWZvcm1cIiksIFggPSBjbGFzcyBYIHtcbiAgY29uc3RydWN0b3Iobikge1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IERlKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBEZSgpLCB0aGlzLmNvbnRleHQgPSBuZXcgRGUoKSwgdGhpcy5pbml0Rmxvd3MgPSBsaSgpLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlID0gdGhpcy5jcmVhdGVFbGVtZW50KFEuQ0RFX0JSSURHRSk7XG4gICAgICAgIGUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGUubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oZS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgIH0pLCBlLm1vdW50KFwiYm9keVwiKSwgVyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBXKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIFcoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGt0XG4gICAgICAgIH0pO1xuICAgICAgICBXKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBXKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzoga3RcbiAgICAgICAgfSk7XG4gICAgICAgIFcoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIFcoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBYLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgcixcbiAgICAgICAgICBhLFxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5zZXQoaSksIHlpKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCBXKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCBjaSh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoci50b3RhbEFtb3VudEF0b21zLCByLmN1cnJlbmN5KSwgVyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCByID0gWihlKTtcbiAgICAgICAgQihcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgciksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3Iocik7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gZSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAhciB8fCByLnR5cGUgPT09IFEuQ0RFX0JSSURHRSB8fCAoci5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCByID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBhID0gUm4ucGFyc2UoZSksIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBzID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHIpO1xuICAgICAgaS5uYW1lID0gYCR7YX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke2kubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBzLnRvU3RyaW5nKCksIGkuc3JjID0gYy5ocmVmLCBpLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBpLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYSwgaSk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCByKSA9PiB7XG4gICAgICBjb25zdCBhID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiByLFxuICAgICAgICBtb3VudDogKGkpID0+IHtcbiAgICAgICAgICB2YXIgcztcbiAgICAgICAgICByZXR1cm4gKHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKSA9PSBudWxsID8gdm9pZCAwIDogcy5hcHBlbmRDaGlsZChyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBhLnR5cGUsIG5vZGU6IGEubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbUS5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbUS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW1EuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtRLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICBbUS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbZV0gPSBhLCBhO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChlKSA9PiB7XG4gICAgICBjb25zdCByID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIHIuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgci5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBlLnN0eWxlcyAmJiByLmFwcGVuZChcInN0eWxlc1wiLCBkcihlLnN0eWxlcykpLCByLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCByO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlKSA9PiB7XG4gICAgICBwaShlLm5vZGUpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGUudHlwZSwgciksIHRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmFueUNkZUNvbm4uc2V0KHIpO1xuICAgICAgfSkuY2F0Y2goKHIpID0+IEIoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIHIpKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgSS5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IHguYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogeC5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB4LmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHguYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgIH07XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2EsIGldKSA9PiAoe1xuICAgICAgICBuYW1lOiByW2FdID8/IGEsXG4gICAgICAgIC4uLmkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gKGUsIHIpID0+IHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWEpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZSkge1xuICAgICAgICBjYXNlIHgucG9ja3l0UGF5cGFsOlxuICAgICAgICAgIHJldHVybiBJLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogYSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdmUoYS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooYS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogciB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgeC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnN0YXJ0RmxvdyhyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghaSkge1xuICAgICAgICAgICAgQihcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5zdGFydEZsb3cocik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghaSkge1xuICAgICAgICAgICAgQihcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnN0YXJ0RmxvdyhyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghaSkge1xuICAgICAgICAgICAgQihcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkuc3RhcnRGbG93KHIpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5sb29wQ3J5cHRvOlxuICAgICAgICAgIHJldHVybiBJLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihhLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiByLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgVWUoZSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIFcoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCBYLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi4yMVwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSBuLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4ubiwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IFFlLmZyb21PYmplY3QobiksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gbi5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBtaSgpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBkaSh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcblgub2pzRmxvd3MgPSBJLCBYLmFzc2lnbkFzU2luZ2xldG9uID0gKG4pID0+IHtcbiAgaWYgKFguZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IG47XG59LCBYLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBYLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAobiwgZSwgciwgYSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogbi5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKG4uYmFzZVVybCA/PyBldCkub3JpZ2luLFxuICBmb3JtRGl2OiBhLFxuICBlbGVtZW50c1Nlc3Npb25JZDogZS5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogcixcbiAgY3VzdG9tSW5pdFBhcmFtczogbi5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBBdCA9IFg7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56JDEubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiB6JDEub3B0aW9uYWwoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogeiQxLm9wdGlvbmFsKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtBZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0FlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7QWUucmVkLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbnokMS5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xueiQxLm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIlBST0NFU1NJTkdfUEFZTUVOVFwiXSA9IFwicHJvY2Vzc2luZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UXCJdID0gXCJjcmVhdGluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX1BBWU1FTlRcIl0gPSBcImNvbmZpcm1pbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09NUExFVEVcIl0gPSBcImNvbXBsZXRlXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcbnokMS5vYmplY3Qoe1xuICBbXCJsb29wRmlyc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcExhc3ROYW1lXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibG9vcEVtYWlsXCJdOiBSZXF1aXJlZFN0cmluZyxcbiAgW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV06IE9wdGlvbmFsU3RyaW5nXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKEF0LmdldEluc3RhbmNlKCkpIHtcbiAgICBBdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gQXQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgQXQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCBQYXlJblN0YXRlLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVE7QUFFZixNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUtjLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWQsR0FBV1ksRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FBQ1QsR0FFTUMsS0FBSyw4QkFBOEJDLEtBQUtSLEVBQUksT0FBTztBQUFBLEVBQ3ZELE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLEtBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQixLQUFLQSxFQUFJLE9BQU87QUFBQSxFQUNoQixLQUFLQSxFQUFJLE9BQU87QUFD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QWFVLEVBQVUsT0FBTztBQUFBLEVBQy9DLEdBQUcsQ0FBQ0YsQ0FBUyxDQUFDLEdBQ1RKLElBSWtCLGdCQUFBN2hCO0FBQUEsSUFDckI7QUFBQSxJQUNBO0FBQUEsTUFDRSxJQUFJLE9BQU9naUIsQ0FBTztBQUFBLE1BQ2xCLE1BQU0sR0FBR0EsQ0FBTztBQUFBLE1BQ2hCLFdBQVc7QUFBQSxNQUNYLEtBQUssR0FBR0QsQ0FBTyxXQUFXQyxDQUFPLGFBQWFNLENBQVc7QUFBQSxNQUN6RCxPQUFPRDtBQUFBLE1BQ1AsS0FBS0Y7QUFBQSxJQUNQO0FBQUEsRUFDRixLQWJFLFFBQVEsTUFBTSxrREFBa0QsR0FDekMsZ0JBQUFuaUIsRUFBSSxPQUFPLENBQUMsQ0FBQztBQWF4QyxHQUVNd2lCLEtBQWlCLENBQUMsRUFBRSxRQUFBN0csRUFBTyxNQUNSLGdCQUFBM2IsRUFBSXdoQixJQUFjLEVBQUUsUUFBQTdGLEdBQVEsYUFBYTdCLEdBQWdCLFNBQVMsQ0FBQyxHQUd0RjJJLEtBQWMsQ0FBQyxFQUFFLFFBQUE5RyxFQUFPLE1BQ0wsZ0JBQUEzYixFQUFJd2hCLElBQWMsRUFBRSxRQUFBN0YsR0FBUSxhQUFhN0IsR0FBZ0IsS0FBSyxDQUFDLEdBR2xGNEksS0FBb0IsQ0FBQyxFQUFFLFFBQUEvRyxFQUFPLE1BQ1gsZ0JBQUEzYixFQUFJd2hCLElBQWMsRUFBRSxRQUFBN0YsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDLEdBR3pGNkksS0FBb0IsQ0FBQyxFQUFFLFFBQUFoSCxFQUFPLE1BQ1gsZ0JBQUEzYixFQUFJd2hCLElBQWMsRUFBRSxRQUFBN0YsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDOyIsCiAgIm5hbWVzIjogWyJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiQWUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImV0IiwgImJuIiwgInZuIiwgIkVuIiwgIkNuIiwgIlNuIiwgIldlIiwgIlBuIiwgImtuIiwgImUiLCAiQW4iLCAiWiIsICJJbiIsICJyIiwgIngiLCAiQSIsICJVIiwgIlJ0IiwgIkZ0IiwgIkR0IiwgIk10IiwgIlEiLCAiUm4iLCAiVGUiLCAiRm4iLCAicSIsICJEbiIsICJNbiIsICJPbiIsICJObiIsICJUbiIsICJMbiIsICJVbiIsICJqbiIsICJ4biIsICIkbiIsICJ6biIsICJHbiIsICJDZSIsICJWbiIsICJxbiIsICJZbiIsICJLbiIsICJXbiIsICJIbiIsICJKbiIsICJ0dCIsICJabiIsICJCbiIsICJRbiIsICJSIiwgIlhuIiwgImVyIiwgIk90IiwgInRyIiwgIm5yIiwgIk50IiwgInJyIiwgIm9yIiwgImFyIiwgIkxlIiwgImN0IiwgIm50IiwgImlyIiwgInNyIiwgImNyIiwgImxyIiwgInVyIiwgImEiLCAiaSIsICJzIiwgImMiLCAiZHIiLCAiSiIsICJwciIsICJtciIsICJ5ciIsICJnIiwgImZyIiwgIlR0IiwgIkx0IiwgImhyIiwgIl9yIiwgImZlIiwgImdyIiwgIndyIiwgIlV0IiwgImJyIiwgInZyIiwgIkVyIiwgImx0IiwgImp0IiwgInV0IiwgInh0IiwgIkNyIiwgIlNyIiwgIiR0IiwgIlByIiwgImtyIiwgIkFyIiwgIklyIiwgIlJyIiwgInp0IiwgIkZyIiwgIkRyIiwgIk1yIiwgIk9yIiwgIk5yIiwgIlRyIiwgIkxyIiwgIlVyIiwgIkd0IiwgIlQiLCAieHIiLCAianIiLCAiJHIiLCAiTSIsICJoZSIsICJ6ciIsICJHciIsICJHIiwgIlZyIiwgInFyIiwgIllyIiwgIl9lIiwgIktyIiwgImR0IiwgIldyIiwgInJ0IiwgIlZ0IiwgIkhyIiwgIm90IiwgInF0IiwgIlVlIiwgInRlIiwgImNlIiwgIlAiLCAiYmkiLCAiSnIiLCAiU2UiLCAiWSIsICJaciIsICJqZSIsICJZdCIsICJLdCIsICJuZSIsICJCciIsICJwdCIsICJGIiwgIlFyIiwgIlhyIiwgImVvIiwgInRvIiwgImYiLCAiaCIsICJ5IiwgIm0iLCAiSSIsICJvbyIsICJubyIsICJybyIsICJkIiwgImwiLCAidSIsICJhbyIsICJXdCIsICJpbyIsICJzbyIsICJ4ZSIsICJIdCIsICJjbyIsICJsbyIsICJ1byIsICJKdCIsICJwbyIsICJtbyIsICJadCIsICJ5byIsICJmbyIsICJobyIsICJfbyIsICJhdCIsICJnbyIsICJ3byIsICJibyIsICJ2byIsICJFbyIsICJCdCIsICJRdCIsICJDbyIsICJTbyIsICJtZSIsICJFZSIsICJQbyIsICJYdCIsICJrbyIsICJBbyIsICJtdCIsICJJbyIsICJSbyIsICJfIiwgInYiLCAiRm8iLCAiRG8iLCAiTW8iLCAiQyIsICJ5dCIsICJmdCIsICJPbyIsICJ3IiwgImpvIiwgIlVvIiwgImIiLCAiTm8iLCAiVG8iLCAiTG8iLCAiViIsICJOIiwgInhvIiwgIiRvIiwgInpvIiwgInZlIiwgIkdvIiwgInFvIiwgIlZvIiwgIllvIiwgIksiLCAiaHQiLCAiS28iLCAiV28iLCAiaiIsICJsZSIsICJFIiwgImsiLCAiTyIsICIkZSIsICJlbiIsICJxZSIsICJ0biIsICJ6ZSIsICJIbyIsICJubiIsICJ6IiwgInVlIiwgIkpvIiwgIlpvIiwgInduIiwgImtlIiwgIm9lIiwgIlZlIiwgImFlIiwgImdlIiwgInJuIiwgIm9uIiwgImFuIiwgInNuIiwgIlJlIiwgIkJvIiwgIlFvIiwgIlhvIiwgImRlIiwgIkhlIiwgImVhIiwgInRhIiwgIm5hIiwgInJhIiwgIkwiLCAiY24iLCAib2EiLCAiYWEiLCAiaWEiLCAic2EiLCAiY2EiLCAibGEiLCAibG4iLCAidW4iLCAid2UiLCAiSmUiLCAidWEiLCAiZGEiLCAic2UiLCAiYmUiLCAicGEiLCAibWEiLCAiWmUiLCAicmUiLCAieWEiLCAiZG4iLCAieWUiLCAiTWUiLCAiT2UiLCAicGUiLCAiZmEiLCAiaGEiLCAiRCIsICJHZSIsICJZZSIsICJOZSIsICJQZSIsICJfdCIsICJwbiIsICJtbiIsICJ5biIsICJmbiIsICJobiIsICJndCIsICJGZSIsICJpdCIsICJiYSIsICJCZSIsICJfYSIsICJLZSIsICJnYSIsICJJZSIsICJ3YSIsICJzdCIsICJ2YSIsICJFYSIsICJlZSIsICJTYSIsICJ3dCIsICJDYSIsICJQYSIsICJrYSIsICJBYSIsICJJYSIsICJSYSIsICJfbiIsICJidCIsICJGYSIsICJEYSIsICJ2dCIsICJNYSIsICJFdCIsICJPYSIsICJOYSIsICJUYSIsICJMYSIsICJVYSIsICJqYSIsICJ4YSIsICIkYSIsICJ6YSIsICJHYSIsICJWYSIsICJxYSIsICJZYSIsICJLYSIsICJXYSIsICJIYSIsICJnbiIsICJKYSIsICJaYSIsICJCYSIsICJRYSIsICJYYSIsICJlaSIsICJ0aSIsICJuaSIsICJyaSIsICJvaSIsICJhaSIsICJEZSIsICJpaSIsICJzaSIsICJpZSIsICJjaSIsICJsaSIsICJ1aSIsICIkIiwgIkN0IiwgIkgiLCAibiIsICJRZSIsICJkaSIsICJTdCIsICJwaSIsICJtaSIsICJ5aSIsICJQdCIsICJrdCIsICJXIiwgIkIiLCAiWCIsICJBdCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5bWVudFByb2Nlc3NvciIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImZvcm0iLCAidmFsdWUiLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgInByZXYiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAiZWxlbWVudFN0eWxlIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50Il0KfQo=
|