@getopenpay/openpay-js-react 0.1.19-alpha.c318266 → 0.1.21-alpha.4b7874e
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 +8 -0
- package/dist/index.js +1043 -874
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createContext as
|
|
2
|
-
import { jsx as
|
|
1
|
+
import { createContext as Jt, useContext as Gt, useState as B, useCallback as Wt, useEffect as Re, useRef as Xt, useMemo as Oe } from "react";
|
|
2
|
+
import { jsx as x, Fragment as je } from "react/jsx-runtime";
|
|
3
3
|
import { z as e } from "zod";
|
|
4
|
-
import "uuid";
|
|
5
|
-
import { connectToChild as
|
|
6
|
-
import
|
|
7
|
-
const
|
|
4
|
+
import { v4 as Qt } from "uuid";
|
|
5
|
+
import { connectToChild as dt } from "penpal";
|
|
6
|
+
import $ from "chalk";
|
|
7
|
+
const mt = Jt({
|
|
8
8
|
formId: "",
|
|
9
9
|
formHeight: "",
|
|
10
10
|
referrer: void 0,
|
|
@@ -12,43 +12,43 @@ const ct = Yt({
|
|
|
12
12
|
registerIframe: () => {
|
|
13
13
|
},
|
|
14
14
|
baseUrl: ""
|
|
15
|
-
}),
|
|
16
|
-
const t =
|
|
15
|
+
}), er = () => {
|
|
16
|
+
const t = Gt(mt);
|
|
17
17
|
if (!t)
|
|
18
18
|
throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
|
|
19
19
|
return t;
|
|
20
|
-
},
|
|
20
|
+
}, tr = "https://cde.getopenpay.com", rr = e.object({
|
|
21
21
|
type: e.string(),
|
|
22
22
|
loc: e.array(e.string()),
|
|
23
23
|
msg: e.string(),
|
|
24
24
|
url: e.string()
|
|
25
|
-
}),
|
|
25
|
+
}), nr = e.array(rr), or = e.object({
|
|
26
26
|
code: e.string(),
|
|
27
27
|
message: e.string(),
|
|
28
28
|
path: e.array(e.string())
|
|
29
|
-
}),
|
|
29
|
+
}), ir = e.array(or), sr = {
|
|
30
30
|
"failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
|
|
31
|
-
},
|
|
31
|
+
}, Ae = (t) => {
|
|
32
32
|
const n = t.toLowerCase().trim();
|
|
33
|
-
return
|
|
34
|
-
},
|
|
33
|
+
return sr[n] ?? t;
|
|
34
|
+
}, ar = (t) => {
|
|
35
35
|
try {
|
|
36
36
|
return typeof JSON.parse(t) == "object";
|
|
37
37
|
} catch {
|
|
38
38
|
return !1;
|
|
39
39
|
}
|
|
40
|
-
},
|
|
41
|
-
${t.map((n) => `• ${
|
|
42
|
-
`)}`,
|
|
40
|
+
}, cr = (t) => t.length === 1 ? Ae(t[0].msg) : `Please fix the following errors:
|
|
41
|
+
${t.map((n) => `• ${Ae(n.msg)}`).join(`
|
|
42
|
+
`)}`, lr = (t) => `Encountered the following errors:
|
|
43
43
|
${t.map((n) => `- ${n.path.join("/")}: ${n.message}`).join(`
|
|
44
|
-
`)}`,
|
|
44
|
+
`)}`, z = (t) => {
|
|
45
45
|
if (t instanceof Error)
|
|
46
|
-
if (
|
|
46
|
+
if (ar(t.message)) {
|
|
47
47
|
const n = JSON.parse(t.message);
|
|
48
|
-
return
|
|
48
|
+
return nr.safeParse(n).success ? cr(n) : ir.safeParse(n).success ? lr(n) : (console.warn(`Encountered unknown stringified JSON object:
|
|
49
49
|
${t.message}`), t.message);
|
|
50
50
|
} else
|
|
51
|
-
return
|
|
51
|
+
return Ae(t.message);
|
|
52
52
|
if (typeof t == "object")
|
|
53
53
|
try {
|
|
54
54
|
return JSON.stringify(t);
|
|
@@ -57,24 +57,24 @@ ${t.message}`), t.message);
|
|
|
57
57
|
}
|
|
58
58
|
else
|
|
59
59
|
return t + "";
|
|
60
|
-
},
|
|
60
|
+
}, ur = (t, n, r) => (...o) => {
|
|
61
61
|
try {
|
|
62
62
|
return n(...o);
|
|
63
63
|
} catch (i) {
|
|
64
64
|
r(`[form] Error running callback (${t}):`, i);
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
},
|
|
67
|
+
}, S = e.string().trim().min(1, { message: "Cannot be blank" }), w = e.string().trim().optional(), Q = (t) => e.nullable(t.optional());
|
|
68
68
|
var y = /* @__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))(y || {});
|
|
69
|
-
const
|
|
70
|
-
var
|
|
71
|
-
const
|
|
72
|
-
var
|
|
73
|
-
const
|
|
69
|
+
const pt = e.nativeEnum(y);
|
|
70
|
+
var ft = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(ft || {});
|
|
71
|
+
const ht = e.nativeEnum(ft), yt = e.union([pt, ht]);
|
|
72
|
+
var J = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(J || {});
|
|
73
|
+
const dr = e.nativeEnum(J), ye = e.object({
|
|
74
74
|
provider: e.string(),
|
|
75
|
-
processor_name:
|
|
76
|
-
metadata:
|
|
77
|
-
}),
|
|
75
|
+
processor_name: Q(e.string()),
|
|
76
|
+
metadata: Q(e.record(e.string(), e.any()))
|
|
77
|
+
}), mr = e.object({
|
|
78
78
|
id: e.string()
|
|
79
79
|
});
|
|
80
80
|
e.object({
|
|
@@ -94,7 +94,7 @@ e.object({
|
|
|
94
94
|
lineHeight: w,
|
|
95
95
|
hideIcon: w
|
|
96
96
|
});
|
|
97
|
-
const
|
|
97
|
+
const M = e.enum([
|
|
98
98
|
// Element -> Form
|
|
99
99
|
"LAYOUT",
|
|
100
100
|
"LOADED",
|
|
@@ -115,83 +115,85 @@ const A = e.enum([
|
|
|
115
115
|
"TOKENIZE",
|
|
116
116
|
"CHECKOUT",
|
|
117
117
|
"START_PAYMENT_FLOW"
|
|
118
|
-
]),
|
|
119
|
-
type:
|
|
120
|
-
elementType:
|
|
118
|
+
]), pr = M.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), fr = e.object({ type: pr }), hr = M.extract(["BLUR", "FOCUS", "CHANGE"]), yr = e.object({
|
|
119
|
+
type: hr,
|
|
120
|
+
elementType: ht,
|
|
121
121
|
errors: e.array(e.string()).optional()
|
|
122
|
-
}),
|
|
123
|
-
type:
|
|
124
|
-
message:
|
|
122
|
+
}), _r = M.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), gr = e.object({
|
|
123
|
+
type: _r,
|
|
124
|
+
message: S,
|
|
125
125
|
headers: e.record(e.string(), e.string()).optional()
|
|
126
|
-
}),
|
|
127
|
-
type:
|
|
128
|
-
elementType:
|
|
126
|
+
}), br = M.extract(["VALIDATION_ERROR"]), vr = e.object({
|
|
127
|
+
type: br,
|
|
128
|
+
elementType: yt,
|
|
129
129
|
errors: e.array(e.string())
|
|
130
|
-
}),
|
|
131
|
-
type: e.literal(
|
|
132
|
-
height:
|
|
133
|
-
}),
|
|
134
|
-
type: e.literal(
|
|
135
|
-
sessionId:
|
|
130
|
+
}), wr = e.object({
|
|
131
|
+
type: e.literal(M.enum.LAYOUT),
|
|
132
|
+
height: S
|
|
133
|
+
}), Er = e.object({
|
|
134
|
+
type: e.literal(M.enum.LOADED),
|
|
135
|
+
sessionId: S,
|
|
136
136
|
totalAmountAtoms: e.number(),
|
|
137
137
|
currency: w,
|
|
138
|
-
checkoutPaymentMethods: e.array(
|
|
139
|
-
}),
|
|
140
|
-
type: e.literal(
|
|
138
|
+
checkoutPaymentMethods: e.array(ye)
|
|
139
|
+
}), Cr = e.object({
|
|
140
|
+
type: e.literal(M.enum.PAYMENT_FLOW_STARTED),
|
|
141
141
|
nextActionMetadata: e.record(e.string(), e.any()),
|
|
142
142
|
paymentFlowMetadata: e.any().optional(),
|
|
143
143
|
startPFMetadata: e.optional(e.record(e.string(), e.any()))
|
|
144
|
-
}),
|
|
145
|
-
type: e.literal(
|
|
144
|
+
}), kr = e.object({
|
|
145
|
+
type: e.literal(M.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
146
146
|
paymentMethodId: e.string()
|
|
147
|
-
}),
|
|
148
|
-
firstName:
|
|
149
|
-
lastName:
|
|
150
|
-
email:
|
|
151
|
-
zipCode:
|
|
152
|
-
country:
|
|
147
|
+
}), te = e.object({
|
|
148
|
+
firstName: S,
|
|
149
|
+
lastName: S,
|
|
150
|
+
email: S,
|
|
151
|
+
zipCode: S,
|
|
152
|
+
country: S,
|
|
153
153
|
promotionCode: w
|
|
154
|
-
}),
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
}), Sr = e.object({
|
|
155
|
+
firstName: w,
|
|
156
|
+
lastName: w,
|
|
157
|
+
email: S,
|
|
158
|
+
zipCode: S,
|
|
159
|
+
country: S,
|
|
158
160
|
promotionCode: w
|
|
159
|
-
}),
|
|
160
|
-
type:
|
|
161
|
-
sessionId:
|
|
162
|
-
checkoutPaymentMethod:
|
|
161
|
+
}), Pr = M.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Or = e.object({
|
|
162
|
+
type: Pr,
|
|
163
|
+
sessionId: S,
|
|
164
|
+
checkoutPaymentMethod: ye,
|
|
163
165
|
paymentFlowMetadata: e.any().optional(),
|
|
164
166
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
165
167
|
existingCCPMId: w
|
|
166
|
-
}).extend(
|
|
167
|
-
type: e.literal(
|
|
168
|
+
}).extend(te.shape), jr = e.object({
|
|
169
|
+
type: e.literal(M.enum.TOKENIZE_SUCCESS),
|
|
168
170
|
isReadyForCheckout: e.boolean()
|
|
169
|
-
}),
|
|
170
|
-
type: e.literal(
|
|
171
|
+
}), Ir = e.object({
|
|
172
|
+
type: e.literal(M.enum.CHECKOUT_SUCCESS),
|
|
171
173
|
invoiceUrls: e.array(e.string()),
|
|
172
174
|
subscriptionIds: e.array(e.string()),
|
|
173
175
|
customerId: e.string()
|
|
174
|
-
}),
|
|
175
|
-
lr,
|
|
176
|
-
dr,
|
|
177
|
-
mr,
|
|
176
|
+
}), Tr = e.discriminatedUnion("type", [
|
|
178
177
|
fr,
|
|
179
178
|
yr,
|
|
180
|
-
|
|
179
|
+
gr,
|
|
180
|
+
vr,
|
|
181
|
+
wr,
|
|
181
182
|
Er,
|
|
183
|
+
Or,
|
|
184
|
+
jr,
|
|
185
|
+
Ir,
|
|
182
186
|
Cr,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
formId: k,
|
|
190
|
-
elementId: k
|
|
187
|
+
kr
|
|
188
|
+
]), Rr = e.object({
|
|
189
|
+
payload: Tr,
|
|
190
|
+
nonce: S,
|
|
191
|
+
formId: S,
|
|
192
|
+
elementId: S
|
|
191
193
|
});
|
|
192
194
|
e.object({
|
|
193
195
|
amountAtom: e.number(),
|
|
194
|
-
currency:
|
|
196
|
+
currency: S
|
|
195
197
|
});
|
|
196
198
|
e.enum(["apple_pay", "google_pay"]);
|
|
197
199
|
e.object({
|
|
@@ -200,40 +202,41 @@ e.object({
|
|
|
200
202
|
});
|
|
201
203
|
e.object({
|
|
202
204
|
secure_token: e.string(),
|
|
203
|
-
existing_cc_pm_id:
|
|
205
|
+
existing_cc_pm_id: Q(e.string()),
|
|
206
|
+
their_pm_id: Q(e.string())
|
|
204
207
|
});
|
|
205
|
-
const
|
|
206
|
-
payment_methods: e.array(
|
|
207
|
-
}),
|
|
208
|
+
const Ar = e.object({
|
|
209
|
+
payment_methods: e.array(mr)
|
|
210
|
+
}), xr = e.object({
|
|
208
211
|
elementType: e.string(),
|
|
209
212
|
errors: e.array(e.string())
|
|
210
213
|
});
|
|
211
214
|
e.object({
|
|
212
215
|
session_id: e.string()
|
|
213
216
|
});
|
|
214
|
-
const
|
|
217
|
+
const Mr = e.object({
|
|
215
218
|
success: e.literal(!1),
|
|
216
219
|
error_type: e.literal("validation_error"),
|
|
217
|
-
errors: e.array(
|
|
218
|
-
}),
|
|
220
|
+
errors: e.array(xr)
|
|
221
|
+
}), Dr = e.discriminatedUnion("success", [
|
|
219
222
|
e.object({ success: e.literal(!0) }),
|
|
220
|
-
|
|
223
|
+
Mr
|
|
221
224
|
]);
|
|
222
225
|
e.object({
|
|
223
226
|
session_id: e.string(),
|
|
224
|
-
checkout_payment_method:
|
|
225
|
-
non_cde_form_fields:
|
|
227
|
+
checkout_payment_method: ye,
|
|
228
|
+
non_cde_form_fields: te,
|
|
226
229
|
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
227
|
-
existing_cc_pm_id:
|
|
230
|
+
existing_cc_pm_id: Q(e.string())
|
|
228
231
|
});
|
|
229
232
|
e.object({
|
|
230
233
|
session_id: e.string(),
|
|
231
|
-
checkout_payment_method:
|
|
232
|
-
non_cde_form_fields:
|
|
234
|
+
checkout_payment_method: ye,
|
|
235
|
+
non_cde_form_fields: te,
|
|
233
236
|
extra_metadata: e.record(e.string(), e.any()).optional()
|
|
234
237
|
});
|
|
235
|
-
var
|
|
236
|
-
const
|
|
238
|
+
var H = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(H || {});
|
|
239
|
+
const Lr = e.object({
|
|
237
240
|
status: e.enum([
|
|
238
241
|
"success",
|
|
239
242
|
"failure",
|
|
@@ -245,46 +248,49 @@ const Rr = e.object({
|
|
|
245
248
|
e.object({
|
|
246
249
|
href: e.string().optional().nullable()
|
|
247
250
|
});
|
|
248
|
-
const
|
|
251
|
+
const Nr = e.object({
|
|
249
252
|
type: e.string(),
|
|
250
253
|
redirect_url: e.string(),
|
|
251
254
|
initial_intent_id: e.string(),
|
|
252
255
|
consent_id: e.string()
|
|
253
|
-
}),
|
|
256
|
+
}), Ur = e.discriminatedUnion("present", [
|
|
257
|
+
e.object({ present: e.literal(!0), href: e.string() }),
|
|
258
|
+
e.object({ present: e.literal(!1) })
|
|
259
|
+
]), Fr = (t) => {
|
|
254
260
|
const n = {};
|
|
255
261
|
return Object.entries(t).forEach(([r, o]) => {
|
|
256
262
|
try {
|
|
257
|
-
const i =
|
|
263
|
+
const i = pt.parse(r);
|
|
258
264
|
Array.isArray(o) ? n[i] = o : Array.isArray(o._errors) && (n[i] = o._errors);
|
|
259
265
|
} catch {
|
|
260
266
|
return;
|
|
261
267
|
}
|
|
262
268
|
}), n;
|
|
263
|
-
},
|
|
269
|
+
}, $r = e.object({
|
|
264
270
|
stripe_pk: e.string(),
|
|
265
271
|
client_secret: e.string(),
|
|
266
272
|
stripe_pm_id: e.string()
|
|
267
|
-
}),
|
|
273
|
+
}), zr = e.object({
|
|
268
274
|
type: e.string(),
|
|
269
275
|
client_secret: e.string(),
|
|
270
276
|
stripe_pk: e.string()
|
|
271
|
-
}),
|
|
277
|
+
}), qr = {
|
|
272
278
|
usd: "usd",
|
|
273
279
|
brl: "brl"
|
|
274
|
-
},
|
|
280
|
+
}, _e = async (t) => {
|
|
275
281
|
for (let n = 0; n < 10; n++)
|
|
276
|
-
|
|
277
|
-
if (!
|
|
282
|
+
qe() || await Yr(500);
|
|
283
|
+
if (!qe())
|
|
278
284
|
throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
|
|
279
285
|
return new Stripe(t);
|
|
280
|
-
},
|
|
281
|
-
const r = await
|
|
286
|
+
}, Hr = async (t, n) => {
|
|
287
|
+
const r = await _e(t);
|
|
282
288
|
return {
|
|
283
289
|
elements: r.elements(n),
|
|
284
290
|
stripe: r
|
|
285
291
|
};
|
|
286
|
-
},
|
|
287
|
-
const s = await
|
|
292
|
+
}, Vr = async (t, n, r, o, i) => {
|
|
293
|
+
const s = await _e(t), a = qr[r.toLowerCase().trim()];
|
|
288
294
|
return s.paymentRequest({
|
|
289
295
|
// TODO: replace this with stripe account country as soon as we support it
|
|
290
296
|
country: "US",
|
|
@@ -298,9 +304,9 @@ const Ar = e.object({
|
|
|
298
304
|
requestPayerEmail: !0,
|
|
299
305
|
disableWallets: []
|
|
300
306
|
});
|
|
301
|
-
},
|
|
307
|
+
}, Yr = (t) => new Promise((n) => {
|
|
302
308
|
setTimeout(n, t);
|
|
303
|
-
}),
|
|
309
|
+
}), qe = () => "Stripe" in window, Kr = async (t) => new Promise((n, r) => {
|
|
304
310
|
try {
|
|
305
311
|
t.on("paymentmethod", async (o) => {
|
|
306
312
|
n(o);
|
|
@@ -310,18 +316,18 @@ const Ar = e.object({
|
|
|
310
316
|
} catch (o) {
|
|
311
317
|
r(o);
|
|
312
318
|
}
|
|
313
|
-
}),
|
|
319
|
+
}), Zr = async (t, n) => {
|
|
314
320
|
if (!t.stripe_pk || !t.client_secret)
|
|
315
321
|
throw new Error(`Invalid next action metadata format: ${JSON.stringify(t)}`);
|
|
316
|
-
const r = await (await
|
|
322
|
+
const r = await (await _e(t.stripe_pk)).confirmCardSetup(t.client_secret, {
|
|
317
323
|
payment_method: n.paymentMethod.id
|
|
318
324
|
});
|
|
319
325
|
if (r.error)
|
|
320
326
|
throw n.complete("fail"), new Error(`Payment failed: ${r.error.message ?? "unknown"}`);
|
|
321
327
|
return n.complete("success"), r;
|
|
322
|
-
},
|
|
328
|
+
}, Br = async (t) => {
|
|
323
329
|
var n, r, o, i;
|
|
324
|
-
const s = await (await
|
|
330
|
+
const s = await (await _e(t.stripe_pk)).confirmCardSetup(t.client_secret, {
|
|
325
331
|
payment_method: t.stripe_pm_id
|
|
326
332
|
}), a = (n = s.setupIntent) == null ? void 0 : n.status;
|
|
327
333
|
if (a === "succeeded")
|
|
@@ -329,16 +335,16 @@ const Ar = e.object({
|
|
|
329
335
|
else throw a === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
|
|
330
336
|
`${((r = s.error) == null ? void 0 : r.message) ?? ((i = (o = s.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : i.message) ?? "Payment failed, please click submit again to pay."}`
|
|
331
337
|
);
|
|
332
|
-
},
|
|
338
|
+
}, Jr = (t) => JSON.stringify(t), de = (t, n) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
|
|
333
339
|
const i = o.getAttribute("data-opid");
|
|
334
340
|
return i ? { ...r, [i]: o.value } : r;
|
|
335
|
-
}, {}),
|
|
341
|
+
}, {}), Gr = (t) => {
|
|
336
342
|
try {
|
|
337
|
-
return
|
|
343
|
+
return Rr.parse(t);
|
|
338
344
|
} catch (n) {
|
|
339
345
|
throw console.error("Error parsing event payload:", t, n), n;
|
|
340
346
|
}
|
|
341
|
-
},
|
|
347
|
+
}, Wr = async (t) => {
|
|
342
348
|
if (typeof t != "object" || !t) return !1;
|
|
343
349
|
try {
|
|
344
350
|
const n = { type: "ping" }, r = await t.send(n);
|
|
@@ -348,22 +354,22 @@ const Ar = e.object({
|
|
|
348
354
|
} catch (n) {
|
|
349
355
|
return console.error("Invalid CDE connection check:", n), !1;
|
|
350
356
|
}
|
|
351
|
-
},
|
|
357
|
+
}, Xr = (t, n) => !!t && n, b = (t) => e.nullable(t.optional());
|
|
352
358
|
e.string().trim().min(1, { message: "Cannot be blank" });
|
|
353
|
-
const
|
|
359
|
+
const Qr = e.object({
|
|
354
360
|
cde_response_type: e.literal("error"),
|
|
355
361
|
message: e.string(),
|
|
356
362
|
headers: e.record(e.string(), e.string()).optional()
|
|
357
363
|
});
|
|
358
364
|
e.enum(["usd", "brl"]);
|
|
359
|
-
const
|
|
365
|
+
const _t = e.object({
|
|
360
366
|
name: e.string(),
|
|
361
367
|
amount_atom_off: b(e.number()),
|
|
362
368
|
percent_off: b(e.number()),
|
|
363
369
|
currency: b(e.string()),
|
|
364
370
|
duration: e.string(),
|
|
365
371
|
duration_in_months: b(e.number())
|
|
366
|
-
}),
|
|
372
|
+
}), gt = e.object({
|
|
367
373
|
amount_subtotal_atom: e.number().int(),
|
|
368
374
|
amount_total_atom: e.number().int(),
|
|
369
375
|
currency: e.string(),
|
|
@@ -372,151 +378,162 @@ const mt = e.object({
|
|
|
372
378
|
billing_interval: b(e.string()),
|
|
373
379
|
billing_interval_count: b(e.number().int()),
|
|
374
380
|
quantity: e.number().int()
|
|
375
|
-
}),
|
|
381
|
+
}), en = e.record(e.string(), e.any()), tn = e.object({
|
|
376
382
|
name: e.string(),
|
|
377
|
-
settings: b(
|
|
378
|
-
}),
|
|
383
|
+
settings: b(en)
|
|
384
|
+
}), re = e.object({
|
|
379
385
|
provider: e.string(),
|
|
380
386
|
processor_name: b(e.string()),
|
|
381
387
|
metadata: b(e.record(e.string(), e.any()))
|
|
382
|
-
}),
|
|
388
|
+
}), rn = e.object({
|
|
383
389
|
quantity: e.number()
|
|
384
|
-
}),
|
|
390
|
+
}), nn = e.object({
|
|
385
391
|
id: b(e.string()),
|
|
386
392
|
billing_interval: b(e.string()),
|
|
387
393
|
billing_interval_count: b(e.number().int()),
|
|
388
|
-
subscription_items: e.array(
|
|
394
|
+
subscription_items: e.array(rn),
|
|
389
395
|
trial_start: b(e.string()),
|
|
390
396
|
trial_end: b(e.string())
|
|
391
|
-
}),
|
|
397
|
+
}), bt = e.object({
|
|
392
398
|
amount_atom: e.number()
|
|
393
|
-
}),
|
|
399
|
+
}), on = e.object({
|
|
394
400
|
amount_atom: e.number(),
|
|
395
401
|
amount_atom_considering_discount_applied: e.number(),
|
|
396
402
|
currency: e.string(),
|
|
397
|
-
discount_amount_atoms: e.array(
|
|
403
|
+
discount_amount_atoms: e.array(bt),
|
|
398
404
|
subscription_item_id: e.string()
|
|
399
|
-
}),
|
|
400
|
-
coupon:
|
|
401
|
-
}),
|
|
405
|
+
}), sn = e.object({
|
|
406
|
+
coupon: _t
|
|
407
|
+
}), an = e.object({
|
|
402
408
|
currency: e.string(),
|
|
403
|
-
discounts: e.array(
|
|
409
|
+
discounts: e.array(sn),
|
|
404
410
|
hosted_invoice_url: b(e.string()),
|
|
405
|
-
lines: e.array(
|
|
411
|
+
lines: e.array(on),
|
|
406
412
|
remaining_amount_atom: e.number(),
|
|
407
413
|
tax_amount_atom: e.number(),
|
|
408
414
|
total_amount_atom: e.number(),
|
|
409
|
-
total_discount_amount_atoms: e.array(
|
|
410
|
-
}),
|
|
411
|
-
created: e.array(
|
|
412
|
-
invoices: e.array(
|
|
413
|
-
}),
|
|
414
|
-
preview:
|
|
415
|
-
preview_post_trial: b(
|
|
416
|
-
coupons: e.array(
|
|
417
|
-
}),
|
|
415
|
+
total_discount_amount_atoms: e.array(bt)
|
|
416
|
+
}), He = e.object({
|
|
417
|
+
created: e.array(nn),
|
|
418
|
+
invoices: e.array(an)
|
|
419
|
+
}), vt = e.object({
|
|
420
|
+
preview: He,
|
|
421
|
+
preview_post_trial: b(He),
|
|
422
|
+
coupons: e.array(_t)
|
|
423
|
+
}), Ve = e.object({
|
|
418
424
|
status: e.literal("open"),
|
|
419
425
|
token: e.string(),
|
|
420
426
|
email: b(e.string()),
|
|
421
|
-
line_items: e.array(
|
|
427
|
+
line_items: e.array(gt),
|
|
422
428
|
amount_subtotal_atom: e.number().int(),
|
|
423
429
|
amount_total_atom: e.number().int(),
|
|
424
|
-
brand:
|
|
425
|
-
subs_preview: b(
|
|
430
|
+
brand: tn,
|
|
431
|
+
subs_preview: b(vt),
|
|
426
432
|
// Null in setup mode
|
|
427
|
-
methods_available: e.array(
|
|
428
|
-
}),
|
|
433
|
+
methods_available: e.array(re)
|
|
434
|
+
}), wt = e.discriminatedUnion("mode", [
|
|
429
435
|
e.object({
|
|
430
436
|
mode: e.literal("setup"),
|
|
431
437
|
currency: e.nullable(e.undefined())
|
|
432
|
-
}).extend(
|
|
438
|
+
}).extend(Ve.shape),
|
|
433
439
|
e.object({
|
|
434
440
|
mode: e.enum(["payment", "subscription"]),
|
|
435
441
|
currency: e.string()
|
|
436
|
-
}).extend(
|
|
437
|
-
]),
|
|
442
|
+
}).extend(Ve.shape)
|
|
443
|
+
]), cn = e.object({
|
|
438
444
|
status: e.literal("complete")
|
|
439
|
-
}),
|
|
445
|
+
}), ln = e.object({
|
|
440
446
|
status: e.literal("expired")
|
|
441
447
|
});
|
|
442
|
-
e.union([
|
|
448
|
+
e.union([wt, cn, ln]);
|
|
443
449
|
e.object({
|
|
444
450
|
logo: e.string(),
|
|
445
451
|
icon: e.string(),
|
|
446
452
|
primary_color: e.string(),
|
|
447
453
|
secondary_color: e.string()
|
|
448
454
|
});
|
|
449
|
-
const
|
|
455
|
+
const Et = e.object({
|
|
450
456
|
invoice_urls: e.array(e.string()),
|
|
451
457
|
subscription_ids: e.array(e.string()),
|
|
452
458
|
customer_id: e.string()
|
|
453
459
|
});
|
|
460
|
+
e.object({
|
|
461
|
+
secure_token: e.string(),
|
|
462
|
+
pm_id: e.string()
|
|
463
|
+
});
|
|
454
464
|
e.object({
|
|
455
465
|
secure_token: e.string(),
|
|
456
466
|
payment_input: e.any(),
|
|
457
467
|
// Should follow AnyPaymentInput from CDE
|
|
468
|
+
customer_first_name: e.string().optional(),
|
|
469
|
+
customer_last_name: e.string().optional(),
|
|
458
470
|
customer_email: e.string(),
|
|
459
471
|
customer_zip_code: e.string(),
|
|
460
472
|
customer_country: e.string(),
|
|
461
|
-
line_items: e.array(
|
|
473
|
+
line_items: e.array(gt),
|
|
462
474
|
total_amount_atom: e.number().int(),
|
|
463
475
|
cancel_at_end: e.boolean(),
|
|
464
|
-
checkout_payment_method:
|
|
476
|
+
checkout_payment_method: re,
|
|
465
477
|
promotion_code: e.string().optional(),
|
|
466
|
-
do_not_use_legacy_cc_flow: e.boolean().optional()
|
|
478
|
+
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
479
|
+
use_confirmed_pm_id: b(e.string())
|
|
467
480
|
});
|
|
468
|
-
const
|
|
481
|
+
const Ct = e.object({
|
|
469
482
|
payment_method_id: e.string()
|
|
470
483
|
});
|
|
471
484
|
e.object({
|
|
472
485
|
id: e.string(),
|
|
473
486
|
return_url: e.string()
|
|
474
487
|
});
|
|
475
|
-
const
|
|
488
|
+
const un = e.object({
|
|
476
489
|
type: e.string(),
|
|
477
490
|
loc: e.array(e.string()),
|
|
478
491
|
msg: e.string(),
|
|
479
492
|
url: e.string()
|
|
480
493
|
});
|
|
481
|
-
e.array(
|
|
482
|
-
e.object({
|
|
494
|
+
e.array(un);
|
|
495
|
+
const dn = e.object({
|
|
483
496
|
new_customer_email: e.string().optional(),
|
|
484
497
|
new_customer_address: e.record(e.string(), e.any()).optional(),
|
|
498
|
+
new_customer_first_name: e.string().optional(),
|
|
499
|
+
new_customer_last_name: e.string().optional()
|
|
500
|
+
});
|
|
501
|
+
e.object({
|
|
485
502
|
payment_provider: e.string(),
|
|
486
|
-
checkout_payment_method:
|
|
503
|
+
checkout_payment_method: re,
|
|
487
504
|
existing_cc_pm_id: e.string().optional(),
|
|
488
505
|
their_existing_pm_id: e.string().optional()
|
|
489
|
-
});
|
|
490
|
-
const
|
|
506
|
+
}).extend(dn.shape);
|
|
507
|
+
const kt = e.object({
|
|
491
508
|
required_user_actions: e.array(e.record(e.string(), e.any()))
|
|
492
509
|
});
|
|
493
510
|
e.object({
|
|
494
|
-
fields:
|
|
495
|
-
checkoutPaymentMethod:
|
|
511
|
+
fields: Sr,
|
|
512
|
+
checkoutPaymentMethod: re
|
|
496
513
|
});
|
|
497
514
|
e.object({
|
|
498
515
|
session_id: e.string(),
|
|
499
|
-
non_cde_form_fields:
|
|
500
|
-
checkout_payment_method:
|
|
516
|
+
non_cde_form_fields: te,
|
|
517
|
+
checkout_payment_method: re,
|
|
501
518
|
extra_metadata: e.record(e.string(), e.any())
|
|
502
519
|
// This is optional in CDE, but not in OJS moving forward
|
|
503
520
|
});
|
|
504
|
-
const
|
|
521
|
+
const mn = e.object({
|
|
505
522
|
required_user_actions: e.array(e.record(e.string(), e.any())),
|
|
506
523
|
cc_pm_id: e.string()
|
|
507
524
|
});
|
|
508
525
|
e.record(e.any());
|
|
509
|
-
const
|
|
510
|
-
function
|
|
526
|
+
const pn = (t) => t.reduce((n, r) => n + r, 0);
|
|
527
|
+
function fn(t, n) {
|
|
511
528
|
var r = Object.setPrototypeOf;
|
|
512
529
|
r ? r(t, n) : t.__proto__ = n;
|
|
513
530
|
}
|
|
514
|
-
function
|
|
531
|
+
function hn(t, n) {
|
|
515
532
|
n === void 0 && (n = t.constructor);
|
|
516
533
|
var r = Error.captureStackTrace;
|
|
517
534
|
r && r(t, n);
|
|
518
535
|
}
|
|
519
|
-
var
|
|
536
|
+
var yn = /* @__PURE__ */ function() {
|
|
520
537
|
var t = function(n, r) {
|
|
521
538
|
return t = Object.setPrototypeOf || {
|
|
522
539
|
__proto__: []
|
|
@@ -535,19 +552,19 @@ var un = /* @__PURE__ */ function() {
|
|
|
535
552
|
}
|
|
536
553
|
n.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
537
554
|
};
|
|
538
|
-
}(),
|
|
539
|
-
|
|
555
|
+
}(), _n = function(t) {
|
|
556
|
+
yn(n, t);
|
|
540
557
|
function n(r, o) {
|
|
541
558
|
var i = this.constructor, s = t.call(this, r, o) || this;
|
|
542
559
|
return Object.defineProperty(s, "name", {
|
|
543
560
|
value: i.name,
|
|
544
561
|
enumerable: !1,
|
|
545
562
|
configurable: !0
|
|
546
|
-
}),
|
|
563
|
+
}), fn(s, i.prototype), hn(s), s;
|
|
547
564
|
}
|
|
548
565
|
return n;
|
|
549
566
|
}(Error);
|
|
550
|
-
class
|
|
567
|
+
class St extends _n {
|
|
551
568
|
constructor(n) {
|
|
552
569
|
const r = `${n.message}`;
|
|
553
570
|
super(r), this.response = n;
|
|
@@ -556,64 +573,68 @@ class vt extends dn {
|
|
|
556
573
|
return this.response.message;
|
|
557
574
|
}
|
|
558
575
|
}
|
|
559
|
-
const
|
|
576
|
+
const T = async (t, n, r) => {
|
|
560
577
|
const o = await t.send(n);
|
|
561
|
-
if (
|
|
562
|
-
throw new
|
|
563
|
-
if (!
|
|
578
|
+
if (bn(o))
|
|
579
|
+
throw new St(o);
|
|
580
|
+
if (!gn(o, r)) {
|
|
564
581
|
const i = r.safeParse(o);
|
|
565
582
|
throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", r, "Actual:", o), i.error);
|
|
566
583
|
}
|
|
567
584
|
return o;
|
|
568
|
-
},
|
|
569
|
-
|
|
585
|
+
}, gn = (t, n) => n.safeParse(t).success, bn = (t) => Qr.safeParse(t).success, vn = async (t, n) => await T(t, { type: "get_checkout_preview", payload: n }, vt), Y = async (t) => await T(t, { type: "get_prefill", payload: {} }, wt), Pt = async (t, n) => await T(t, { type: "v2_start_payment_flow", payload: n }, kt), wn = async (t, n) => await T(t, { type: "start_payment_flow_for_cc", payload: n }, mn), En = async (t, n) => await T(t, { type: "start_payment_flow_for_pr", payload: n }, kt), ge = async (t, n) => await T(t, { type: "confirm_payment_flow", payload: n }, Ar), Cn = async (t, n) => await T(t, { type: "finalize_setup_payment_method", payload: n }, Ct), kn = async (t, n) => await T(
|
|
586
|
+
t,
|
|
587
|
+
{ type: "check_if_popup_window_verified", payload: n },
|
|
588
|
+
Ur
|
|
589
|
+
), Sn = async (t, n, r) => {
|
|
590
|
+
const o = await vn(t, {
|
|
570
591
|
secure_token: n,
|
|
571
592
|
promotion_code: r
|
|
572
593
|
}), i = new Set(o.preview.invoices.map((c) => c.currency));
|
|
573
594
|
if (i.size !== 1)
|
|
574
595
|
throw new Error(`Expected exactly one currency, got ${i.size}`);
|
|
575
|
-
const s = i.values().next().value ?? "usd", a =
|
|
596
|
+
const s = i.values().next().value ?? "usd", a = pn(o.preview.invoices.map((c) => c.remaining_amount_atom));
|
|
576
597
|
return {
|
|
577
598
|
currency: s,
|
|
578
599
|
amountAtom: a
|
|
579
600
|
};
|
|
580
|
-
},
|
|
601
|
+
}, Ot = async (t, n, r, o) => {
|
|
581
602
|
if (r)
|
|
582
603
|
return { amountAtom: 0, currency: "usd" };
|
|
583
604
|
{
|
|
584
605
|
o = o || void 0;
|
|
585
|
-
const i = await
|
|
606
|
+
const i = await Sn(t, n, o);
|
|
586
607
|
return { amountAtom: i.amountAtom, currency: i.currency };
|
|
587
608
|
}
|
|
588
|
-
},
|
|
609
|
+
}, Pn = async (t, n) => {
|
|
589
610
|
if (t.size === 0)
|
|
590
611
|
throw new Error("No CDE connections found");
|
|
591
612
|
return await Promise.all(
|
|
592
613
|
Array.from(t.values()).map(
|
|
593
|
-
(r) =>
|
|
614
|
+
(r) => T(r, { type: "tokenize_card", payload: n }, Dr)
|
|
594
615
|
)
|
|
595
616
|
);
|
|
596
|
-
},
|
|
617
|
+
}, Ye = async (t, n) => {
|
|
597
618
|
try {
|
|
598
|
-
return await
|
|
619
|
+
return await T(t, { type: "checkout_card_elements", payload: n }, Et);
|
|
599
620
|
} catch (r) {
|
|
600
621
|
throw console.error("[cde-client] Error during checkoutCardElements:", r, JSON.stringify(r)), r;
|
|
601
622
|
}
|
|
602
|
-
},
|
|
623
|
+
}, On = async (t, n) => await T(t, { type: "setup_payment_method", payload: n }, Ct), Ue = async (t, n) => await T(t, { type: "checkout", payload: n }, Et), jt = 1e3, jn = async (t, n) => {
|
|
603
624
|
console.log(n);
|
|
604
|
-
const r = await
|
|
625
|
+
const r = await dt({
|
|
605
626
|
iframe: t,
|
|
606
627
|
debug: !0,
|
|
607
|
-
timeout:
|
|
628
|
+
timeout: jt,
|
|
608
629
|
childOrigin: "*"
|
|
609
630
|
// TODO: use with proper childOrigin
|
|
610
|
-
}).promise, o = await
|
|
631
|
+
}).promise, o = await T(r, { type: "ping-3ds-status" }, Lr);
|
|
611
632
|
return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
|
|
612
633
|
};
|
|
613
|
-
function
|
|
634
|
+
function Fe(t) {
|
|
614
635
|
throw new Error(`Unhandled case: ${t}`);
|
|
615
636
|
}
|
|
616
|
-
const
|
|
637
|
+
const be = (t) => async (n) => {
|
|
617
638
|
var r, o;
|
|
618
639
|
try {
|
|
619
640
|
(o = (r = n.formCallbacks.get).onCheckoutStarted) == null || o.call(r);
|
|
@@ -629,20 +650,20 @@ const xe = (t) => async (n) => {
|
|
|
629
650
|
else
|
|
630
651
|
throw new Error(`Unhandled mode: ${i}`);
|
|
631
652
|
} catch (i) {
|
|
632
|
-
n.formCallbacks.get.onCheckoutError(
|
|
653
|
+
n.formCallbacks.get.onCheckoutError(z(i));
|
|
633
654
|
}
|
|
634
|
-
},
|
|
655
|
+
}, It = (t) => async (n) => {
|
|
635
656
|
try {
|
|
636
657
|
return await t(n);
|
|
637
658
|
} catch (r) {
|
|
638
|
-
const { err__: o } =
|
|
639
|
-
return o(r), { isAvailable: !1, reason:
|
|
659
|
+
const { err__: o } = I("init-error-catcher");
|
|
660
|
+
return o(r), { isAvailable: !1, reason: z(r) };
|
|
640
661
|
}
|
|
641
|
-
},
|
|
662
|
+
}, I = (t) => {
|
|
642
663
|
const n = (...o) => {
|
|
643
|
-
window.console.log(`${
|
|
664
|
+
window.console.log(`${$.green.bold("ojs/")}${$.bold.gray(`${t}`)} `, ...o);
|
|
644
665
|
}, r = (...o) => {
|
|
645
|
-
window.console.
|
|
666
|
+
window.console.warn(`${$.red.bold("ojs/")}${$.bold.gray(`${t}`)} `, ...o);
|
|
646
667
|
};
|
|
647
668
|
return {
|
|
648
669
|
log: n,
|
|
@@ -650,61 +671,95 @@ const xe = (t) => async (n) => {
|
|
|
650
671
|
log__: n,
|
|
651
672
|
err__: r
|
|
652
673
|
};
|
|
653
|
-
}, { log__:
|
|
674
|
+
}, { log__: gs, err__: In } = I("common"), ve = (t) => {
|
|
654
675
|
if (t.payment_methods.length !== 1)
|
|
655
676
|
throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
|
|
656
677
|
return { payment_method_id: t.payment_methods[0].id };
|
|
657
|
-
},
|
|
678
|
+
}, Tt = (t, n) => {
|
|
658
679
|
const r = t.find((o) => n.safeParse(o).success);
|
|
659
680
|
if (!r)
|
|
660
|
-
throw
|
|
681
|
+
throw In("No CPMs found for model. All models:", t), new Error("No CPMs found for model");
|
|
661
682
|
return n.parse(r);
|
|
662
|
-
},
|
|
663
|
-
|
|
683
|
+
}, Tn = (t) => ({
|
|
684
|
+
new_customer_email: t.email,
|
|
685
|
+
new_customer_address: {
|
|
686
|
+
zip_code: t.zipCode,
|
|
687
|
+
country: t.country
|
|
688
|
+
},
|
|
689
|
+
new_customer_first_name: t.firstName,
|
|
690
|
+
new_customer_last_name: t.lastName
|
|
691
|
+
}), Rn = async (t, n, r, o, i) => {
|
|
692
|
+
const { log__: s } = I(t), a = await Y(n), c = ve(i);
|
|
693
|
+
if (a.mode === "setup")
|
|
694
|
+
return s("Setting up payment method..."), { mode: "setup", result: await Cn(n, {
|
|
695
|
+
secure_token: a.token,
|
|
696
|
+
pm_id: c.payment_method_id
|
|
697
|
+
}) };
|
|
698
|
+
{
|
|
699
|
+
s("Doing checkout...");
|
|
700
|
+
const l = {
|
|
701
|
+
secure_token: a.token,
|
|
702
|
+
payment_input: {
|
|
703
|
+
provider_type: r.provider
|
|
704
|
+
},
|
|
705
|
+
customer_email: o[y.EMAIL],
|
|
706
|
+
customer_zip_code: o[y.ZIP_CODE],
|
|
707
|
+
customer_country: o[y.COUNTRY],
|
|
708
|
+
promotion_code: o[y.PROMOTION_CODE],
|
|
709
|
+
line_items: a.line_items,
|
|
710
|
+
total_amount_atom: a.amount_total_atom,
|
|
711
|
+
cancel_at_end: !1,
|
|
712
|
+
checkout_payment_method: r,
|
|
713
|
+
use_confirmed_pm_id: c.payment_method_id
|
|
714
|
+
};
|
|
715
|
+
return { mode: "checkout", result: await Ue(n, l) };
|
|
716
|
+
}
|
|
717
|
+
}, { log__: An, err__: Rt } = I("common-cc"), we = (t, n) => {
|
|
718
|
+
const r = te.safeParse(t);
|
|
664
719
|
if (!r.success) {
|
|
665
|
-
const o = r.error.format(), i =
|
|
720
|
+
const o = r.error.format(), i = Fr(o);
|
|
666
721
|
for (const [s, a] of Object.entries(i))
|
|
667
722
|
n(s, a, s);
|
|
668
|
-
throw
|
|
723
|
+
throw Rt("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
|
|
669
724
|
}
|
|
670
725
|
return r.data;
|
|
671
|
-
},
|
|
726
|
+
}, xn = (t, n) => {
|
|
672
727
|
for (const r of t)
|
|
673
728
|
if (r.success === !1)
|
|
674
729
|
throw r.errors.forEach((o) => {
|
|
675
|
-
const i =
|
|
730
|
+
const i = yt.safeParse(o.elementType);
|
|
676
731
|
if (!i.success)
|
|
677
|
-
|
|
732
|
+
Rt(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
|
|
678
733
|
else {
|
|
679
734
|
const s = i.data;
|
|
680
735
|
n(s, o.errors);
|
|
681
736
|
}
|
|
682
|
-
}),
|
|
683
|
-
},
|
|
737
|
+
}), An(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
|
|
738
|
+
}, Ke = "ojs-stripe-link-btn", { log__: C, err__: Mn } = I("stripe-link"), Dn = e.object({
|
|
684
739
|
provider: e.literal("stripe_link"),
|
|
685
740
|
processor_name: e.literal("stripe"),
|
|
686
741
|
metadata: e.object({
|
|
687
742
|
stripe_pk: e.string()
|
|
688
743
|
})
|
|
689
|
-
}),
|
|
744
|
+
}), Ln = e.array(
|
|
690
745
|
e.object({
|
|
691
746
|
our_existing_pm_id: e.string()
|
|
692
747
|
})
|
|
693
|
-
).length(1),
|
|
748
|
+
).length(1), Nn = It(
|
|
694
749
|
async ({ context: t, formCallbacks: n }) => {
|
|
695
750
|
const r = t.customInitParams.stripeLink;
|
|
696
|
-
|
|
697
|
-
const o =
|
|
698
|
-
|
|
699
|
-
const i = t.anyCdeConnection, s = await
|
|
700
|
-
|
|
701
|
-
const c = await
|
|
751
|
+
C("Checking if there are any CPMs for Stripe Link...");
|
|
752
|
+
const o = Tt(t.checkoutPaymentMethods, Dn);
|
|
753
|
+
C("Starting stripe link flow...");
|
|
754
|
+
const i = t.anyCdeConnection, s = await Y(i), a = s.mode === "setup";
|
|
755
|
+
C("Creating stripe elements...");
|
|
756
|
+
const c = await Ot(i, s.token, a, void 0), { elements: l, stripe: u } = await Hr(o.metadata.stripe_pk, {
|
|
702
757
|
mode: "setup",
|
|
703
758
|
currency: c.currency,
|
|
704
759
|
setup_future_usage: "off_session",
|
|
705
760
|
paymentMethodCreation: "manual"
|
|
706
761
|
});
|
|
707
|
-
|
|
762
|
+
C("Creating express checkout...");
|
|
708
763
|
const d = l.create("expressCheckout", {
|
|
709
764
|
buttonHeight: r == null ? void 0 : r.buttonHeight,
|
|
710
765
|
paymentMethods: {
|
|
@@ -714,30 +769,30 @@ const xe = (t) => async (n) => {
|
|
|
714
769
|
paypal: "never"
|
|
715
770
|
}
|
|
716
771
|
}), f = () => {
|
|
717
|
-
d.mount(`#${
|
|
772
|
+
d.mount(`#${Ke}`);
|
|
718
773
|
}, _ = () => {
|
|
719
774
|
d.unmount();
|
|
720
775
|
};
|
|
721
|
-
return r != null && r.doNotMountOnInit ?
|
|
722
|
-
if (
|
|
723
|
-
|
|
776
|
+
return r != null && r.doNotMountOnInit ? C("NOT mounting stripe link button (doNotMountOnInit is true)") : (C("Mounting stripe link button..."), f()), d.on("click", async (m) => {
|
|
777
|
+
if (C("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
|
|
778
|
+
C("Stripe Link submit aborted by overrideLinkSubmit");
|
|
724
779
|
return;
|
|
725
780
|
}
|
|
726
|
-
|
|
727
|
-
}), d.on("confirm", async (
|
|
728
|
-
|
|
729
|
-
const
|
|
781
|
+
m.resolve();
|
|
782
|
+
}), d.on("confirm", async (m) => {
|
|
783
|
+
C("Stripe Link window confirmed", m);
|
|
784
|
+
const p = await u.createPaymentMethod({
|
|
730
785
|
elements: l,
|
|
731
786
|
params: {
|
|
732
|
-
billing_details:
|
|
787
|
+
billing_details: m.billingDetails
|
|
733
788
|
}
|
|
734
789
|
});
|
|
735
|
-
|
|
790
|
+
p.error ? (Mn("error", p.error), n.get.onCheckoutError(p.error.message ?? "Stripe Link unknown error")) : (C("paymentMethod", p.paymentMethod), V.stripeLink.run({
|
|
736
791
|
context: t,
|
|
737
792
|
checkoutPaymentMethod: o,
|
|
738
|
-
nonCdeFormInputs:
|
|
793
|
+
nonCdeFormInputs: de(t.formDiv),
|
|
739
794
|
formCallbacks: n,
|
|
740
|
-
customParams: { stripePM:
|
|
795
|
+
customParams: { stripePM: p.paymentMethod },
|
|
741
796
|
initResult: { isAvailable: !0 }
|
|
742
797
|
}));
|
|
743
798
|
}), {
|
|
@@ -745,11 +800,11 @@ const xe = (t) => async (n) => {
|
|
|
745
800
|
controller: {
|
|
746
801
|
mountButton: f,
|
|
747
802
|
dismountButton: _,
|
|
748
|
-
waitForButtonToMount: async () => await
|
|
803
|
+
waitForButtonToMount: async () => await $n(Ke)
|
|
749
804
|
}
|
|
750
805
|
};
|
|
751
806
|
}
|
|
752
|
-
),
|
|
807
|
+
), Un = be(
|
|
753
808
|
async ({
|
|
754
809
|
context: t,
|
|
755
810
|
checkoutPaymentMethod: n,
|
|
@@ -757,27 +812,27 @@ const xe = (t) => async (n) => {
|
|
|
757
812
|
formCallbacks: o,
|
|
758
813
|
customParams: i
|
|
759
814
|
}) => {
|
|
760
|
-
|
|
815
|
+
C("Running Stripe Link flow...");
|
|
761
816
|
const s = t.anyCdeConnection;
|
|
762
|
-
|
|
763
|
-
const a =
|
|
764
|
-
|
|
765
|
-
const l = await
|
|
817
|
+
C("Merging PM fields with form fields...");
|
|
818
|
+
const a = Fn(r, i.stripePM), c = we(a, o.get.onValidationError);
|
|
819
|
+
C("Starting payment flow...");
|
|
820
|
+
const l = await Pt(s, {
|
|
766
821
|
payment_provider: n.provider,
|
|
767
822
|
checkout_payment_method: n,
|
|
768
823
|
their_existing_pm_id: i.stripePM.id
|
|
769
824
|
});
|
|
770
|
-
|
|
771
|
-
const u =
|
|
825
|
+
C("Start payment flow response", l);
|
|
826
|
+
const u = Ln.parse(l.required_user_actions)[0].our_existing_pm_id, d = await Y(s);
|
|
772
827
|
if (d.mode === "setup") {
|
|
773
|
-
|
|
774
|
-
const f = await
|
|
828
|
+
C("Doing payment setup...");
|
|
829
|
+
const f = await ge(s, {
|
|
775
830
|
secure_token: d.token,
|
|
776
831
|
existing_cc_pm_id: u
|
|
777
832
|
});
|
|
778
|
-
return { mode: "setup", result:
|
|
833
|
+
return { mode: "setup", result: ve(f) };
|
|
779
834
|
} else {
|
|
780
|
-
|
|
835
|
+
C("Doing checkout...");
|
|
781
836
|
const f = {
|
|
782
837
|
secure_token: d.token,
|
|
783
838
|
payment_input: {
|
|
@@ -792,25 +847,25 @@ const xe = (t) => async (n) => {
|
|
|
792
847
|
cancel_at_end: !1,
|
|
793
848
|
checkout_payment_method: n
|
|
794
849
|
};
|
|
795
|
-
return { mode: "checkout", result: await
|
|
850
|
+
return { mode: "checkout", result: await Ue(s, f) };
|
|
796
851
|
}
|
|
797
852
|
}
|
|
798
|
-
),
|
|
853
|
+
), Fn = (t, n) => {
|
|
799
854
|
var r, o, i, s, a;
|
|
800
855
|
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;
|
|
801
856
|
return c[y.FIRST_NAME] = c[y.FIRST_NAME] || l || "_OP_UNKNOWN", c[y.LAST_NAME] = c[y.LAST_NAME] || d || "_OP_UNKNOWN", c[y.EMAIL] = c[y.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
802
|
-
((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US",
|
|
803
|
-
},
|
|
857
|
+
((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US", C("Final form inputs:", c), c;
|
|
858
|
+
}, $n = (t) => new Promise((n) => {
|
|
804
859
|
const r = () => {
|
|
805
860
|
const o = document.getElementById(t);
|
|
806
861
|
o ? n(o) : requestAnimationFrame(r);
|
|
807
862
|
};
|
|
808
863
|
r();
|
|
809
|
-
}),
|
|
864
|
+
}), zn = "@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{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}", qn = (t) => {
|
|
810
865
|
const n = document.createElement("template");
|
|
811
866
|
n.innerHTML = `
|
|
812
867
|
<style>
|
|
813
|
-
${
|
|
868
|
+
${zn}
|
|
814
869
|
</style>
|
|
815
870
|
<div class="overlay">
|
|
816
871
|
<div class="container">
|
|
@@ -824,91 +879,111 @@ const xe = (t) => async (n) => {
|
|
|
824
879
|
const i = o.querySelector("#three-ds-iframe"), s = o.querySelector(".cancel-button");
|
|
825
880
|
return document.body.appendChild(r), { host: r, iframe: i, cancelButton: s };
|
|
826
881
|
};
|
|
827
|
-
function
|
|
882
|
+
function Hn(t, n, r) {
|
|
828
883
|
const o = async () => {
|
|
829
884
|
try {
|
|
830
|
-
const s = await
|
|
885
|
+
const s = await jn(t, r);
|
|
831
886
|
s && (clearInterval(i), n(s));
|
|
832
887
|
} catch {
|
|
833
888
|
}
|
|
834
889
|
};
|
|
835
890
|
o();
|
|
836
|
-
const i = setInterval(o,
|
|
891
|
+
const i = setInterval(o, jt);
|
|
837
892
|
return i;
|
|
838
893
|
}
|
|
839
|
-
function
|
|
894
|
+
function Vn({
|
|
840
895
|
elements: t,
|
|
841
896
|
pollingInterval: n,
|
|
842
897
|
resolve: r
|
|
843
898
|
}) {
|
|
844
899
|
const o = () => {
|
|
845
|
-
clearInterval(n), t.host.remove(), r({ status:
|
|
900
|
+
clearInterval(n), t.host.remove(), r({ status: H.CANCELLED });
|
|
846
901
|
};
|
|
847
902
|
return t.cancelButton.addEventListener("click", o), () => {
|
|
848
903
|
t.cancelButton.removeEventListener("click", o);
|
|
849
904
|
};
|
|
850
905
|
}
|
|
851
|
-
async function
|
|
852
|
-
const { url: n, baseUrl: r } = t, o =
|
|
906
|
+
async function At(t) {
|
|
907
|
+
const { url: n, baseUrl: r } = t, o = qn(n);
|
|
853
908
|
return new Promise((i) => {
|
|
854
909
|
const s = (l) => {
|
|
855
910
|
setTimeout(() => {
|
|
856
911
|
o.host.remove();
|
|
857
912
|
}, 1e3), i(l), c == null || c();
|
|
858
|
-
}, a =
|
|
913
|
+
}, a = Hn(o.iframe, s, new URL(r).origin), c = Vn({
|
|
859
914
|
elements: o,
|
|
860
915
|
pollingInterval: a,
|
|
861
916
|
resolve: i
|
|
862
917
|
});
|
|
863
918
|
});
|
|
864
919
|
}
|
|
865
|
-
const
|
|
866
|
-
const n = await
|
|
867
|
-
if (n.status ===
|
|
920
|
+
const Yn = async (t) => {
|
|
921
|
+
const n = await At(t);
|
|
922
|
+
if (n.status === H.CANCELLED)
|
|
868
923
|
throw new Error("3DS verification cancelled");
|
|
869
|
-
if (n.status ===
|
|
924
|
+
if (n.status === H.FAILURE)
|
|
870
925
|
throw new Error("3DS verification failed");
|
|
871
|
-
return n.status !==
|
|
926
|
+
return n.status !== H.SUCCESS && Fe(n.status), {
|
|
872
927
|
href: n.href
|
|
873
928
|
};
|
|
874
|
-
},
|
|
929
|
+
}, Kn = (t, n) => {
|
|
930
|
+
const r = window.open(n, "_blank");
|
|
931
|
+
if (!r)
|
|
932
|
+
throw new Error(`${t} popup window blocked. Please allow popups for this site.`);
|
|
933
|
+
return r;
|
|
934
|
+
}, Zn = async (t, n, r, o) => {
|
|
935
|
+
const { err__: i } = I("popup-verify");
|
|
936
|
+
return new Promise((s, a) => {
|
|
937
|
+
const c = Kn(t, o), l = setInterval(async () => {
|
|
938
|
+
try {
|
|
939
|
+
const u = await kn(n, r);
|
|
940
|
+
if (u.present)
|
|
941
|
+
clearInterval(l), c.close(), s({ href: u.href });
|
|
942
|
+
else if (c.closed)
|
|
943
|
+
throw new Error(`${t} payment cancelled`);
|
|
944
|
+
} catch (u) {
|
|
945
|
+
i(z(u)), clearInterval(l), a(z(u));
|
|
946
|
+
}
|
|
947
|
+
}, 1e3);
|
|
948
|
+
});
|
|
949
|
+
}, { log__: Bn, err__: xt } = I("pockyt-cc"), Jn = e.object({
|
|
875
950
|
"op-pockyt-3ds-url": e.string(),
|
|
876
951
|
"op-pockyt-txn-no": e.string(),
|
|
877
952
|
"op-pockyt-ref-no": e.string()
|
|
878
|
-
}),
|
|
879
|
-
const n =
|
|
953
|
+
}), Gn = (t) => {
|
|
954
|
+
const n = Jn.safeParse(t);
|
|
880
955
|
if (!n.success) {
|
|
881
956
|
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)}`;
|
|
882
|
-
throw
|
|
957
|
+
throw xt(o), new Error(r);
|
|
883
958
|
}
|
|
884
959
|
return n.data;
|
|
885
|
-
},
|
|
960
|
+
}, Mt = (t) => {
|
|
886
961
|
try {
|
|
887
962
|
const n = new URL(t ?? "").searchParams.get("vaultId");
|
|
888
963
|
if (!n)
|
|
889
964
|
throw new Error("No vault ID found in 3DS verification result");
|
|
890
|
-
return
|
|
965
|
+
return Bn(`3DS verification success. [Vault ID: ${n}]`), n;
|
|
891
966
|
} catch (n) {
|
|
892
967
|
const r = "Error verifying 3DS verification result.";
|
|
893
|
-
throw
|
|
894
|
-
Error: ${
|
|
968
|
+
throw xt(r, `Resulting URL: ${t}.
|
|
969
|
+
Error: ${z(n)}`), new Error(r);
|
|
895
970
|
}
|
|
896
|
-
},
|
|
897
|
-
const r =
|
|
971
|
+
}, Wn = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, Xn = async (t, n) => {
|
|
972
|
+
const r = Gn(n), o = await Yn({ url: r["op-pockyt-3ds-url"], baseUrl: t });
|
|
898
973
|
return {
|
|
899
974
|
existing_cc: {
|
|
900
|
-
vault_id:
|
|
975
|
+
vault_id: Mt(o.href ?? ""),
|
|
901
976
|
transaction_no: r["op-pockyt-txn-no"],
|
|
902
977
|
reference_no: r["op-pockyt-ref-no"]
|
|
903
978
|
}
|
|
904
979
|
};
|
|
905
|
-
}, { log__: g, err__:
|
|
980
|
+
}, { log__: g, err__: Ze } = I("common-cc"), { log__: Be } = I("stripe-cc");
|
|
906
981
|
e.array(
|
|
907
982
|
e.object({
|
|
908
983
|
our_existing_pm_id: e.string()
|
|
909
984
|
})
|
|
910
985
|
).length(1);
|
|
911
|
-
const
|
|
986
|
+
const Qn = be(
|
|
912
987
|
async ({
|
|
913
988
|
context: t,
|
|
914
989
|
checkoutPaymentMethod: n,
|
|
@@ -918,9 +993,9 @@ const Hn = xe(
|
|
|
918
993
|
}) => {
|
|
919
994
|
var s;
|
|
920
995
|
g("├ Running common CC flow...", { checkoutPaymentMethod: n });
|
|
921
|
-
const a = t.anyCdeConnection, c = await
|
|
996
|
+
const a = t.anyCdeConnection, c = await Y(a);
|
|
922
997
|
g(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
|
|
923
|
-
const l =
|
|
998
|
+
const l = we(r, o.get.onValidationError), u = {
|
|
924
999
|
session_id: t.elementsSessionId,
|
|
925
1000
|
checkout_payment_method: n,
|
|
926
1001
|
non_cde_form_fields: l,
|
|
@@ -928,89 +1003,89 @@ const Hn = xe(
|
|
|
928
1003
|
};
|
|
929
1004
|
try {
|
|
930
1005
|
g(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
931
|
-
const d = await
|
|
1006
|
+
const d = await Pn(i.currentCdeConnections, {
|
|
932
1007
|
session_id: t.elementsSessionId
|
|
933
1008
|
});
|
|
934
|
-
if (
|
|
1009
|
+
if (xn(d, o.get.onValidationError), c.mode === "setup") {
|
|
935
1010
|
g(`├ Setting up payment method in CDE [Token: ${c.token}]`);
|
|
936
|
-
const f = await
|
|
1011
|
+
const f = await On(a, u);
|
|
937
1012
|
return g(`╰ Setup completed successfully [PM ID: ${f.payment_method_id}]`), { mode: "setup", result: f };
|
|
938
1013
|
} else {
|
|
939
1014
|
g(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
|
|
940
|
-
const f = await
|
|
1015
|
+
const f = await Ye(a, u);
|
|
941
1016
|
return g("╰ Checkout completed successfully."), { mode: "checkout", result: f };
|
|
942
1017
|
}
|
|
943
1018
|
} catch (d) {
|
|
944
|
-
if (d instanceof
|
|
1019
|
+
if (d instanceof St && d.originalErrorMessage.includes("3DS_REQUIRED")) {
|
|
945
1020
|
g("├ Card requires 3DS, starting non-legacy payment flow"), g("Received 3DS error response headers:", d.response.headers);
|
|
946
|
-
const f =
|
|
1021
|
+
const f = Wn(d.response.headers);
|
|
947
1022
|
if (f) {
|
|
948
1023
|
g("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
|
|
949
|
-
const h = await
|
|
1024
|
+
const h = await Xn(t.baseUrl, d.response.headers);
|
|
950
1025
|
u.extra_metadata.pockyt = h;
|
|
951
1026
|
}
|
|
952
|
-
const _ = await
|
|
1027
|
+
const _ = await wn(a, u);
|
|
953
1028
|
g("├ Payment flow result:", _);
|
|
954
|
-
const
|
|
955
|
-
f ? g("├ Pockyt 3DS is successful, other 3DS flows will be skipped.") :
|
|
956
|
-
const
|
|
1029
|
+
const m = ((s = d.response.headers) == null ? void 0 : s["op-should-use-new-flow"]) !== "true";
|
|
1030
|
+
f ? g("├ Pockyt 3DS is successful, other 3DS flows will be skipped.") : m ? (g("├ Using stripe 3DS flow"), await no(_)) : (g("├ Using common 3DS flow"), await ro(_, t.baseUrl));
|
|
1031
|
+
const p = _.cc_pm_id;
|
|
957
1032
|
if (c.mode === "setup") {
|
|
958
|
-
g(`├ Confirming payment flow [cc_pm_id: ${
|
|
959
|
-
const h = await
|
|
1033
|
+
g(`├ Confirming payment flow [cc_pm_id: ${p}]`);
|
|
1034
|
+
const h = await ge(a, {
|
|
960
1035
|
secure_token: c.token,
|
|
961
|
-
existing_cc_pm_id:
|
|
1036
|
+
existing_cc_pm_id: p
|
|
962
1037
|
});
|
|
963
1038
|
g("├ Confirm payment flow result received Result:", h);
|
|
964
|
-
const j =
|
|
1039
|
+
const j = ve(h);
|
|
965
1040
|
return g(`╰ Setup completed successfully [PM ID: ${j.payment_method_id}]`), { mode: "setup", result: j };
|
|
966
1041
|
} else {
|
|
967
|
-
g(`├ Checking out after 3DS flow [Flow: ${
|
|
968
|
-
const h = await
|
|
1042
|
+
g(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
|
|
1043
|
+
const h = await Ye(a, {
|
|
969
1044
|
...u,
|
|
970
|
-
existing_cc_pm_id:
|
|
971
|
-
do_not_use_legacy_cc_flow:
|
|
1045
|
+
existing_cc_pm_id: p,
|
|
1046
|
+
do_not_use_legacy_cc_flow: m
|
|
972
1047
|
});
|
|
973
1048
|
return g("╰ Checkout completed successfully."), { mode: "checkout", result: h };
|
|
974
1049
|
}
|
|
975
1050
|
}
|
|
976
|
-
throw
|
|
1051
|
+
throw Ze("╰ Error checking out card info in CDE"), Ze(d), d;
|
|
977
1052
|
}
|
|
978
1053
|
}
|
|
979
|
-
),
|
|
1054
|
+
), eo = (t) => {
|
|
980
1055
|
const n = t.required_user_actions.find((r) => r.type === "stripe_3ds");
|
|
981
1056
|
if (!n)
|
|
982
1057
|
throw new Error("No stripe 3DS action found");
|
|
983
|
-
return
|
|
984
|
-
},
|
|
1058
|
+
return $r.parse(n);
|
|
1059
|
+
}, to = (t) => {
|
|
985
1060
|
const n = t.required_user_actions.find((r) => r.type === "airwallex_payment_consent");
|
|
986
1061
|
if (!n)
|
|
987
1062
|
throw new Error("No common 3DS action found");
|
|
988
|
-
return
|
|
989
|
-
},
|
|
990
|
-
const r =
|
|
1063
|
+
return Nr.parse(n);
|
|
1064
|
+
}, ro = async (t, n) => {
|
|
1065
|
+
const r = to(t);
|
|
991
1066
|
g(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
|
|
992
|
-
const { status: o } = await
|
|
993
|
-
if (g(`╰ 3DS verification completed [Status: ${o}]`), o ===
|
|
1067
|
+
const { status: o } = await At({ url: r.redirect_url, baseUrl: n });
|
|
1068
|
+
if (g(`╰ 3DS verification completed [Status: ${o}]`), o === H.CANCELLED)
|
|
994
1069
|
throw new Error("3DS verification cancelled");
|
|
995
|
-
if (o ===
|
|
1070
|
+
if (o === H.FAILURE)
|
|
996
1071
|
throw new Error("3DS verification failed");
|
|
997
|
-
},
|
|
998
|
-
const n =
|
|
999
|
-
|
|
1000
|
-
}, { log__: O, err__:
|
|
1072
|
+
}, no = async (t) => {
|
|
1073
|
+
const n = eo(t);
|
|
1074
|
+
Be(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await Br(n), Be("╰ Stripe 3DS flow completed successfully");
|
|
1075
|
+
}, { log__: O, err__: oo } = I("stripe-pr"), io = e.object({
|
|
1001
1076
|
provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
|
|
1002
1077
|
processor_name: e.literal("stripe"),
|
|
1003
1078
|
metadata: e.object({
|
|
1004
1079
|
stripe_pk: e.string()
|
|
1005
1080
|
})
|
|
1006
|
-
}),
|
|
1081
|
+
}), so = It(
|
|
1007
1082
|
async ({ context: t }) => {
|
|
1008
1083
|
O("Checking if there are any CPMs for Stripe PR...");
|
|
1009
|
-
const n =
|
|
1084
|
+
const n = Tt(t.checkoutPaymentMethods, io);
|
|
1010
1085
|
O("Initializing Stripe PR flow...");
|
|
1011
|
-
const r = t.anyCdeConnection, o = await
|
|
1086
|
+
const r = t.anyCdeConnection, o = await Y(r), i = o.mode === "setup";
|
|
1012
1087
|
O("Getting initial preview amount");
|
|
1013
|
-
const s = await
|
|
1088
|
+
const s = await Ot(r, o.token, i, void 0), a = await Vr(
|
|
1014
1089
|
n.metadata.stripe_pk,
|
|
1015
1090
|
s.amountAtom,
|
|
1016
1091
|
s.currency,
|
|
@@ -1018,7 +1093,7 @@ const Hn = xe(
|
|
|
1018
1093
|
);
|
|
1019
1094
|
O("Checking if can make payment");
|
|
1020
1095
|
const c = await a.canMakePayment();
|
|
1021
|
-
return c === null ? (
|
|
1096
|
+
return c === null ? (oo("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (O("Stripe PR flow initialized successfully. Can make payment", c), {
|
|
1022
1097
|
isAvailable: !0,
|
|
1023
1098
|
pr: a,
|
|
1024
1099
|
availableProviders: {
|
|
@@ -1027,7 +1102,7 @@ const Hn = xe(
|
|
|
1027
1102
|
}
|
|
1028
1103
|
});
|
|
1029
1104
|
}
|
|
1030
|
-
),
|
|
1105
|
+
), ao = be(
|
|
1031
1106
|
async ({
|
|
1032
1107
|
context: t,
|
|
1033
1108
|
checkoutPaymentMethod: n,
|
|
@@ -1040,107 +1115,157 @@ const Hn = xe(
|
|
|
1040
1115
|
throw new Error(`Provider mismatch. Expected ${i.provider}, got ${n.provider}`);
|
|
1041
1116
|
const a = t.anyCdeConnection, c = s.pr;
|
|
1042
1117
|
if (i != null && i.overridePaymentRequest) {
|
|
1043
|
-
const
|
|
1044
|
-
O("Overriding PR amount with",
|
|
1118
|
+
const p = i.overridePaymentRequest;
|
|
1119
|
+
O("Overriding PR amount with", p), lo(c, p.amount, p.pending, p.stripeApplePay);
|
|
1045
1120
|
}
|
|
1046
1121
|
O("Showing PR dialog..."), c.show();
|
|
1047
|
-
const l = await
|
|
1122
|
+
const l = await Kr(c);
|
|
1048
1123
|
O("Stripe PM added event:", l), O("Merging PM fields with form fields...");
|
|
1049
|
-
const u =
|
|
1124
|
+
const u = co(r, l), d = we(u, o.get.onValidationError);
|
|
1050
1125
|
O("PR dialog finished. Starting payment flow...");
|
|
1051
|
-
const f = await
|
|
1126
|
+
const f = await En(a, {
|
|
1052
1127
|
fields: d,
|
|
1053
1128
|
checkoutPaymentMethod: n
|
|
1054
|
-
}), _ =
|
|
1055
|
-
O("Confirming PR with Stripe..."), await
|
|
1056
|
-
const
|
|
1057
|
-
if (
|
|
1129
|
+
}), _ = uo(f);
|
|
1130
|
+
O("Confirming PR with Stripe..."), await Zr(_, l);
|
|
1131
|
+
const m = await Y(a);
|
|
1132
|
+
if (m.mode === "setup") {
|
|
1058
1133
|
O("Confirming payment flow for setup...");
|
|
1059
|
-
const
|
|
1060
|
-
secure_token:
|
|
1134
|
+
const p = await ge(a, {
|
|
1135
|
+
secure_token: m.token
|
|
1061
1136
|
});
|
|
1062
|
-
return { mode: "setup", result:
|
|
1137
|
+
return { mode: "setup", result: ve(p) };
|
|
1063
1138
|
} else {
|
|
1064
1139
|
O("Performing checkout...");
|
|
1065
|
-
const
|
|
1066
|
-
secure_token:
|
|
1140
|
+
const p = {
|
|
1141
|
+
secure_token: m.token,
|
|
1067
1142
|
payment_input: {
|
|
1068
1143
|
provider_type: n.provider
|
|
1069
1144
|
},
|
|
1145
|
+
customer_first_name: d[y.FIRST_NAME],
|
|
1146
|
+
customer_last_name: d[y.LAST_NAME],
|
|
1070
1147
|
customer_email: d[y.EMAIL],
|
|
1071
1148
|
customer_zip_code: d[y.ZIP_CODE],
|
|
1072
1149
|
customer_country: d[y.COUNTRY],
|
|
1073
1150
|
promotion_code: d[y.PROMOTION_CODE],
|
|
1074
|
-
line_items:
|
|
1075
|
-
total_amount_atom:
|
|
1151
|
+
line_items: m.line_items,
|
|
1152
|
+
total_amount_atom: m.amount_total_atom,
|
|
1076
1153
|
cancel_at_end: !1,
|
|
1077
1154
|
checkout_payment_method: n
|
|
1078
1155
|
};
|
|
1079
|
-
return { mode: "checkout", result: await
|
|
1156
|
+
return { mode: "checkout", result: await Ue(a, p) };
|
|
1080
1157
|
}
|
|
1081
1158
|
}
|
|
1082
|
-
),
|
|
1159
|
+
), co = (t, n) => {
|
|
1083
1160
|
var r, o, i, s;
|
|
1084
|
-
const a = { ...t }, [c, ...l] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0;
|
|
1085
|
-
return a[y.FIRST_NAME] = a[y.FIRST_NAME] || c || "_OP_UNKNOWN", a[y.LAST_NAME] = a[y.LAST_NAME] || u || "_OP_UNKNOWN", a[y.EMAIL] = a[y.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", a[y.ZIP_CODE] = a[y.ZIP_CODE] || (
|
|
1086
|
-
},
|
|
1161
|
+
const a = { ...t }, [c, ...l] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (s = (i = n.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : s.address, f = n.shippingAddress;
|
|
1162
|
+
return a[y.FIRST_NAME] = a[y.FIRST_NAME] || c || "_OP_UNKNOWN", a[y.LAST_NAME] = a[y.LAST_NAME] || u || "_OP_UNKNOWN", a[y.EMAIL] = a[y.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", a[y.ZIP_CODE] = a[y.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (f == null ? void 0 : f.postalCode) || "00000", a[y.COUNTRY] = a[y.COUNTRY] || (d == null ? void 0 : d.country) || (f == null ? void 0 : f.country) || "US", O("Final form inputs:", a), a;
|
|
1163
|
+
}, lo = (t, n, r, o) => {
|
|
1087
1164
|
t.update({
|
|
1088
1165
|
total: {
|
|
1089
1166
|
amount: n.amountAtom,
|
|
1090
1167
|
label: "Total",
|
|
1091
1168
|
pending: r
|
|
1092
1169
|
},
|
|
1093
|
-
currency: n.currency
|
|
1170
|
+
currency: n.currency,
|
|
1171
|
+
applePay: o
|
|
1094
1172
|
});
|
|
1095
|
-
},
|
|
1173
|
+
}, uo = (t) => {
|
|
1096
1174
|
if (t.required_user_actions.length !== 1)
|
|
1097
1175
|
throw new Error(`Error occurred.
|
|
1098
1176
|
Details: got ${t.required_user_actions.length} required user actions`);
|
|
1099
|
-
return
|
|
1100
|
-
},
|
|
1101
|
-
|
|
1177
|
+
return zr.parse(t.required_user_actions[0]);
|
|
1178
|
+
}, { log__: N } = I("pockyt-paypal"), mo = e.object({
|
|
1179
|
+
processor_name: e.literal("pockyt"),
|
|
1180
|
+
provider: e.literal("paypal")
|
|
1181
|
+
}), po = e.array(
|
|
1182
|
+
e.object({
|
|
1183
|
+
paypal_iframe_url: e.string(),
|
|
1184
|
+
verify_token: e.string()
|
|
1185
|
+
})
|
|
1186
|
+
).length(1), fo = be(
|
|
1187
|
+
async ({ context: t, checkoutPaymentMethod: n, nonCdeFormInputs: r, formCallbacks: o }) => {
|
|
1188
|
+
N("Running Pockyt Paypal flow...");
|
|
1189
|
+
const i = t.anyCdeConnection, s = await Y(i);
|
|
1190
|
+
N("Verifying CPM...");
|
|
1191
|
+
const a = mo.parse(n);
|
|
1192
|
+
N("├ Validating non-CDE form fields");
|
|
1193
|
+
const c = we(r, o.get.onValidationError), l = Tn(c);
|
|
1194
|
+
N("Starting payment flow...");
|
|
1195
|
+
const u = await Pt(i, {
|
|
1196
|
+
payment_provider: a.provider,
|
|
1197
|
+
checkout_payment_method: a,
|
|
1198
|
+
...l
|
|
1199
|
+
});
|
|
1200
|
+
N("Start payment flow response", u);
|
|
1201
|
+
const d = po.parse(u.required_user_actions)[0];
|
|
1202
|
+
N("Opening paypal iframe...");
|
|
1203
|
+
const f = await Zn(
|
|
1204
|
+
"PayPal",
|
|
1205
|
+
i,
|
|
1206
|
+
d.verify_token,
|
|
1207
|
+
d.paypal_iframe_url
|
|
1208
|
+
);
|
|
1209
|
+
N("Paypal flow result", f);
|
|
1210
|
+
const _ = Mt(f.href);
|
|
1211
|
+
N(`Confirming payment flow using vault ID ${_}`);
|
|
1212
|
+
const m = await ge(i, {
|
|
1213
|
+
secure_token: s.token,
|
|
1214
|
+
their_pm_id: _
|
|
1215
|
+
});
|
|
1216
|
+
return N("Confirm payment flow result", m), await Rn("pockyt-paypal", i, a, c, m);
|
|
1217
|
+
}
|
|
1218
|
+
), xe = (t, n, r) => {
|
|
1219
|
+
const o = t.filter((i) => {
|
|
1220
|
+
const s = r === void 0 ? !0 : i.processor_name === r, a = i.provider === n;
|
|
1221
|
+
return s && a;
|
|
1222
|
+
});
|
|
1102
1223
|
if (o.length === 0)
|
|
1103
1224
|
throw console.error("CPMs list", t), new Error(`No CPMs found with provider '${n}' and processor '${r}'`);
|
|
1104
1225
|
if (o.length !== 1)
|
|
1105
1226
|
throw console.error("CPMs list", t), new Error(`More than one CPM found with provider '${n}' and processor '${r}'`);
|
|
1106
1227
|
return o[0];
|
|
1107
|
-
},
|
|
1228
|
+
}, V = {
|
|
1108
1229
|
// ✋ Note: For flows that require initialization, please add them to `init-flows.ts`
|
|
1109
1230
|
// Common
|
|
1110
1231
|
commonCC: {
|
|
1111
1232
|
init: async () => {
|
|
1112
1233
|
},
|
|
1113
|
-
run:
|
|
1234
|
+
run: Qn
|
|
1114
1235
|
},
|
|
1115
1236
|
// Stripe
|
|
1116
1237
|
stripePR: {
|
|
1117
|
-
init:
|
|
1118
|
-
run:
|
|
1238
|
+
init: so,
|
|
1239
|
+
run: ao
|
|
1119
1240
|
},
|
|
1120
1241
|
stripeLink: {
|
|
1121
|
-
init:
|
|
1122
|
-
run:
|
|
1242
|
+
init: Nn,
|
|
1243
|
+
run: Un
|
|
1244
|
+
},
|
|
1245
|
+
// Pockyt
|
|
1246
|
+
pockytPaypal: {
|
|
1247
|
+
run: fo
|
|
1123
1248
|
}
|
|
1124
1249
|
// 👉 Add more flows here
|
|
1125
1250
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1126
1251
|
};
|
|
1127
|
-
var
|
|
1128
|
-
return
|
|
1252
|
+
var Me = function(t, n) {
|
|
1253
|
+
return Me = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, o) {
|
|
1129
1254
|
r.__proto__ = o;
|
|
1130
1255
|
} || function(r, o) {
|
|
1131
1256
|
for (var i in o) Object.prototype.hasOwnProperty.call(o, i) && (r[i] = o[i]);
|
|
1132
|
-
},
|
|
1257
|
+
}, Me(t, n);
|
|
1133
1258
|
};
|
|
1134
|
-
function
|
|
1259
|
+
function q(t, n) {
|
|
1135
1260
|
if (typeof n != "function" && n !== null)
|
|
1136
1261
|
throw new TypeError("Class extends value " + String(n) + " is not a constructor or null");
|
|
1137
|
-
|
|
1262
|
+
Me(t, n);
|
|
1138
1263
|
function r() {
|
|
1139
1264
|
this.constructor = t;
|
|
1140
1265
|
}
|
|
1141
1266
|
t.prototype = n === null ? Object.create(n) : (r.prototype = n.prototype, new r());
|
|
1142
1267
|
}
|
|
1143
|
-
function
|
|
1268
|
+
function ho(t, n, r, o) {
|
|
1144
1269
|
function i(s) {
|
|
1145
1270
|
return s instanceof r ? s : new r(function(a) {
|
|
1146
1271
|
a(s);
|
|
@@ -1167,7 +1292,7 @@ function to(t, n, r, o) {
|
|
|
1167
1292
|
u((o = o.apply(t, [])).next());
|
|
1168
1293
|
});
|
|
1169
1294
|
}
|
|
1170
|
-
function
|
|
1295
|
+
function Dt(t, n) {
|
|
1171
1296
|
var r = { label: 0, sent: function() {
|
|
1172
1297
|
if (s[0] & 1) throw s[1];
|
|
1173
1298
|
return s[1];
|
|
@@ -1227,7 +1352,7 @@ function Rt(t, n) {
|
|
|
1227
1352
|
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
1228
1353
|
}
|
|
1229
1354
|
}
|
|
1230
|
-
function
|
|
1355
|
+
function W(t) {
|
|
1231
1356
|
var n = typeof Symbol == "function" && Symbol.iterator, r = n && t[n], o = 0;
|
|
1232
1357
|
if (r) return r.call(t);
|
|
1233
1358
|
if (t && typeof t.length == "number") return {
|
|
@@ -1237,7 +1362,7 @@ function J(t) {
|
|
|
1237
1362
|
};
|
|
1238
1363
|
throw new TypeError(n ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
1239
1364
|
}
|
|
1240
|
-
function
|
|
1365
|
+
function me(t, n) {
|
|
1241
1366
|
var r = typeof Symbol == "function" && t[Symbol.iterator];
|
|
1242
1367
|
if (!r) return t;
|
|
1243
1368
|
var o = r.call(t), i, s = [], a;
|
|
@@ -1254,56 +1379,56 @@ function ce(t, n) {
|
|
|
1254
1379
|
}
|
|
1255
1380
|
return s;
|
|
1256
1381
|
}
|
|
1257
|
-
function
|
|
1382
|
+
function pe(t, n, r) {
|
|
1258
1383
|
if (arguments.length === 2) for (var o = 0, i = n.length, s; o < i; o++)
|
|
1259
1384
|
(s || !(o in n)) && (s || (s = Array.prototype.slice.call(n, 0, o)), s[o] = n[o]);
|
|
1260
1385
|
return t.concat(s || Array.prototype.slice.call(n));
|
|
1261
1386
|
}
|
|
1262
|
-
function
|
|
1263
|
-
return this instanceof
|
|
1387
|
+
function G(t) {
|
|
1388
|
+
return this instanceof G ? (this.v = t, this) : new G(t);
|
|
1264
1389
|
}
|
|
1265
|
-
function
|
|
1390
|
+
function yo(t, n, r) {
|
|
1266
1391
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
1267
1392
|
var o = r.apply(t, n || []), i, s = [];
|
|
1268
1393
|
return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", a), i[Symbol.asyncIterator] = function() {
|
|
1269
1394
|
return this;
|
|
1270
1395
|
}, i;
|
|
1271
|
-
function a(
|
|
1272
|
-
return function(
|
|
1273
|
-
return Promise.resolve(
|
|
1396
|
+
function a(m) {
|
|
1397
|
+
return function(p) {
|
|
1398
|
+
return Promise.resolve(p).then(m, f);
|
|
1274
1399
|
};
|
|
1275
1400
|
}
|
|
1276
|
-
function c(
|
|
1277
|
-
o[
|
|
1278
|
-
return new Promise(function(j,
|
|
1279
|
-
s.push([
|
|
1401
|
+
function c(m, p) {
|
|
1402
|
+
o[m] && (i[m] = function(h) {
|
|
1403
|
+
return new Promise(function(j, ie) {
|
|
1404
|
+
s.push([m, h, j, ie]) > 1 || l(m, h);
|
|
1280
1405
|
});
|
|
1281
|
-
},
|
|
1406
|
+
}, p && (i[m] = p(i[m])));
|
|
1282
1407
|
}
|
|
1283
|
-
function l(
|
|
1408
|
+
function l(m, p) {
|
|
1284
1409
|
try {
|
|
1285
|
-
u(o[
|
|
1410
|
+
u(o[m](p));
|
|
1286
1411
|
} catch (h) {
|
|
1287
1412
|
_(s[0][3], h);
|
|
1288
1413
|
}
|
|
1289
1414
|
}
|
|
1290
|
-
function u(
|
|
1291
|
-
|
|
1415
|
+
function u(m) {
|
|
1416
|
+
m.value instanceof G ? Promise.resolve(m.value.v).then(d, f) : _(s[0][2], m);
|
|
1292
1417
|
}
|
|
1293
|
-
function d(
|
|
1294
|
-
l("next",
|
|
1418
|
+
function d(m) {
|
|
1419
|
+
l("next", m);
|
|
1295
1420
|
}
|
|
1296
|
-
function f(
|
|
1297
|
-
l("throw",
|
|
1421
|
+
function f(m) {
|
|
1422
|
+
l("throw", m);
|
|
1298
1423
|
}
|
|
1299
|
-
function _(
|
|
1300
|
-
p
|
|
1424
|
+
function _(m, p) {
|
|
1425
|
+
m(p), s.shift(), s.length && l(s[0][0], s[0][1]);
|
|
1301
1426
|
}
|
|
1302
1427
|
}
|
|
1303
|
-
function
|
|
1428
|
+
function _o(t) {
|
|
1304
1429
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
1305
1430
|
var n = t[Symbol.asyncIterator], r;
|
|
1306
|
-
return n ? n.call(t) : (t = typeof
|
|
1431
|
+
return n ? n.call(t) : (t = typeof W == "function" ? W(t) : t[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
|
|
1307
1432
|
return this;
|
|
1308
1433
|
}, r);
|
|
1309
1434
|
function o(s) {
|
|
@@ -1319,16 +1444,16 @@ function no(t) {
|
|
|
1319
1444
|
}, a);
|
|
1320
1445
|
}
|
|
1321
1446
|
}
|
|
1322
|
-
function
|
|
1447
|
+
function k(t) {
|
|
1323
1448
|
return typeof t == "function";
|
|
1324
1449
|
}
|
|
1325
|
-
function
|
|
1450
|
+
function Ee(t) {
|
|
1326
1451
|
var n = function(o) {
|
|
1327
1452
|
Error.call(o), o.stack = new Error().stack;
|
|
1328
1453
|
}, r = t(n);
|
|
1329
1454
|
return r.prototype = Object.create(Error.prototype), r.prototype.constructor = r, r;
|
|
1330
1455
|
}
|
|
1331
|
-
var
|
|
1456
|
+
var Ie = Ee(function(t) {
|
|
1332
1457
|
return function(n) {
|
|
1333
1458
|
t(this), this.message = n ? n.length + ` errors occurred during unsubscription:
|
|
1334
1459
|
` + n.map(function(r, o) {
|
|
@@ -1337,13 +1462,13 @@ var Ee = fe(function(t) {
|
|
|
1337
1462
|
`) : "", this.name = "UnsubscriptionError", this.errors = n;
|
|
1338
1463
|
};
|
|
1339
1464
|
});
|
|
1340
|
-
function
|
|
1465
|
+
function fe(t, n) {
|
|
1341
1466
|
if (t) {
|
|
1342
1467
|
var r = t.indexOf(n);
|
|
1343
1468
|
0 <= r && t.splice(r, 1);
|
|
1344
1469
|
}
|
|
1345
1470
|
}
|
|
1346
|
-
var
|
|
1471
|
+
var ne = function() {
|
|
1347
1472
|
function t(n) {
|
|
1348
1473
|
this.initialTeardown = n, this.closed = !1, this._parentage = null, this._finalizers = null;
|
|
1349
1474
|
}
|
|
@@ -1355,7 +1480,7 @@ var ee = function() {
|
|
|
1355
1480
|
if (a)
|
|
1356
1481
|
if (this._parentage = null, Array.isArray(a))
|
|
1357
1482
|
try {
|
|
1358
|
-
for (var c =
|
|
1483
|
+
for (var c = W(a), l = c.next(); !l.done; l = c.next()) {
|
|
1359
1484
|
var u = l.value;
|
|
1360
1485
|
u.remove(this);
|
|
1361
1486
|
}
|
|
@@ -1371,42 +1496,42 @@ var ee = function() {
|
|
|
1371
1496
|
else
|
|
1372
1497
|
a.remove(this);
|
|
1373
1498
|
var d = this.initialTeardown;
|
|
1374
|
-
if (
|
|
1499
|
+
if (k(d))
|
|
1375
1500
|
try {
|
|
1376
1501
|
d();
|
|
1377
1502
|
} catch (h) {
|
|
1378
|
-
s = h instanceof
|
|
1503
|
+
s = h instanceof Ie ? h.errors : [h];
|
|
1379
1504
|
}
|
|
1380
1505
|
var f = this._finalizers;
|
|
1381
1506
|
if (f) {
|
|
1382
1507
|
this._finalizers = null;
|
|
1383
1508
|
try {
|
|
1384
|
-
for (var _ =
|
|
1385
|
-
var
|
|
1509
|
+
for (var _ = W(f), m = _.next(); !m.done; m = _.next()) {
|
|
1510
|
+
var p = m.value;
|
|
1386
1511
|
try {
|
|
1387
|
-
|
|
1512
|
+
Je(p);
|
|
1388
1513
|
} catch (h) {
|
|
1389
|
-
s = s ?? [], h instanceof
|
|
1514
|
+
s = s ?? [], h instanceof Ie ? s = pe(pe([], me(s)), me(h.errors)) : s.push(h);
|
|
1390
1515
|
}
|
|
1391
1516
|
}
|
|
1392
1517
|
} catch (h) {
|
|
1393
1518
|
o = { error: h };
|
|
1394
1519
|
} finally {
|
|
1395
1520
|
try {
|
|
1396
|
-
|
|
1521
|
+
m && !m.done && (i = _.return) && i.call(_);
|
|
1397
1522
|
} finally {
|
|
1398
1523
|
if (o) throw o.error;
|
|
1399
1524
|
}
|
|
1400
1525
|
}
|
|
1401
1526
|
}
|
|
1402
1527
|
if (s)
|
|
1403
|
-
throw new
|
|
1528
|
+
throw new Ie(s);
|
|
1404
1529
|
}
|
|
1405
1530
|
}, t.prototype.add = function(n) {
|
|
1406
1531
|
var r;
|
|
1407
1532
|
if (n && n !== this)
|
|
1408
1533
|
if (this.closed)
|
|
1409
|
-
|
|
1534
|
+
Je(n);
|
|
1410
1535
|
else {
|
|
1411
1536
|
if (n instanceof t) {
|
|
1412
1537
|
if (n.closed || n._hasParent(this))
|
|
@@ -1423,56 +1548,56 @@ var ee = function() {
|
|
|
1423
1548
|
this._parentage = Array.isArray(r) ? (r.push(n), r) : r ? [r, n] : n;
|
|
1424
1549
|
}, t.prototype._removeParent = function(n) {
|
|
1425
1550
|
var r = this._parentage;
|
|
1426
|
-
r === n ? this._parentage = null : Array.isArray(r) &&
|
|
1551
|
+
r === n ? this._parentage = null : Array.isArray(r) && fe(r, n);
|
|
1427
1552
|
}, t.prototype.remove = function(n) {
|
|
1428
1553
|
var r = this._finalizers;
|
|
1429
|
-
r &&
|
|
1554
|
+
r && fe(r, n), n instanceof t && n._removeParent(this);
|
|
1430
1555
|
}, t.EMPTY = function() {
|
|
1431
1556
|
var n = new t();
|
|
1432
1557
|
return n.closed = !0, n;
|
|
1433
1558
|
}(), t;
|
|
1434
|
-
}(),
|
|
1435
|
-
function
|
|
1436
|
-
return t instanceof
|
|
1559
|
+
}(), Lt = ne.EMPTY;
|
|
1560
|
+
function Nt(t) {
|
|
1561
|
+
return t instanceof ne || t && "closed" in t && k(t.remove) && k(t.add) && k(t.unsubscribe);
|
|
1437
1562
|
}
|
|
1438
|
-
function
|
|
1439
|
-
|
|
1563
|
+
function Je(t) {
|
|
1564
|
+
k(t) ? t() : t.unsubscribe();
|
|
1440
1565
|
}
|
|
1441
|
-
var
|
|
1566
|
+
var Ut = {
|
|
1442
1567
|
onUnhandledError: null,
|
|
1443
1568
|
onStoppedNotification: null,
|
|
1444
1569
|
Promise: void 0,
|
|
1445
1570
|
useDeprecatedSynchronousErrorHandling: !1,
|
|
1446
1571
|
useDeprecatedNextContext: !1
|
|
1447
|
-
},
|
|
1572
|
+
}, go = {
|
|
1448
1573
|
setTimeout: function(t, n) {
|
|
1449
1574
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
1450
1575
|
r[o - 2] = arguments[o];
|
|
1451
|
-
return setTimeout.apply(void 0,
|
|
1576
|
+
return setTimeout.apply(void 0, pe([t, n], me(r)));
|
|
1452
1577
|
},
|
|
1453
1578
|
clearTimeout: function(t) {
|
|
1454
1579
|
return clearTimeout(t);
|
|
1455
1580
|
},
|
|
1456
1581
|
delegate: void 0
|
|
1457
1582
|
};
|
|
1458
|
-
function
|
|
1459
|
-
|
|
1583
|
+
function Ft(t) {
|
|
1584
|
+
go.setTimeout(function() {
|
|
1460
1585
|
throw t;
|
|
1461
1586
|
});
|
|
1462
1587
|
}
|
|
1463
|
-
function
|
|
1588
|
+
function Ge() {
|
|
1464
1589
|
}
|
|
1465
|
-
function
|
|
1590
|
+
function ce(t) {
|
|
1466
1591
|
t();
|
|
1467
1592
|
}
|
|
1468
|
-
var
|
|
1469
|
-
|
|
1593
|
+
var $e = function(t) {
|
|
1594
|
+
q(n, t);
|
|
1470
1595
|
function n(r) {
|
|
1471
1596
|
var o = t.call(this) || this;
|
|
1472
|
-
return o.isStopped = !1, r ? (o.destination = r,
|
|
1597
|
+
return o.isStopped = !1, r ? (o.destination = r, Nt(r) && r.add(o)) : o.destination = Eo, o;
|
|
1473
1598
|
}
|
|
1474
1599
|
return n.create = function(r, o, i) {
|
|
1475
|
-
return new
|
|
1600
|
+
return new De(r, o, i);
|
|
1476
1601
|
}, n.prototype.next = function(r) {
|
|
1477
1602
|
this.isStopped || this._next(r);
|
|
1478
1603
|
}, n.prototype.error = function(r) {
|
|
@@ -1496,11 +1621,11 @@ var De = function(t) {
|
|
|
1496
1621
|
this.unsubscribe();
|
|
1497
1622
|
}
|
|
1498
1623
|
}, n;
|
|
1499
|
-
}(
|
|
1500
|
-
function
|
|
1501
|
-
return
|
|
1624
|
+
}(ne), bo = Function.prototype.bind;
|
|
1625
|
+
function Te(t, n) {
|
|
1626
|
+
return bo.call(t, n);
|
|
1502
1627
|
}
|
|
1503
|
-
var
|
|
1628
|
+
var vo = function() {
|
|
1504
1629
|
function t(n) {
|
|
1505
1630
|
this.partialObserver = n;
|
|
1506
1631
|
}
|
|
@@ -1510,7 +1635,7 @@ var so = function() {
|
|
|
1510
1635
|
try {
|
|
1511
1636
|
r.next(n);
|
|
1512
1637
|
} catch (o) {
|
|
1513
|
-
|
|
1638
|
+
se(o);
|
|
1514
1639
|
}
|
|
1515
1640
|
}, t.prototype.error = function(n) {
|
|
1516
1641
|
var r = this.partialObserver;
|
|
@@ -1518,24 +1643,24 @@ var so = function() {
|
|
|
1518
1643
|
try {
|
|
1519
1644
|
r.error(n);
|
|
1520
1645
|
} catch (o) {
|
|
1521
|
-
|
|
1646
|
+
se(o);
|
|
1522
1647
|
}
|
|
1523
1648
|
else
|
|
1524
|
-
|
|
1649
|
+
se(n);
|
|
1525
1650
|
}, t.prototype.complete = function() {
|
|
1526
1651
|
var n = this.partialObserver;
|
|
1527
1652
|
if (n.complete)
|
|
1528
1653
|
try {
|
|
1529
1654
|
n.complete();
|
|
1530
1655
|
} catch (r) {
|
|
1531
|
-
|
|
1656
|
+
se(r);
|
|
1532
1657
|
}
|
|
1533
1658
|
}, t;
|
|
1534
|
-
}(),
|
|
1535
|
-
|
|
1659
|
+
}(), De = function(t) {
|
|
1660
|
+
q(n, t);
|
|
1536
1661
|
function n(r, o, i) {
|
|
1537
1662
|
var s = t.call(this) || this, a;
|
|
1538
|
-
if (
|
|
1663
|
+
if (k(r) || !r)
|
|
1539
1664
|
a = {
|
|
1540
1665
|
next: r ?? void 0,
|
|
1541
1666
|
error: o ?? void 0,
|
|
@@ -1543,43 +1668,43 @@ var so = function() {
|
|
|
1543
1668
|
};
|
|
1544
1669
|
else {
|
|
1545
1670
|
var c;
|
|
1546
|
-
s &&
|
|
1671
|
+
s && Ut.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
|
|
1547
1672
|
return s.unsubscribe();
|
|
1548
1673
|
}, a = {
|
|
1549
|
-
next: r.next &&
|
|
1550
|
-
error: r.error &&
|
|
1551
|
-
complete: r.complete &&
|
|
1674
|
+
next: r.next && Te(r.next, c),
|
|
1675
|
+
error: r.error && Te(r.error, c),
|
|
1676
|
+
complete: r.complete && Te(r.complete, c)
|
|
1552
1677
|
}) : a = r;
|
|
1553
1678
|
}
|
|
1554
|
-
return s.destination = new
|
|
1679
|
+
return s.destination = new vo(a), s;
|
|
1555
1680
|
}
|
|
1556
1681
|
return n;
|
|
1557
|
-
}(
|
|
1558
|
-
function
|
|
1559
|
-
|
|
1682
|
+
}($e);
|
|
1683
|
+
function se(t) {
|
|
1684
|
+
Ft(t);
|
|
1560
1685
|
}
|
|
1561
|
-
function
|
|
1686
|
+
function wo(t) {
|
|
1562
1687
|
throw t;
|
|
1563
1688
|
}
|
|
1564
|
-
var
|
|
1689
|
+
var Eo = {
|
|
1565
1690
|
closed: !0,
|
|
1566
|
-
next:
|
|
1567
|
-
error:
|
|
1568
|
-
complete:
|
|
1569
|
-
},
|
|
1691
|
+
next: Ge,
|
|
1692
|
+
error: wo,
|
|
1693
|
+
complete: Ge
|
|
1694
|
+
}, ze = function() {
|
|
1570
1695
|
return typeof Symbol == "function" && Symbol.observable || "@@observable";
|
|
1571
1696
|
}();
|
|
1572
|
-
function
|
|
1697
|
+
function Co(t) {
|
|
1573
1698
|
return t;
|
|
1574
1699
|
}
|
|
1575
|
-
function
|
|
1576
|
-
return t.length === 0 ?
|
|
1700
|
+
function ko(t) {
|
|
1701
|
+
return t.length === 0 ? Co : t.length === 1 ? t[0] : function(n) {
|
|
1577
1702
|
return t.reduce(function(r, o) {
|
|
1578
1703
|
return o(r);
|
|
1579
1704
|
}, n);
|
|
1580
1705
|
};
|
|
1581
1706
|
}
|
|
1582
|
-
var
|
|
1707
|
+
var U = function() {
|
|
1583
1708
|
function t(n) {
|
|
1584
1709
|
n && (this._subscribe = n);
|
|
1585
1710
|
}
|
|
@@ -1587,8 +1712,8 @@ var N = function() {
|
|
|
1587
1712
|
var r = new t();
|
|
1588
1713
|
return r.source = this, r.operator = n, r;
|
|
1589
1714
|
}, t.prototype.subscribe = function(n, r, o) {
|
|
1590
|
-
var i = this, s =
|
|
1591
|
-
return
|
|
1715
|
+
var i = this, s = Po(n) ? n : new De(n, r, o);
|
|
1716
|
+
return ce(function() {
|
|
1592
1717
|
var a = i, c = a.operator, l = a.source;
|
|
1593
1718
|
s.add(c ? c.call(s, l) : l ? i._subscribe(s) : i._trySubscribe(s));
|
|
1594
1719
|
}), s;
|
|
@@ -1600,8 +1725,8 @@ var N = function() {
|
|
|
1600
1725
|
}
|
|
1601
1726
|
}, t.prototype.forEach = function(n, r) {
|
|
1602
1727
|
var o = this;
|
|
1603
|
-
return r =
|
|
1604
|
-
var a = new
|
|
1728
|
+
return r = We(r), new r(function(i, s) {
|
|
1729
|
+
var a = new De({
|
|
1605
1730
|
next: function(c) {
|
|
1606
1731
|
try {
|
|
1607
1732
|
n(c);
|
|
@@ -1617,15 +1742,15 @@ var N = function() {
|
|
|
1617
1742
|
}, t.prototype._subscribe = function(n) {
|
|
1618
1743
|
var r;
|
|
1619
1744
|
return (r = this.source) === null || r === void 0 ? void 0 : r.subscribe(n);
|
|
1620
|
-
}, t.prototype[
|
|
1745
|
+
}, t.prototype[ze] = function() {
|
|
1621
1746
|
return this;
|
|
1622
1747
|
}, t.prototype.pipe = function() {
|
|
1623
1748
|
for (var n = [], r = 0; r < arguments.length; r++)
|
|
1624
1749
|
n[r] = arguments[r];
|
|
1625
|
-
return
|
|
1750
|
+
return ko(n)(this);
|
|
1626
1751
|
}, t.prototype.toPromise = function(n) {
|
|
1627
1752
|
var r = this;
|
|
1628
|
-
return n =
|
|
1753
|
+
return n = We(n), new n(function(o, i) {
|
|
1629
1754
|
var s;
|
|
1630
1755
|
r.subscribe(function(a) {
|
|
1631
1756
|
return s = a;
|
|
@@ -1639,22 +1764,22 @@ var N = function() {
|
|
|
1639
1764
|
return new t(n);
|
|
1640
1765
|
}, t;
|
|
1641
1766
|
}();
|
|
1642
|
-
function
|
|
1767
|
+
function We(t) {
|
|
1643
1768
|
var n;
|
|
1644
|
-
return (n = t ??
|
|
1769
|
+
return (n = t ?? Ut.Promise) !== null && n !== void 0 ? n : Promise;
|
|
1645
1770
|
}
|
|
1646
|
-
function
|
|
1647
|
-
return t &&
|
|
1771
|
+
function So(t) {
|
|
1772
|
+
return t && k(t.next) && k(t.error) && k(t.complete);
|
|
1648
1773
|
}
|
|
1649
|
-
function
|
|
1650
|
-
return t && t instanceof
|
|
1774
|
+
function Po(t) {
|
|
1775
|
+
return t && t instanceof $e || So(t) && Nt(t);
|
|
1651
1776
|
}
|
|
1652
|
-
function
|
|
1653
|
-
return
|
|
1777
|
+
function Oo(t) {
|
|
1778
|
+
return k(t == null ? void 0 : t.lift);
|
|
1654
1779
|
}
|
|
1655
|
-
function
|
|
1780
|
+
function jo(t) {
|
|
1656
1781
|
return function(n) {
|
|
1657
|
-
if (
|
|
1782
|
+
if (Oo(n))
|
|
1658
1783
|
return n.lift(function(r) {
|
|
1659
1784
|
try {
|
|
1660
1785
|
return t(r, this);
|
|
@@ -1665,11 +1790,11 @@ function fo(t) {
|
|
|
1665
1790
|
throw new TypeError("Unable to lift unknown Observable type");
|
|
1666
1791
|
};
|
|
1667
1792
|
}
|
|
1668
|
-
function
|
|
1669
|
-
return new
|
|
1793
|
+
function Io(t, n, r, o, i) {
|
|
1794
|
+
return new To(t, n, r, o, i);
|
|
1670
1795
|
}
|
|
1671
|
-
var
|
|
1672
|
-
|
|
1796
|
+
var To = function(t) {
|
|
1797
|
+
q(n, t);
|
|
1673
1798
|
function n(r, o, i, s, a, c) {
|
|
1674
1799
|
var l = t.call(this, r) || this;
|
|
1675
1800
|
return l.onFinalize = a, l.shouldUnsubscribe = c, l._next = o ? function(u) {
|
|
@@ -1703,30 +1828,30 @@ var _o = function(t) {
|
|
|
1703
1828
|
t.prototype.unsubscribe.call(this), !o && ((r = this.onFinalize) === null || r === void 0 || r.call(this));
|
|
1704
1829
|
}
|
|
1705
1830
|
}, n;
|
|
1706
|
-
}(
|
|
1831
|
+
}($e), Ro = Ee(function(t) {
|
|
1707
1832
|
return function() {
|
|
1708
1833
|
t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
|
|
1709
1834
|
};
|
|
1710
|
-
}),
|
|
1711
|
-
|
|
1835
|
+
}), $t = function(t) {
|
|
1836
|
+
q(n, t);
|
|
1712
1837
|
function n() {
|
|
1713
1838
|
var r = t.call(this) || this;
|
|
1714
1839
|
return r.closed = !1, r.currentObservers = null, r.observers = [], r.isStopped = !1, r.hasError = !1, r.thrownError = null, r;
|
|
1715
1840
|
}
|
|
1716
1841
|
return n.prototype.lift = function(r) {
|
|
1717
|
-
var o = new
|
|
1842
|
+
var o = new Xe(this, this);
|
|
1718
1843
|
return o.operator = r, o;
|
|
1719
1844
|
}, n.prototype._throwIfClosed = function() {
|
|
1720
1845
|
if (this.closed)
|
|
1721
|
-
throw new
|
|
1846
|
+
throw new Ro();
|
|
1722
1847
|
}, n.prototype.next = function(r) {
|
|
1723
1848
|
var o = this;
|
|
1724
|
-
|
|
1849
|
+
ce(function() {
|
|
1725
1850
|
var i, s;
|
|
1726
1851
|
if (o._throwIfClosed(), !o.isStopped) {
|
|
1727
1852
|
o.currentObservers || (o.currentObservers = Array.from(o.observers));
|
|
1728
1853
|
try {
|
|
1729
|
-
for (var a =
|
|
1854
|
+
for (var a = W(o.currentObservers), c = a.next(); !c.done; c = a.next()) {
|
|
1730
1855
|
var l = c.value;
|
|
1731
1856
|
l.next(r);
|
|
1732
1857
|
}
|
|
@@ -1743,7 +1868,7 @@ var _o = function(t) {
|
|
|
1743
1868
|
});
|
|
1744
1869
|
}, n.prototype.error = function(r) {
|
|
1745
1870
|
var o = this;
|
|
1746
|
-
|
|
1871
|
+
ce(function() {
|
|
1747
1872
|
if (o._throwIfClosed(), !o.isStopped) {
|
|
1748
1873
|
o.hasError = o.isStopped = !0, o.thrownError = r;
|
|
1749
1874
|
for (var i = o.observers; i.length; )
|
|
@@ -1752,7 +1877,7 @@ var _o = function(t) {
|
|
|
1752
1877
|
});
|
|
1753
1878
|
}, n.prototype.complete = function() {
|
|
1754
1879
|
var r = this;
|
|
1755
|
-
|
|
1880
|
+
ce(function() {
|
|
1756
1881
|
if (r._throwIfClosed(), !r.isStopped) {
|
|
1757
1882
|
r.isStopped = !0;
|
|
1758
1883
|
for (var o = r.observers; o.length; )
|
|
@@ -1774,20 +1899,20 @@ var _o = function(t) {
|
|
|
1774
1899
|
return this._throwIfClosed(), this._checkFinalizedStatuses(r), this._innerSubscribe(r);
|
|
1775
1900
|
}, n.prototype._innerSubscribe = function(r) {
|
|
1776
1901
|
var o = this, i = this, s = i.hasError, a = i.isStopped, c = i.observers;
|
|
1777
|
-
return s || a ?
|
|
1778
|
-
o.currentObservers = null,
|
|
1902
|
+
return s || a ? Lt : (this.currentObservers = null, c.push(r), new ne(function() {
|
|
1903
|
+
o.currentObservers = null, fe(c, r);
|
|
1779
1904
|
}));
|
|
1780
1905
|
}, n.prototype._checkFinalizedStatuses = function(r) {
|
|
1781
1906
|
var o = this, i = o.hasError, s = o.thrownError, a = o.isStopped;
|
|
1782
1907
|
i ? r.error(s) : a && r.complete();
|
|
1783
1908
|
}, n.prototype.asObservable = function() {
|
|
1784
|
-
var r = new
|
|
1909
|
+
var r = new U();
|
|
1785
1910
|
return r.source = this, r;
|
|
1786
1911
|
}, n.create = function(r, o) {
|
|
1787
|
-
return new
|
|
1912
|
+
return new Xe(r, o);
|
|
1788
1913
|
}, n;
|
|
1789
|
-
}(
|
|
1790
|
-
|
|
1914
|
+
}(U), Xe = function(t) {
|
|
1915
|
+
q(n, t);
|
|
1791
1916
|
function n(r, o) {
|
|
1792
1917
|
var i = t.call(this) || this;
|
|
1793
1918
|
return i.destination = r, i.source = o, i;
|
|
@@ -1803,33 +1928,33 @@ var _o = function(t) {
|
|
|
1803
1928
|
(o = (r = this.destination) === null || r === void 0 ? void 0 : r.complete) === null || o === void 0 || o.call(r);
|
|
1804
1929
|
}, n.prototype._subscribe = function(r) {
|
|
1805
1930
|
var o, i;
|
|
1806
|
-
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && i !== void 0 ? i :
|
|
1931
|
+
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && i !== void 0 ? i : Lt;
|
|
1807
1932
|
}, n;
|
|
1808
|
-
}(
|
|
1933
|
+
}($t), Ao = {
|
|
1809
1934
|
now: function() {
|
|
1810
1935
|
return Date.now();
|
|
1811
1936
|
},
|
|
1812
1937
|
delegate: void 0
|
|
1813
|
-
},
|
|
1814
|
-
|
|
1938
|
+
}, xo = function(t) {
|
|
1939
|
+
q(n, t);
|
|
1815
1940
|
function n(r, o) {
|
|
1816
1941
|
return t.call(this) || this;
|
|
1817
1942
|
}
|
|
1818
1943
|
return n.prototype.schedule = function(r, o) {
|
|
1819
1944
|
return this;
|
|
1820
1945
|
}, n;
|
|
1821
|
-
}(
|
|
1946
|
+
}(ne), Qe = {
|
|
1822
1947
|
setInterval: function(t, n) {
|
|
1823
1948
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
1824
1949
|
r[o - 2] = arguments[o];
|
|
1825
|
-
return setInterval.apply(void 0,
|
|
1950
|
+
return setInterval.apply(void 0, pe([t, n], me(r)));
|
|
1826
1951
|
},
|
|
1827
1952
|
clearInterval: function(t) {
|
|
1828
1953
|
return clearInterval(t);
|
|
1829
1954
|
},
|
|
1830
1955
|
delegate: void 0
|
|
1831
|
-
},
|
|
1832
|
-
|
|
1956
|
+
}, Mo = function(t) {
|
|
1957
|
+
q(n, t);
|
|
1833
1958
|
function n(r, o) {
|
|
1834
1959
|
var i = t.call(this, r, o) || this;
|
|
1835
1960
|
return i.scheduler = r, i.work = o, i.pending = !1, i;
|
|
@@ -1842,11 +1967,11 @@ var _o = function(t) {
|
|
|
1842
1967
|
var s = this.id, a = this.scheduler;
|
|
1843
1968
|
return s != null && (this.id = this.recycleAsyncId(a, s, o)), this.pending = !0, this.delay = o, this.id = (i = this.id) !== null && i !== void 0 ? i : this.requestAsyncId(a, this.id, o), this;
|
|
1844
1969
|
}, n.prototype.requestAsyncId = function(r, o, i) {
|
|
1845
|
-
return i === void 0 && (i = 0),
|
|
1970
|
+
return i === void 0 && (i = 0), Qe.setInterval(r.flush.bind(r, this), i);
|
|
1846
1971
|
}, n.prototype.recycleAsyncId = function(r, o, i) {
|
|
1847
1972
|
if (i === void 0 && (i = 0), i != null && this.delay === i && this.pending === !1)
|
|
1848
1973
|
return o;
|
|
1849
|
-
o != null &&
|
|
1974
|
+
o != null && Qe.clearInterval(o);
|
|
1850
1975
|
}, n.prototype.execute = function(r, o) {
|
|
1851
1976
|
if (this.closed)
|
|
1852
1977
|
return new Error("executing a cancelled action");
|
|
@@ -1867,20 +1992,20 @@ var _o = function(t) {
|
|
|
1867
1992
|
}, n.prototype.unsubscribe = function() {
|
|
1868
1993
|
if (!this.closed) {
|
|
1869
1994
|
var r = this, o = r.id, i = r.scheduler, s = i.actions;
|
|
1870
|
-
this.work = this.state = this.scheduler = null, this.pending = !1,
|
|
1995
|
+
this.work = this.state = this.scheduler = null, this.pending = !1, fe(s, this), o != null && (this.id = this.recycleAsyncId(i, o, null)), this.delay = null, t.prototype.unsubscribe.call(this);
|
|
1871
1996
|
}
|
|
1872
1997
|
}, n;
|
|
1873
|
-
}(
|
|
1998
|
+
}(xo), et = function() {
|
|
1874
1999
|
function t(n, r) {
|
|
1875
2000
|
r === void 0 && (r = t.now), this.schedulerActionCtor = n, this.now = r;
|
|
1876
2001
|
}
|
|
1877
2002
|
return t.prototype.schedule = function(n, r, o) {
|
|
1878
2003
|
return r === void 0 && (r = 0), new this.schedulerActionCtor(this, n).schedule(o, r);
|
|
1879
|
-
}, t.now =
|
|
1880
|
-
}(),
|
|
1881
|
-
|
|
2004
|
+
}, t.now = Ao.now, t;
|
|
2005
|
+
}(), Do = function(t) {
|
|
2006
|
+
q(n, t);
|
|
1882
2007
|
function n(r, o) {
|
|
1883
|
-
o === void 0 && (o =
|
|
2008
|
+
o === void 0 && (o = et.now);
|
|
1884
2009
|
var i = t.call(this, r, o) || this;
|
|
1885
2010
|
return i.actions = [], i._active = !1, i;
|
|
1886
2011
|
}
|
|
@@ -1902,45 +2027,45 @@ var _o = function(t) {
|
|
|
1902
2027
|
throw i;
|
|
1903
2028
|
}
|
|
1904
2029
|
}, n;
|
|
1905
|
-
}(
|
|
2030
|
+
}(et), Lo = new Do(Mo), No = function(t) {
|
|
1906
2031
|
return t && typeof t.length == "number" && typeof t != "function";
|
|
1907
2032
|
};
|
|
1908
|
-
function
|
|
1909
|
-
return
|
|
2033
|
+
function Uo(t) {
|
|
2034
|
+
return k(t == null ? void 0 : t.then);
|
|
1910
2035
|
}
|
|
1911
|
-
function
|
|
1912
|
-
return
|
|
2036
|
+
function Fo(t) {
|
|
2037
|
+
return k(t[ze]);
|
|
1913
2038
|
}
|
|
1914
|
-
function
|
|
1915
|
-
return Symbol.asyncIterator &&
|
|
2039
|
+
function $o(t) {
|
|
2040
|
+
return Symbol.asyncIterator && k(t == null ? void 0 : t[Symbol.asyncIterator]);
|
|
1916
2041
|
}
|
|
1917
|
-
function
|
|
2042
|
+
function zo(t) {
|
|
1918
2043
|
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.");
|
|
1919
2044
|
}
|
|
1920
|
-
function
|
|
2045
|
+
function qo() {
|
|
1921
2046
|
return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
|
|
1922
2047
|
}
|
|
1923
|
-
var
|
|
1924
|
-
function
|
|
1925
|
-
return
|
|
2048
|
+
var Ho = qo();
|
|
2049
|
+
function Vo(t) {
|
|
2050
|
+
return k(t == null ? void 0 : t[Ho]);
|
|
1926
2051
|
}
|
|
1927
|
-
function
|
|
1928
|
-
return
|
|
2052
|
+
function Yo(t) {
|
|
2053
|
+
return yo(this, arguments, function() {
|
|
1929
2054
|
var n, r, o, i;
|
|
1930
|
-
return
|
|
2055
|
+
return Dt(this, function(s) {
|
|
1931
2056
|
switch (s.label) {
|
|
1932
2057
|
case 0:
|
|
1933
2058
|
n = t.getReader(), s.label = 1;
|
|
1934
2059
|
case 1:
|
|
1935
2060
|
s.trys.push([1, , 9, 10]), s.label = 2;
|
|
1936
2061
|
case 2:
|
|
1937
|
-
return [4,
|
|
2062
|
+
return [4, G(n.read())];
|
|
1938
2063
|
case 3:
|
|
1939
|
-
return r = s.sent(), o = r.value, i = r.done, i ? [4,
|
|
2064
|
+
return r = s.sent(), o = r.value, i = r.done, i ? [4, G(void 0)] : [3, 5];
|
|
1940
2065
|
case 4:
|
|
1941
2066
|
return [2, s.sent()];
|
|
1942
2067
|
case 5:
|
|
1943
|
-
return [4,
|
|
2068
|
+
return [4, G(o)];
|
|
1944
2069
|
case 6:
|
|
1945
2070
|
return [4, s.sent()];
|
|
1946
2071
|
case 7:
|
|
@@ -1955,57 +2080,57 @@ function Ao(t) {
|
|
|
1955
2080
|
});
|
|
1956
2081
|
});
|
|
1957
2082
|
}
|
|
1958
|
-
function
|
|
1959
|
-
return
|
|
2083
|
+
function Ko(t) {
|
|
2084
|
+
return k(t == null ? void 0 : t.getReader);
|
|
1960
2085
|
}
|
|
1961
|
-
function
|
|
1962
|
-
if (t instanceof
|
|
2086
|
+
function Zo(t) {
|
|
2087
|
+
if (t instanceof U)
|
|
1963
2088
|
return t;
|
|
1964
2089
|
if (t != null) {
|
|
1965
|
-
if (
|
|
1966
|
-
return
|
|
1967
|
-
if (
|
|
1968
|
-
return
|
|
1969
|
-
if (
|
|
1970
|
-
return
|
|
1971
|
-
if (
|
|
1972
|
-
return
|
|
1973
|
-
if (
|
|
1974
|
-
return
|
|
1975
|
-
if (
|
|
1976
|
-
return
|
|
1977
|
-
}
|
|
1978
|
-
throw
|
|
2090
|
+
if (Fo(t))
|
|
2091
|
+
return Bo(t);
|
|
2092
|
+
if (No(t))
|
|
2093
|
+
return Jo(t);
|
|
2094
|
+
if (Uo(t))
|
|
2095
|
+
return Go(t);
|
|
2096
|
+
if ($o(t))
|
|
2097
|
+
return zt(t);
|
|
2098
|
+
if (Vo(t))
|
|
2099
|
+
return Wo(t);
|
|
2100
|
+
if (Ko(t))
|
|
2101
|
+
return Xo(t);
|
|
2102
|
+
}
|
|
2103
|
+
throw zo(t);
|
|
1979
2104
|
}
|
|
1980
|
-
function
|
|
1981
|
-
return new
|
|
1982
|
-
var r = t[
|
|
1983
|
-
if (
|
|
2105
|
+
function Bo(t) {
|
|
2106
|
+
return new U(function(n) {
|
|
2107
|
+
var r = t[ze]();
|
|
2108
|
+
if (k(r.subscribe))
|
|
1984
2109
|
return r.subscribe(n);
|
|
1985
2110
|
throw new TypeError("Provided object does not correctly implement Symbol.observable");
|
|
1986
2111
|
});
|
|
1987
2112
|
}
|
|
1988
|
-
function
|
|
1989
|
-
return new
|
|
2113
|
+
function Jo(t) {
|
|
2114
|
+
return new U(function(n) {
|
|
1990
2115
|
for (var r = 0; r < t.length && !n.closed; r++)
|
|
1991
2116
|
n.next(t[r]);
|
|
1992
2117
|
n.complete();
|
|
1993
2118
|
});
|
|
1994
2119
|
}
|
|
1995
|
-
function
|
|
1996
|
-
return new
|
|
2120
|
+
function Go(t) {
|
|
2121
|
+
return new U(function(n) {
|
|
1997
2122
|
t.then(function(r) {
|
|
1998
2123
|
n.closed || (n.next(r), n.complete());
|
|
1999
2124
|
}, function(r) {
|
|
2000
2125
|
return n.error(r);
|
|
2001
|
-
}).then(null,
|
|
2126
|
+
}).then(null, Ft);
|
|
2002
2127
|
});
|
|
2003
2128
|
}
|
|
2004
|
-
function
|
|
2005
|
-
return new
|
|
2129
|
+
function Wo(t) {
|
|
2130
|
+
return new U(function(n) {
|
|
2006
2131
|
var r, o;
|
|
2007
2132
|
try {
|
|
2008
|
-
for (var i =
|
|
2133
|
+
for (var i = W(t), s = i.next(); !s.done; s = i.next()) {
|
|
2009
2134
|
var a = s.value;
|
|
2010
2135
|
if (n.next(a), n.closed)
|
|
2011
2136
|
return;
|
|
@@ -2022,24 +2147,24 @@ function Uo(t) {
|
|
|
2022
2147
|
n.complete();
|
|
2023
2148
|
});
|
|
2024
2149
|
}
|
|
2025
|
-
function
|
|
2026
|
-
return new
|
|
2027
|
-
|
|
2150
|
+
function zt(t) {
|
|
2151
|
+
return new U(function(n) {
|
|
2152
|
+
Qo(t, n).catch(function(r) {
|
|
2028
2153
|
return n.error(r);
|
|
2029
2154
|
});
|
|
2030
2155
|
});
|
|
2031
2156
|
}
|
|
2032
|
-
function
|
|
2033
|
-
return
|
|
2157
|
+
function Xo(t) {
|
|
2158
|
+
return zt(Yo(t));
|
|
2034
2159
|
}
|
|
2035
|
-
function
|
|
2160
|
+
function Qo(t, n) {
|
|
2036
2161
|
var r, o, i, s;
|
|
2037
|
-
return
|
|
2162
|
+
return ho(this, void 0, void 0, function() {
|
|
2038
2163
|
var a, c;
|
|
2039
|
-
return
|
|
2164
|
+
return Dt(this, function(l) {
|
|
2040
2165
|
switch (l.label) {
|
|
2041
2166
|
case 0:
|
|
2042
|
-
l.trys.push([0, 5, 6, 11]), r =
|
|
2167
|
+
l.trys.push([0, 5, 6, 11]), r = _o(t), l.label = 1;
|
|
2043
2168
|
case 1:
|
|
2044
2169
|
return [4, r.next()];
|
|
2045
2170
|
case 2:
|
|
@@ -2070,7 +2195,7 @@ function $o(t, n) {
|
|
|
2070
2195
|
});
|
|
2071
2196
|
});
|
|
2072
2197
|
}
|
|
2073
|
-
function
|
|
2198
|
+
function ei(t, n, r, o, i) {
|
|
2074
2199
|
o === void 0 && (o = 0), i === void 0 && (i = !1);
|
|
2075
2200
|
var s = n.schedule(function() {
|
|
2076
2201
|
r(), i ? t.add(this.schedule(null, o)) : this.unsubscribe();
|
|
@@ -2078,20 +2203,20 @@ function zo(t, n, r, o, i) {
|
|
|
2078
2203
|
if (t.add(s), !i)
|
|
2079
2204
|
return s;
|
|
2080
2205
|
}
|
|
2081
|
-
function
|
|
2082
|
-
var r =
|
|
2206
|
+
function ti(t, n) {
|
|
2207
|
+
var r = k(t) ? t : function() {
|
|
2083
2208
|
return t;
|
|
2084
2209
|
}, o = function(i) {
|
|
2085
2210
|
return i.error(r());
|
|
2086
2211
|
};
|
|
2087
|
-
return new
|
|
2212
|
+
return new U(o);
|
|
2088
2213
|
}
|
|
2089
|
-
var
|
|
2214
|
+
var ri = Ee(function(t) {
|
|
2090
2215
|
return function() {
|
|
2091
2216
|
t(this), this.name = "EmptyError", this.message = "no elements in sequence";
|
|
2092
2217
|
};
|
|
2093
2218
|
});
|
|
2094
|
-
function
|
|
2219
|
+
function ni(t, n) {
|
|
2095
2220
|
return new Promise(function(r, o) {
|
|
2096
2221
|
var i = !1, s;
|
|
2097
2222
|
t.subscribe({
|
|
@@ -2100,48 +2225,48 @@ function Vo(t, n) {
|
|
|
2100
2225
|
},
|
|
2101
2226
|
error: o,
|
|
2102
2227
|
complete: function() {
|
|
2103
|
-
i ? r(s) : o(new
|
|
2228
|
+
i ? r(s) : o(new ri());
|
|
2104
2229
|
}
|
|
2105
2230
|
});
|
|
2106
2231
|
});
|
|
2107
2232
|
}
|
|
2108
|
-
function
|
|
2233
|
+
function oi(t) {
|
|
2109
2234
|
return t instanceof Date && !isNaN(t);
|
|
2110
2235
|
}
|
|
2111
|
-
var
|
|
2236
|
+
var ii = Ee(function(t) {
|
|
2112
2237
|
return function(n) {
|
|
2113
2238
|
n === void 0 && (n = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = n;
|
|
2114
2239
|
};
|
|
2115
2240
|
});
|
|
2116
|
-
function
|
|
2117
|
-
var r =
|
|
2241
|
+
function si(t, n) {
|
|
2242
|
+
var r = oi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = r.first, i = r.each, s = r.with, a = s === void 0 ? ai : s, c = r.scheduler, l = c === void 0 ? Lo : c, u = r.meta, d = u === void 0 ? null : u;
|
|
2118
2243
|
if (o == null && i == null)
|
|
2119
2244
|
throw new TypeError("No timeout provided.");
|
|
2120
|
-
return
|
|
2121
|
-
var
|
|
2122
|
-
|
|
2245
|
+
return jo(function(f, _) {
|
|
2246
|
+
var m, p, h = null, j = 0, ie = function(Pe) {
|
|
2247
|
+
p = ei(_, l, function() {
|
|
2123
2248
|
try {
|
|
2124
|
-
|
|
2249
|
+
m.unsubscribe(), Zo(a({
|
|
2125
2250
|
meta: d,
|
|
2126
2251
|
lastValue: h,
|
|
2127
2252
|
seen: j
|
|
2128
2253
|
})).subscribe(_);
|
|
2129
|
-
} catch (
|
|
2130
|
-
_.error(
|
|
2254
|
+
} catch (Bt) {
|
|
2255
|
+
_.error(Bt);
|
|
2131
2256
|
}
|
|
2132
|
-
},
|
|
2257
|
+
}, Pe);
|
|
2133
2258
|
};
|
|
2134
|
-
|
|
2135
|
-
|
|
2259
|
+
m = f.subscribe(Io(_, function(Pe) {
|
|
2260
|
+
p == null || p.unsubscribe(), j++, _.next(h = Pe), i > 0 && ie(i);
|
|
2136
2261
|
}, void 0, void 0, function() {
|
|
2137
|
-
|
|
2138
|
-
})), !j &&
|
|
2262
|
+
p != null && p.closed || p == null || p.unsubscribe(), h = null;
|
|
2263
|
+
})), !j && ie(o != null ? typeof o == "number" ? o : +o - l.now() : i);
|
|
2139
2264
|
});
|
|
2140
2265
|
}
|
|
2141
|
-
function
|
|
2142
|
-
throw new
|
|
2266
|
+
function ai(t) {
|
|
2267
|
+
throw new ii(t);
|
|
2143
2268
|
}
|
|
2144
|
-
class
|
|
2269
|
+
class le {
|
|
2145
2270
|
constructor() {
|
|
2146
2271
|
this.set = (n) => {
|
|
2147
2272
|
if (this._current.status === "success")
|
|
@@ -2172,20 +2297,20 @@ class ie {
|
|
|
2172
2297
|
}, this.waitForLoad = (n) => {
|
|
2173
2298
|
if (this._current.status === "success") return Promise.resolve(this._current.loadedValue);
|
|
2174
2299
|
if (this._current.status === "error") return Promise.reject(this._current.error);
|
|
2175
|
-
this._current.status !== "initial" &&
|
|
2300
|
+
this._current.status !== "initial" && Fe(this._current);
|
|
2176
2301
|
const r = {
|
|
2177
2302
|
first: n.timeoutSec * 1e3,
|
|
2178
|
-
with: () =>
|
|
2303
|
+
with: () => ti(() => new Error(n.timeoutErrMsg))
|
|
2179
2304
|
};
|
|
2180
|
-
return
|
|
2181
|
-
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new
|
|
2305
|
+
return ni(this._subject.pipe(si(r)));
|
|
2306
|
+
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new $t();
|
|
2182
2307
|
}
|
|
2183
2308
|
get current() {
|
|
2184
2309
|
return this._current;
|
|
2185
2310
|
}
|
|
2186
2311
|
}
|
|
2187
|
-
const { log__:
|
|
2188
|
-
const r = new
|
|
2312
|
+
const { log__: ci, err__: li } = I("init-flows"), tt = (t, n) => {
|
|
2313
|
+
const r = new le();
|
|
2189
2314
|
return {
|
|
2190
2315
|
publisher: r,
|
|
2191
2316
|
initialize: async (o) => {
|
|
@@ -2193,41 +2318,41 @@ const { log__: Jo, err__: Go } = M("init-flows"), We = (t, n) => {
|
|
|
2193
2318
|
if (r.current.isSuccess)
|
|
2194
2319
|
throw new Error("This flow has already been initialized.");
|
|
2195
2320
|
const i = await n(o);
|
|
2196
|
-
|
|
2321
|
+
ci(`✔ ${t} flow initialized successfully. Result:`, i), r.set(i);
|
|
2197
2322
|
} catch (i) {
|
|
2198
|
-
|
|
2323
|
+
li(`𝙭 ${t} flow initialization failed. Error:`, z(i), "Details:", i), r.throw(i, z(i));
|
|
2199
2324
|
}
|
|
2200
2325
|
}
|
|
2201
2326
|
};
|
|
2202
|
-
},
|
|
2327
|
+
}, ui = async (t, n, r) => {
|
|
2203
2328
|
await Promise.all(Object.values(t).map((o) => o.initialize({ context: n, formCallbacks: r })));
|
|
2204
|
-
},
|
|
2329
|
+
}, di = () => ({
|
|
2205
2330
|
// 💡 Add new init flows here
|
|
2206
2331
|
// Stripe PR
|
|
2207
|
-
stripePR:
|
|
2332
|
+
stripePR: tt("Stripe PR", V.stripePR.init),
|
|
2208
2333
|
// Stripe Link
|
|
2209
|
-
stripeLink:
|
|
2334
|
+
stripeLink: tt("Stripe Link", V.stripeLink.init)
|
|
2210
2335
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2211
|
-
}), { err__:
|
|
2212
|
-
onFocus:
|
|
2213
|
-
onBlur:
|
|
2214
|
-
onChange:
|
|
2215
|
-
onLoad:
|
|
2216
|
-
onLoadError:
|
|
2217
|
-
onValidationError:
|
|
2218
|
-
onCheckoutStarted:
|
|
2219
|
-
onCheckoutSuccess:
|
|
2220
|
-
onSetupPaymentMethodSuccess:
|
|
2221
|
-
onCheckoutError:
|
|
2222
|
-
onPaymentRequestLoad:
|
|
2223
|
-
}),
|
|
2336
|
+
}), { err__: mi } = I("form-callbacks"), R = e.function().optional(), rt = e.object({
|
|
2337
|
+
onFocus: R,
|
|
2338
|
+
onBlur: R,
|
|
2339
|
+
onChange: R,
|
|
2340
|
+
onLoad: R,
|
|
2341
|
+
onLoadError: R,
|
|
2342
|
+
onValidationError: R,
|
|
2343
|
+
onCheckoutStarted: R,
|
|
2344
|
+
onCheckoutSuccess: R,
|
|
2345
|
+
onSetupPaymentMethodSuccess: R,
|
|
2346
|
+
onCheckoutError: R,
|
|
2347
|
+
onPaymentRequestLoad: R
|
|
2348
|
+
}), K = class ue {
|
|
2224
2349
|
constructor() {
|
|
2225
2350
|
this.setCallbacks = (n) => {
|
|
2226
|
-
this._callbacks =
|
|
2227
|
-
const i =
|
|
2351
|
+
this._callbacks = ue.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
|
|
2352
|
+
const i = ur(r, o ?? ue.NOOP, mi);
|
|
2228
2353
|
this._callbacks[r] = i;
|
|
2229
2354
|
});
|
|
2230
|
-
}, this._callbacks =
|
|
2355
|
+
}, this._callbacks = ue.createEmptyCallbacks();
|
|
2231
2356
|
}
|
|
2232
2357
|
/**
|
|
2233
2358
|
* Returns a read-only version of the callbacks object.
|
|
@@ -2236,25 +2361,25 @@ const { log__: Jo, err__: Go } = M("init-flows"), We = (t, n) => {
|
|
|
2236
2361
|
return { ...this._callbacks };
|
|
2237
2362
|
}
|
|
2238
2363
|
};
|
|
2239
|
-
|
|
2240
|
-
},
|
|
2364
|
+
K.NOOP = () => {
|
|
2365
|
+
}, K.createEmptyCallbacks = () => {
|
|
2241
2366
|
const t = {};
|
|
2242
|
-
return Object.keys(
|
|
2243
|
-
t[n] =
|
|
2367
|
+
return Object.keys(rt.keyof().enum).forEach((n) => {
|
|
2368
|
+
t[n] = K.NOOP;
|
|
2244
2369
|
}), t;
|
|
2245
|
-
},
|
|
2246
|
-
const n = new
|
|
2247
|
-
return n.setCallbacks(
|
|
2370
|
+
}, K.fromObject = (t) => {
|
|
2371
|
+
const n = new K();
|
|
2372
|
+
return n.setCallbacks(rt.parse(t)), n;
|
|
2248
2373
|
};
|
|
2249
|
-
let
|
|
2250
|
-
class
|
|
2374
|
+
let pi = K;
|
|
2375
|
+
class fi {
|
|
2251
2376
|
constructor(n, r, o, i) {
|
|
2252
2377
|
this.handleMessage = (s) => {
|
|
2253
2378
|
if (!s.source)
|
|
2254
2379
|
throw new Error("No source found");
|
|
2255
|
-
if (
|
|
2380
|
+
if (nt(s.origin) !== nt(this.baseUrl) || typeof s.data == "object" && s.data.penpal)
|
|
2256
2381
|
return;
|
|
2257
|
-
const a =
|
|
2382
|
+
const a = Gr(JSON.parse(s.data));
|
|
2258
2383
|
if (!this.validateEvent(a)) return;
|
|
2259
2384
|
const { elementId: c, payload: l } = a, u = l.type;
|
|
2260
2385
|
switch (u) {
|
|
@@ -2285,18 +2410,18 @@ class ti {
|
|
|
2285
2410
|
}, this.validateEvent = (s) => s.formId !== this.formId || !s.elementId ? (console.log("[OJS] formId", this.formId, s.formId), console.warn("[form] Ignoring unknown event:", s), !1) : this.nonces.has(s.nonce) ? (console.warn("[form] Ignoring duplicate event:", s), !1) : (this.nonces.add(s.nonce), !0), this.eventTargets = {}, this.nonces = /* @__PURE__ */ new Set(), this.formId = n, this.baseUrl = r, this.formCallbacks = o, this.internalCallbacks = i;
|
|
2286
2411
|
}
|
|
2287
2412
|
}
|
|
2288
|
-
const
|
|
2289
|
-
async function
|
|
2290
|
-
const r = await
|
|
2413
|
+
const nt = (t) => new URL(t).origin;
|
|
2414
|
+
async function hi(t, n) {
|
|
2415
|
+
const r = await dt({
|
|
2291
2416
|
iframe: t,
|
|
2292
2417
|
debug: !1,
|
|
2293
2418
|
childOrigin: n
|
|
2294
|
-
}).promise, o = await
|
|
2295
|
-
if (!
|
|
2419
|
+
}).promise, o = await Wr(r);
|
|
2420
|
+
if (!Xr(r, o))
|
|
2296
2421
|
throw new Error("Got invalid CDE connection object");
|
|
2297
2422
|
return r;
|
|
2298
2423
|
}
|
|
2299
|
-
class
|
|
2424
|
+
class yi {
|
|
2300
2425
|
constructor() {
|
|
2301
2426
|
this.connections = /* @__PURE__ */ new Map();
|
|
2302
2427
|
}
|
|
@@ -2313,7 +2438,7 @@ class ni {
|
|
|
2313
2438
|
return this.connections;
|
|
2314
2439
|
}
|
|
2315
2440
|
}
|
|
2316
|
-
const
|
|
2441
|
+
const _i = (t, n, r) => {
|
|
2317
2442
|
const { stripePR: o } = t;
|
|
2318
2443
|
o.publisher.subscribe((i) => {
|
|
2319
2444
|
if (i.isSuccess) {
|
|
@@ -2322,52 +2447,52 @@ const oi = (t, n, r) => {
|
|
|
2322
2447
|
isLoading: !1,
|
|
2323
2448
|
isAvailable: a,
|
|
2324
2449
|
startFlow: async (u) => {
|
|
2325
|
-
a &&
|
|
2450
|
+
a && ot("apple_pay", s, n, r, u);
|
|
2326
2451
|
}
|
|
2327
2452
|
},
|
|
2328
2453
|
google_pay: {
|
|
2329
2454
|
isLoading: !1,
|
|
2330
2455
|
isAvailable: c,
|
|
2331
2456
|
startFlow: async (u) => {
|
|
2332
|
-
c &&
|
|
2457
|
+
c && ot("google_pay", s, n, r, u);
|
|
2333
2458
|
}
|
|
2334
2459
|
}
|
|
2335
2460
|
};
|
|
2336
2461
|
r.get.onPaymentRequestLoad(l);
|
|
2337
2462
|
}
|
|
2338
2463
|
});
|
|
2339
|
-
},
|
|
2464
|
+
}, ot = (t, n, r, o, i) => V.stripePR.run({
|
|
2340
2465
|
context: r,
|
|
2341
|
-
checkoutPaymentMethod:
|
|
2342
|
-
nonCdeFormInputs:
|
|
2466
|
+
checkoutPaymentMethod: xe(r.checkoutPaymentMethods, t),
|
|
2467
|
+
nonCdeFormInputs: de(r.formDiv),
|
|
2343
2468
|
formCallbacks: o,
|
|
2344
2469
|
customParams: { provider: t, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
|
|
2345
2470
|
initResult: n
|
|
2346
|
-
}),
|
|
2471
|
+
}), it = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: F, err__: ae } = I("op-form"), Z = class Le {
|
|
2347
2472
|
constructor(n) {
|
|
2348
|
-
this.cdeLoadEvent = new
|
|
2473
|
+
this.cdeLoadEvent = new le(), this.anyCdeConn = new le(), this.context = new le(), this.initFlows = di(), this.startFormInit = async () => {
|
|
2349
2474
|
try {
|
|
2350
|
-
|
|
2475
|
+
F("Initializing OpenPay form:"), F("├ Waiting for CDE load event...");
|
|
2351
2476
|
const r = await this.cdeLoadEvent.waitForLoad({
|
|
2352
2477
|
timeoutSec: 120,
|
|
2353
|
-
timeoutErrMsg:
|
|
2478
|
+
timeoutErrMsg: it
|
|
2354
2479
|
});
|
|
2355
|
-
|
|
2480
|
+
F("├ CDE load event received"), F("├ Waiting for CDE connection...");
|
|
2356
2481
|
const o = await this.anyCdeConn.waitForLoad({
|
|
2357
2482
|
timeoutSec: 120,
|
|
2358
|
-
timeoutErrMsg:
|
|
2483
|
+
timeoutErrMsg: it
|
|
2359
2484
|
});
|
|
2360
|
-
|
|
2361
|
-
const i =
|
|
2485
|
+
F("├ CDE connection received"), F("├ Creating OJS context, setting up handlers...");
|
|
2486
|
+
const i = Le.buildOjsFlowContext(
|
|
2362
2487
|
this.config,
|
|
2363
2488
|
r,
|
|
2364
2489
|
o,
|
|
2365
2490
|
this.getFormDiv()
|
|
2366
2491
|
);
|
|
2367
|
-
this.context.set(i),
|
|
2492
|
+
this.context.set(i), _i(this.initFlows, i, this.formCallbacks), F("├ Starting OJS init flows..."), await ui(this.initFlows, i, this.formCallbacks), this.formCallbacks.get.onLoad(r.totalAmountAtoms, r.currency), F("╰ Done initializing OJS flows.");
|
|
2368
2493
|
} catch (r) {
|
|
2369
|
-
const o =
|
|
2370
|
-
|
|
2494
|
+
const o = z(r);
|
|
2495
|
+
ae("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
|
|
2371
2496
|
}
|
|
2372
2497
|
}, this.setFormHeight = (r) => {
|
|
2373
2498
|
this.formProperties.height = r, this.registeredElements && Object.values(this.registeredElements).forEach((o) => {
|
|
@@ -2379,7 +2504,7 @@ const oi = (t, n, r) => {
|
|
|
2379
2504
|
this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(r), r);
|
|
2380
2505
|
}, this.createElement = (r, o = {}) => {
|
|
2381
2506
|
if (!this.config) throw new Error("OpenPay form not initialized");
|
|
2382
|
-
const i =
|
|
2507
|
+
const i = dr.parse(r), s = document.createElement("iframe"), a = this.buildQueryString(o);
|
|
2383
2508
|
s.name = `${i}-element`;
|
|
2384
2509
|
const c = new URL(`/app/v1/${s.name}/`, this.config.baseUrl);
|
|
2385
2510
|
return c.search = a.toString(), s.src = c.href, s.style.border = "none", s.style.width = "100%", this.registerIframe(i, s);
|
|
@@ -2393,28 +2518,28 @@ const oi = (t, n, r) => {
|
|
|
2393
2518
|
}
|
|
2394
2519
|
};
|
|
2395
2520
|
return this.connectToElement({ type: i.type, node: i.node }), this.registeredElements || (this.registeredElements = {
|
|
2396
|
-
[
|
|
2397
|
-
[
|
|
2398
|
-
[
|
|
2399
|
-
[
|
|
2521
|
+
[J.CARD]: void 0,
|
|
2522
|
+
[J.CARD_NUMBER]: void 0,
|
|
2523
|
+
[J.CARD_EXPIRY]: void 0,
|
|
2524
|
+
[J.CARD_CVC]: void 0
|
|
2400
2525
|
}), this.registeredElements[r] = i, i;
|
|
2401
2526
|
}, this.buildQueryString = (r) => {
|
|
2402
2527
|
const o = new URLSearchParams();
|
|
2403
|
-
return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles",
|
|
2528
|
+
return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles", Jr(r.styles)), o.append("secureToken", this.config.checkoutSecureToken), o;
|
|
2404
2529
|
}, this.connectToElement = (r) => {
|
|
2405
|
-
|
|
2530
|
+
hi(r.node).then((o) => {
|
|
2406
2531
|
this.connectionManager.addConnection(r.type, o), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(o);
|
|
2407
|
-
}).catch((o) =>
|
|
2532
|
+
}).catch((o) => ae("[FORM] Error connecting to CDE iframe", o));
|
|
2408
2533
|
}, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
|
|
2409
2534
|
const r = this.context.getValueIfLoadedElse(null);
|
|
2410
2535
|
if (!r) {
|
|
2411
|
-
|
|
2536
|
+
ae("Please wait for the form to finish loading before submitting.");
|
|
2412
2537
|
return;
|
|
2413
2538
|
}
|
|
2414
|
-
|
|
2539
|
+
V.commonCC.run({
|
|
2415
2540
|
context: r,
|
|
2416
|
-
checkoutPaymentMethod:
|
|
2417
|
-
nonCdeFormInputs:
|
|
2541
|
+
checkoutPaymentMethod: xe(r.checkoutPaymentMethods, "credit_card"),
|
|
2542
|
+
nonCdeFormInputs: de(r.formDiv),
|
|
2418
2543
|
formCallbacks: this.formCallbacks,
|
|
2419
2544
|
customParams: {
|
|
2420
2545
|
currentCdeConnections: this.connectionManager.getAllConnections()
|
|
@@ -2422,13 +2547,27 @@ const oi = (t, n, r) => {
|
|
|
2422
2547
|
initResult: void 0
|
|
2423
2548
|
// This flow requires no initialization
|
|
2424
2549
|
});
|
|
2550
|
+
}, this.generalSubmit = (r) => {
|
|
2551
|
+
const o = this.context.getValueIfLoadedElse(null);
|
|
2552
|
+
if (!o) {
|
|
2553
|
+
ae("Please wait for the form to finish loading before submitting.");
|
|
2554
|
+
return;
|
|
2555
|
+
}
|
|
2556
|
+
r === "pockyt-paypal" ? V.pockytPaypal.run({
|
|
2557
|
+
context: o,
|
|
2558
|
+
checkoutPaymentMethod: xe(o.checkoutPaymentMethods, "paypal", "pockyt"),
|
|
2559
|
+
nonCdeFormInputs: de(o.formDiv),
|
|
2560
|
+
formCallbacks: this.formCallbacks,
|
|
2561
|
+
customParams: void 0,
|
|
2562
|
+
initResult: void 0
|
|
2563
|
+
}) : Fe(r);
|
|
2425
2564
|
}, this.submit = this.submitCard, this.destroy = () => {
|
|
2426
2565
|
for (const r of Object.values(this.registeredElements ?? {}))
|
|
2427
2566
|
r && r.node.remove();
|
|
2428
2567
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
|
|
2429
2568
|
}, this.updateCallbacks = (r) => {
|
|
2430
2569
|
this.formCallbacks.setCallbacks(r);
|
|
2431
|
-
},
|
|
2570
|
+
}, Le.assignAsSingleton(this), this.ojsVersion = "0.1.21", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = pi.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${Qt()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new yi(), this.eventHandler = new fi(this.formId, this.baseUrl, this.formCallbacks, {
|
|
2432
2571
|
setFormHeight: this.setFormHeight,
|
|
2433
2572
|
onCdeLoaded: this.onCdeLoaded,
|
|
2434
2573
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -2438,71 +2577,72 @@ const oi = (t, n, r) => {
|
|
|
2438
2577
|
return this.config.checkoutSecureToken;
|
|
2439
2578
|
}
|
|
2440
2579
|
};
|
|
2441
|
-
|
|
2442
|
-
if (
|
|
2580
|
+
Z.ojsFlows = V, Z.assignAsSingleton = (t) => {
|
|
2581
|
+
if (Z.getInstance())
|
|
2443
2582
|
throw new Error("OpenPay instance already exists. Only one instance is allowed.");
|
|
2444
2583
|
window.ojs = t;
|
|
2445
|
-
},
|
|
2446
|
-
|
|
2584
|
+
}, Z.getInstance = () => window.ojs ?? null, Z.buildOjsFlowContext = (t, n, r, o) => ({
|
|
2585
|
+
checkoutSecureToken: t.checkoutSecureToken,
|
|
2586
|
+
baseUrl: new URL(t.baseUrl ?? tr).origin,
|
|
2447
2587
|
formDiv: o,
|
|
2448
2588
|
elementsSessionId: n.sessionId,
|
|
2449
2589
|
checkoutPaymentMethods: n.checkoutPaymentMethods,
|
|
2450
2590
|
anyCdeConnection: r,
|
|
2451
2591
|
customInitParams: t.customInitParams ?? {}
|
|
2452
2592
|
});
|
|
2453
|
-
let
|
|
2454
|
-
const
|
|
2593
|
+
let he = Z;
|
|
2594
|
+
const gi = e.object({
|
|
2455
2595
|
type: e.string(),
|
|
2456
2596
|
loc: e.array(e.string()),
|
|
2457
2597
|
msg: e.string(),
|
|
2458
2598
|
url: e.string()
|
|
2459
2599
|
});
|
|
2460
|
-
e.array(
|
|
2461
|
-
const
|
|
2600
|
+
e.array(gi);
|
|
2601
|
+
const bi = e.object({
|
|
2462
2602
|
code: e.string(),
|
|
2463
2603
|
message: e.string(),
|
|
2464
2604
|
path: e.array(e.string())
|
|
2465
2605
|
});
|
|
2466
|
-
e.array(
|
|
2467
|
-
const
|
|
2606
|
+
e.array(bi);
|
|
2607
|
+
const vi = (t, n, r) => (...o) => {
|
|
2468
2608
|
try {
|
|
2469
2609
|
return n(...o);
|
|
2470
2610
|
} catch (i) {
|
|
2471
2611
|
r(`[form] Error running callback (${t}):`, i);
|
|
2472
2612
|
return;
|
|
2473
2613
|
}
|
|
2474
|
-
}, P = e.string().trim().min(1, { message: "Cannot be blank" }),
|
|
2475
|
-
var
|
|
2476
|
-
const
|
|
2477
|
-
var
|
|
2478
|
-
const
|
|
2479
|
-
var
|
|
2480
|
-
e.nativeEnum(
|
|
2481
|
-
const
|
|
2614
|
+
}, P = e.string().trim().min(1, { message: "Cannot be blank" }), E = e.string().trim().optional(), ee = (t) => e.nullable(t.optional());
|
|
2615
|
+
var qt = /* @__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))(qt || {});
|
|
2616
|
+
const wi = e.nativeEnum(qt);
|
|
2617
|
+
var Ht = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Ht || {});
|
|
2618
|
+
const Vt = e.nativeEnum(Ht), Ei = e.union([wi, Vt]);
|
|
2619
|
+
var X = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(X || {});
|
|
2620
|
+
e.nativeEnum(X);
|
|
2621
|
+
const Ce = e.object({
|
|
2482
2622
|
provider: e.string(),
|
|
2483
|
-
processor_name:
|
|
2484
|
-
metadata:
|
|
2485
|
-
}),
|
|
2623
|
+
processor_name: ee(e.string()),
|
|
2624
|
+
metadata: ee(e.record(e.string(), e.any()))
|
|
2625
|
+
}), Ci = e.object({
|
|
2486
2626
|
id: e.string()
|
|
2487
2627
|
});
|
|
2488
2628
|
e.object({
|
|
2489
|
-
cardNumber:
|
|
2490
|
-
expiry:
|
|
2491
|
-
cvc:
|
|
2629
|
+
cardNumber: E,
|
|
2630
|
+
expiry: E,
|
|
2631
|
+
cvc: E
|
|
2492
2632
|
});
|
|
2493
2633
|
e.object({
|
|
2494
|
-
backgroundColor:
|
|
2495
|
-
color:
|
|
2496
|
-
fontFamily:
|
|
2497
|
-
fontSize:
|
|
2498
|
-
fontWeight:
|
|
2499
|
-
margin:
|
|
2500
|
-
padding:
|
|
2501
|
-
letterSpacing:
|
|
2502
|
-
lineHeight:
|
|
2503
|
-
hideIcon:
|
|
2504
|
-
});
|
|
2505
|
-
const
|
|
2634
|
+
backgroundColor: E,
|
|
2635
|
+
color: E,
|
|
2636
|
+
fontFamily: E,
|
|
2637
|
+
fontSize: E,
|
|
2638
|
+
fontWeight: E,
|
|
2639
|
+
margin: E,
|
|
2640
|
+
padding: E,
|
|
2641
|
+
letterSpacing: E,
|
|
2642
|
+
lineHeight: E,
|
|
2643
|
+
hideIcon: E
|
|
2644
|
+
});
|
|
2645
|
+
const D = e.enum([
|
|
2506
2646
|
// Element -> Form
|
|
2507
2647
|
"LAYOUT",
|
|
2508
2648
|
"LOADED",
|
|
@@ -2523,77 +2663,79 @@ const L = e.enum([
|
|
|
2523
2663
|
"TOKENIZE",
|
|
2524
2664
|
"CHECKOUT",
|
|
2525
2665
|
"START_PAYMENT_FLOW"
|
|
2526
|
-
]),
|
|
2527
|
-
type:
|
|
2528
|
-
elementType:
|
|
2666
|
+
]), ki = D.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Si = e.object({ type: ki }), Pi = D.extract(["BLUR", "FOCUS", "CHANGE"]), Oi = e.object({
|
|
2667
|
+
type: Pi,
|
|
2668
|
+
elementType: Vt,
|
|
2529
2669
|
errors: e.array(e.string()).optional()
|
|
2530
|
-
}),
|
|
2531
|
-
type:
|
|
2670
|
+
}), ji = D.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ii = e.object({
|
|
2671
|
+
type: ji,
|
|
2532
2672
|
message: P,
|
|
2533
2673
|
headers: e.record(e.string(), e.string()).optional()
|
|
2534
|
-
}),
|
|
2535
|
-
type:
|
|
2536
|
-
elementType:
|
|
2674
|
+
}), Ti = D.extract(["VALIDATION_ERROR"]), Ri = e.object({
|
|
2675
|
+
type: Ti,
|
|
2676
|
+
elementType: Ei,
|
|
2537
2677
|
errors: e.array(e.string())
|
|
2538
|
-
}),
|
|
2539
|
-
type: e.literal(
|
|
2678
|
+
}), Ai = e.object({
|
|
2679
|
+
type: e.literal(D.enum.LAYOUT),
|
|
2540
2680
|
height: P
|
|
2541
|
-
}),
|
|
2542
|
-
type: e.literal(
|
|
2681
|
+
}), xi = e.object({
|
|
2682
|
+
type: e.literal(D.enum.LOADED),
|
|
2543
2683
|
sessionId: P,
|
|
2544
2684
|
totalAmountAtoms: e.number(),
|
|
2545
|
-
currency:
|
|
2546
|
-
checkoutPaymentMethods: e.array(
|
|
2547
|
-
}),
|
|
2548
|
-
type: e.literal(
|
|
2685
|
+
currency: E,
|
|
2686
|
+
checkoutPaymentMethods: e.array(Ce)
|
|
2687
|
+
}), Mi = e.object({
|
|
2688
|
+
type: e.literal(D.enum.PAYMENT_FLOW_STARTED),
|
|
2549
2689
|
nextActionMetadata: e.record(e.string(), e.any()),
|
|
2550
2690
|
paymentFlowMetadata: e.any().optional(),
|
|
2551
2691
|
startPFMetadata: e.optional(e.record(e.string(), e.any()))
|
|
2552
|
-
}),
|
|
2553
|
-
type: e.literal(
|
|
2692
|
+
}), Di = e.object({
|
|
2693
|
+
type: e.literal(D.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
2554
2694
|
paymentMethodId: e.string()
|
|
2555
|
-
}),
|
|
2695
|
+
}), ke = e.object({
|
|
2556
2696
|
firstName: P,
|
|
2557
2697
|
lastName: P,
|
|
2558
2698
|
email: P,
|
|
2559
2699
|
zipCode: P,
|
|
2560
2700
|
country: P,
|
|
2561
|
-
promotionCode:
|
|
2562
|
-
}),
|
|
2701
|
+
promotionCode: E
|
|
2702
|
+
}), Li = e.object({
|
|
2703
|
+
firstName: E,
|
|
2704
|
+
lastName: E,
|
|
2563
2705
|
email: P,
|
|
2564
2706
|
zipCode: P,
|
|
2565
2707
|
country: P,
|
|
2566
|
-
promotionCode:
|
|
2567
|
-
}),
|
|
2568
|
-
type:
|
|
2708
|
+
promotionCode: E
|
|
2709
|
+
}), Ni = D.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ui = e.object({
|
|
2710
|
+
type: Ni,
|
|
2569
2711
|
sessionId: P,
|
|
2570
|
-
checkoutPaymentMethod:
|
|
2712
|
+
checkoutPaymentMethod: Ce,
|
|
2571
2713
|
paymentFlowMetadata: e.any().optional(),
|
|
2572
2714
|
doNotUseLegacyCCFlow: e.boolean().optional(),
|
|
2573
|
-
existingCCPMId:
|
|
2574
|
-
}).extend(
|
|
2575
|
-
type: e.literal(
|
|
2715
|
+
existingCCPMId: E
|
|
2716
|
+
}).extend(ke.shape), Fi = e.object({
|
|
2717
|
+
type: e.literal(D.enum.TOKENIZE_SUCCESS),
|
|
2576
2718
|
isReadyForCheckout: e.boolean()
|
|
2577
|
-
}),
|
|
2578
|
-
type: e.literal(
|
|
2719
|
+
}), $i = e.object({
|
|
2720
|
+
type: e.literal(D.enum.CHECKOUT_SUCCESS),
|
|
2579
2721
|
invoiceUrls: e.array(e.string()),
|
|
2580
2722
|
subscriptionIds: e.array(e.string()),
|
|
2581
2723
|
customerId: e.string()
|
|
2582
|
-
}),
|
|
2583
|
-
|
|
2584
|
-
hi,
|
|
2585
|
-
yi,
|
|
2586
|
-
gi,
|
|
2587
|
-
bi,
|
|
2588
|
-
vi,
|
|
2589
|
-
ki,
|
|
2590
|
-
Pi,
|
|
2724
|
+
}), zi = e.discriminatedUnion("type", [
|
|
2725
|
+
Si,
|
|
2591
2726
|
Oi,
|
|
2592
|
-
|
|
2593
|
-
|
|
2727
|
+
Ii,
|
|
2728
|
+
Ri,
|
|
2729
|
+
Ai,
|
|
2730
|
+
xi,
|
|
2731
|
+
Ui,
|
|
2732
|
+
Fi,
|
|
2733
|
+
$i,
|
|
2734
|
+
Mi,
|
|
2735
|
+
Di
|
|
2594
2736
|
]);
|
|
2595
2737
|
e.object({
|
|
2596
|
-
payload:
|
|
2738
|
+
payload: zi,
|
|
2597
2739
|
nonce: P,
|
|
2598
2740
|
formId: P,
|
|
2599
2741
|
elementId: P
|
|
@@ -2609,38 +2751,39 @@ e.object({
|
|
|
2609
2751
|
});
|
|
2610
2752
|
e.object({
|
|
2611
2753
|
secure_token: e.string(),
|
|
2612
|
-
existing_cc_pm_id:
|
|
2754
|
+
existing_cc_pm_id: ee(e.string()),
|
|
2755
|
+
their_pm_id: ee(e.string())
|
|
2613
2756
|
});
|
|
2614
2757
|
e.object({
|
|
2615
|
-
payment_methods: e.array(
|
|
2758
|
+
payment_methods: e.array(Ci)
|
|
2616
2759
|
});
|
|
2617
|
-
const
|
|
2760
|
+
const qi = e.object({
|
|
2618
2761
|
elementType: e.string(),
|
|
2619
2762
|
errors: e.array(e.string())
|
|
2620
2763
|
});
|
|
2621
2764
|
e.object({
|
|
2622
2765
|
session_id: e.string()
|
|
2623
2766
|
});
|
|
2624
|
-
const
|
|
2767
|
+
const Hi = e.object({
|
|
2625
2768
|
success: e.literal(!1),
|
|
2626
2769
|
error_type: e.literal("validation_error"),
|
|
2627
|
-
errors: e.array(
|
|
2770
|
+
errors: e.array(qi)
|
|
2628
2771
|
});
|
|
2629
2772
|
e.discriminatedUnion("success", [
|
|
2630
2773
|
e.object({ success: e.literal(!0) }),
|
|
2631
|
-
|
|
2774
|
+
Hi
|
|
2632
2775
|
]);
|
|
2633
2776
|
e.object({
|
|
2634
2777
|
session_id: e.string(),
|
|
2635
|
-
checkout_payment_method:
|
|
2636
|
-
non_cde_form_fields:
|
|
2778
|
+
checkout_payment_method: Ce,
|
|
2779
|
+
non_cde_form_fields: ke,
|
|
2637
2780
|
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
2638
|
-
existing_cc_pm_id:
|
|
2781
|
+
existing_cc_pm_id: ee(e.string())
|
|
2639
2782
|
});
|
|
2640
2783
|
e.object({
|
|
2641
2784
|
session_id: e.string(),
|
|
2642
|
-
checkout_payment_method:
|
|
2643
|
-
non_cde_form_fields:
|
|
2785
|
+
checkout_payment_method: Ce,
|
|
2786
|
+
non_cde_form_fields: ke,
|
|
2644
2787
|
extra_metadata: e.record(e.string(), e.any()).optional()
|
|
2645
2788
|
});
|
|
2646
2789
|
e.object({
|
|
@@ -2661,6 +2804,10 @@ e.object({
|
|
|
2661
2804
|
initial_intent_id: e.string(),
|
|
2662
2805
|
consent_id: e.string()
|
|
2663
2806
|
});
|
|
2807
|
+
e.discriminatedUnion("present", [
|
|
2808
|
+
e.object({ present: e.literal(!0), href: e.string() }),
|
|
2809
|
+
e.object({ present: e.literal(!1) })
|
|
2810
|
+
]);
|
|
2664
2811
|
e.object({
|
|
2665
2812
|
stripe_pk: e.string(),
|
|
2666
2813
|
client_secret: e.string(),
|
|
@@ -2671,7 +2818,7 @@ e.object({
|
|
|
2671
2818
|
client_secret: e.string(),
|
|
2672
2819
|
stripe_pk: e.string()
|
|
2673
2820
|
});
|
|
2674
|
-
const
|
|
2821
|
+
const Vi = (t) => JSON.stringify(t), v = (t) => e.nullable(t.optional());
|
|
2675
2822
|
e.string().trim().min(1, { message: "Cannot be blank" });
|
|
2676
2823
|
e.object({
|
|
2677
2824
|
cde_response_type: e.literal("error"),
|
|
@@ -2679,14 +2826,14 @@ e.object({
|
|
|
2679
2826
|
headers: e.record(e.string(), e.string()).optional()
|
|
2680
2827
|
});
|
|
2681
2828
|
e.enum(["usd", "brl"]);
|
|
2682
|
-
const
|
|
2829
|
+
const Yt = e.object({
|
|
2683
2830
|
name: e.string(),
|
|
2684
2831
|
amount_atom_off: v(e.number()),
|
|
2685
2832
|
percent_off: v(e.number()),
|
|
2686
2833
|
currency: v(e.string()),
|
|
2687
2834
|
duration: e.string(),
|
|
2688
2835
|
duration_in_months: v(e.number())
|
|
2689
|
-
}),
|
|
2836
|
+
}), Kt = e.object({
|
|
2690
2837
|
amount_subtotal_atom: e.number().int(),
|
|
2691
2838
|
amount_total_atom: e.number().int(),
|
|
2692
2839
|
currency: e.string(),
|
|
@@ -2695,74 +2842,74 @@ const zt = e.object({
|
|
|
2695
2842
|
billing_interval: v(e.string()),
|
|
2696
2843
|
billing_interval_count: v(e.number().int()),
|
|
2697
2844
|
quantity: e.number().int()
|
|
2698
|
-
}),
|
|
2845
|
+
}), Yi = e.record(e.string(), e.any()), Ki = e.object({
|
|
2699
2846
|
name: e.string(),
|
|
2700
|
-
settings: v(
|
|
2701
|
-
}),
|
|
2847
|
+
settings: v(Yi)
|
|
2848
|
+
}), oe = e.object({
|
|
2702
2849
|
provider: e.string(),
|
|
2703
2850
|
processor_name: v(e.string()),
|
|
2704
2851
|
metadata: v(e.record(e.string(), e.any()))
|
|
2705
|
-
}),
|
|
2852
|
+
}), Zi = e.object({
|
|
2706
2853
|
quantity: e.number()
|
|
2707
|
-
}),
|
|
2854
|
+
}), Bi = e.object({
|
|
2708
2855
|
id: v(e.string()),
|
|
2709
2856
|
billing_interval: v(e.string()),
|
|
2710
2857
|
billing_interval_count: v(e.number().int()),
|
|
2711
|
-
subscription_items: e.array(
|
|
2858
|
+
subscription_items: e.array(Zi),
|
|
2712
2859
|
trial_start: v(e.string()),
|
|
2713
2860
|
trial_end: v(e.string())
|
|
2714
|
-
}),
|
|
2861
|
+
}), Zt = e.object({
|
|
2715
2862
|
amount_atom: e.number()
|
|
2716
|
-
}),
|
|
2863
|
+
}), Ji = e.object({
|
|
2717
2864
|
amount_atom: e.number(),
|
|
2718
2865
|
amount_atom_considering_discount_applied: e.number(),
|
|
2719
2866
|
currency: e.string(),
|
|
2720
|
-
discount_amount_atoms: e.array(
|
|
2867
|
+
discount_amount_atoms: e.array(Zt),
|
|
2721
2868
|
subscription_item_id: e.string()
|
|
2722
|
-
}),
|
|
2723
|
-
coupon:
|
|
2724
|
-
}),
|
|
2869
|
+
}), Gi = e.object({
|
|
2870
|
+
coupon: Yt
|
|
2871
|
+
}), Wi = e.object({
|
|
2725
2872
|
currency: e.string(),
|
|
2726
|
-
discounts: e.array(
|
|
2873
|
+
discounts: e.array(Gi),
|
|
2727
2874
|
hosted_invoice_url: v(e.string()),
|
|
2728
|
-
lines: e.array(
|
|
2875
|
+
lines: e.array(Ji),
|
|
2729
2876
|
remaining_amount_atom: e.number(),
|
|
2730
2877
|
tax_amount_atom: e.number(),
|
|
2731
2878
|
total_amount_atom: e.number(),
|
|
2732
|
-
total_discount_amount_atoms: e.array(
|
|
2733
|
-
}),
|
|
2734
|
-
created: e.array(
|
|
2735
|
-
invoices: e.array(
|
|
2736
|
-
}),
|
|
2737
|
-
preview:
|
|
2738
|
-
preview_post_trial: v(
|
|
2739
|
-
coupons: e.array(
|
|
2740
|
-
}),
|
|
2879
|
+
total_discount_amount_atoms: e.array(Zt)
|
|
2880
|
+
}), st = e.object({
|
|
2881
|
+
created: e.array(Bi),
|
|
2882
|
+
invoices: e.array(Wi)
|
|
2883
|
+
}), Xi = e.object({
|
|
2884
|
+
preview: st,
|
|
2885
|
+
preview_post_trial: v(st),
|
|
2886
|
+
coupons: e.array(Yt)
|
|
2887
|
+
}), at = e.object({
|
|
2741
2888
|
status: e.literal("open"),
|
|
2742
2889
|
token: e.string(),
|
|
2743
2890
|
email: v(e.string()),
|
|
2744
|
-
line_items: e.array(
|
|
2891
|
+
line_items: e.array(Kt),
|
|
2745
2892
|
amount_subtotal_atom: e.number().int(),
|
|
2746
2893
|
amount_total_atom: e.number().int(),
|
|
2747
|
-
brand:
|
|
2748
|
-
subs_preview: v(
|
|
2894
|
+
brand: Ki,
|
|
2895
|
+
subs_preview: v(Xi),
|
|
2749
2896
|
// Null in setup mode
|
|
2750
|
-
methods_available: e.array(
|
|
2751
|
-
}),
|
|
2897
|
+
methods_available: e.array(oe)
|
|
2898
|
+
}), Qi = e.discriminatedUnion("mode", [
|
|
2752
2899
|
e.object({
|
|
2753
2900
|
mode: e.literal("setup"),
|
|
2754
2901
|
currency: e.nullable(e.undefined())
|
|
2755
|
-
}).extend(
|
|
2902
|
+
}).extend(at.shape),
|
|
2756
2903
|
e.object({
|
|
2757
2904
|
mode: e.enum(["payment", "subscription"]),
|
|
2758
2905
|
currency: e.string()
|
|
2759
|
-
}).extend(
|
|
2760
|
-
]),
|
|
2906
|
+
}).extend(at.shape)
|
|
2907
|
+
]), es = e.object({
|
|
2761
2908
|
status: e.literal("complete")
|
|
2762
|
-
}),
|
|
2909
|
+
}), ts = e.object({
|
|
2763
2910
|
status: e.literal("expired")
|
|
2764
2911
|
});
|
|
2765
|
-
e.union([
|
|
2912
|
+
e.union([Qi, es, ts]);
|
|
2766
2913
|
e.object({
|
|
2767
2914
|
logo: e.string(),
|
|
2768
2915
|
icon: e.string(),
|
|
@@ -2774,19 +2921,26 @@ e.object({
|
|
|
2774
2921
|
subscription_ids: e.array(e.string()),
|
|
2775
2922
|
customer_id: e.string()
|
|
2776
2923
|
});
|
|
2924
|
+
e.object({
|
|
2925
|
+
secure_token: e.string(),
|
|
2926
|
+
pm_id: e.string()
|
|
2927
|
+
});
|
|
2777
2928
|
e.object({
|
|
2778
2929
|
secure_token: e.string(),
|
|
2779
2930
|
payment_input: e.any(),
|
|
2780
2931
|
// Should follow AnyPaymentInput from CDE
|
|
2932
|
+
customer_first_name: e.string().optional(),
|
|
2933
|
+
customer_last_name: e.string().optional(),
|
|
2781
2934
|
customer_email: e.string(),
|
|
2782
2935
|
customer_zip_code: e.string(),
|
|
2783
2936
|
customer_country: e.string(),
|
|
2784
|
-
line_items: e.array(
|
|
2937
|
+
line_items: e.array(Kt),
|
|
2785
2938
|
total_amount_atom: e.number().int(),
|
|
2786
2939
|
cancel_at_end: e.boolean(),
|
|
2787
|
-
checkout_payment_method:
|
|
2940
|
+
checkout_payment_method: oe,
|
|
2788
2941
|
promotion_code: e.string().optional(),
|
|
2789
|
-
do_not_use_legacy_cc_flow: e.boolean().optional()
|
|
2942
|
+
do_not_use_legacy_cc_flow: e.boolean().optional(),
|
|
2943
|
+
use_confirmed_pm_id: v(e.string())
|
|
2790
2944
|
});
|
|
2791
2945
|
e.object({
|
|
2792
2946
|
payment_method_id: e.string()
|
|
@@ -2795,32 +2949,36 @@ e.object({
|
|
|
2795
2949
|
id: e.string(),
|
|
2796
2950
|
return_url: e.string()
|
|
2797
2951
|
});
|
|
2798
|
-
const
|
|
2952
|
+
const rs = e.object({
|
|
2799
2953
|
type: e.string(),
|
|
2800
2954
|
loc: e.array(e.string()),
|
|
2801
2955
|
msg: e.string(),
|
|
2802
2956
|
url: e.string()
|
|
2803
2957
|
});
|
|
2804
|
-
e.array(
|
|
2805
|
-
e.object({
|
|
2958
|
+
e.array(rs);
|
|
2959
|
+
const ns = e.object({
|
|
2806
2960
|
new_customer_email: e.string().optional(),
|
|
2807
2961
|
new_customer_address: e.record(e.string(), e.any()).optional(),
|
|
2962
|
+
new_customer_first_name: e.string().optional(),
|
|
2963
|
+
new_customer_last_name: e.string().optional()
|
|
2964
|
+
});
|
|
2965
|
+
e.object({
|
|
2808
2966
|
payment_provider: e.string(),
|
|
2809
|
-
checkout_payment_method:
|
|
2967
|
+
checkout_payment_method: oe,
|
|
2810
2968
|
existing_cc_pm_id: e.string().optional(),
|
|
2811
2969
|
their_existing_pm_id: e.string().optional()
|
|
2812
|
-
});
|
|
2970
|
+
}).extend(ns.shape);
|
|
2813
2971
|
e.object({
|
|
2814
2972
|
required_user_actions: e.array(e.record(e.string(), e.any()))
|
|
2815
2973
|
});
|
|
2816
2974
|
e.object({
|
|
2817
|
-
fields:
|
|
2818
|
-
checkoutPaymentMethod:
|
|
2975
|
+
fields: Li,
|
|
2976
|
+
checkoutPaymentMethod: oe
|
|
2819
2977
|
});
|
|
2820
2978
|
e.object({
|
|
2821
2979
|
session_id: e.string(),
|
|
2822
|
-
non_cde_form_fields:
|
|
2823
|
-
checkout_payment_method:
|
|
2980
|
+
non_cde_form_fields: ke,
|
|
2981
|
+
checkout_payment_method: oe,
|
|
2824
2982
|
extra_metadata: e.record(e.string(), e.any())
|
|
2825
2983
|
// This is optional in CDE, but not in OJS moving forward
|
|
2826
2984
|
});
|
|
@@ -2829,16 +2987,16 @@ e.object({
|
|
|
2829
2987
|
cc_pm_id: e.string()
|
|
2830
2988
|
});
|
|
2831
2989
|
e.record(e.any());
|
|
2832
|
-
function
|
|
2990
|
+
function os(t, n) {
|
|
2833
2991
|
var r = Object.setPrototypeOf;
|
|
2834
2992
|
r ? r(t, n) : t.__proto__ = n;
|
|
2835
2993
|
}
|
|
2836
|
-
function
|
|
2994
|
+
function is(t, n) {
|
|
2837
2995
|
n === void 0 && (n = t.constructor);
|
|
2838
2996
|
var r = Error.captureStackTrace;
|
|
2839
2997
|
r && r(t, n);
|
|
2840
2998
|
}
|
|
2841
|
-
var
|
|
2999
|
+
var ss = /* @__PURE__ */ function() {
|
|
2842
3000
|
var t = function(r, o) {
|
|
2843
3001
|
return t = Object.setPrototypeOf || {
|
|
2844
3002
|
__proto__: []
|
|
@@ -2859,22 +3017,22 @@ var Ki = /* @__PURE__ */ function() {
|
|
|
2859
3017
|
};
|
|
2860
3018
|
}();
|
|
2861
3019
|
(function(t) {
|
|
2862
|
-
|
|
3020
|
+
ss(n, t);
|
|
2863
3021
|
function n(r, o) {
|
|
2864
3022
|
var i = this.constructor, s = t.call(this, r, o) || this;
|
|
2865
3023
|
return Object.defineProperty(s, "name", {
|
|
2866
3024
|
value: i.name,
|
|
2867
3025
|
enumerable: !1,
|
|
2868
3026
|
configurable: !0
|
|
2869
|
-
}),
|
|
3027
|
+
}), os(s, i.prototype), is(s), s;
|
|
2870
3028
|
}
|
|
2871
3029
|
return n;
|
|
2872
3030
|
})(Error);
|
|
2873
|
-
const
|
|
3031
|
+
const as = (t) => {
|
|
2874
3032
|
const n = (...o) => {
|
|
2875
|
-
window.console.log(`${
|
|
3033
|
+
window.console.log(`${$.green.bold("ojs/")}${$.bold.gray(`${t}`)} `, ...o);
|
|
2876
3034
|
}, r = (...o) => {
|
|
2877
|
-
window.console.
|
|
3035
|
+
window.console.warn(`${$.red.bold("ojs/")}${$.bold.gray(`${t}`)} `, ...o);
|
|
2878
3036
|
};
|
|
2879
3037
|
return {
|
|
2880
3038
|
log: n,
|
|
@@ -2912,7 +3070,17 @@ e.object({
|
|
|
2912
3070
|
stripe_pk: e.string()
|
|
2913
3071
|
})
|
|
2914
3072
|
});
|
|
2915
|
-
|
|
3073
|
+
e.object({
|
|
3074
|
+
processor_name: e.literal("pockyt"),
|
|
3075
|
+
provider: e.literal("paypal")
|
|
3076
|
+
});
|
|
3077
|
+
e.array(
|
|
3078
|
+
e.object({
|
|
3079
|
+
paypal_iframe_url: e.string(),
|
|
3080
|
+
verify_token: e.string()
|
|
3081
|
+
})
|
|
3082
|
+
).length(1);
|
|
3083
|
+
const ct = {
|
|
2916
3084
|
isLoading: !0,
|
|
2917
3085
|
isAvailable: !1,
|
|
2918
3086
|
startFlow: async () => {
|
|
@@ -2922,26 +3090,26 @@ const ot = {
|
|
|
2922
3090
|
and ".isAvailable" to know if a payment request is available.`
|
|
2923
3091
|
);
|
|
2924
3092
|
}
|
|
2925
|
-
}, { err__:
|
|
2926
|
-
onFocus:
|
|
2927
|
-
onBlur:
|
|
2928
|
-
onChange:
|
|
2929
|
-
onLoad:
|
|
2930
|
-
onLoadError:
|
|
2931
|
-
onValidationError:
|
|
2932
|
-
onCheckoutStarted:
|
|
2933
|
-
onCheckoutSuccess:
|
|
2934
|
-
onSetupPaymentMethodSuccess:
|
|
2935
|
-
onCheckoutError:
|
|
2936
|
-
onPaymentRequestLoad:
|
|
2937
|
-
}),
|
|
3093
|
+
}, { err__: cs } = as("form-callbacks"), A = e.function().optional(), lt = e.object({
|
|
3094
|
+
onFocus: A,
|
|
3095
|
+
onBlur: A,
|
|
3096
|
+
onChange: A,
|
|
3097
|
+
onLoad: A,
|
|
3098
|
+
onLoadError: A,
|
|
3099
|
+
onValidationError: A,
|
|
3100
|
+
onCheckoutStarted: A,
|
|
3101
|
+
onCheckoutSuccess: A,
|
|
3102
|
+
onSetupPaymentMethodSuccess: A,
|
|
3103
|
+
onCheckoutError: A,
|
|
3104
|
+
onPaymentRequestLoad: A
|
|
3105
|
+
}), L = class L {
|
|
2938
3106
|
constructor() {
|
|
2939
3107
|
this.setCallbacks = (n) => {
|
|
2940
|
-
this._callbacks =
|
|
2941
|
-
const i =
|
|
3108
|
+
this._callbacks = L.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
|
|
3109
|
+
const i = vi(r, o ?? L.NOOP, cs);
|
|
2942
3110
|
this._callbacks[r] = i;
|
|
2943
3111
|
});
|
|
2944
|
-
}, this._callbacks =
|
|
3112
|
+
}, this._callbacks = L.createEmptyCallbacks();
|
|
2945
3113
|
}
|
|
2946
3114
|
/**
|
|
2947
3115
|
* Returns a read-only version of the callbacks object.
|
|
@@ -2950,20 +3118,20 @@ const ot = {
|
|
|
2950
3118
|
return { ...this._callbacks };
|
|
2951
3119
|
}
|
|
2952
3120
|
};
|
|
2953
|
-
|
|
2954
|
-
},
|
|
3121
|
+
L.NOOP = () => {
|
|
3122
|
+
}, L.createEmptyCallbacks = () => {
|
|
2955
3123
|
const n = {};
|
|
2956
|
-
return Object.keys(
|
|
2957
|
-
n[r] =
|
|
3124
|
+
return Object.keys(lt.keyof().enum).forEach((r) => {
|
|
3125
|
+
n[r] = L.NOOP;
|
|
2958
3126
|
}), n;
|
|
2959
|
-
},
|
|
2960
|
-
const r = new
|
|
2961
|
-
return r.setCallbacks(
|
|
3127
|
+
}, L.fromObject = (n) => {
|
|
3128
|
+
const r = new L();
|
|
3129
|
+
return r.setCallbacks(lt.parse(n)), r;
|
|
2962
3130
|
};
|
|
2963
|
-
let
|
|
2964
|
-
const
|
|
3131
|
+
let Ne = L;
|
|
3132
|
+
const ls = (t) => {
|
|
2965
3133
|
var r;
|
|
2966
|
-
const n =
|
|
3134
|
+
const n = Ne.fromObject({
|
|
2967
3135
|
onFocus: t.onFocus,
|
|
2968
3136
|
onBlur: t.onBlur,
|
|
2969
3137
|
onChange: t.onChange,
|
|
@@ -2976,47 +3144,48 @@ const Ji = (t) => {
|
|
|
2976
3144
|
onCheckoutError: t.onCheckoutError,
|
|
2977
3145
|
onPaymentRequestLoad: t.onPaymentRequestLoad
|
|
2978
3146
|
});
|
|
2979
|
-
return
|
|
2980
|
-
},
|
|
2981
|
-
const [n, r] =
|
|
2982
|
-
apple_pay:
|
|
2983
|
-
google_pay:
|
|
2984
|
-
}), o =
|
|
3147
|
+
return he.getInstance() && ((r = he.getInstance()) == null || r.updateCallbacks(n.get)), n.get;
|
|
3148
|
+
}, us = (t) => {
|
|
3149
|
+
const [n, r] = B({
|
|
3150
|
+
apple_pay: ct,
|
|
3151
|
+
google_pay: ct
|
|
3152
|
+
}), o = Wt(
|
|
2985
3153
|
(i) => {
|
|
2986
3154
|
r(i), t == null || t(i);
|
|
2987
3155
|
},
|
|
2988
3156
|
[t]
|
|
2989
3157
|
);
|
|
2990
3158
|
return { paymentRequests: n, overridenOnPaymentRequestLoad: o };
|
|
2991
|
-
},
|
|
2992
|
-
const [n, r] =
|
|
3159
|
+
}, ut = "op_ojs_form", bs = (t) => {
|
|
3160
|
+
const [n, r] = B(), [o, i] = B(null), { paymentRequests: s, overridenOnPaymentRequestLoad: a } = us(t.onPaymentRequestLoad), [c, l] = B(!1), [u, d] = B(null), f = ls({
|
|
2993
3161
|
...t,
|
|
2994
3162
|
onPaymentRequestLoad: a,
|
|
2995
|
-
onLoad: (
|
|
3163
|
+
onLoad: (m, p) => {
|
|
2996
3164
|
var h;
|
|
2997
|
-
l(!0), (h = t.onLoad) == null || h.call(t,
|
|
3165
|
+
l(!0), (h = t.onLoad) == null || h.call(t, m, p);
|
|
2998
3166
|
}
|
|
2999
3167
|
});
|
|
3000
|
-
if (
|
|
3168
|
+
if (Re(() => {
|
|
3001
3169
|
if (n) return;
|
|
3002
|
-
const
|
|
3170
|
+
const m = he.getInstance() ?? new he({
|
|
3003
3171
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
3004
|
-
formTarget: `#${
|
|
3172
|
+
formTarget: `#${ut}`,
|
|
3005
3173
|
baseUrl: t.baseUrl,
|
|
3006
3174
|
customInitParams: t.customInitParams,
|
|
3007
3175
|
...f
|
|
3008
3176
|
});
|
|
3009
|
-
r(
|
|
3010
|
-
const
|
|
3011
|
-
return i(
|
|
3177
|
+
r(m);
|
|
3178
|
+
const p = ds(m);
|
|
3179
|
+
return i(p), m.initFlows.stripeLink.publisher.subscribe((h) => {
|
|
3012
3180
|
h.isSuccess && h.loadedValue.isAvailable && d(h.loadedValue.controller);
|
|
3013
3181
|
}), () => {
|
|
3014
|
-
|
|
3182
|
+
m.destroy();
|
|
3015
3183
|
};
|
|
3016
3184
|
}, []), !n)
|
|
3017
|
-
return /* @__PURE__ */
|
|
3185
|
+
return /* @__PURE__ */ x(je, {});
|
|
3018
3186
|
const _ = {
|
|
3019
3187
|
submit: n.submitCard,
|
|
3188
|
+
submitWith: n.generalSubmit,
|
|
3020
3189
|
applePay: s.apple_pay,
|
|
3021
3190
|
googlePay: s.google_pay,
|
|
3022
3191
|
loaded: c,
|
|
@@ -3028,45 +3197,45 @@ const Ji = (t) => {
|
|
|
3028
3197
|
},
|
|
3029
3198
|
stripeLink: u
|
|
3030
3199
|
};
|
|
3031
|
-
return /* @__PURE__ */
|
|
3032
|
-
},
|
|
3200
|
+
return /* @__PURE__ */ x(je, { children: o ? /* @__PURE__ */ x(mt.Provider, { value: o, children: /* @__PURE__ */ x("div", { id: ut, className: t.className, children: t.children(_) }) }) : /* @__PURE__ */ x(je, {}) });
|
|
3201
|
+
}, ds = (t) => ({
|
|
3033
3202
|
formId: t.formId,
|
|
3034
3203
|
formHeight: t.formProperties.height,
|
|
3035
3204
|
referrer: t.referrer,
|
|
3036
3205
|
checkoutSecureToken: t.checkoutSecureToken,
|
|
3037
3206
|
registerIframe: t.registerIframe,
|
|
3038
3207
|
baseUrl: t.baseUrl
|
|
3039
|
-
}),
|
|
3040
|
-
const { elementType: n, styles: r } = t, { formId: o, referrer: i, formHeight: s, checkoutSecureToken: a, registerIframe: c, baseUrl: l } =
|
|
3208
|
+
}), Se = (t) => {
|
|
3209
|
+
const { elementType: n, styles: r } = t, { formId: o, referrer: i, formHeight: s, checkoutSecureToken: a, registerIframe: c, baseUrl: l } = er(), u = n.toLowerCase(), [d, f] = B(!1), _ = Xt(null), m = Oe(() => r ? Vi(r) : "", [r]), p = Oe(() => ({
|
|
3041
3210
|
border: "none",
|
|
3042
3211
|
width: "100%",
|
|
3043
3212
|
height: s
|
|
3044
|
-
}), [s]), h =
|
|
3213
|
+
}), [s]), h = Oe(() => {
|
|
3045
3214
|
if (!a || !i) return "";
|
|
3046
3215
|
const j = new URLSearchParams();
|
|
3047
|
-
return j.append("referer", i), j.append("styles",
|
|
3048
|
-
}, [
|
|
3049
|
-
return
|
|
3216
|
+
return j.append("referer", i), j.append("styles", m), j.append("formId", o), j.append("secureToken", a), j.toString();
|
|
3217
|
+
}, [m, o, i, a]);
|
|
3218
|
+
return Re(() => f(!0), []), Re(() => {
|
|
3050
3219
|
!_.current || !d || c(n, _.current);
|
|
3051
|
-
}, [d]), a ? /* @__PURE__ */
|
|
3220
|
+
}, [d]), a ? /* @__PURE__ */ x(
|
|
3052
3221
|
"iframe",
|
|
3053
3222
|
{
|
|
3054
3223
|
id: `ojs-${u}-element`,
|
|
3055
3224
|
name: `${u}-element`,
|
|
3056
3225
|
className: "ojs-iframe",
|
|
3057
3226
|
src: `${l}/app/v1/${u}-element/?${h}`,
|
|
3058
|
-
style:
|
|
3227
|
+
style: p,
|
|
3059
3228
|
ref: _
|
|
3060
3229
|
}
|
|
3061
|
-
) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */
|
|
3062
|
-
},
|
|
3230
|
+
) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ x("div", {}));
|
|
3231
|
+
}, vs = ({ styles: t }) => /* @__PURE__ */ x(Se, { styles: t, elementType: X.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ x(Se, { styles: t, elementType: X.CARD }), Es = ({ styles: t }) => /* @__PURE__ */ x(Se, { styles: t, elementType: X.CARD_EXPIRY }), Cs = ({ styles: t }) => /* @__PURE__ */ x(Se, { styles: t, elementType: X.CARD_NUMBER });
|
|
3063
3232
|
export {
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3233
|
+
vs as CardCvcElement,
|
|
3234
|
+
ws as CardElement,
|
|
3235
|
+
Es as CardExpiryElement,
|
|
3236
|
+
Cs as CardNumberElement,
|
|
3237
|
+
bs as ElementsForm,
|
|
3238
|
+
qt as FieldName,
|
|
3239
|
+
er as useOpenPayElements
|
|
3071
3240
|
};
|
|
3072
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBCIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IG10ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB5dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIF90ID0geiQxLmFycmF5KHl0KSwgZ3QgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgYnQgPSB6JDEuYXJyYXkoZ3QpLCB2dCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHZ0W3JdID8/IHQ7XG59LCB3dCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgRXQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCBTdCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgTiA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKHd0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gX3Quc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBFdChyKSA6IGJ0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gU3QocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgQ3QgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIHYgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShtIHx8IHt9KTtcbmNvbnN0IE5lID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgVWUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFVlIHx8IHt9KTtcbmNvbnN0ICRlID0geiQxLm5hdGl2ZUVudW0oVWUpLCBWZSA9IHokMS51bmlvbihbTmUsICRlXSk7XG52YXIgRiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEYgfHwge30pO1xuY29uc3Qga3QgPSB6JDEubmF0aXZlRW51bShGKSwgZWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUHQgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogdixcbiAgZXhwaXJ5OiB2LFxuICBjdmM6IHZcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogdixcbiAgY29sb3I6IHYsXG4gIGZvbnRGYW1pbHk6IHYsXG4gIGZvbnRTaXplOiB2LFxuICBmb250V2VpZ2h0OiB2LFxuICBtYXJnaW46IHYsXG4gIHBhZGRpbmc6IHYsXG4gIGxldHRlclNwYWNpbmc6IHYsXG4gIGxpbmVIZWlnaHQ6IHYsXG4gIGhpZGVJY29uOiB2XG59KTtcbmNvbnN0IFAgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgSXQgPSBQLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBPdCA9IHokMS5vYmplY3QoeyB0eXBlOiBJdCB9KSwgUnQgPSBQLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgQXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogUnQsXG4gIGVsZW1lbnRUeXBlOiAkZSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVHQgPSBQLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBqdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBUdCxcbiAgbWVzc2FnZTogUyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIE10ID0gUC5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBMdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBNdCxcbiAgZWxlbWVudFR5cGU6IFZlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgRHQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogU1xufSksIEZ0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHYsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShlZSlcbn0pLCB4dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgTnQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIFYgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgZW1haWw6IFMsXG4gIHppcENvZGU6IFMsXG4gIGNvdW50cnk6IFMsXG4gIHByb21vdGlvbkNvZGU6IHZcbn0pLCBVdCA9IHokMS5vYmplY3Qoe1xuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksICR0ID0gUC5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBWdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiAkdCxcbiAgc2Vzc2lvbklkOiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChWLnNoYXBlKSwgcXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCB6dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgSHQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIE90LFxuICBBdCxcbiAganQsXG4gIEx0LFxuICBEdCxcbiAgRnQsXG4gIFZ0LFxuICBxdCxcbiAgenQsXG4gIHh0LFxuICBOdFxuXSksIFl0ID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEh0LFxuICBub25jZTogUyxcbiAgZm9ybUlkOiBTLFxuICBlbGVtZW50SWQ6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFNcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBaKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQnQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUHQpXG59KSwgSnQgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEt0ID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShKdClcbn0pLCBHdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgS3Rcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGVlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBaKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGVlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgRCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKEQgfHwge30pO1xuY29uc3QgWnQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBXdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBRdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gTmUucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gcltpXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbaV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBYdCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIGVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIHRyID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgdGUgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgZ2UoKSB8fCBhd2FpdCBvcig1MDApO1xuICBpZiAoIWdlKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgcnIgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgdGUodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBuciA9IGFzeW5jICh0LCByLCBlLCBuLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCB0ZSh0KSwgYSA9IHRyW2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgb3IgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgc2V0VGltZW91dChyLCB0KTtcbn0pLCBnZSA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBpciA9IGFzeW5jICh0KSA9PiBuZXcgUHJvbWlzZSgociwgZSkgPT4ge1xuICB0cnkge1xuICAgIHQub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICByKG4pO1xuICAgIH0pLCB0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIGUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIGUobik7XG4gIH1cbn0pLCBzciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICghdC5zdHJpcGVfcGsgfHwgIXQuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IHRlKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogci5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyByLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiByLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIGFyID0gYXN5bmMgKHQpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSBhd2FpdCAoYXdhaXQgdGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChpID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIHQuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgZS5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgY3IgPSAodCkgPT4gSlNPTi5zdHJpbmdpZnkodCksIGRlID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIHVyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gWXQucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgbHIgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIGRyID0gKHQsIHIpID0+ICEhdCAmJiByLCBiID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgZnIgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgcWUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGIoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBiKHokMS5udW1iZXIoKSlcbn0pLCB6ZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogYih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGIoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHByID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGhyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGIocHIpXG59KSwgcSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogYih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBtciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgeXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBiKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KG1yKSxcbiAgdHJpYWxfc3RhcnQ6IGIoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBiKHokMS5zdHJpbmcoKSlcbn0pLCBIZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgX3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShIZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBnciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IHFlXG59KSwgYnIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoZ3IpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShfciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSGUpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KHlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShicilcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBiZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBiKGJlKSxcbiAgY291cG9uczogeiQxLmFycmF5KHFlKVxufSksIHZlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogYih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoemUpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogaHIsXG4gIHN1YnNfcHJldmlldzogYihZZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHEpXG59KSwgQmUgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh2ZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKVxuXSksIHZyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIHdyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbQmUsIHZyLCB3cl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEplID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh6ZSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFNyKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgS2UgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFV0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHFcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogVixcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHEsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbmNvbnN0IGtyID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBQcih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIElyKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBPciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIFJyID0gZnVuY3Rpb24odCkge1xuICBPcihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBQcihzLCBpLnByb3RvdHlwZSksIElyKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBHZSBleHRlbmRzIFJyIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoVHIobikpXG4gICAgdGhyb3cgbmV3IEdlKG4pO1xuICBpZiAoIUFyKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIEFyID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIFRyID0gKHQpID0+IGZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBqciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIFllKSwgeiA9IGFzeW5jICh0KSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBCZSksIE1yID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEtlKSwgTHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIENyKSwgRHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEtlKSwgZmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBCdCksIEZyID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IGpyKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGkgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0ga3Iobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBaZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IEZyKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgeHIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEkobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBHdClcbiAgICApXG4gICk7XG59LCB3ZSA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEkodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBKZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBOciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIEVyKSwgV2UgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBKZSksIFFlID0gMWUzLCBVciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogUWUsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBJKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBadCk7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGkpLCBpO1xufTtcbmZ1bmN0aW9uIFhlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgcGUgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKE4oaSkpO1xuICB9XG59LCBldCA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gTyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogTihlKSB9O1xuICB9XG59LCBPID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0IuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH0sIGUgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKGAke0IucmVkLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IFBvLCBlcnJfXzogJHIgfSA9IE8oXCJjb21tb25cIiksIGhlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgdHQgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93ICRyKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCB7IGxvZ19fOiBWciwgZXJyX186IHJ0IH0gPSBPKFwiY29tbW9uLWNjXCIpLCBtZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBWLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFlLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBuID0gZS5lcnJvci5mb3JtYXQoKSwgaSA9IFF0KG4pO1xuICAgIGZvciAoY29uc3QgW3MsIGFdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgcihzLCBhLCBzKTtcbiAgICB0aHJvdyBydChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gZS5kYXRhO1xufSwgcXIgPSAodCwgcikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFZlLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFpLnN1Y2Nlc3MpXG4gICAgICAgICAgcnQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gaS5kYXRhO1xuICAgICAgICAgIHIocywgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgVnIoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIEVlID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IHcsIGVycl9fOiB6ciB9ID0gTyhcInN0cmlwZS1saW5rXCIpLCBIciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBZciA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBCciA9IGV0KFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgdyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IHR0KHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSHIpO1xuICAgIHcoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCB6KGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdyhcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgWmUoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBycihuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIHcoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBoID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7RWV9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyB3KFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6ICh3KFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBoKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIGlmICh3KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB3KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIHcoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGYpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGYuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwLmVycm9yID8gKHpyKFwiZXJyb3JcIiwgcC5lcnJvciksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihwLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh3KFwicGF5bWVudE1ldGhvZFwiLCBwLnBheW1lbnRNZXRob2QpLCBVLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZSh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHAucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGgsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgR3IoRWUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgSnIgPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB3KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgdyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYSA9IEtyKGUsIGkuc3RyaXBlUE0pLCBjID0gbWUoYSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IE1yKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBpLnN0cmlwZVBNLmlkXG4gICAgfSk7XG4gICAgdyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gWXIucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgaCA9IGF3YWl0IHoocyk7XG4gICAgaWYgKGgubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICB3KFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBmZShzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGhlKF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBoLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBoLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV2UocywgXykgfTtcbiAgICB9XG4gIH1cbiksIEtyID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHUsIGQ7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW20uRklSU1RfTkFNRV0gPSBlW20uRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5MQVNUX05BTUVdID0gZVttLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5FTUFJTF0gPSBlW20uRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgobCA9IHIubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZW1haWwpIHx8IHIuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVttLlpJUF9DT0RFXSA9IGVbbS5aSVBfQ09ERV0gfHwgKCh1ID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgZVttLkNPVU5UUlldID0gZVttLkNPVU5UUlldIHx8ICgoZCA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBkLmNvdW50cnkpIHx8IFwiVVNcIiwgdyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIEdyID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIGNvbnN0IGUgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO1xuICAgIG4gPyByKG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpO1xuICB9O1xuICBlKCk7XG59KSwgWnIgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiLCBXciA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHIuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7WnJ9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgbiA9IGUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIG4uYXBwZW5kQ2hpbGQoci5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICBjb25zdCBpID0gbi5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKSwgcyA9IG4ucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSwgeyBob3N0OiBlLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogcyB9O1xufTtcbmZ1bmN0aW9uIFFyKHQsIHIsIGUpIHtcbiAgY29uc3QgbiA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IFVyKHQsIGUpO1xuICAgICAgcyAmJiAoY2xlYXJJbnRlcnZhbChpKSwgcihzKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBuKCk7XG4gIGNvbnN0IGkgPSBzZXRJbnRlcnZhbChuLCBRZSk7XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gWHIoe1xuICBlbGVtZW50czogdCxcbiAgcG9sbGluZ0ludGVydmFsOiByLFxuICByZXNvbHZlOiBlXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChyKSwgdC5ob3N0LnJlbW92ZSgpLCBlKHsgc3RhdHVzOiBELkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIHQuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIHQuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG50KHQpIHtcbiAgY29uc3QgeyB1cmw6IHIsIGJhc2VVcmw6IGUgfSA9IHQsIG4gPSBXcihyKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IChsKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbi5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgaShsKSwgYyA9PSBudWxsIHx8IGMoKTtcbiAgICB9LCBhID0gUXIobi5pZnJhbWUsIHMsIG5ldyBVUkwoZSkub3JpZ2luKSwgYyA9IFhyKHtcbiAgICAgIGVsZW1lbnRzOiBuLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiBhLFxuICAgICAgcmVzb2x2ZTogaVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IGVuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IG50KHQpO1xuICBpZiAoci5zdGF0dXMgPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoci5zdGF0dXMgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHIuc3RhdHVzICE9PSBELlNVQ0NFU1MgJiYgWGUoci5zdGF0dXMpLCB7XG4gICAgaHJlZjogci5ocmVmXG4gIH07XG59LCB7IGxvZ19fOiB0biwgZXJyX186IG90IH0gPSBPKFwicG9ja3l0LWNjXCIpLCBybiA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIG5uID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHJuLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgb3QobiksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgb24gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHRuKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBvdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke04ocil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgc24gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgYW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbm4ociksIG4gPSBhd2FpdCBlbih7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogb24obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGcsIGVycl9fOiBTZSB9ID0gTyhcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogQ2UgfSA9IE8oXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGNuID0gcGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgZyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByIH0pO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCB6KHMpO1xuICAgIGcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gbWUoZSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7fVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGcoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgeHIoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAocXIoZCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBnKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgTnIocywgbCk7XG4gICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7aC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGcoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgd2UocywgbCk7XG4gICAgICAgIHJldHVybiBnKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBHZSAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIGcoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBnKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGggPSBzbihkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoaCkge1xuICAgICAgICAgIGcoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IGFuKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IExyKHMsIGwpO1xuICAgICAgICBnKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIF8pO1xuICAgICAgICBjb25zdCBmID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgaCA/IGcoXCLilJwgUG9ja3l0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IGYgPyAoZyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IGZuKF8pKSA6IChnKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgZG4oXywgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IHAgPSBfLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBnKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3B9XWApO1xuICAgICAgICAgIGNvbnN0IHkgPSBhd2FpdCBmZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGcoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgeSk7XG4gICAgICAgICAgY29uc3QgaiA9IGhlKHkpO1xuICAgICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7ai5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGogfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke2YgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IHdlKHMsIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IGZcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogeSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBTZShcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgU2UoZCksIGQ7XG4gICAgfVxuICB9XG4pLCB1biA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gWHQucGFyc2Uocik7XG59LCBsbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gV3QucGFyc2Uocik7XG59LCBkbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBsbih0KTtcbiAgZyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IG50KHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGcoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIGZuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IHVuKHQpO1xuICBDZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgYXIociksIENlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogQywgZXJyX186IHBuIH0gPSBPKFwic3RyaXBlLXByXCIpLCBobiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgbW4gPSBldChcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgQyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSB0dCh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGhuKTtcbiAgICBDKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCB6KGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgWmUoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IG5yKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgQyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChwbihcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKEMoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIHluID0gcGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoQyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBwID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgcCksIGduKGMsIHAuYW1vdW50LCBwLnBlbmRpbmcpO1xuICAgIH1cbiAgICBDKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBpcihjKTtcbiAgICBDKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgQyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IF9uKGUsIGwpLCBkID0gbWUodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIEMoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBoID0gYXdhaXQgRHIoYSwge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIF8gPSBibihoKTtcbiAgICBDKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgc3IoXywgbCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IHooYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZlKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBoZShwKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBDKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV2UoYSwgcCkgfTtcbiAgICB9XG4gIH1cbiksIF9uID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHU7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVttLkZJUlNUX05BTUVdID0gZVttLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uTEFTVF9OQU1FXSA9IGVbbS5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uRU1BSUxdID0gZVttLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW20uWklQX0NPREVdID0gZVttLlpJUF9DT0RFXSB8fCAoKGwgPSByLnNoaXBwaW5nQWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGwucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW20uQ09VTlRSWV0gPSBlW20uQ09VTlRSWV0gfHwgKCh1ID0gci5zaGlwcGluZ0FkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LmNvdW50cnkpIHx8IFwiVVNcIiwgQyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIGduID0gKHQsIHIsIGUpID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHIuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogci5jdXJyZW5jeVxuICB9KTtcbn0sIGJuID0gKHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7dC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIGVyLnBhcnNlKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIGl0ID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChpKSA9PiBpLnByb3ZpZGVyID09PSByKTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAobi5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gblswXTtcbn0sIFUgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogY25cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbW4sXG4gICAgcnVuOiB5blxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogQnIsXG4gICAgcnVuOiBKclxuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBjZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIGNlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgaSkgJiYgKGVbaV0gPSBuW2ldKTtcbiAgfSwgY2UodCwgcik7XG59O1xuZnVuY3Rpb24gTCh0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGNlKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiB2bih0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGkocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgYSkge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBhKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGEoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gcyhkLnZhbHVlKSA6IGkoZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHN0KHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGksIHMsIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBhLm5leHQgPSBjKDApLCBhLnRocm93ID0gYygxKSwgYS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYSAmJiAoYSA9IDAsIHVbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgaSAmJiAocyA9IHVbMF0gJiAyID8gaS5yZXR1cm4gOiB1WzBdID8gaS50aHJvdyB8fCAoKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShzID0gcy5jYWxsKGksIHVbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIHMgJiYgKHUgPSBbdVswXSAmIDIsIHMudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGkgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIXMgfHwgdVsxXSA+IHNbMF0gJiYgdVsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uICQodCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHIgJiYgdFtyXSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIG4gPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbbisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IociA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIFcodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGksIHMgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGkgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBRKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiB4KHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4ID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IHgodCk7XG59XG5mdW5jdGlvbiB3bih0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEoZikge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHApLnRoZW4oZiwgaCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHApIHtcbiAgICBuW2ZdICYmIChpW2ZdID0gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosIFkpIHtcbiAgICAgICAgcy5wdXNoKFtmLCB5LCBqLCBZXSkgPiAxIHx8IGwoZiwgeSk7XG4gICAgICB9KTtcbiAgICB9LCBwICYmIChpW2ZdID0gcChpW2ZdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwoZiwgcCkge1xuICAgIHRyeSB7XG4gICAgICB1KG5bZl0ocCkpO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIF8oc1swXVszXSwgeSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUoZikge1xuICAgIGYudmFsdWUgaW5zdGFuY2VvZiB4ID8gUHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihkLCBoKSA6IF8oc1swXVsyXSwgZik7XG4gIH1cbiAgZnVuY3Rpb24gZChmKSB7XG4gICAgbChcIm5leHRcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gaChmKSB7XG4gICAgbChcInRocm93XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIF8oZiwgcCkge1xuICAgIGYocCksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRW4odCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gciA/IHIuY2FsbCh0KSA6ICh0ID0gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiID8gJCh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCBsLCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBzKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEUodCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gcmUodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBvZSA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIFgodCwgcikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKHIpO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIEggPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgaSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAkKGEpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiB5IH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoRShkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICBzID0geSBpbnN0YW5jZW9mIG9lID8geS5lcnJvcnMgOiBbeV07XG4gICAgICAgIH1cbiAgICAgIHZhciBoID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIF8gPSAkKGgpLCBmID0gXy5uZXh0KCk7ICFmLmRvbmU7IGYgPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHAgPSBmLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga2UocCk7XG4gICAgICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCB5IGluc3RhbmNlb2Ygb2UgPyBzID0gUShRKFtdLCBXKHMpKSwgVyh5LmVycm9ycykpIDogcy5wdXNoKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiB5IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAoaSA9IF8ucmV0dXJuKSAmJiBpLmNhbGwoXyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBvZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBrZShyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgWChlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIFgoZSwgciksIHIgaW5zdGFuY2VvZiB0ICYmIHIuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHQoKTtcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMCwgcjtcbiAgfSgpLCB0O1xufSgpLCBhdCA9IEguRU1QVFk7XG5mdW5jdGlvbiBjdCh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgSCB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBFKHQucmVtb3ZlKSAmJiBFKHQuYWRkKSAmJiBFKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24ga2UodCkge1xuICBFKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIHV0ID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIGx0ID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgUShbdCwgcl0sIFcoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gZHQodCkge1xuICBsdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gUGUoKSB7XG59XG5mdW5jdGlvbiBLKHQpIHtcbiAgdCgpO1xufVxudmFyIHllID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBjdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gUG4sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgdWUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KEgpLCBTbiA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gaWUodCwgcikge1xuICByZXR1cm4gU24uY2FsbCh0LCByKTtcbn1cbnZhciBDbiA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBKKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgSihuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBKKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEooZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIHVlID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChFKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIHV0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIGllKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIGllKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBpZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgQ24oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KHllKTtcbmZ1bmN0aW9uIEoodCkge1xuICBkdCh0KTtcbn1cbmZ1bmN0aW9uIGtuKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBQbiA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogUGUsXG4gIGVycm9yOiBrbixcbiAgY29tcGxldGU6IFBlXG59LCBfZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIEluKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBPbih0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IEluIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBUID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IEFuKHIpID8gciA6IG5ldyB1ZShyLCBlLCBuKTtcbiAgICByZXR1cm4gSyhmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSBJZShlKSwgbmV3IGUoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgdWUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbX2VdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gT24ocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBJZShyKSwgbmV3IHIoZnVuY3Rpb24obiwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gSWUodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyB1dC5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFJuKHQpIHtcbiAgcmV0dXJuIHQgJiYgRSh0Lm5leHQpICYmIEUodC5lcnJvcikgJiYgRSh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIEFuKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIHllIHx8IFJuKHQpICYmIGN0KHQpO1xufVxuZnVuY3Rpb24gVG4odCkge1xuICByZXR1cm4gRSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24gam4odCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChUbihyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTW4odCwgciwgZSwgbiwgaSkge1xuICByZXR1cm4gbmV3IExuKHQsIHIsIGUsIG4sIGkpO1xufVxudmFyIExuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGksIHMsIGEsIGMpIHtcbiAgICB2YXIgbCA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBhLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBzID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGkgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZS5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgcjtcbn0oeWUpLCBEbiA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgZnQgPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBPZSh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IERuKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gJChuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGkgPSBuLm9ic2VydmVyczsgaS5sZW5ndGg7IClcbiAgICAgICAgICBpLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBhdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBIKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgWChjLCBlKTtcbiAgICB9KSk7XG4gIH0sIHIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IG4uaGFzRXJyb3IsIHMgPSBuLnRocm93bkVycm9yLCBhID0gbi5pc1N0b3BwZWQ7XG4gICAgaSA/IGUuZXJyb3IocykgOiBhICYmIGUuY29tcGxldGUoKTtcbiAgfSwgci5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgVCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiBuZXcgT2UoZSwgbik7XG4gIH0sIHI7XG59KFQpLCBPZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IGUsIGkuc291cmNlID0gbiwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbjtcbiAgICAobiA9IChlID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICByZXR1cm4gKGkgPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShlKSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IGF0O1xuICB9LCByO1xufShmdCksIEZuID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCB4biA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcjtcbn0oSCksIFJlID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBRKFt0LCByXSwgVyhlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE5uID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLnNjaGVkdWxlciA9IGUsIGkud29yayA9IG4sIGkucGVuZGluZyA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoaSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gaSA9PT0gdm9pZCAwICYmIChpID0gMCksIFJlLnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgaSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgaSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGkgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBSZS5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBpID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiBpO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgaSA9ICEwLCBzID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgaSA9IGUuc2NoZWR1bGVyLCBzID0gaS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIFgocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KHhuKSwgQWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSBGbi5ub3csIHQ7XG59KCksIFVuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBBZS5ub3cpO1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyBlID0gbi5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCByO1xufShBZSksICRuID0gbmV3IFVuKE5uKSwgVm4gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBxbih0KSB7XG4gIHJldHVybiBFKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiB6bih0KSB7XG4gIHJldHVybiBFKHRbX2VdKTtcbn1cbmZ1bmN0aW9uIEhuKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEUodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gWW4odCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJuKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIEpuID0gQm4oKTtcbmZ1bmN0aW9uIEtuKHQpIHtcbiAgcmV0dXJuIEUodCA9PSBudWxsID8gdm9pZCAwIDogdFtKbl0pO1xufVxuZnVuY3Rpb24gR24odCkge1xuICByZXR1cm4gd24odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbiwgaSwgcztcbiAgICByZXR1cm4gc3QodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgeChlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBhLnNlbnQoKSwgaSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgeCh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCB4KGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFpuKHQpIHtcbiAgcmV0dXJuIEUodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gV24odCkge1xuICBpZiAodCBpbnN0YW5jZW9mIFQpXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoem4odCkpXG4gICAgICByZXR1cm4gUW4odCk7XG4gICAgaWYgKFZuKHQpKVxuICAgICAgcmV0dXJuIFhuKHQpO1xuICAgIGlmIChxbih0KSlcbiAgICAgIHJldHVybiBlbyh0KTtcbiAgICBpZiAoSG4odCkpXG4gICAgICByZXR1cm4gcHQodCk7XG4gICAgaWYgKEtuKHQpKVxuICAgICAgcmV0dXJuIHRvKHQpO1xuICAgIGlmIChabih0KSlcbiAgICAgIHJldHVybiBybyh0KTtcbiAgfVxuICB0aHJvdyBZbih0KTtcbn1cbmZ1bmN0aW9uIFFuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRbX2VdKCk7XG4gICAgaWYgKEUoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKHIpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBYbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhci5jbG9zZWQ7IGUrKylcbiAgICAgIHIubmV4dCh0W2VdKTtcbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW8odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICByLmNsb3NlZCB8fCAoci5uZXh0KGUpLCByLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgZHQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRvKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9ICQodCksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGkucmV0dXJuKSAmJiBuLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHB0KHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICBubyh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBybyh0KSB7XG4gIHJldHVybiBwdChHbih0KSk7XG59XG5mdW5jdGlvbiBubyh0LCByKSB7XG4gIHZhciBlLCBuLCBpLCBzO1xuICByZXR1cm4gdm4odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBzdCh0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gRW4odCksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGwuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IG4udmFsdWUsIHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgaSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBvbyh0LCByLCBlLCBuLCBpKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBpID09PSB2b2lkIDAgJiYgKGkgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGkgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWkpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBpbyh0LCByKSB7XG4gIHZhciBlID0gRSh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFQobik7XG59XG52YXIgc28gPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBhbyh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIHMgPSBhLCBpID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGkgPyBlKHMpIDogbihuZXcgc28oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY28odCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIHVvID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGxvKHQsIHIpIHtcbiAgdmFyIGUgPSBjbyh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBpID0gZS5lYWNoLCBzID0gZS53aXRoLCBhID0gcyA9PT0gdm9pZCAwID8gZm8gOiBzLCBjID0gZS5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyAkbiA6IGMsIHUgPSBlLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBpID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gam4oZnVuY3Rpb24oaCwgXykge1xuICAgIHZhciBmLCBwLCB5ID0gbnVsbCwgaiA9IDAsIFkgPSBmdW5jdGlvbihuZSkge1xuICAgICAgcCA9IG9vKF8sIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgV24oYSh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiB5LFxuICAgICAgICAgICAgc2VlbjogalxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoXyk7XG4gICAgICAgIH0gY2F0Y2ggKGh0KSB7XG4gICAgICAgICAgXy5lcnJvcihodCk7XG4gICAgICAgIH1cbiAgICAgIH0sIG5lKTtcbiAgICB9O1xuICAgIGYgPSBoLnN1YnNjcmliZShNbihfLCBmdW5jdGlvbihuZSkge1xuICAgICAgcCA9PSBudWxsIHx8IHAudW5zdWJzY3JpYmUoKSwgaisrLCBfLm5leHQoeSA9IG5lKSwgaSA+IDAgJiYgWShpKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBwICE9IG51bGwgJiYgcC5jbG9zZWQgfHwgcCA9PSBudWxsIHx8IHAudW5zdWJzY3JpYmUoKSwgeSA9IG51bGw7XG4gICAgfSkpLCAhaiAmJiBZKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBsLm5vdygpIDogaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZm8odCkge1xuICB0aHJvdyBuZXcgdW8odCk7XG59XG5jbGFzcyBHIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogciB9LCB0aGlzLl9zdWJqZWN0Lm5leHQociksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHIsIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiByLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihyKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHIpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiByLCB0aGlzLnN1YnNjcmliZSA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIFhlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IHIudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gaW8oKCkgPT4gbmV3IEVycm9yKHIudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGFvKHRoaXMuX3N1YmplY3QucGlwZShsbyhlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBmdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBwbywgZXJyX186IGhvIH0gPSBPKFwiaW5pdC1mbG93c1wiKSwgVGUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbmV3IEcoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHIobik7XG4gICAgICAgIHBvKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCBlLnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgaG8oYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgTihpKSwgXCJEZXRhaWxzOlwiLCBpKSwgZS50aHJvdyhpLCBOKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBtbyA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiByLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCB5byA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBUZShcIlN0cmlwZSBQUlwiLCBVLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBUZShcIlN0cmlwZSBMaW5rXCIsIFUuc3RyaXBlTGluay5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IF9vIH0gPSBPKFwiZm9ybS1jYWxsYmFja3NcIiksIGsgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBqZSA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBrLFxuICBvbkJsdXI6IGssXG4gIG9uQ2hhbmdlOiBrLFxuICBvbkxvYWQ6IGssXG4gIG9uTG9hZEVycm9yOiBrLFxuICBvblZhbGlkYXRpb25FcnJvcjogayxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGssXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBrLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGssXG4gIG9uQ2hlY2tvdXRFcnJvcjogayxcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IGtcbn0pLCBSID0gY2xhc3MgUiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHIpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFIuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBDdChlLCBuID8/IFIuTk9PUCwgX28pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gUi5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuUi5OT09QID0gKCkgPT4ge1xufSwgUi5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoamUua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgcltlXSA9IFIuTk9PUDtcbiAgfSksIHI7XG59LCBSLmZyb21PYmplY3QgPSAocikgPT4ge1xuICBjb25zdCBlID0gbmV3IFIoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGplLnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgbGUgPSBSO1xuY2xhc3MgZ28ge1xuICBjb25zdHJ1Y3RvcihyLCBlLCBuLCBpKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChNZShzLm9yaWdpbikgIT09IE1lKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGEgPSB1cihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBhLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IE1lID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gYm8odCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IGxyKG4pO1xuICBpZiAoIWRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyB2byB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCB3byA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYSAmJiBMZShcImFwcGxlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgTGUoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBMZSA9ICh0LCByLCBlLCBuLCBpKSA9PiBVLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogaXQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogZGUoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIERlID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogTSwgZXJyX186IHNlIH0gPSBPKFwib3AtZm9ybVwiKSwgQSA9IGNsYXNzIEEge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgRygpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgRygpLCB0aGlzLmNvbnRleHQgPSBuZXcgRygpLCB0aGlzLmluaXRGbG93cyA9IHlvKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE0oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgTShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRGVcbiAgICAgICAgfSk7XG4gICAgICAgIE0oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIE0oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBEZVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgTShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IEEuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChpKSwgd28odGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIE0oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IG1vKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBNKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBOKGUpO1xuICAgICAgICBzZShcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbiksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3Iobik7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gZSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBuICYmIChuLm5vZGUuc3R5bGUuaGVpZ2h0ID0gZSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnNldChlKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlKSwgZSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGUsIG4gPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGkgPSBrdC5wYXJzZShlKSwgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGEgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcobik7XG4gICAgICBzLm5hbWUgPSBgJHtpfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGMgPSBuZXcgVVJMKGAvYXBwL3YxLyR7cy5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBjLnNlYXJjaCA9IGEudG9TdHJpbmcoKSwgcy5zcmMgPSBjLmhyZWYsIHMuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIHMuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShpLCBzKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgIHR5cGU6IGUsXG4gICAgICAgIG5vZGU6IG4sXG4gICAgICAgIG1vdW50OiAocykgPT4ge1xuICAgICAgICAgIHZhciBhO1xuICAgICAgICAgIHJldHVybiAoYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocykpID09IG51bGwgPyB2b2lkIDAgOiBhLmFwcGVuZENoaWxkKG4pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGkudHlwZSwgbm9kZTogaS5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtGLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtGLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbRi5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW0YuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGksIGk7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIGNyKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIGJvKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gc2UoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIG4pKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBzZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFUuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBpdChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGRlKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCBBLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS4xOVwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSByLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4uciwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGxlLmZyb21PYmplY3QociksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7d2luZG93LmNyeXB0by5yYW5kb21VVUlEKCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgdm8oKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgZ28odGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5BLm9qc0Zsb3dzID0gVSwgQS5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChBLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgQS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgQS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IG10KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IEZlID0gQTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtCLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5lcnJvcihgJHtCLnJlZC5ib2xkKFwib2pzL1wiKX0ke0IuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChGZS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgRmUuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IEZlLmdldEluc3RhbmNlKCkgPz8gbmV3IEZlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsR0FBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsT0FBTztBQUNQLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLE9BQU87QUFFZCxNQUFNQyxLQUFrQlosR0FB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QUFPLE1BQ1gsZ0JBQUFqVixFQUFJZ2EsSUFBYyxFQUFFLFFBQUEvRSxHQUFRLGFBQWEzQixFQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJjb25uZWN0VG9DaGlsZCIsICJCIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJtdCIsICJ5dCIsICJfdCIsICJndCIsICJidCIsICJ2dCIsICJhZSIsICJyIiwgInd0IiwgIkV0IiwgImUiLCAiU3QiLCAiTiIsICJDdCIsICJuIiwgIlMiLCAidiIsICJaIiwgIm0iLCAiTmUiLCAiVWUiLCAiJGUiLCAiVmUiLCAiRiIsICJrdCIsICJlZSIsICJQdCIsICJQIiwgIkl0IiwgIk90IiwgIlJ0IiwgIkF0IiwgIlR0IiwgImp0IiwgIk10IiwgIkx0IiwgIkR0IiwgIkZ0IiwgInh0IiwgIk50IiwgIlYiLCAiVXQiLCAiJHQiLCAiVnQiLCAicXQiLCAienQiLCAiSHQiLCAiWXQiLCAiQnQiLCAiSnQiLCAiS3QiLCAiR3QiLCAiRCIsICJadCIsICJXdCIsICJRdCIsICJYdCIsICJlciIsICJ0ciIsICJ0ZSIsICJnZSIsICJvciIsICJyciIsICJuciIsICJpciIsICJzciIsICJhciIsICJpIiwgInMiLCAiYSIsICJjIiwgImNyIiwgImRlIiwgInVyIiwgImxyIiwgImRyIiwgImZyIiwgInFlIiwgInplIiwgInByIiwgImhyIiwgInEiLCAibXIiLCAieXIiLCAiSGUiLCAiX3IiLCAiZ3IiLCAiYnIiLCAiYmUiLCAiWWUiLCAidmUiLCAiQmUiLCAidnIiLCAid3IiLCAiSmUiLCAiRXIiLCAiU3IiLCAiS2UiLCAiQ3IiLCAia3IiLCAiUHIiLCAiSXIiLCAiT3IiLCAiUnIiLCAiR2UiLCAiSSIsICJUciIsICJBciIsICJqciIsICJ6IiwgIk1yIiwgIkxyIiwgIkRyIiwgImZlIiwgIkZyIiwgIlplIiwgInhyIiwgIndlIiwgIk5yIiwgIldlIiwgIlFlIiwgIlVyIiwgIlhlIiwgInBlIiwgImV0IiwgIk8iLCAiUG8iLCAiJHIiLCAiaGUiLCAidHQiLCAiVnIiLCAicnQiLCAibWUiLCAicXIiLCAiRWUiLCAidyIsICJ6ciIsICJIciIsICJZciIsICJCciIsICJoIiwgImYiLCAicCIsICJVIiwgIkdyIiwgIkpyIiwgIktyIiwgImQiLCAiXyIsICJsIiwgInUiLCAiWnIiLCAiV3IiLCAiUXIiLCAiWHIiLCAibnQiLCAiZW4iLCAidG4iLCAib3QiLCAicm4iLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiU2UiLCAiQ2UiLCAiY24iLCAieSIsICJmbiIsICJkbiIsICJ1biIsICJsbiIsICJDIiwgInBuIiwgImhuIiwgIm1uIiwgInluIiwgImduIiwgIl9uIiwgImJuIiwgIml0IiwgImNlIiwgIkwiLCAidm4iLCAic3QiLCAiJCIsICJXIiwgIlEiLCAieCIsICJ3biIsICJZIiwgIkVuIiwgIkUiLCAicmUiLCAib2UiLCAiWCIsICJIIiwgImtlIiwgImF0IiwgImN0IiwgInV0IiwgImx0IiwgImR0IiwgIlBlIiwgIksiLCAieWUiLCAiUG4iLCAidWUiLCAiU24iLCAiaWUiLCAiQ24iLCAiSiIsICJrbiIsICJfZSIsICJJbiIsICJPbiIsICJUIiwgIkFuIiwgIkllIiwgIlJuIiwgIlRuIiwgImpuIiwgIk1uIiwgIkxuIiwgIkRuIiwgImZ0IiwgIk9lIiwgIkZuIiwgInhuIiwgIlJlIiwgIk5uIiwgIkFlIiwgIlVuIiwgIiRuIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgIlluIiwgIkJuIiwgIkpuIiwgIktuIiwgIkduIiwgIlpuIiwgIlduIiwgIlFuIiwgIlhuIiwgImVvIiwgInB0IiwgInRvIiwgInJvIiwgIm5vIiwgIm9vIiwgImlvIiwgInNvIiwgImFvIiwgImNvIiwgInVvIiwgImxvIiwgImZvIiwgIm5lIiwgImh0IiwgIkciLCAicG8iLCAiaG8iLCAiVGUiLCAibW8iLCAieW8iLCAiX28iLCAiayIsICJqZSIsICJSIiwgImxlIiwgImdvIiwgIk1lIiwgImJvIiwgInZvIiwgIndvIiwgIkxlIiwgIkRlIiwgIk0iLCAic2UiLCAiQSIsICJGZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJiIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImZvcm0iLCAidmFsdWUiLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgImNoaWxkcmVuUHJvcHMiLCAiRWxlbWVudEZyYW1lIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAiaWZyYW1lUmVmIiwgImVsZW1lbnRTdHlsZSIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K
|
|
3241
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBKIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IHZ0ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB3dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIEV0ID0geiQxLmFycmF5KHd0KSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgQ3QgPSB6JDEuYXJyYXkoU3QpLCBrdCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgZmUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIGt0W3JdID8/IHQ7XG59LCBQdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgSXQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBmZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHtmZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCBPdCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgRCA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKFB0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gRXQuc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBJdChyKSA6IEN0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gT3QocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gZmUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgUnQgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIHYgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIHogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgaCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShoIHx8IHt9KTtcbmNvbnN0IHFlID0geiQxLm5hdGl2ZUVudW0oaCk7XG52YXIgemUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKHplIHx8IHt9KTtcbmNvbnN0IEhlID0geiQxLm5hdGl2ZUVudW0oemUpLCBZZSA9IHokMS51bmlvbihbcWUsIEhlXSk7XG52YXIgJCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKCQgfHwge30pO1xuY29uc3QgQXQgPSB6JDEubmF0aXZlRW51bSgkKSwgbmUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgVHQgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogdixcbiAgZXhwaXJ5OiB2LFxuICBjdmM6IHZcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogdixcbiAgY29sb3I6IHYsXG4gIGZvbnRGYW1pbHk6IHYsXG4gIGZvbnRTaXplOiB2LFxuICBmb250V2VpZ2h0OiB2LFxuICBtYXJnaW46IHYsXG4gIHBhZGRpbmc6IHYsXG4gIGxldHRlclNwYWNpbmc6IHYsXG4gIGxpbmVIZWlnaHQ6IHYsXG4gIGhpZGVJY29uOiB2XG59KTtcbmNvbnN0IE8gPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwganQgPSBPLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBNdCA9IHokMS5vYmplY3QoeyB0eXBlOiBqdCB9KSwgTHQgPSBPLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgRHQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogTHQsXG4gIGVsZW1lbnRUeXBlOiBIZSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgRnQgPSBPLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCB4dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBGdCxcbiAgbWVzc2FnZTogUyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIE50ID0gTy5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBVdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBOdCxcbiAgZWxlbWVudFR5cGU6IFllLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgJHQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoTy5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogU1xufSksIFZ0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKE8uZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHYsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShuZSlcbn0pLCBxdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChPLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgenQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoTy5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIEggPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgZW1haWw6IFMsXG4gIHppcENvZGU6IFMsXG4gIGNvdW50cnk6IFMsXG4gIHByb21vdGlvbkNvZGU6IHZcbn0pLCBIdCA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IHYsXG4gIGxhc3ROYW1lOiB2LFxuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksIFl0ID0gTy5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBCdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBZdCxcbiAgc2Vzc2lvbklkOiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IG5lLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChILnNoYXBlKSwgV3QgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoTy5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCBKdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChPLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgS3QgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIE10LFxuICBEdCxcbiAgeHQsXG4gIFV0LFxuICAkdCxcbiAgVnQsXG4gIEJ0LFxuICBXdCxcbiAgSnQsXG4gIHF0LFxuICB6dFxuXSksIEd0ID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEt0LFxuICBub25jZTogUyxcbiAgZm9ybUlkOiBTLFxuICBlbGVtZW50SWQ6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFNcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6KHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiB6KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWnQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoVHQpXG59KSwgUXQgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFh0ID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShRdClcbn0pLCBlciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgWHRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5lLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBILFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5lLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBILFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgeCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKHggfHwge30pO1xuY29uc3QgdHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCByciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBuciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgb3IgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHFlLnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgaXIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBzciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBhciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIG9lID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIEVlKCkgfHwgYXdhaXQgbHIoNTAwKTtcbiAgaWYgKCFFZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIGNyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IG9lKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgdXIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgb2UodCksIGEgPSBhcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIGxyID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIHNldFRpbWVvdXQociwgdCk7XG59KSwgRWUgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgZHIgPSBhc3luYyAodCkgPT4gbmV3IFByb21pc2UoKHIsIGUpID0+IHtcbiAgdHJ5IHtcbiAgICB0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgcihuKTtcbiAgICB9KSwgdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICBlKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBlKG4pO1xuICB9XG59KSwgcHIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAoIXQuc3RyaXBlX3BrIHx8ICF0LmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBvZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHIucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgci5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gci5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBmciA9IGFzeW5jICh0KSA9PiB7XG4gIHZhciBpLCBzLCBhLCBjO1xuICBjb25zdCBlID0gYXdhaXQgKGF3YWl0IG9lKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAoaSA9IGUuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBpLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCB0LnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGUuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKHMgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogcy5tZXNzYWdlKSA/PyAoKGMgPSAoYSA9IGUuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBhLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn0sIG1yID0gKHQpID0+IEpTT04uc3RyaW5naWZ5KHQpLCBYID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIGhyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gR3QucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgeXIgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIF9yID0gKHQsIHIpID0+ICEhdCAmJiByLCBiID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgZ3IgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQmUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGIoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBiKHokMS5udW1iZXIoKSlcbn0pLCBXZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogYih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGIoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGJyID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIHZyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGIoYnIpXG59KSwgWSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogYih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgRXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBiKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHdyKSxcbiAgdHJpYWxfc3RhcnQ6IGIoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBiKHokMS5zdHJpbmcoKSlcbn0pLCBKZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgU3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShKZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBDciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IEJlXG59KSwga3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoQ3IpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShTciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSmUpXG59KSwgU2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KEVyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShrcilcbn0pLCBLZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBTZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBiKFNlKSxcbiAgY291cG9uczogeiQxLmFycmF5KEJlKVxufSksIENlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogYih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoV2UpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogdnIsXG4gIHN1YnNfcHJldmlldzogYihLZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KFkpXG59KSwgR2UgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChDZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKENlLnNoYXBlKVxuXSksIFByID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIElyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbR2UsIFByLCBJcl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFplID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFdlKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBiKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUWUgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IE9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShPcik7XG5jb25zdCBSciA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogWSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChSci5zaGFwZSk7XG5jb25zdCBYZSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogSHQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogWVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBILFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogWSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG5jb25zdCBBciA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xuY29uc3QgVHIgPSAodCkgPT4gdC5yZWR1Y2UoKHIsIGUpID0+IHIgKyBlLCAwKTtcbmZ1bmN0aW9uIGpyKHQsIHIpIHtcbiAgdmFyIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIGUgPyBlKHQsIHIpIDogdC5fX3Byb3RvX18gPSByO1xufVxuZnVuY3Rpb24gTXIodCwgcikge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSB0LmNvbnN0cnVjdG9yKTtcbiAgdmFyIGUgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgZSAmJiBlKHQsIHIpO1xufVxudmFyIExyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGkuX19wcm90b19fID0gcztcbiAgICB9IHx8IGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGZvciAodmFyIGEgaW4gcylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIGEpICYmIChpW2FdID0gc1thXSk7XG4gICAgfSwgdChlLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIsIGUpIHtcbiAgICBpZiAodHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiICYmIGUgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICB0KHIsIGUpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gcjtcbiAgICB9XG4gICAgci5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChuLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgRHIgPSBmdW5jdGlvbih0KSB7XG4gIExyKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMuY29uc3RydWN0b3IsIHMgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogaS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGpyKHMsIGkucHJvdG90eXBlKSwgTXIocyksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KEVycm9yKTtcbmNsYXNzIGV0IGV4dGVuZHMgRHIge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgY29uc3QgZSA9IGAke3IubWVzc2FnZX1gO1xuICAgIHN1cGVyKGUpLCB0aGlzLnJlc3BvbnNlID0gcjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgUCA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCB0LnNlbmQocik7XG4gIGlmICh4cihuKSlcbiAgICB0aHJvdyBuZXcgZXQobik7XG4gIGlmICghRnIobiwgZSkpIHtcbiAgICBjb25zdCBpID0gZS5zYWZlUGFyc2Uobik7XG4gICAgdGhyb3cgaS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCBlLCBcIkFjdHVhbDpcIiwgbiksIGkuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuO1xufSwgRnIgPSAodCwgcikgPT4gci5zYWZlUGFyc2UodCkuc3VjY2VzcywgeHIgPSAodCkgPT4gZ3Iuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIE5yID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFAodCwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHIgfSwgS2UpLCBVID0gYXN5bmMgKHQpID0+IGF3YWl0IFAodCwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEdlKSwgdHQgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgUCh0LCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHIgfSwgWGUpLCBVciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBQKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IHIgfSwgQXIpLCAkciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBQKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IHIgfSwgWGUpLCBpZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBQKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFp0KSwgVnIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgUCh0LCB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBRZSksIHFyID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFAoXG4gIHQsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogciB9LFxuICBuclxuKSwgenIgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgTnIodCwge1xuICAgIHNlY3VyZV90b2tlbjogcixcbiAgICBwcm9tb3Rpb25fY29kZTogZVxuICB9KSwgaSA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoaS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2kuc2l6ZX1gKTtcbiAgY29uc3QgcyA9IGkudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGEgPSBUcihuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBzLFxuICAgIGFtb3VudEF0b206IGFcbiAgfTtcbn0sIHJ0ID0gYXN5bmMgKHQsIHIsIGUsIG4pID0+IHtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBpID0gYXdhaXQgenIodCwgciwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogaS5hbW91bnRBdG9tLCBjdXJyZW5jeTogaS5jdXJyZW5jeSB9O1xuICB9XG59LCBIciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICh0LnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbSh0LnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gUChuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiByIH0sIGVyKVxuICAgIClcbiAgKTtcbn0sIGtlID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgUCh0LCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiByIH0sIFplKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGNoZWNrb3V0Q2FyZEVsZW1lbnRzOlwiLCBlLCBKU09OLnN0cmluZ2lmeShlKSksIGU7XG4gIH1cbn0sIFlyID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFAodCwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHIgfSwgUWUpLCBnZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBQKHQsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiByIH0sIFplKSwgbnQgPSAxZTMsIEJyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc29sZS5sb2cocik7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBudCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IFAobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIHRyKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgaSksIGk7XG59O1xuZnVuY3Rpb24gYmUodCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3R9YCk7XG59XG5jb25zdCBzZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB2YXIgZSwgbjtcbiAgdHJ5IHtcbiAgICAobiA9IChlID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgbi5jYWxsKGUpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCB0KHIpO1xuICAgIGlmIChpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGkucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICBlbHNlIGlmIChpLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgIGkucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgaS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgaS5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtpfWApO1xuICB9IGNhdGNoIChpKSB7XG4gICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoRChpKSk7XG4gIH1cbn0sIG90ID0gKHQpID0+IGFzeW5jIChyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHQocik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBrKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgIHJldHVybiBuKGUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBEKGUpIH07XG4gIH1cbn0sIGsgPSAodCkgPT4ge1xuICBjb25zdCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7Si5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0ouYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtKLnJlZC5ib2xkKFwib2pzL1wiKX0ke0ouYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IHIsXG4gICAgZXJyOiBlLFxuICAgIGxvZ19fOiByLFxuICAgIGVycl9fOiBlXG4gIH07XG59LCB7IGxvZ19fOiBVbywgZXJyX186IFdyIH0gPSBrKFwiY29tbW9uXCIpLCBhZSA9ICh0KSA9PiB7XG4gIGlmICh0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7dC5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogdC5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIGl0ID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHQuZmluZCgobikgPT4gci5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghZSlcbiAgICB0aHJvdyBXcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCB0KSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiByLnBhcnNlKGUpO1xufSwgSnIgPSAodCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB0LmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgIHppcF9jb2RlOiB0LnppcENvZGUsXG4gICAgY291bnRyeTogdC5jb3VudHJ5XG4gIH0sXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB0LmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdC5sYXN0TmFtZVxufSksIEtyID0gYXN5bmMgKHQsIHIsIGUsIG4sIGkpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogcyB9ID0gayh0KSwgYSA9IGF3YWl0IFUociksIGMgPSBhZShpKTtcbiAgaWYgKGEubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBzKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgVnIociwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgcG1faWQ6IGMucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgcyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IGUucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogbltoLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBuW2guWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogbltoLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5baC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiBhLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogYS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiBjLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgZ2UociwgbCkgfTtcbiAgfVxufSwgeyBsb2dfXzogR3IsIGVycl9fOiBzdCB9ID0gayhcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gSC5zYWZlUGFyc2UodCk7XG4gIGlmICghZS5zdWNjZXNzKSB7XG4gICAgY29uc3QgbiA9IGUuZXJyb3IuZm9ybWF0KCksIGkgPSBvcihuKTtcbiAgICBmb3IgKGNvbnN0IFtzLCBhXSBvZiBPYmplY3QuZW50cmllcyhpKSlcbiAgICAgIHIocywgYSwgcyk7XG4gICAgdGhyb3cgc3QoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBpKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIGUuZGF0YTtcbn0sIFpyID0gKHQsIHIpID0+IHtcbiAgZm9yIChjb25zdCBlIG9mIHQpXG4gICAgaWYgKGUuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyBlLmVycm9ycy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBZZS5zYWZlUGFyc2Uobi5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghaS5zdWNjZXNzKVxuICAgICAgICAgIHN0KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7bi5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBuKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgcyA9IGkuZGF0YTtcbiAgICAgICAgICByKHMsIG4uZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIEdyKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShlLmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCBQZSA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiB3LCBlcnJfXzogUXIgfSA9IGsoXCJzdHJpcGUtbGlua1wiKSwgWHIgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgZW4gPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgdG4gPSBvdChcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgY29uc3QgZSA9IHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIHcoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IG4gPSBpdCh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFhyKTtcbiAgICB3KFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgVShpKSwgYSA9IHMubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIHcoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IHJ0KGksIHMudG9rZW4sIGEsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgY3Iobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICB3KFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBlID09IG51bGwgPyB2b2lkIDAgOiBlLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgbSA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke1BlfWApO1xuICAgIH0sIHkgPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiBlICE9IG51bGwgJiYgZS5kb05vdE1vdW50T25Jbml0ID8gdyhcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAodyhcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgbSgpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jIChwKSA9PiB7XG4gICAgICBpZiAodyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCBlICE9IG51bGwgJiYgZS5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IGUub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgdyhcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcC5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jIChwKSA9PiB7XG4gICAgICB3KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBwKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBwLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZi5lcnJvciA/IChRcihcImVycm9yXCIsIGYuZXJyb3IpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoZi5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAodyhcInBheW1lbnRNZXRob2RcIiwgZi5wYXltZW50TWV0aG9kKSwgTi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWCh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IGYucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IG0sXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiB5LFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgb24oUGUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgcm4gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB3KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgdyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYSA9IG5uKGUsIGkuc3RyaXBlUE0pLCBjID0gY2UoYSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IHR0KHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBpLnN0cmlwZVBNLmlkXG4gICAgfSk7XG4gICAgdyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gZW4ucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgbSA9IGF3YWl0IFUocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICB3KFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCBpZShzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGFlKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbaC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW2guWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW2guQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW2guUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgZ2UocywgeSkgfTtcbiAgICB9XG4gIH1cbiksIG5uID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHUsIGQ7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW2guRklSU1RfTkFNRV0gPSBlW2guRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbaC5MQVNUX05BTUVdID0gZVtoLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbaC5FTUFJTF0gPSBlW2guRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgobCA9IHIubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZW1haWwpIHx8IHIuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtoLlpJUF9DT0RFXSA9IGVbaC5aSVBfQ09ERV0gfHwgKCh1ID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgZVtoLkNPVU5UUlldID0gZVtoLkNPVU5UUlldIHx8ICgoZCA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBkLmNvdW50cnkpIHx8IFwiVVNcIiwgdyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIG9uID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIGNvbnN0IGUgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO1xuICAgIG4gPyByKG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpO1xuICB9O1xuICBlKCk7XG59KSwgc24gPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiLCBhbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHIuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c259XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgbiA9IGUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIG4uYXBwZW5kQ2hpbGQoci5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICBjb25zdCBpID0gbi5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKSwgcyA9IG4ucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSwgeyBob3N0OiBlLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogcyB9O1xufTtcbmZ1bmN0aW9uIGNuKHQsIHIsIGUpIHtcbiAgY29uc3QgbiA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IEJyKHQsIGUpO1xuICAgICAgcyAmJiAoY2xlYXJJbnRlcnZhbChpKSwgcihzKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBuKCk7XG4gIGNvbnN0IGkgPSBzZXRJbnRlcnZhbChuLCBudCk7XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gdW4oe1xuICBlbGVtZW50czogdCxcbiAgcG9sbGluZ0ludGVydmFsOiByLFxuICByZXNvbHZlOiBlXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChyKSwgdC5ob3N0LnJlbW92ZSgpLCBlKHsgc3RhdHVzOiB4LkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIHQuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIHQuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGF0KHQpIHtcbiAgY29uc3QgeyB1cmw6IHIsIGJhc2VVcmw6IGUgfSA9IHQsIG4gPSBhbihyKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IChsKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbi5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgaShsKSwgYyA9PSBudWxsIHx8IGMoKTtcbiAgICB9LCBhID0gY24obi5pZnJhbWUsIHMsIG5ldyBVUkwoZSkub3JpZ2luKSwgYyA9IHVuKHtcbiAgICAgIGVsZW1lbnRzOiBuLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiBhLFxuICAgICAgcmVzb2x2ZTogaVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IGxuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IGF0KHQpO1xuICBpZiAoci5zdGF0dXMgPT09IHguQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoci5zdGF0dXMgPT09IHguRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHIuc3RhdHVzICE9PSB4LlNVQ0NFU1MgJiYgYmUoci5zdGF0dXMpLCB7XG4gICAgaHJlZjogci5ocmVmXG4gIH07XG59LCBkbiA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cub3BlbihyLCBcIl9ibGFua1wiKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHt0fSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICByZXR1cm4gZTtcbn0sIHBuID0gYXN5bmMgKHQsIHIsIGUsIG4pID0+IHtcbiAgY29uc3QgeyBlcnJfXzogaSB9ID0gayhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChzLCBhKSA9PiB7XG4gICAgY29uc3QgYyA9IGRuKHQsIG4pLCBsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHFyKHIsIGUpO1xuICAgICAgICBpZiAodS5wcmVzZW50KVxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwobCksIGMuY2xvc2UoKSwgcyh7IGhyZWY6IHUuaHJlZiB9KTtcbiAgICAgICAgZWxzZSBpZiAoYy5jbG9zZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGkoRCh1KSksIGNsZWFySW50ZXJ2YWwobCksIGEoRCh1KSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59LCB7IGxvZ19fOiBmbiwgZXJyX186IGN0IH0gPSBrKFwicG9ja3l0LWNjXCIpLCBtbiA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIGhuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IG1uLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgY3QobiksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgdXQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIGZuKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBjdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke0Qocil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgeW4gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgX24gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gaG4ociksIG4gPSBhd2FpdCBsbih7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdXQobi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGcsIGVycl9fOiBJZSB9ID0gayhcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogT2UgfSA9IGsoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGduID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgZyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByIH0pO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBVKHMpO1xuICAgIGcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gY2UoZSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7fVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGcoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgSHIoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoWnIoZCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBnKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBtID0gYXdhaXQgWXIocywgbCk7XG4gICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7bS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IG0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGcoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBtID0gYXdhaXQga2UocywgbCk7XG4gICAgICAgIHJldHVybiBnKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBtIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBldCAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIGcoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBnKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IG0gPSB5bihkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAobSkge1xuICAgICAgICAgIGcoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgXyA9IGF3YWl0IF9uKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IF87XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeSA9IGF3YWl0IFVyKHMsIGwpO1xuICAgICAgICBnKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIHkpO1xuICAgICAgICBjb25zdCBwID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgbSA/IGcoXCLilJwgUG9ja3l0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IHAgPyAoZyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IEVuKHkpKSA6IChnKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgd24oeSwgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IGYgPSB5LmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBnKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2Z9XWApO1xuICAgICAgICAgIGNvbnN0IF8gPSBhd2FpdCBpZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGcoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgXyk7XG4gICAgICAgICAgY29uc3QgTSA9IGFlKF8pO1xuICAgICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7TS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IE0gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke3AgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgXyA9IGF3YWl0IGtlKHMsIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZixcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogXyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBJZShcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgSWUoZCksIGQ7XG4gICAgfVxuICB9XG4pLCBibiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gaXIucGFyc2Uocik7XG59LCB2biA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gcnIucGFyc2Uocik7XG59LCB3biA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB2bih0KTtcbiAgZyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGF0KHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGcoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSB4LkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IHguRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIEVuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGJuKHQpO1xuICBPZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgZnIociksIE9lKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogQywgZXJyX186IFNuIH0gPSBrKFwic3RyaXBlLXByXCIpLCBDbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwga24gPSBvdChcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgQyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBpdCh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIENuKTtcbiAgICBDKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCBVKGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgcnQoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IHVyKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgQyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChTbihcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKEMoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIFBuID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoQyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBmID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgZiksIE9uKGMsIGYuYW1vdW50LCBmLnBlbmRpbmcsIGYuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBDKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBkcihjKTtcbiAgICBDKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgQyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IEluKGUsIGwpLCBkID0gY2UodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIEMoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBtID0gYXdhaXQgJHIoYSwge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIHkgPSBSbihtKTtcbiAgICBDKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgcHIoeSwgbCk7XG4gICAgY29uc3QgcCA9IGF3YWl0IFUoYSk7XG4gICAgaWYgKHAubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgZiA9IGF3YWl0IGllKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhZShmKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBDKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtoLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbaC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtoLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbaC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbaC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbaC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHAubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHAuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBnZShhLCBmKSB9O1xuICAgIH1cbiAgfVxuKSwgSW4gPSAodCwgcikgPT4ge1xuICB2YXIgbCwgdSwgZCwgbTtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKHUgPSAobCA9IHIucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIGEgPSAobSA9IChkID0gci5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogZC5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBtLmFkZHJlc3MsIGMgPSByLnNoaXBwaW5nQWRkcmVzcztcbiAgcmV0dXJuIGVbaC5GSVJTVF9OQU1FXSA9IGVbaC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtoLkxBU1RfTkFNRV0gPSBlW2guTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtoLkVNQUlMXSA9IGVbaC5FTUFJTF0gfHwgci5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtoLlpJUF9DT0RFXSA9IGVbaC5aSVBfQ09ERV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVtoLkNPVU5UUlldID0gZVtoLkNPVU5UUlldIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIiwgQyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIE9uID0gKHQsIHIsIGUsIG4pID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHIuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogci5jdXJyZW5jeSxcbiAgICBhcHBsZVBheTogblxuICB9KTtcbn0sIFJuID0gKHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7dC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIHNyLnBhcnNlKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIHsgbG9nX186IEEgfSA9IGsoXCJwb2NreXQtcGF5cGFsXCIpLCBBbiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIFRuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgam4gPSBzZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLCBub25DZGVGb3JtSW5wdXRzOiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBBKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFUoaSk7XG4gICAgQShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYSA9IEFuLnBhcnNlKHIpO1xuICAgIEEoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGMgPSBjZShlLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSBKcihjKTtcbiAgICBBKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCB0dChpLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBhLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGEsXG4gICAgICAuLi5sXG4gICAgfSk7XG4gICAgQShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBkID0gVG4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdO1xuICAgIEEoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgbSA9IGF3YWl0IHBuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGksXG4gICAgICBkLnZlcmlmeV90b2tlbixcbiAgICAgIGQucGF5cGFsX2lmcmFtZV91cmxcbiAgICApO1xuICAgIEEoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgbSk7XG4gICAgY29uc3QgeSA9IHV0KG0uaHJlZik7XG4gICAgQShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHt5fWApO1xuICAgIGNvbnN0IHAgPSBhd2FpdCBpZShpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogeVxuICAgIH0pO1xuICAgIHJldHVybiBBKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIHApLCBhd2FpdCBLcihcInBvY2t5dC1wYXlwYWxcIiwgaSwgYSwgYywgcCk7XG4gIH1cbiksIG1lID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IGUgPT09IHZvaWQgMCA/ICEwIDogaS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgYSA9IGkucHJvdmlkZXIgPT09IHI7XG4gICAgcmV0dXJuIHMgJiYgYTtcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIG5bMF07XG59LCBOID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IGduXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGtuLFxuICAgIHJ1bjogUG5cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IHRuLFxuICAgIHJ1bjogcm5cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogam5cbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgaGUgPSBmdW5jdGlvbih0LCByKSB7XG4gIHJldHVybiBoZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBlLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIGkgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGkpICYmIChlW2ldID0gbltpXSk7XG4gIH0sIGhlKHQsIHIpO1xufTtcbmZ1bmN0aW9uIEYodCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBoZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gTW4odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBpKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGEpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgYShtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBhKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IHMoZC52YWx1ZSkgOiBpKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsdCh0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBpLCBzLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCB1WzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGkgJiYgKHMgPSB1WzBdICYgMiA/IGkucmV0dXJuIDogdVswXSA/IGkudGhyb3cgfHwgKChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEocyA9IHMuY2FsbChpLCB1WzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBzICYmICh1ID0gW3VbMF0gJiAyLCBzLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBpID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFzIHx8IHVbMV0gPiBzWzBdICYmIHVbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBxKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBlZSh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgaSwgcyA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoaSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGEgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIHRlKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiBWKHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBWID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IFYodCk7XG59XG5mdW5jdGlvbiBMbih0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEocCkge1xuICAgIHJldHVybiBmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGYpLnRoZW4ocCwgbSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKHAsIGYpIHtcbiAgICBuW3BdICYmIChpW3BdID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKE0sIFcpIHtcbiAgICAgICAgcy5wdXNoKFtwLCBfLCBNLCBXXSkgPiAxIHx8IGwocCwgXyk7XG4gICAgICB9KTtcbiAgICB9LCBmICYmIChpW3BdID0gZihpW3BdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwocCwgZikge1xuICAgIHRyeSB7XG4gICAgICB1KG5bcF0oZikpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHkoc1swXVszXSwgXyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUocCkge1xuICAgIHAudmFsdWUgaW5zdGFuY2VvZiBWID8gUHJvbWlzZS5yZXNvbHZlKHAudmFsdWUudikudGhlbihkLCBtKSA6IHkoc1swXVsyXSwgcCk7XG4gIH1cbiAgZnVuY3Rpb24gZChwKSB7XG4gICAgbChcIm5leHRcIiwgcCk7XG4gIH1cbiAgZnVuY3Rpb24gbShwKSB7XG4gICAgbChcInRocm93XCIsIHApO1xuICB9XG4gIGZ1bmN0aW9uIHkocCwgZikge1xuICAgIHAoZiksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRG4odCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gciA/IHIuY2FsbCh0KSA6ICh0ID0gdHlwZW9mIHEgPT0gXCJmdW5jdGlvblwiID8gcSh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCBsLCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBzKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEUodCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gdWUodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBkZSA9IHVlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHJlKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciBCID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gciwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIGUsIG4sIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gcShhKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKEUoZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiBkZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgbSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAobSkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciB5ID0gcShtKSwgcCA9IHkubmV4dCgpOyAhcC5kb25lOyBwID0geS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBmID0gcC52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlKGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgXyBpbnN0YW5jZW9mIGRlID8gcyA9IHRlKHRlKFtdLCBlZShzKSksIGVlKF8uZXJyb3JzKSkgOiBzLnB1c2goXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IF8gfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcCAmJiAhcC5kb25lICYmIChpID0geS5yZXR1cm4pICYmIGkuY2FsbCh5KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IGRlKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIFJlKHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiByZShlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIHJlKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwgZHQgPSBCLkVNUFRZO1xuZnVuY3Rpb24gcHQodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIEIgfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgRSh0LnJlbW92ZSkgJiYgRSh0LmFkZCkgJiYgRSh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIFJlKHQpIHtcbiAgRSh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBmdCA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBtdCA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIHRlKFt0LCByXSwgZWUoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gaHQodCkge1xuICBtdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gQWUoKSB7XG59XG5mdW5jdGlvbiBaKHQpIHtcbiAgdCgpO1xufVxudmFyIHZlID0gZnVuY3Rpb24odCkge1xuICBGKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBwdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gVW4sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgeWUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KEIpLCBGbiA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gcGUodCwgcikge1xuICByZXR1cm4gRm4uY2FsbCh0LCByKTtcbn1cbnZhciB4biA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBLKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgSyhuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBLKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEsoZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIHllID0gZnVuY3Rpb24odCkge1xuICBGKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChFKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIGZ0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIHBlKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIHBlKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBwZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgeG4oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KHZlKTtcbmZ1bmN0aW9uIEsodCkge1xuICBodCh0KTtcbn1cbmZ1bmN0aW9uIE5uKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBVbiA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogQWUsXG4gIGVycm9yOiBObixcbiAgY29tcGxldGU6IEFlXG59LCB3ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uICRuKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBWbih0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/ICRuIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBqID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IHpuKHIpID8gciA6IG5ldyB5ZShyLCBlLCBuKTtcbiAgICByZXR1cm4gWihmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSBUZShlKSwgbmV3IGUoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgeWUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbd2VdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gVm4ocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBUZShyKSwgbmV3IHIoZnVuY3Rpb24obiwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gVGUodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyBmdC5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIHFuKHQpIHtcbiAgcmV0dXJuIHQgJiYgRSh0Lm5leHQpICYmIEUodC5lcnJvcikgJiYgRSh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIHpuKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIHZlIHx8IHFuKHQpICYmIHB0KHQpO1xufVxuZnVuY3Rpb24gSG4odCkge1xuICByZXR1cm4gRSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24gWW4odCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChIbihyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gQm4odCwgciwgZSwgbiwgaSkge1xuICByZXR1cm4gbmV3IFduKHQsIHIsIGUsIG4sIGkpO1xufVxudmFyIFduID0gZnVuY3Rpb24odCkge1xuICBGKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGksIHMsIGEsIGMpIHtcbiAgICB2YXIgbCA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBhLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBzID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGkgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZS5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgcjtcbn0odmUpLCBKbiA9IHVlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgeXQgPSBmdW5jdGlvbih0KSB7XG4gIEYociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBqZSh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IEpuKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIFooZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gcShuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgWihmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGkgPSBuLm9ic2VydmVyczsgaS5sZW5ndGg7IClcbiAgICAgICAgICBpLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIFooZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBkdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBCKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgcmUoYywgZSk7XG4gICAgfSkpO1xuICB9LCByLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSBuLmhhc0Vycm9yLCBzID0gbi50aHJvd25FcnJvciwgYSA9IG4uaXNTdG9wcGVkO1xuICAgIGkgPyBlLmVycm9yKHMpIDogYSAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIHIucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IGooKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gbmV3IGplKGUsIG4pO1xuICB9LCByO1xufShqKSwgamUgPSBmdW5jdGlvbih0KSB7XG4gIEYociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBlLCBpLnNvdXJjZSA9IG4sIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgcmV0dXJuIChpID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBkdDtcbiAgfSwgcjtcbn0oeXQpLCBLbiA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgR24gPSBmdW5jdGlvbih0KSB7XG4gIEYociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KEIpLCBNZSA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgdGUoW3QsIHJdLCBlZShlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFpuID0gZnVuY3Rpb24odCkge1xuICBGKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLnNjaGVkdWxlciA9IGUsIGkud29yayA9IG4sIGkucGVuZGluZyA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoaSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gaSA9PT0gdm9pZCAwICYmIChpID0gMCksIE1lLnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgaSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgaSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGkgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBNZS5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBpID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiBpO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgaSA9ICEwLCBzID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgaSA9IGUuc2NoZWR1bGVyLCBzID0gaS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIHJlKHMsIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGksIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCByO1xufShHbiksIExlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQociwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gciwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgcikuc2NoZWR1bGUobiwgZSk7XG4gIH0sIHQubm93ID0gS24ubm93LCB0O1xufSgpLCBRbiA9IGZ1bmN0aW9uKHQpIHtcbiAgRihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gTGUubm93KTtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmFjdGlvbnMgPSBbXSwgaS5fYWN0aXZlID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGk7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChpID0gZS5leGVjdXRlKGUuc3RhdGUsIGUuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAoZSA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBpKSB7XG4gICAgICBmb3IgKDsgZSA9IG4uc2hpZnQoKTsgKVxuICAgICAgICBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBpO1xuICAgIH1cbiAgfSwgcjtcbn0oTGUpLCBYbiA9IG5ldyBRbihabiksIGVvID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gdG8odCkge1xuICByZXR1cm4gRSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRoZW4pO1xufVxuZnVuY3Rpb24gcm8odCkge1xuICByZXR1cm4gRSh0W3dlXSk7XG59XG5mdW5jdGlvbiBubyh0KSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBFKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIG9vKHQpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAodCAhPT0gbnVsbCAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyB0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBpbygpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBzbyA9IGlvKCk7XG5mdW5jdGlvbiBhbyh0KSB7XG4gIHJldHVybiBFKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbc29dKTtcbn1cbmZ1bmN0aW9uIGNvKHQpIHtcbiAgcmV0dXJuIExuKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG4sIGksIHM7XG4gICAgcmV0dXJuIGx0KHRoaXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHN3aXRjaCAoYS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZSA9IHQuZ2V0UmVhZGVyKCksIGEubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgYS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIFYoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gYS5zZW50KCksIGkgPSBuLnZhbHVlLCBzID0gbi5kb25lLCBzID8gWzQsIFYodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgVihpKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBhLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gZS5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB1byh0KSB7XG4gIHJldHVybiBFKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIGxvKHQpIHtcbiAgaWYgKHQgaW5zdGFuY2VvZiBqKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKHJvKHQpKVxuICAgICAgcmV0dXJuIHBvKHQpO1xuICAgIGlmIChlbyh0KSlcbiAgICAgIHJldHVybiBmbyh0KTtcbiAgICBpZiAodG8odCkpXG4gICAgICByZXR1cm4gbW8odCk7XG4gICAgaWYgKG5vKHQpKVxuICAgICAgcmV0dXJuIF90KHQpO1xuICAgIGlmIChhbyh0KSlcbiAgICAgIHJldHVybiBobyh0KTtcbiAgICBpZiAodW8odCkpXG4gICAgICByZXR1cm4geW8odCk7XG4gIH1cbiAgdGhyb3cgb28odCk7XG59XG5mdW5jdGlvbiBwbyh0KSB7XG4gIHJldHVybiBuZXcgaihmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0W3dlXSgpO1xuICAgIGlmIChFKGUuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiBlLnN1YnNjcmliZShyKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gZm8odCkge1xuICByZXR1cm4gbmV3IGooZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdC5sZW5ndGggJiYgIXIuY2xvc2VkOyBlKyspXG4gICAgICByLm5leHQodFtlXSk7XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1vKHQpIHtcbiAgcmV0dXJuIG5ldyBqKGZ1bmN0aW9uKHIpIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgci5jbG9zZWQgfHwgKHIubmV4dChlKSwgci5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsIGh0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBobyh0KSB7XG4gIHJldHVybiBuZXcgaihmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGkgPSBxKHQpLCBzID0gaS5uZXh0KCk7ICFzLmRvbmU7IHMgPSBpLm5leHQoKSkge1xuICAgICAgICB2YXIgYSA9IHMudmFsdWU7XG4gICAgICAgIGlmIChyLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBzICYmICFzLmRvbmUgJiYgKG4gPSBpLnJldHVybikgJiYgbi5jYWxsKGkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBfdCh0KSB7XG4gIHJldHVybiBuZXcgaihmdW5jdGlvbihyKSB7XG4gICAgX28odCwgcikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geW8odCkge1xuICByZXR1cm4gX3QoY28odCkpO1xufVxuZnVuY3Rpb24gX28odCwgcikge1xuICB2YXIgZSwgbiwgaSwgcztcbiAgcmV0dXJuIE1uKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gbHQodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IERuKHQpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSBuLnZhbHVlLCByLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChzID0gZS5yZXR1cm4pID8gWzQsIHMuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gci5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ28odCwgciwgZSwgbiwgaSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IHIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBpID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAodC5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gYm8odCwgcikge1xuICB2YXIgZSA9IEUodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIG4gPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBqKG4pO1xufVxudmFyIHZvID0gdWUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gd28odCwgcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBzID0gYSwgaSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpID8gZShzKSA6IG4obmV3IHZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEVvKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciBTbyA9IHVlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBDbyh0LCByKSB7XG4gIHZhciBlID0gRW8odCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCBuID0gZS5maXJzdCwgaSA9IGUuZWFjaCwgcyA9IGUud2l0aCwgYSA9IHMgPT09IHZvaWQgMCA/IGtvIDogcywgYyA9IGUuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gWG4gOiBjLCB1ID0gZS5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgaSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIFluKGZ1bmN0aW9uKG0sIHkpIHtcbiAgICB2YXIgcCwgZiwgXyA9IG51bGwsIE0gPSAwLCBXID0gZnVuY3Rpb24obGUpIHtcbiAgICAgIGYgPSBnbyh5LCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwLnVuc3Vic2NyaWJlKCksIGxvKGEoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogXyxcbiAgICAgICAgICAgIHNlZW46IE1cbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKHkpO1xuICAgICAgICB9IGNhdGNoIChndCkge1xuICAgICAgICAgIHkuZXJyb3IoZ3QpO1xuICAgICAgICB9XG4gICAgICB9LCBsZSk7XG4gICAgfTtcbiAgICBwID0gbS5zdWJzY3JpYmUoQm4oeSwgZnVuY3Rpb24obGUpIHtcbiAgICAgIGYgPT0gbnVsbCB8fCBmLnVuc3Vic2NyaWJlKCksIE0rKywgeS5uZXh0KF8gPSBsZSksIGkgPiAwICYmIFcoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgZiAhPSBudWxsICYmIGYuY2xvc2VkIHx8IGYgPT0gbnVsbCB8fCBmLnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIU0gJiYgVyhuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gbC5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGtvKHQpIHtcbiAgdGhyb3cgbmV3IFNvKHQpO1xufVxuY2xhc3MgUSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBiZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IGJvKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB3byh0aGlzLl9zdWJqZWN0LnBpcGUoQ28oZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgeXQoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogUG8sIGVycl9fOiBJbyB9ID0gayhcImluaXQtZmxvd3NcIiksIERlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBRKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCByKG4pO1xuICAgICAgICBQbyhg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgZS5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIElvKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEQoaSksIFwiRGV0YWlsczpcIiwgaSksIGUudGhyb3coaSwgRChpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgT28gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgUm8gPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogRGUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogRGUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBBbyB9ID0gayhcImZvcm0tY2FsbGJhY2tzXCIpLCBJID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgRmUgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogSSxcbiAgb25CbHVyOiBJLFxuICBvbkNoYW5nZTogSSxcbiAgb25Mb2FkOiBJLFxuICBvbkxvYWRFcnJvcjogSSxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IEksXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBJLFxuICBvbkNoZWNrb3V0U3VjY2VzczogSSxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBJLFxuICBvbkNoZWNrb3V0RXJyb3I6IEksXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBJXG59KSwgUiA9IGNsYXNzIFIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBSLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBpID0gUnQoZSwgbiA/PyBSLk5PT1AsIEFvKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gaTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IFIuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcblIuTk9PUCA9ICgpID0+IHtcbn0sIFIuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKEZlLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIHJbZV0gPSBSLk5PT1A7XG4gIH0pLCByO1xufSwgUi5mcm9tT2JqZWN0ID0gKHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBSKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhGZS5wYXJzZShyKSksIGU7XG59O1xubGV0IF9lID0gUjtcbmNsYXNzIFRvIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoeGUocy5vcmlnaW4pICE9PSB4ZSh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBhID0gaHIoSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGEpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gYSwgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHIsIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpO1xuICB9XG59XG5jb25zdCB4ZSA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIGpvKHQsIHIpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiByXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCB5cihuKTtcbiAgaWYgKCFfcihuLCBpKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgTW8ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHIsIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChyLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgTG8gPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSB0O1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICBpZiAoaS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBpLmxvYWRlZFZhbHVlLCBhID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBhLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGEgJiYgTmUoXCJhcHBsZV9wYXlcIiwgcywgciwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIE5lKFwiZ29vZ2xlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgTmUgPSAodCwgciwgZSwgbiwgaSkgPT4gTi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IFgoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIFVlID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogTCwgZXJyX186IEcgfSA9IGsoXCJvcC1mb3JtXCIpLCBUID0gY2xhc3MgVCB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBRKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBRKCksIHRoaXMuY29udGV4dCA9IG5ldyBRKCksIHRoaXMuaW5pdEZsb3dzID0gUm8oKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTChcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBMKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBVZVxuICAgICAgICB9KTtcbiAgICAgICAgTChcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgTChcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IFVlXG4gICAgICAgIH0pO1xuICAgICAgICBMKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBMKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBpID0gVC5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGkpLCBMbyh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgTChcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgT28odGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIEwoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IEQoZSk7XG4gICAgICAgIEcoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBpID0gQXQucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBhID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7aX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBhLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoaSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICByZXR1cm4gKGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBpLnR5cGUsIG5vZGU6IGkubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbJC5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbJC5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgWyQuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFskLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbZV0gPSBpLCBpO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChlKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIG4uYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgbi5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBlLnN0eWxlcyAmJiBuLmFwcGVuZChcInN0eWxlc1wiLCBtcihlLnN0eWxlcykpLCBuLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBuO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlKSA9PiB7XG4gICAgICBqbyhlLm5vZGUpLnRoZW4oKG4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGUudHlwZSwgbiksIHRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmFueUNkZUNvbm4uc2V0KG4pO1xuICAgICAgfSkuY2F0Y2goKG4pID0+IEcoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIG4pKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBHKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTi5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWChlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlKSA9PiB7XG4gICAgICBjb25zdCBuID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFuKSB7XG4gICAgICAgIEcoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlID09PSBcInBvY2t5dC1wYXlwYWxcIiA/IE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IG4sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUobi5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWChuLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogdm9pZCAwLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pIDogYmUoZSk7XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCBULmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS4yMVwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSByLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4uciwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IF9lLmZyb21PYmplY3QociksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gci5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBNbygpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBUbyh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcblQub2pzRmxvd3MgPSBOLCBULmFzc2lnbkFzU2luZ2xldG9uID0gKHIpID0+IHtcbiAgaWYgKFQuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHI7XG59LCBULmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBULmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAociwgZSwgbiwgaSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogci5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHIuYmFzZVVybCA/PyB2dCkub3JpZ2luLFxuICBmb3JtRGl2OiBpLFxuICBlbGVtZW50c1Nlc3Npb25JZDogZS5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogci5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCAkZSA9IFQ7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtKLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Si5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke0oucmVkLmJvbGQoXCJvanMvXCIpfSR7Si5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmICgkZS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgJGUuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9ICRlLmdldEluc3RhbmNlKCkgPz8gbmV3ICRlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsR0FBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLE9BQU87QUFFZCxNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUtjLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWQsR0FBV1ksRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FBQ1QsR0FFTUMsS0FBSyw4QkFBOEJDLEtBQUtSLEVBQUksT0FBTztBQUFBLEVBQ3ZELE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLEtBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQixLQUFLQSxFQUFJLE9BQU87QUFBQSxFQUNoQixLQUFLQSxFQUFJLE9BQU87QUFDbEIsQ0FBQyxHQUFHUyxLQUFLVCxFQUFJLE1BQU1RLEVBQUUsR0FBR0UsS0FBS1YsRUFBSSxPQUFPO0FB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R0FHbEY2SCxLQUFvQixDQUFDLEVBQUUsUUFBQWxHLEVBQU8sTUFDWCxnQkFBQTlWLEVBQUk4YSxJQUFjLEVBQUUsUUFBQWhGLEdBQVEsYUFBYTNCLEVBQWdCLFlBQVksQ0FBQyxHQUd6RjhILEtBQW9CLENBQUMsRUFBRSxRQUFBbkcsRUFBTyxNQUNYLGdCQUFBOVYsRUFBSThhLElBQWMsRUFBRSxRQUFBaEYsR0FBUSxhQUFhM0IsRUFBZ0IsWUFBWSxDQUFDOyIsCiAgIm5hbWVzIjogWyJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiSiIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAidnQiLCAid3QiLCAiRXQiLCAiU3QiLCAiQ3QiLCAia3QiLCAiZmUiLCAiciIsICJQdCIsICJJdCIsICJlIiwgIk90IiwgIkQiLCAiUnQiLCAibiIsICJ2IiwgInoiLCAiaCIsICJxZSIsICJ6ZSIsICJIZSIsICJZZSIsICIkIiwgIkF0IiwgIm5lIiwgIlR0IiwgIk8iLCAianQiLCAiTXQiLCAiTHQiLCAiRHQiLCAiRnQiLCAieHQiLCAiTnQiLCAiVXQiLCAiJHQiLCAiVnQiLCAicXQiLCAienQiLCAiSCIsICJIdCIsICJZdCIsICJCdCIsICJXdCIsICJKdCIsICJLdCIsICJHdCIsICJadCIsICJRdCIsICJYdCIsICJlciIsICJ4IiwgInRyIiwgInJyIiwgIm5yIiwgIm9yIiwgImlyIiwgInNyIiwgImFyIiwgIm9lIiwgIkVlIiwgImxyIiwgImNyIiwgInVyIiwgImRyIiwgInByIiwgImZyIiwgImkiLCAicyIsICJhIiwgImMiLCAibXIiLCAiWCIsICJociIsICJ5ciIsICJfciIsICJnciIsICJCZSIsICJXZSIsICJiciIsICJ2ciIsICJZIiwgIndyIiwgIkVyIiwgIkplIiwgIlNyIiwgIkNyIiwgImtyIiwgIlNlIiwgIktlIiwgIkNlIiwgIkdlIiwgIlByIiwgIklyIiwgIlplIiwgIlFlIiwgIk9yIiwgIlJyIiwgIlhlIiwgIkFyIiwgIlRyIiwgImpyIiwgIk1yIiwgIkxyIiwgIkRyIiwgImV0IiwgIlAiLCAieHIiLCAiRnIiLCAiTnIiLCAiVSIsICJ0dCIsICJVciIsICIkciIsICJpZSIsICJWciIsICJxciIsICJ6ciIsICJydCIsICJIciIsICJrZSIsICJZciIsICJnZSIsICJudCIsICJCciIsICJiZSIsICJzZSIsICJvdCIsICJrIiwgIlVvIiwgIldyIiwgImFlIiwgIml0IiwgIkpyIiwgIktyIiwgIkdyIiwgInN0IiwgImNlIiwgIlpyIiwgIlBlIiwgInciLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAibSIsICJ5IiwgInAiLCAiZiIsICJOIiwgIm9uIiwgInJuIiwgIm5uIiwgImQiLCAibCIsICJ1IiwgInNuIiwgImFuIiwgImNuIiwgInVuIiwgImF0IiwgImxuIiwgImRuIiwgInBuIiwgImZuIiwgImN0IiwgIm1uIiwgImhuIiwgInV0IiwgInluIiwgIl9uIiwgIkllIiwgIk9lIiwgImduIiwgIl8iLCAiRW4iLCAid24iLCAiTSIsICJibiIsICJ2biIsICJDIiwgIlNuIiwgIkNuIiwgImtuIiwgIlBuIiwgIk9uIiwgIkluIiwgIlJuIiwgIkEiLCAiQW4iLCAiVG4iLCAiam4iLCAibWUiLCAiaGUiLCAiRiIsICJNbiIsICJsdCIsICJxIiwgImVlIiwgInRlIiwgIlYiLCAiTG4iLCAiVyIsICJEbiIsICJFIiwgInVlIiwgImRlIiwgInJlIiwgIkIiLCAiUmUiLCAiZHQiLCAicHQiLCAiZnQiLCAibXQiLCAiaHQiLCAiQWUiLCAiWiIsICJ2ZSIsICJVbiIsICJ5ZSIsICJGbiIsICJwZSIsICJ4biIsICJLIiwgIk5uIiwgIndlIiwgIiRuIiwgIlZuIiwgImoiLCAiem4iLCAiVGUiLCAicW4iLCAiSG4iLCAiWW4iLCAiQm4iLCAiV24iLCAiSm4iLCAieXQiLCAiamUiLCAiS24iLCAiR24iLCAiTWUiLCAiWm4iLCAiTGUiLCAiUW4iLCAiWG4iLCAiZW8iLCAidG8iLCAicm8iLCAibm8iLCAib28iLCAiaW8iLCAic28iLCAiYW8iLCAiY28iLCAidW8iLCAibG8iLCAicG8iLCAiZm8iLCAibW8iLCAiX3QiLCAiaG8iLCAieW8iLCAiX28iLCAiZ28iLCAiYm8iLCAidm8iLCAid28iLCAiRW8iLCAiU28iLCAiQ28iLCAia28iLCAibGUiLCAiZ3QiLCAiUSIsICJQbyIsICJJbyIsICJEZSIsICJPbyIsICJSbyIsICJBbyIsICJJIiwgIkZlIiwgIlIiLCAiX2UiLCAiVG8iLCAieGUiLCAiam8iLCAiTW8iLCAiTG8iLCAiTmUiLCAiVWUiLCAiTCIsICJHIiwgIlQiLCAiJGUiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMiLCAiX2V4dGVuZFN0YXRpY3MiLCAiYiIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAib2JqIiwgImluc3RhbmNlIiwgIkZvcm1DYWxsYmFja3MiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgInByb3BzIiwgIl9hIiwgImZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJmb3JtIiwgInZhbHVlIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|