@launchdarkly/session-replay 0.5.0 → 0.5.2
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/CHANGELOG.md +18 -0
- package/dist/{LDObserve-BHQyYqSE.js → LDObserve-BKmgHYw8.js} +2 -2
- package/dist/{LDObserve-BHQyYqSE.js.map → LDObserve-BKmgHYw8.js.map} +1 -1
- package/dist/{index-DDMbSYLF.js → index-CTojSwVM.js} +741 -739
- package/dist/index-CTojSwVM.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.umd.js +63 -63
- package/dist/index.umd.js.map +1 -1
- package/package.json +2 -2
- package/dist/index-DDMbSYLF.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var hu = Object.defineProperty, pu = (e, t, i) => t in e ? hu(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i,
|
|
1
|
+
var hu = Object.defineProperty, pu = (e, t, i) => t in e ? hu(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, ze = (e, t, i) => pu(e, typeof t != "symbol" ? t + "" : t, i), mu = (e, t, i) => new Promise((n, s) => {
|
|
2
2
|
var r = (a) => {
|
|
3
3
|
try {
|
|
4
4
|
o(i.next(a));
|
|
@@ -21,14 +21,14 @@ const Br = /* @__PURE__ */ Object.create(null), Ve = (e, t, ...i) => {
|
|
|
21
21
|
Br[`${e}-${t}`] || (Br[`${e}-${t}`] = !0, Ve(e, i, ...n));
|
|
22
22
|
}, bu = (e, ...t) => mu(void 0, null, function* () {
|
|
23
23
|
try {
|
|
24
|
-
const { LDObserve: i } = yield import("./LDObserve-
|
|
24
|
+
const { LDObserve: i } = yield import("./LDObserve-BKmgHYw8.js");
|
|
25
25
|
i.recordLog(`${e}${t}`, "warn");
|
|
26
26
|
} catch {
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
class vl {
|
|
30
30
|
constructor(t, i) {
|
|
31
|
-
|
|
31
|
+
ze(this, "debug"), ze(this, "name"), this.debug = t, this.name = i;
|
|
32
32
|
}
|
|
33
33
|
log(...t) {
|
|
34
34
|
if (this.debug) {
|
|
@@ -43,7 +43,7 @@ class vl {
|
|
|
43
43
|
}
|
|
44
44
|
let wl = class {
|
|
45
45
|
constructor() {
|
|
46
|
-
|
|
46
|
+
ze(this, "_sdk"), ze(this, "_isLoaded", !1), ze(this, "_callBuffer", []), ze(this, "_capacity", 1e5), ze(this, "_droppedEvents", 0), ze(this, "_exceededCapacity", !1), ze(this, "_logger", new vl());
|
|
47
47
|
}
|
|
48
48
|
_bufferCall(t, i) {
|
|
49
49
|
if (this._isLoaded)
|
|
@@ -97,7 +97,7 @@ var fu = Object.defineProperty, yu = Object.defineProperties, gu = Object.getOwn
|
|
|
97
97
|
for (var n of ln(e))
|
|
98
98
|
t.indexOf(n) < 0 && Tl.call(e, n) && (i[n] = e[n]);
|
|
99
99
|
return i;
|
|
100
|
-
}, ni = (e, t, i) => ys(e, typeof t != "symbol" ? t + "" : t, i),
|
|
100
|
+
}, ni = (e, t, i) => ys(e, typeof t != "symbol" ? t + "" : t, i), Wt = (e, t, i) => new Promise((n, s) => {
|
|
101
101
|
var r = (a) => {
|
|
102
102
|
try {
|
|
103
103
|
o(i.next(a));
|
|
@@ -197,7 +197,7 @@ function Xu(e) {
|
|
|
197
197
|
extensions: e[5]
|
|
198
198
|
} : t;
|
|
199
199
|
}
|
|
200
|
-
let
|
|
200
|
+
let Wu = class Ll extends Error {
|
|
201
201
|
/**
|
|
202
202
|
* An array of `{ line, column }` locations within the source GraphQL document
|
|
203
203
|
* which correspond to this error.
|
|
@@ -307,12 +307,12 @@ function jr(e) {
|
|
|
307
307
|
return e === void 0 || e.length === 0 ? void 0 : e;
|
|
308
308
|
}
|
|
309
309
|
function ue(e, t, i) {
|
|
310
|
-
return new
|
|
310
|
+
return new Wu(`Syntax Error: ${i}`, {
|
|
311
311
|
source: e,
|
|
312
312
|
positions: [t]
|
|
313
313
|
});
|
|
314
314
|
}
|
|
315
|
-
let
|
|
315
|
+
let Cu = class {
|
|
316
316
|
/**
|
|
317
317
|
* The character offset at which this Node begins.
|
|
318
318
|
*/
|
|
@@ -479,15 +479,15 @@ function Is(e) {
|
|
|
479
479
|
function si(e) {
|
|
480
480
|
return e >= 48 && e <= 57;
|
|
481
481
|
}
|
|
482
|
-
function
|
|
482
|
+
function Ul(e) {
|
|
483
483
|
return e >= 97 && e <= 122 || // A-Z
|
|
484
484
|
e >= 65 && e <= 90;
|
|
485
485
|
}
|
|
486
|
-
function
|
|
487
|
-
return
|
|
486
|
+
function Fl(e) {
|
|
487
|
+
return Ul(e) || e === 95;
|
|
488
488
|
}
|
|
489
489
|
function ku(e) {
|
|
490
|
-
return
|
|
490
|
+
return Ul(e) || si(e) || e === 95;
|
|
491
491
|
}
|
|
492
492
|
function vu(e) {
|
|
493
493
|
var t;
|
|
@@ -574,12 +574,12 @@ function Jt(e) {
|
|
|
574
574
|
return e >= 0 && e <= 55295 || e >= 57344 && e <= 1114111;
|
|
575
575
|
}
|
|
576
576
|
function Nn(e, t) {
|
|
577
|
-
return Kl(e.charCodeAt(t)) &&
|
|
577
|
+
return Kl(e.charCodeAt(t)) && Ml(e.charCodeAt(t + 1));
|
|
578
578
|
}
|
|
579
579
|
function Kl(e) {
|
|
580
580
|
return e >= 55296 && e <= 56319;
|
|
581
581
|
}
|
|
582
|
-
function
|
|
582
|
+
function Ml(e) {
|
|
583
583
|
return e >= 56320 && e <= 57343;
|
|
584
584
|
}
|
|
585
585
|
function lt(e, t) {
|
|
@@ -647,12 +647,12 @@ function Lu(e, t) {
|
|
|
647
647
|
case 125:
|
|
648
648
|
return le(e, Z.BRACE_R, s, s + 1);
|
|
649
649
|
case 34:
|
|
650
|
-
return i.charCodeAt(s + 1) === 34 && i.charCodeAt(s + 2) === 34 ?
|
|
650
|
+
return i.charCodeAt(s + 1) === 34 && i.charCodeAt(s + 2) === 34 ? Ou(e, s) : Uu(e, s);
|
|
651
651
|
}
|
|
652
652
|
if (si(r) || r === 45)
|
|
653
653
|
return Yu(e, s, r);
|
|
654
|
-
if (
|
|
655
|
-
return
|
|
654
|
+
if (Fl(r))
|
|
655
|
+
return Eu(e, s);
|
|
656
656
|
throw ue(
|
|
657
657
|
e.source,
|
|
658
658
|
s,
|
|
@@ -698,7 +698,7 @@ function Yu(e, t, i) {
|
|
|
698
698
|
);
|
|
699
699
|
} else
|
|
700
700
|
s = Qn(e, s, r), r = n.charCodeAt(s);
|
|
701
|
-
if (r === 46 && (l = !0, r = n.charCodeAt(++s), s = Qn(e, s, r), r = n.charCodeAt(s)), (r === 69 || r === 101) && (l = !0, r = n.charCodeAt(++s), (r === 43 || r === 45) && (r = n.charCodeAt(++s)), s = Qn(e, s, r), r = n.charCodeAt(s)), r === 46 ||
|
|
701
|
+
if (r === 46 && (l = !0, r = n.charCodeAt(++s), s = Qn(e, s, r), r = n.charCodeAt(s)), (r === 69 || r === 101) && (l = !0, r = n.charCodeAt(++s), (r === 43 || r === 45) && (r = n.charCodeAt(++s)), s = Qn(e, s, r), r = n.charCodeAt(s)), r === 46 || Fl(r))
|
|
702
702
|
throw ue(
|
|
703
703
|
e.source,
|
|
704
704
|
s,
|
|
@@ -731,7 +731,7 @@ function Qn(e, t, i) {
|
|
|
731
731
|
++s;
|
|
732
732
|
return s;
|
|
733
733
|
}
|
|
734
|
-
function
|
|
734
|
+
function Uu(e, t) {
|
|
735
735
|
const i = e.source.body, n = i.length;
|
|
736
736
|
let s = t + 1, r = s, l = "";
|
|
737
737
|
for (; s < n; ) {
|
|
@@ -740,7 +740,7 @@ function Fu(e, t) {
|
|
|
740
740
|
return l += i.slice(r, s), le(e, Z.STRING, t, s + 1, l);
|
|
741
741
|
if (o === 92) {
|
|
742
742
|
l += i.slice(r, s);
|
|
743
|
-
const a = i.charCodeAt(s + 1) === 117 ? i.charCodeAt(s + 2) === 123 ?
|
|
743
|
+
const a = i.charCodeAt(s + 1) === 117 ? i.charCodeAt(s + 2) === 123 ? Fu(e, s) : Ku(e, s) : Mu(e, s);
|
|
744
744
|
l += a.value, s += a.size, r = s;
|
|
745
745
|
continue;
|
|
746
746
|
}
|
|
@@ -762,7 +762,7 @@ function Fu(e, t) {
|
|
|
762
762
|
}
|
|
763
763
|
throw ue(e.source, s, "Unterminated string.");
|
|
764
764
|
}
|
|
765
|
-
function
|
|
765
|
+
function Fu(e, t) {
|
|
766
766
|
const i = e.source.body;
|
|
767
767
|
let n = 0, s = 3;
|
|
768
768
|
for (; s < 12; ) {
|
|
@@ -796,7 +796,7 @@ function Ku(e, t) {
|
|
|
796
796
|
};
|
|
797
797
|
if (Kl(n) && i.charCodeAt(t + 6) === 92 && i.charCodeAt(t + 7) === 117) {
|
|
798
798
|
const s = Ar(i, t + 8);
|
|
799
|
-
if (
|
|
799
|
+
if (Ml(s))
|
|
800
800
|
return {
|
|
801
801
|
value: String.fromCodePoint(n, s),
|
|
802
802
|
size: 12
|
|
@@ -814,7 +814,7 @@ function Ar(e, t) {
|
|
|
814
814
|
function Dt(e) {
|
|
815
815
|
return e >= 48 && e <= 57 ? e - 48 : e >= 65 && e <= 70 ? e - 55 : e >= 97 && e <= 102 ? e - 87 : -1;
|
|
816
816
|
}
|
|
817
|
-
function
|
|
817
|
+
function Mu(e, t) {
|
|
818
818
|
const i = e.source.body;
|
|
819
819
|
switch (i.charCodeAt(t + 1)) {
|
|
820
820
|
case 34:
|
|
@@ -868,7 +868,7 @@ function Ou(e, t) {
|
|
|
868
868
|
)}".`
|
|
869
869
|
);
|
|
870
870
|
}
|
|
871
|
-
function
|
|
871
|
+
function Ou(e, t) {
|
|
872
872
|
const i = e.source.body, n = i.length;
|
|
873
873
|
let s = e.lineStart, r = t + 3, l = r, o = "";
|
|
874
874
|
const a = [];
|
|
@@ -911,7 +911,7 @@ function Eu(e, t) {
|
|
|
911
911
|
}
|
|
912
912
|
throw ue(e.source, r, "Unterminated string.");
|
|
913
913
|
}
|
|
914
|
-
function
|
|
914
|
+
function Eu(e, t) {
|
|
915
915
|
const i = e.source.body, n = i.length;
|
|
916
916
|
let s = t + 1;
|
|
917
917
|
for (; s < n; ) {
|
|
@@ -929,7 +929,7 @@ function Mu(e, t) {
|
|
|
929
929
|
i.slice(t, s)
|
|
930
930
|
);
|
|
931
931
|
}
|
|
932
|
-
const
|
|
932
|
+
const Hu = 10, Ol = 2;
|
|
933
933
|
function hr(e) {
|
|
934
934
|
return Ln(e, []);
|
|
935
935
|
}
|
|
@@ -940,12 +940,12 @@ function Ln(e, t) {
|
|
|
940
940
|
case "function":
|
|
941
941
|
return e.name ? `[function ${e.name}]` : "[function]";
|
|
942
942
|
case "object":
|
|
943
|
-
return
|
|
943
|
+
return zu(e, t);
|
|
944
944
|
default:
|
|
945
945
|
return String(e);
|
|
946
946
|
}
|
|
947
947
|
}
|
|
948
|
-
function
|
|
948
|
+
function zu(e, t) {
|
|
949
949
|
if (e === null)
|
|
950
950
|
return "null";
|
|
951
951
|
if (t.includes(e))
|
|
@@ -964,16 +964,16 @@ function Pu(e) {
|
|
|
964
964
|
}
|
|
965
965
|
function Bu(e, t) {
|
|
966
966
|
const i = Object.entries(e);
|
|
967
|
-
return i.length === 0 ? "{}" : t.length >
|
|
967
|
+
return i.length === 0 ? "{}" : t.length > Ol ? "[" + ju(e) + "]" : "{ " + i.map(
|
|
968
968
|
([n, s]) => n + ": " + Ln(s, t)
|
|
969
969
|
).join(", ") + " }";
|
|
970
970
|
}
|
|
971
971
|
function Du(e, t) {
|
|
972
972
|
if (e.length === 0)
|
|
973
973
|
return "[]";
|
|
974
|
-
if (t.length >
|
|
974
|
+
if (t.length > Ol)
|
|
975
975
|
return "[Array]";
|
|
976
|
-
const i = Math.min(
|
|
976
|
+
const i = Math.min(Hu, e.length), n = e.length - i, s = [];
|
|
977
977
|
for (let r = 0; r < i; ++r)
|
|
978
978
|
s.push(Ln(e[r], t));
|
|
979
979
|
return n === 1 ? s.push("... 1 more item") : n > 1 && s.push(`... ${n} more items`), "[" + s.join(", ") + "]";
|
|
@@ -1021,7 +1021,7 @@ spurious results.`);
|
|
|
1021
1021
|
return !1;
|
|
1022
1022
|
}
|
|
1023
1023
|
);
|
|
1024
|
-
let
|
|
1024
|
+
let El = class {
|
|
1025
1025
|
constructor(t, i = "GraphQL request", n = {
|
|
1026
1026
|
line: 1,
|
|
1027
1027
|
column: 1
|
|
@@ -1039,9 +1039,9 @@ let Ml = class {
|
|
|
1039
1039
|
}
|
|
1040
1040
|
};
|
|
1041
1041
|
function _u(e) {
|
|
1042
|
-
return Au(e,
|
|
1042
|
+
return Au(e, El);
|
|
1043
1043
|
}
|
|
1044
|
-
function
|
|
1044
|
+
function Hl(e, t) {
|
|
1045
1045
|
const i = new $u(e, t), n = i.parseDocument();
|
|
1046
1046
|
return Object.defineProperty(n, "tokenCount", {
|
|
1047
1047
|
enumerable: !1,
|
|
@@ -1050,7 +1050,7 @@ function zl(e, t) {
|
|
|
1050
1050
|
}
|
|
1051
1051
|
let $u = class {
|
|
1052
1052
|
constructor(t, i = {}) {
|
|
1053
|
-
const n = _u(t) ? t : new
|
|
1053
|
+
const n = _u(t) ? t : new El(t);
|
|
1054
1054
|
this._lexer = new Tu(n), this._options = i, this._tokenCounter = 0;
|
|
1055
1055
|
}
|
|
1056
1056
|
get tokenCount() {
|
|
@@ -2021,7 +2021,7 @@ let $u = class {
|
|
|
2021
2021
|
* given parsed object.
|
|
2022
2022
|
*/
|
|
2023
2023
|
node(t, i) {
|
|
2024
|
-
return this._options.noLocation !== !0 && (i.loc = new
|
|
2024
|
+
return this._options.noLocation !== !0 && (i.loc = new Cu(
|
|
2025
2025
|
t,
|
|
2026
2026
|
this._lexer.lastToken,
|
|
2027
2027
|
this._lexer.source
|
|
@@ -2044,7 +2044,7 @@ let $u = class {
|
|
|
2044
2044
|
throw ue(
|
|
2045
2045
|
this._lexer.source,
|
|
2046
2046
|
i.start,
|
|
2047
|
-
`Expected ${
|
|
2047
|
+
`Expected ${zl(t)}, found ${Vi(i)}.`
|
|
2048
2048
|
);
|
|
2049
2049
|
}
|
|
2050
2050
|
/**
|
|
@@ -2154,9 +2154,9 @@ let $u = class {
|
|
|
2154
2154
|
};
|
|
2155
2155
|
function Vi(e) {
|
|
2156
2156
|
const t = e.value;
|
|
2157
|
-
return
|
|
2157
|
+
return zl(e.kind) + (t != null ? ` "${t}"` : "");
|
|
2158
2158
|
}
|
|
2159
|
-
function
|
|
2159
|
+
function zl(e) {
|
|
2160
2160
|
return Nu(e) ? `"${e}"` : e;
|
|
2161
2161
|
}
|
|
2162
2162
|
function qu(e) {
|
|
@@ -2362,27 +2362,27 @@ function sd(e, t, i = Yl) {
|
|
|
2362
2362
|
continue;
|
|
2363
2363
|
p.push(u);
|
|
2364
2364
|
}
|
|
2365
|
-
let
|
|
2365
|
+
let C;
|
|
2366
2366
|
if (!Array.isArray(c)) {
|
|
2367
2367
|
var b, d;
|
|
2368
2368
|
Qr(c) || Qi(!1, `Invalid AST Node: ${hr(c)}.`);
|
|
2369
2369
|
const X = I ? (b = n.get(c.kind)) === null || b === void 0 ? void 0 : b.leave : (d = n.get(c.kind)) === null || d === void 0 ? void 0 : d.enter;
|
|
2370
|
-
if (
|
|
2370
|
+
if (C = X?.call(t, c, u, h, p, m), C === nd)
|
|
2371
2371
|
break;
|
|
2372
|
-
if (
|
|
2372
|
+
if (C === !1) {
|
|
2373
2373
|
if (!I) {
|
|
2374
2374
|
p.pop();
|
|
2375
2375
|
continue;
|
|
2376
2376
|
}
|
|
2377
|
-
} else if (
|
|
2378
|
-
if (Qr(
|
|
2379
|
-
c =
|
|
2377
|
+
} else if (C !== void 0 && (a.push([u, C]), !I))
|
|
2378
|
+
if (Qr(C))
|
|
2379
|
+
c = C;
|
|
2380
2380
|
else {
|
|
2381
2381
|
p.pop();
|
|
2382
2382
|
continue;
|
|
2383
2383
|
}
|
|
2384
2384
|
}
|
|
2385
|
-
if (
|
|
2385
|
+
if (C === void 0 && V && a.push([u, c]), I)
|
|
2386
2386
|
p.pop();
|
|
2387
2387
|
else {
|
|
2388
2388
|
var S;
|
|
@@ -2425,7 +2425,7 @@ const od = 80, ld = {
|
|
|
2425
2425
|
},
|
|
2426
2426
|
OperationDefinition: {
|
|
2427
2427
|
leave(e) {
|
|
2428
|
-
const t =
|
|
2428
|
+
const t = H("(", x(e.variableDefinitions, ", "), ")"), i = x(
|
|
2429
2429
|
[
|
|
2430
2430
|
e.operation,
|
|
2431
2431
|
x([e.name, t]),
|
|
@@ -2437,16 +2437,16 @@ const od = 80, ld = {
|
|
|
2437
2437
|
}
|
|
2438
2438
|
},
|
|
2439
2439
|
VariableDefinition: {
|
|
2440
|
-
leave: ({ variable: e, type: t, defaultValue: i, directives: n }) => e + ": " + t +
|
|
2440
|
+
leave: ({ variable: e, type: t, defaultValue: i, directives: n }) => e + ": " + t + H(" = ", i) + H(" ", x(n, " "))
|
|
2441
2441
|
},
|
|
2442
2442
|
SelectionSet: {
|
|
2443
2443
|
leave: ({ selections: e }) => xe(e)
|
|
2444
2444
|
},
|
|
2445
2445
|
Field: {
|
|
2446
2446
|
leave({ alias: e, name: t, arguments: i, directives: n, selectionSet: s }) {
|
|
2447
|
-
const r =
|
|
2448
|
-
let l = r +
|
|
2449
|
-
return l.length > od && (l = r +
|
|
2447
|
+
const r = H("", e, ": ") + t;
|
|
2448
|
+
let l = r + H("(", x(i, ", "), ")");
|
|
2449
|
+
return l.length > od && (l = r + H(`(
|
|
2450
2450
|
`, Ai(x(i, `
|
|
2451
2451
|
`)), `
|
|
2452
2452
|
)`)), x([l, x(n, " "), s], " ");
|
|
@@ -2457,13 +2457,13 @@ const od = 80, ld = {
|
|
|
2457
2457
|
},
|
|
2458
2458
|
// Fragments
|
|
2459
2459
|
FragmentSpread: {
|
|
2460
|
-
leave: ({ name: e, directives: t }) => "..." + e +
|
|
2460
|
+
leave: ({ name: e, directives: t }) => "..." + e + H(" ", x(t, " "))
|
|
2461
2461
|
},
|
|
2462
2462
|
InlineFragment: {
|
|
2463
2463
|
leave: ({ typeCondition: e, directives: t, selectionSet: i }) => x(
|
|
2464
2464
|
[
|
|
2465
2465
|
"...",
|
|
2466
|
-
|
|
2466
|
+
H("on ", e),
|
|
2467
2467
|
x(t, " "),
|
|
2468
2468
|
i
|
|
2469
2469
|
],
|
|
@@ -2473,7 +2473,7 @@ const od = 80, ld = {
|
|
|
2473
2473
|
FragmentDefinition: {
|
|
2474
2474
|
leave: ({ name: e, typeCondition: t, variableDefinitions: i, directives: n, selectionSet: s }) => (
|
|
2475
2475
|
// or removed in the future.
|
|
2476
|
-
`fragment ${e}${
|
|
2476
|
+
`fragment ${e}${H("(", x(i, ", "), ")")} on ${t} ${H("", x(n, " "), " ")}` + s
|
|
2477
2477
|
)
|
|
2478
2478
|
},
|
|
2479
2479
|
// Value
|
|
@@ -2506,7 +2506,7 @@ const od = 80, ld = {
|
|
|
2506
2506
|
},
|
|
2507
2507
|
// Directive
|
|
2508
2508
|
Directive: {
|
|
2509
|
-
leave: ({ name: e, arguments: t }) => "@" + e +
|
|
2509
|
+
leave: ({ name: e, arguments: t }) => "@" + e + H("(", x(t, ", "), ")")
|
|
2510
2510
|
},
|
|
2511
2511
|
// Type
|
|
2512
2512
|
NamedType: {
|
|
@@ -2520,23 +2520,23 @@ const od = 80, ld = {
|
|
|
2520
2520
|
},
|
|
2521
2521
|
// Type System Definitions
|
|
2522
2522
|
SchemaDefinition: {
|
|
2523
|
-
leave: ({ description: e, directives: t, operationTypes: i }) =>
|
|
2523
|
+
leave: ({ description: e, directives: t, operationTypes: i }) => H("", e, `
|
|
2524
2524
|
`) + x(["schema", x(t, " "), xe(i)], " ")
|
|
2525
2525
|
},
|
|
2526
2526
|
OperationTypeDefinition: {
|
|
2527
2527
|
leave: ({ operation: e, type: t }) => e + ": " + t
|
|
2528
2528
|
},
|
|
2529
2529
|
ScalarTypeDefinition: {
|
|
2530
|
-
leave: ({ description: e, name: t, directives: i }) =>
|
|
2530
|
+
leave: ({ description: e, name: t, directives: i }) => H("", e, `
|
|
2531
2531
|
`) + x(["scalar", t, x(i, " ")], " ")
|
|
2532
2532
|
},
|
|
2533
2533
|
ObjectTypeDefinition: {
|
|
2534
|
-
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) =>
|
|
2534
|
+
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => H("", e, `
|
|
2535
2535
|
`) + x(
|
|
2536
2536
|
[
|
|
2537
2537
|
"type",
|
|
2538
2538
|
t,
|
|
2539
|
-
|
|
2539
|
+
H("implements ", x(i, " & ")),
|
|
2540
2540
|
x(n, " "),
|
|
2541
2541
|
xe(s)
|
|
2542
2542
|
],
|
|
@@ -2544,26 +2544,26 @@ const od = 80, ld = {
|
|
|
2544
2544
|
)
|
|
2545
2545
|
},
|
|
2546
2546
|
FieldDefinition: {
|
|
2547
|
-
leave: ({ description: e, name: t, arguments: i, type: n, directives: s }) =>
|
|
2548
|
-
`) + t + (_r(i) ?
|
|
2547
|
+
leave: ({ description: e, name: t, arguments: i, type: n, directives: s }) => H("", e, `
|
|
2548
|
+
`) + t + (_r(i) ? H(`(
|
|
2549
2549
|
`, Ai(x(i, `
|
|
2550
2550
|
`)), `
|
|
2551
|
-
)`) :
|
|
2551
|
+
)`) : H("(", x(i, ", "), ")")) + ": " + n + H(" ", x(s, " "))
|
|
2552
2552
|
},
|
|
2553
2553
|
InputValueDefinition: {
|
|
2554
|
-
leave: ({ description: e, name: t, type: i, defaultValue: n, directives: s }) =>
|
|
2554
|
+
leave: ({ description: e, name: t, type: i, defaultValue: n, directives: s }) => H("", e, `
|
|
2555
2555
|
`) + x(
|
|
2556
|
-
[t + ": " + i,
|
|
2556
|
+
[t + ": " + i, H("= ", n), x(s, " ")],
|
|
2557
2557
|
" "
|
|
2558
2558
|
)
|
|
2559
2559
|
},
|
|
2560
2560
|
InterfaceTypeDefinition: {
|
|
2561
|
-
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) =>
|
|
2561
|
+
leave: ({ description: e, name: t, interfaces: i, directives: n, fields: s }) => H("", e, `
|
|
2562
2562
|
`) + x(
|
|
2563
2563
|
[
|
|
2564
2564
|
"interface",
|
|
2565
2565
|
t,
|
|
2566
|
-
|
|
2566
|
+
H("implements ", x(i, " & ")),
|
|
2567
2567
|
x(n, " "),
|
|
2568
2568
|
xe(s)
|
|
2569
2569
|
],
|
|
@@ -2571,30 +2571,30 @@ const od = 80, ld = {
|
|
|
2571
2571
|
)
|
|
2572
2572
|
},
|
|
2573
2573
|
UnionTypeDefinition: {
|
|
2574
|
-
leave: ({ description: e, name: t, directives: i, types: n }) =>
|
|
2574
|
+
leave: ({ description: e, name: t, directives: i, types: n }) => H("", e, `
|
|
2575
2575
|
`) + x(
|
|
2576
|
-
["union", t, x(i, " "),
|
|
2576
|
+
["union", t, x(i, " "), H("= ", x(n, " | "))],
|
|
2577
2577
|
" "
|
|
2578
2578
|
)
|
|
2579
2579
|
},
|
|
2580
2580
|
EnumTypeDefinition: {
|
|
2581
|
-
leave: ({ description: e, name: t, directives: i, values: n }) =>
|
|
2581
|
+
leave: ({ description: e, name: t, directives: i, values: n }) => H("", e, `
|
|
2582
2582
|
`) + x(["enum", t, x(i, " "), xe(n)], " ")
|
|
2583
2583
|
},
|
|
2584
2584
|
EnumValueDefinition: {
|
|
2585
|
-
leave: ({ description: e, name: t, directives: i }) =>
|
|
2585
|
+
leave: ({ description: e, name: t, directives: i }) => H("", e, `
|
|
2586
2586
|
`) + x([t, x(i, " ")], " ")
|
|
2587
2587
|
},
|
|
2588
2588
|
InputObjectTypeDefinition: {
|
|
2589
|
-
leave: ({ description: e, name: t, directives: i, fields: n }) =>
|
|
2589
|
+
leave: ({ description: e, name: t, directives: i, fields: n }) => H("", e, `
|
|
2590
2590
|
`) + x(["input", t, x(i, " "), xe(n)], " ")
|
|
2591
2591
|
},
|
|
2592
2592
|
DirectiveDefinition: {
|
|
2593
|
-
leave: ({ description: e, name: t, arguments: i, repeatable: n, locations: s }) =>
|
|
2594
|
-
`) + "directive @" + t + (_r(i) ?
|
|
2593
|
+
leave: ({ description: e, name: t, arguments: i, repeatable: n, locations: s }) => H("", e, `
|
|
2594
|
+
`) + "directive @" + t + (_r(i) ? H(`(
|
|
2595
2595
|
`, Ai(x(i, `
|
|
2596
2596
|
`)), `
|
|
2597
|
-
)`) :
|
|
2597
|
+
)`) : H("(", x(i, ", "), ")")) + (n ? " repeatable" : "") + " on " + x(s, " | ")
|
|
2598
2598
|
},
|
|
2599
2599
|
SchemaExtension: {
|
|
2600
2600
|
leave: ({ directives: e, operationTypes: t }) => x(
|
|
@@ -2610,7 +2610,7 @@ const od = 80, ld = {
|
|
|
2610
2610
|
[
|
|
2611
2611
|
"extend type",
|
|
2612
2612
|
e,
|
|
2613
|
-
|
|
2613
|
+
H("implements ", x(t, " & ")),
|
|
2614
2614
|
x(i, " "),
|
|
2615
2615
|
xe(n)
|
|
2616
2616
|
],
|
|
@@ -2622,7 +2622,7 @@ const od = 80, ld = {
|
|
|
2622
2622
|
[
|
|
2623
2623
|
"extend interface",
|
|
2624
2624
|
e,
|
|
2625
|
-
|
|
2625
|
+
H("implements ", x(t, " & ")),
|
|
2626
2626
|
x(i, " "),
|
|
2627
2627
|
xe(n)
|
|
2628
2628
|
],
|
|
@@ -2635,7 +2635,7 @@ const od = 80, ld = {
|
|
|
2635
2635
|
"extend union",
|
|
2636
2636
|
e,
|
|
2637
2637
|
x(t, " "),
|
|
2638
|
-
|
|
2638
|
+
H("= ", x(i, " | "))
|
|
2639
2639
|
],
|
|
2640
2640
|
" "
|
|
2641
2641
|
)
|
|
@@ -2652,16 +2652,16 @@ function x(e, t = "") {
|
|
|
2652
2652
|
return (i = e?.filter((n) => n).join(t)) !== null && i !== void 0 ? i : "";
|
|
2653
2653
|
}
|
|
2654
2654
|
function xe(e) {
|
|
2655
|
-
return
|
|
2655
|
+
return H(`{
|
|
2656
2656
|
`, Ai(x(e, `
|
|
2657
2657
|
`)), `
|
|
2658
2658
|
}`);
|
|
2659
2659
|
}
|
|
2660
|
-
function
|
|
2660
|
+
function H(e, t, i = "") {
|
|
2661
2661
|
return t != null && t !== "" ? e + t + i : "";
|
|
2662
2662
|
}
|
|
2663
2663
|
function Ai(e) {
|
|
2664
|
-
return
|
|
2664
|
+
return H(" ", e.replace(/\n/g, `
|
|
2665
2665
|
`));
|
|
2666
2666
|
}
|
|
2667
2667
|
function _r(e) {
|
|
@@ -2697,7 +2697,7 @@ const pr = JSON, ad = (e) => e.toUpperCase(), cd = (e) => {
|
|
|
2697
2697
|
if (typeof e == "string") {
|
|
2698
2698
|
let i;
|
|
2699
2699
|
try {
|
|
2700
|
-
const n =
|
|
2700
|
+
const n = Hl(e);
|
|
2701
2701
|
i = $r(n);
|
|
2702
2702
|
} catch {
|
|
2703
2703
|
}
|
|
@@ -2844,9 +2844,9 @@ var Ss = { exports: {} };
|
|
|
2844
2844
|
var y = new FileReader(), T = S(y);
|
|
2845
2845
|
return y.readAsText(f), T;
|
|
2846
2846
|
}
|
|
2847
|
-
function
|
|
2848
|
-
for (var y = new Uint8Array(f), T = new Array(y.length),
|
|
2849
|
-
T[
|
|
2847
|
+
function C(f) {
|
|
2848
|
+
for (var y = new Uint8Array(f), T = new Array(y.length), U = 0; U < y.length; U++)
|
|
2849
|
+
T[U] = String.fromCharCode(y[U]);
|
|
2850
2850
|
return T.join("");
|
|
2851
2851
|
}
|
|
2852
2852
|
function X(f) {
|
|
@@ -2878,7 +2878,7 @@ var Ss = { exports: {} };
|
|
|
2878
2878
|
if (this._bodyBlob)
|
|
2879
2879
|
return V(this._bodyBlob);
|
|
2880
2880
|
if (this._bodyArrayBuffer)
|
|
2881
|
-
return Promise.resolve(
|
|
2881
|
+
return Promise.resolve(C(this._bodyArrayBuffer));
|
|
2882
2882
|
if (this._bodyFormData)
|
|
2883
2883
|
throw new Error("could not read FormData body as text");
|
|
2884
2884
|
return Promise.resolve(this._bodyText);
|
|
@@ -2913,17 +2913,17 @@ var Ss = { exports: {} };
|
|
|
2913
2913
|
var y = new FormData();
|
|
2914
2914
|
return f.trim().split("&").forEach(function(T) {
|
|
2915
2915
|
if (T) {
|
|
2916
|
-
var
|
|
2917
|
-
y.append(decodeURIComponent(
|
|
2916
|
+
var U = T.split("="), F = U.shift().replace(/\+/g, " "), N = U.join("=").replace(/\+/g, " ");
|
|
2917
|
+
y.append(decodeURIComponent(F), decodeURIComponent(N));
|
|
2918
2918
|
}
|
|
2919
2919
|
}), y;
|
|
2920
2920
|
}
|
|
2921
2921
|
function R(f) {
|
|
2922
2922
|
var y = new b(), T = f.replace(/\r?\n[\t ]+/g, " ");
|
|
2923
|
-
return T.split(/\r?\n/).forEach(function(
|
|
2924
|
-
var
|
|
2923
|
+
return T.split(/\r?\n/).forEach(function(U) {
|
|
2924
|
+
var F = U.split(":"), N = F.shift().trim();
|
|
2925
2925
|
if (N) {
|
|
2926
|
-
var A =
|
|
2926
|
+
var A = F.join(":").trim();
|
|
2927
2927
|
y.append(N, A);
|
|
2928
2928
|
}
|
|
2929
2929
|
}), y;
|
|
@@ -2943,9 +2943,9 @@ var Ss = { exports: {} };
|
|
|
2943
2943
|
var f = new J(null, { status: 0, statusText: "" });
|
|
2944
2944
|
return f.type = "error", f;
|
|
2945
2945
|
};
|
|
2946
|
-
var
|
|
2946
|
+
var E = [301, 302, 303, 307, 308];
|
|
2947
2947
|
J.redirect = function(f, y) {
|
|
2948
|
-
if (
|
|
2948
|
+
if (E.indexOf(y) === -1)
|
|
2949
2949
|
throw new RangeError("Invalid status code");
|
|
2950
2950
|
return new J(null, { status: y, headers: { location: f } });
|
|
2951
2951
|
}, l.DOMException = r.DOMException;
|
|
@@ -2954,15 +2954,15 @@ var Ss = { exports: {} };
|
|
|
2954
2954
|
} catch {
|
|
2955
2955
|
l.DOMException = function(y, T) {
|
|
2956
2956
|
this.message = y, this.name = T;
|
|
2957
|
-
var
|
|
2958
|
-
this.stack =
|
|
2957
|
+
var U = Error(y);
|
|
2958
|
+
this.stack = U.stack;
|
|
2959
2959
|
}, l.DOMException.prototype = Object.create(Error.prototype), l.DOMException.prototype.constructor = l.DOMException;
|
|
2960
2960
|
}
|
|
2961
2961
|
function $(f, y) {
|
|
2962
|
-
return new Promise(function(T,
|
|
2963
|
-
var
|
|
2964
|
-
if (
|
|
2965
|
-
return
|
|
2962
|
+
return new Promise(function(T, U) {
|
|
2963
|
+
var F = new w(f, y);
|
|
2964
|
+
if (F.signal && F.signal.aborted)
|
|
2965
|
+
return U(new l.DOMException("Aborted", "AbortError"));
|
|
2966
2966
|
var N = new XMLHttpRequest();
|
|
2967
2967
|
function A() {
|
|
2968
2968
|
N.abort();
|
|
@@ -2977,16 +2977,16 @@ var Ss = { exports: {} };
|
|
|
2977
2977
|
var de = "response" in N ? N.response : N.responseText;
|
|
2978
2978
|
T(new J(de, D));
|
|
2979
2979
|
}, N.onerror = function() {
|
|
2980
|
-
|
|
2980
|
+
U(new TypeError("Network request failed"));
|
|
2981
2981
|
}, N.ontimeout = function() {
|
|
2982
|
-
|
|
2982
|
+
U(new TypeError("Network request failed"));
|
|
2983
2983
|
}, N.onabort = function() {
|
|
2984
|
-
|
|
2985
|
-
}, N.open(
|
|
2984
|
+
U(new l.DOMException("Aborted", "AbortError"));
|
|
2985
|
+
}, N.open(F.method, F.url, !0), F.credentials === "include" ? N.withCredentials = !0 : F.credentials === "omit" && (N.withCredentials = !1), "responseType" in N && o.blob && (N.responseType = "blob"), F.headers.forEach(function(D, de) {
|
|
2986
2986
|
N.setRequestHeader(de, D);
|
|
2987
|
-
}),
|
|
2988
|
-
N.readyState === 4 &&
|
|
2989
|
-
}), N.send(typeof
|
|
2987
|
+
}), F.signal && (F.signal.addEventListener("abort", A), N.onreadystatechange = function() {
|
|
2988
|
+
N.readyState === 4 && F.signal.removeEventListener("abort", A);
|
|
2989
|
+
}), N.send(typeof F._bodyInit > "u" ? null : F._bodyInit);
|
|
2990
2990
|
});
|
|
2991
2991
|
}
|
|
2992
2992
|
return $.polyfill = !0, r.fetch || (r.fetch = $, r.Headers = b, r.Request = w, r.Response = J), l.Headers = b, l.Request = w, l.Response = J, l.fetch = $, Object.defineProperty(l, "__esModule", { value: !0 }), l;
|
|
@@ -3016,7 +3016,7 @@ const _i = /* @__PURE__ */ mr(cn), md = /* @__PURE__ */ Zu({
|
|
|
3016
3016
|
variables: t.variables ? t.jsonSerializer.stringify(t.variables[r]) : void 0
|
|
3017
3017
|
}), n), []);
|
|
3018
3018
|
return `query=${encodeURIComponent(t.jsonSerializer.stringify(i))}`;
|
|
3019
|
-
}, fd = (e) => (t) =>
|
|
3019
|
+
}, fd = (e) => (t) => Wt(void 0, null, function* () {
|
|
3020
3020
|
var i;
|
|
3021
3021
|
const { url: n, query: s, variables: r, operationName: l, fetch: o, fetchOptions: a, middleware: c } = t, u = Q({}, t.headers);
|
|
3022
3022
|
let h = "", p;
|
|
@@ -3040,7 +3040,7 @@ const _i = /* @__PURE__ */ mr(cn), md = /* @__PURE__ */ Zu({
|
|
|
3040
3040
|
});
|
|
3041
3041
|
let yd = class {
|
|
3042
3042
|
constructor(t, i = {}) {
|
|
3043
|
-
this.url = t, this.requestConfig = i, this.rawRequest = (...n) =>
|
|
3043
|
+
this.url = t, this.requestConfig = i, this.rawRequest = (...n) => Wt(this, null, function* () {
|
|
3044
3044
|
const [s, r, l] = n, o = dd(s, r, l), a = this.requestConfig, { headers: c, fetch: u = _i, method: h = "POST", requestMiddleware: p, responseMiddleware: m } = a, b = Qt(a, ["headers", "fetch", "method", "requestMiddleware", "responseMiddleware"]), { url: d } = this;
|
|
3045
3045
|
o.signal !== void 0 && (b.signal = o.signal);
|
|
3046
3046
|
const { operationName: S } = An(o.query);
|
|
@@ -3060,7 +3060,7 @@ let yd = class {
|
|
|
3060
3060
|
});
|
|
3061
3061
|
}
|
|
3062
3062
|
request(t, ...i) {
|
|
3063
|
-
return
|
|
3063
|
+
return Wt(this, null, function* () {
|
|
3064
3064
|
const [n, s] = i, r = ud(t, n, s), l = this.requestConfig, { headers: o, fetch: a = _i, method: c = "POST", requestMiddleware: u, responseMiddleware: h } = l, p = Qt(l, ["headers", "fetch", "method", "requestMiddleware", "responseMiddleware"]), { url: m } = this;
|
|
3065
3065
|
r.signal !== void 0 && (p.signal = r.signal);
|
|
3066
3066
|
const { query: b, operationName: d } = An(r.document);
|
|
@@ -3117,7 +3117,7 @@ let yd = class {
|
|
|
3117
3117
|
return this.url = t, this;
|
|
3118
3118
|
}
|
|
3119
3119
|
};
|
|
3120
|
-
const _n = (e) =>
|
|
3120
|
+
const _n = (e) => Wt(void 0, null, function* () {
|
|
3121
3121
|
var t, i;
|
|
3122
3122
|
const { query: n, variables: s, fetchOptions: r } = e, l = fd(ad((t = e.method) != null ? t : "post")), o = Array.isArray(e.query), a = yield l(e), c = yield Zd(a, (i = r.jsonSerializer) != null ? i : pr), u = Array.isArray(c) ? !c.some(({ data: p }) => !p) : !!c.data, h = Array.isArray(c) || !c.errors || Array.isArray(c.errors) && !c.errors.length || r.errorPolicy === "all" || r.errorPolicy === "ignore";
|
|
3123
3123
|
if (a.ok && h && u) {
|
|
@@ -3144,7 +3144,7 @@ const _n = (e) => Ct(void 0, null, function* () {
|
|
|
3144
3144
|
throw new Error("Cannot create request body with given variable type, array expected");
|
|
3145
3145
|
const r = e.reduce((l, o, a) => (l.push({ query: o, variables: t ? t[a] : void 0 }), l), []);
|
|
3146
3146
|
return s.stringify(r);
|
|
3147
|
-
}, Zd = (e, t) =>
|
|
3147
|
+
}, Zd = (e, t) => Wt(void 0, null, function* () {
|
|
3148
3148
|
let i;
|
|
3149
3149
|
return e.headers.forEach((n, s) => {
|
|
3150
3150
|
s.toLowerCase() === "content-type" && (i = n);
|
|
@@ -3209,10 +3209,10 @@ function Xd(e) {
|
|
|
3209
3209
|
var i = e.loc;
|
|
3210
3210
|
return i && (delete i.startToken, delete i.endToken), e;
|
|
3211
3211
|
}
|
|
3212
|
-
function
|
|
3212
|
+
function Wd(e) {
|
|
3213
3213
|
var t = Dl(e);
|
|
3214
3214
|
if (!$i.has(t)) {
|
|
3215
|
-
var i =
|
|
3215
|
+
var i = Hl(e, {
|
|
3216
3216
|
experimentalFragmentVariables: dn,
|
|
3217
3217
|
allowLegacyFragmentVariables: dn
|
|
3218
3218
|
});
|
|
@@ -3222,16 +3222,16 @@ function Cd(e) {
|
|
|
3222
3222
|
}
|
|
3223
3223
|
return $i.get(t);
|
|
3224
3224
|
}
|
|
3225
|
-
function
|
|
3225
|
+
function Se(e) {
|
|
3226
3226
|
for (var t = [], i = 1; i < arguments.length; i++)
|
|
3227
3227
|
t[i - 1] = arguments[i];
|
|
3228
3228
|
typeof e == "string" && (e = [e]);
|
|
3229
3229
|
var n = e[0];
|
|
3230
3230
|
return t.forEach(function(s, r) {
|
|
3231
3231
|
s && s.kind === "Document" ? n += s.loc.source.body : n += s, n += e[r + 1];
|
|
3232
|
-
}),
|
|
3232
|
+
}), Wd(n);
|
|
3233
3233
|
}
|
|
3234
|
-
function
|
|
3234
|
+
function Cd() {
|
|
3235
3235
|
$i.clear(), Vs.clear();
|
|
3236
3236
|
}
|
|
3237
3237
|
function Rd() {
|
|
@@ -3243,23 +3243,23 @@ function kd() {
|
|
|
3243
3243
|
function vd() {
|
|
3244
3244
|
dn = !1;
|
|
3245
3245
|
}
|
|
3246
|
-
var
|
|
3247
|
-
gql:
|
|
3248
|
-
resetCaches:
|
|
3246
|
+
var Ft = {
|
|
3247
|
+
gql: Se,
|
|
3248
|
+
resetCaches: Cd,
|
|
3249
3249
|
disableFragmentWarnings: Rd,
|
|
3250
3250
|
enableExperimentalFragmentVariables: kd,
|
|
3251
3251
|
disableExperimentalFragmentVariables: vd
|
|
3252
3252
|
};
|
|
3253
3253
|
(function(e) {
|
|
3254
|
-
e.gql =
|
|
3255
|
-
})(
|
|
3256
|
-
|
|
3257
|
-
const jl =
|
|
3254
|
+
e.gql = Ft.gql, e.resetCaches = Ft.resetCaches, e.disableFragmentWarnings = Ft.disableFragmentWarnings, e.enableExperimentalFragmentVariables = Ft.enableExperimentalFragmentVariables, e.disableExperimentalFragmentVariables = Ft.disableExperimentalFragmentVariables;
|
|
3255
|
+
})(Se || (Se = {}));
|
|
3256
|
+
Se.default = Se;
|
|
3257
|
+
const jl = Se`
|
|
3258
3258
|
fragment MatchParts on MatchConfig {
|
|
3259
3259
|
regexValue
|
|
3260
3260
|
matchValue
|
|
3261
3261
|
}
|
|
3262
|
-
`, wd =
|
|
3262
|
+
`, wd = Se`
|
|
3263
3263
|
mutation PushPayload(
|
|
3264
3264
|
$session_secure_id: String!
|
|
3265
3265
|
$payload_id: ID!
|
|
@@ -3285,7 +3285,7 @@ const jl = Ie`
|
|
|
3285
3285
|
highlight_logs: $highlight_logs
|
|
3286
3286
|
)
|
|
3287
3287
|
}
|
|
3288
|
-
`, Ql =
|
|
3288
|
+
`, Ql = Se`
|
|
3289
3289
|
mutation PushSessionEvents(
|
|
3290
3290
|
$session_secure_id: String!
|
|
3291
3291
|
$payload_id: Int64ID!
|
|
@@ -3297,7 +3297,7 @@ const jl = Ie`
|
|
|
3297
3297
|
data: $data
|
|
3298
3298
|
)
|
|
3299
3299
|
}
|
|
3300
|
-
`, xd =
|
|
3300
|
+
`, xd = Se`
|
|
3301
3301
|
mutation identifySession(
|
|
3302
3302
|
$session_secure_id: String!
|
|
3303
3303
|
$user_identifier: String!
|
|
@@ -3309,7 +3309,7 @@ const jl = Ie`
|
|
|
3309
3309
|
user_object: $user_object
|
|
3310
3310
|
)
|
|
3311
3311
|
}
|
|
3312
|
-
`, Td =
|
|
3312
|
+
`, Td = Se`
|
|
3313
3313
|
mutation addSessionProperties(
|
|
3314
3314
|
$session_secure_id: String!
|
|
3315
3315
|
$properties_object: Any
|
|
@@ -3319,11 +3319,11 @@ const jl = Ie`
|
|
|
3319
3319
|
properties_object: $properties_object
|
|
3320
3320
|
)
|
|
3321
3321
|
}
|
|
3322
|
-
`, Nd =
|
|
3322
|
+
`, Nd = Se`
|
|
3323
3323
|
mutation pushMetrics($metrics: [MetricInput]!) {
|
|
3324
3324
|
pushMetrics(metrics: $metrics)
|
|
3325
3325
|
}
|
|
3326
|
-
`, Ld =
|
|
3326
|
+
`, Ld = Se`
|
|
3327
3327
|
mutation addSessionFeedback(
|
|
3328
3328
|
$session_secure_id: String!
|
|
3329
3329
|
$user_name: String
|
|
@@ -3339,7 +3339,7 @@ const jl = Ie`
|
|
|
3339
3339
|
timestamp: $timestamp
|
|
3340
3340
|
)
|
|
3341
3341
|
}
|
|
3342
|
-
`, Jd =
|
|
3342
|
+
`, Jd = Se`
|
|
3343
3343
|
mutation initializeSession(
|
|
3344
3344
|
$session_secure_id: String!
|
|
3345
3345
|
$session_key: String
|
|
@@ -3427,11 +3427,11 @@ const jl = Ie`
|
|
|
3427
3427
|
}
|
|
3428
3428
|
}
|
|
3429
3429
|
${jl}
|
|
3430
|
-
`, Yd =
|
|
3430
|
+
`, Yd = Se`
|
|
3431
3431
|
query Ignore($id: ID!) {
|
|
3432
3432
|
ignore(id: $id)
|
|
3433
3433
|
}
|
|
3434
|
-
`,
|
|
3434
|
+
`, Ud = Se`
|
|
3435
3435
|
query GetSamplingConfig($organization_verbose_id: String!) {
|
|
3436
3436
|
sampling(organization_verbose_id: $organization_verbose_id) {
|
|
3437
3437
|
spans {
|
|
@@ -3481,8 +3481,8 @@ const jl = Ie`
|
|
|
3481
3481
|
}
|
|
3482
3482
|
}
|
|
3483
3483
|
${jl}
|
|
3484
|
-
`,
|
|
3485
|
-
function Kd(e, t =
|
|
3484
|
+
`, Fd = (e, t, i, n) => e();
|
|
3485
|
+
function Kd(e, t = Fd) {
|
|
3486
3486
|
return {
|
|
3487
3487
|
PushPayload(i, n) {
|
|
3488
3488
|
return t(
|
|
@@ -3579,7 +3579,7 @@ function Kd(e, t = Ud) {
|
|
|
3579
3579
|
GetSamplingConfig(i, n) {
|
|
3580
3580
|
return t(
|
|
3581
3581
|
(s) => e.request(
|
|
3582
|
-
|
|
3582
|
+
Ud,
|
|
3583
3583
|
i,
|
|
3584
3584
|
Q(Q({}, n), s)
|
|
3585
3585
|
),
|
|
@@ -3590,12 +3590,12 @@ function Kd(e, t = Ud) {
|
|
|
3590
3590
|
}
|
|
3591
3591
|
};
|
|
3592
3592
|
}
|
|
3593
|
-
function
|
|
3593
|
+
function Md() {
|
|
3594
3594
|
var e = document.createElement("canvas");
|
|
3595
3595
|
return e.getContext && e.getContext("2d") ? e.toDataURL("image/webp").indexOf("data:image/webp") == 0 : !1;
|
|
3596
3596
|
}
|
|
3597
|
-
function
|
|
3598
|
-
return
|
|
3597
|
+
function Od() {
|
|
3598
|
+
return Md() ? {
|
|
3599
3599
|
type: "image/webp",
|
|
3600
3600
|
quality: 0.9
|
|
3601
3601
|
} : {
|
|
@@ -3603,7 +3603,7 @@ function Ed() {
|
|
|
3603
3603
|
quality: 0.6
|
|
3604
3604
|
};
|
|
3605
3605
|
}
|
|
3606
|
-
const
|
|
3606
|
+
const Ed = "telemetry.sdk.name", Hd = "telemetry.sdk.version", eo = 1e3, zd = 1e3 * 2, Pd = 4 * 60 * 60 * 1e3, br = 15 * 60 * 1e3, to = {
|
|
3607
3607
|
normal: {
|
|
3608
3608
|
bytes: 1e7,
|
|
3609
3609
|
time: 4 * 60 * 1e3
|
|
@@ -3687,8 +3687,8 @@ function Xs(e, t) {
|
|
|
3687
3687
|
}
|
|
3688
3688
|
);
|
|
3689
3689
|
}
|
|
3690
|
-
var qn = Xs(_d, { path: "/" }),
|
|
3691
|
-
let hn = "localStorage",
|
|
3690
|
+
var qn = Xs(_d, { path: "/" }), Ws = /* @__PURE__ */ ((e) => (e.CLIENT_ID = "highlightClientID", e))(Ws || {});
|
|
3691
|
+
let hn = "localStorage", Cs = !0, $d = class {
|
|
3692
3692
|
constructor() {
|
|
3693
3693
|
ni(this, "storage", {});
|
|
3694
3694
|
}
|
|
@@ -3715,13 +3715,13 @@ let hn = "localStorage", Ws = !0, $d = class {
|
|
|
3715
3715
|
return (i = qn.get(t)) != null ? i : "";
|
|
3716
3716
|
}
|
|
3717
3717
|
setItem(t, i) {
|
|
3718
|
-
if (!
|
|
3718
|
+
if (!Cs)
|
|
3719
3719
|
return;
|
|
3720
3720
|
const n = /* @__PURE__ */ new Date();
|
|
3721
3721
|
n.setTime(n.getTime() + br), qn.set(t, i, { expires: n });
|
|
3722
3722
|
}
|
|
3723
3723
|
removeItem(t) {
|
|
3724
|
-
|
|
3724
|
+
Cs && qn.remove(t);
|
|
3725
3725
|
}
|
|
3726
3726
|
};
|
|
3727
3727
|
const Xt = new $d(), pn = new qd(), ri = () => {
|
|
@@ -3756,7 +3756,7 @@ const Xt = new $d(), pn = new qd(), ri = () => {
|
|
|
3756
3756
|
}, eh = (e) => {
|
|
3757
3757
|
hn = e;
|
|
3758
3758
|
}, no = (e) => {
|
|
3759
|
-
|
|
3759
|
+
Cs = e;
|
|
3760
3760
|
}, Xe = (e) => {
|
|
3761
3761
|
try {
|
|
3762
3762
|
return ri().getItem(e);
|
|
@@ -3814,17 +3814,17 @@ const Xt = new $d(), pn = new qd(), ri = () => {
|
|
|
3814
3814
|
e({ keyName: i, keyValue: n }), t.apply(this, [i, n]);
|
|
3815
3815
|
};
|
|
3816
3816
|
};
|
|
3817
|
-
var
|
|
3818
|
-
const Jn = (e) => `${
|
|
3817
|
+
var Ze = /* @__PURE__ */ ((e) => (e.SEGMENT_LAST_SENT_HASH_KEY = "HIGHLIGHT_SEGMENT_LAST_SENT_HASH_KEY", e.SESSION_ID = "sessionID", e.SESSION_DATA = "sessionData", e.USER_IDENTIFIER = "highlightIdentifier", e.USER_OBJECT = "highlightUserObject", e))(Ze || {});
|
|
3818
|
+
const Jn = (e) => `${Ze.SESSION_DATA}_${e}`, ih = () => {
|
|
3819
3819
|
var e;
|
|
3820
3820
|
return typeof globalThis < "u" && (e = globalThis.persistentSessionSecureID) != null && e.length ? globalThis.persistentSessionSecureID : Al();
|
|
3821
3821
|
}, nh = (e) => {
|
|
3822
3822
|
typeof globalThis < "u" && e != null && e.length && (globalThis.persistentSessionSecureID = e);
|
|
3823
3823
|
}, Al = () => {
|
|
3824
3824
|
var e;
|
|
3825
|
-
return (e = Xe(
|
|
3825
|
+
return (e = Xe(Ze.SESSION_ID)) != null ? e : "";
|
|
3826
3826
|
}, At = (e) => {
|
|
3827
|
-
Pe(
|
|
3827
|
+
Pe(Ze.SESSION_ID, e);
|
|
3828
3828
|
}, sh = (e) => {
|
|
3829
3829
|
const t = Jn(e);
|
|
3830
3830
|
return JSON.parse(Xe(t) || "{}");
|
|
@@ -3842,7 +3842,7 @@ const Jn = (e) => `${ge.SESSION_DATA}_${e}`, ih = () => {
|
|
|
3842
3842
|
Pe(i, JSON.stringify(e)), oh(i);
|
|
3843
3843
|
}, rh = function() {
|
|
3844
3844
|
const e = pn.getItem(
|
|
3845
|
-
|
|
3845
|
+
Ze.SESSION_ID
|
|
3846
3846
|
);
|
|
3847
3847
|
At(e);
|
|
3848
3848
|
const t = Jn(e), i = pn.getItem(t);
|
|
@@ -3852,7 +3852,7 @@ const Jn = (e) => `${ge.SESSION_DATA}_${e}`, ih = () => {
|
|
|
3852
3852
|
}
|
|
3853
3853
|
};
|
|
3854
3854
|
function oh(e) {
|
|
3855
|
-
const t = `${
|
|
3855
|
+
const t = `${Ze.SESSION_DATA}_`;
|
|
3856
3856
|
for (let i = ri().length - 1; i >= 0; i--) {
|
|
3857
3857
|
const n = ri().key(i);
|
|
3858
3858
|
if (n && n.startsWith(t) && n !== e)
|
|
@@ -3884,7 +3884,7 @@ const lh = 3, ah = 1e3, ch = 500, uh = [_l.BillingQuotaExceeded.toString()], dh
|
|
|
3884
3884
|
(i) => uh.includes(i.message)
|
|
3885
3885
|
)) === void 0;
|
|
3886
3886
|
}, hh = () => {
|
|
3887
|
-
const e = (t, i, n, s, r = 0) =>
|
|
3887
|
+
const e = (t, i, n, s, r = 0) => Wt(void 0, null, function* () {
|
|
3888
3888
|
try {
|
|
3889
3889
|
return yield t();
|
|
3890
3890
|
} catch (l) {
|
|
@@ -3991,11 +3991,11 @@ class Ih extends wl {
|
|
|
3991
3991
|
return this._bufferCall("track", [t, i]);
|
|
3992
3992
|
}
|
|
3993
3993
|
}
|
|
3994
|
-
const Sh = "9.
|
|
3994
|
+
const Sh = "9.26.0", Gh = {
|
|
3995
3995
|
version: Sh
|
|
3996
3996
|
}, Vh = Gh.version;
|
|
3997
3997
|
function ta(e, t) {
|
|
3998
|
-
return
|
|
3998
|
+
return Wh(e);
|
|
3999
3999
|
}
|
|
4000
4000
|
function Xh(e) {
|
|
4001
4001
|
if (e.id.length)
|
|
@@ -4008,11 +4008,11 @@ function Xh(e) {
|
|
|
4008
4008
|
}
|
|
4009
4009
|
return e.nodeName.toLowerCase();
|
|
4010
4010
|
}
|
|
4011
|
-
const
|
|
4011
|
+
const Wh = (e) => {
|
|
4012
4012
|
let t = "";
|
|
4013
4013
|
const i = e.getAttribute("class"), n = e.getAttribute("id");
|
|
4014
4014
|
return n && (t = t.concat(lo(n, "#"))), i && (t = t.concat(lo(i, "."))), t === "" && (t = t.concat(e.tagName.toLowerCase())), t;
|
|
4015
|
-
}, lo = (e, t) => `${t}${e.trim().split(" ").join(t)}`,
|
|
4015
|
+
}, lo = (e, t) => `${t}${e.trim().split(" ").join(t)}`, Ch = (e) => {
|
|
4016
4016
|
let t;
|
|
4017
4017
|
const i = () => {
|
|
4018
4018
|
clearTimeout(t), t = setTimeout(() => {
|
|
@@ -4192,7 +4192,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
|
|
|
4192
4192
|
for (var i of bn(t))
|
|
4193
4193
|
sa.call(t, i) && Rs(e, i, t[i]);
|
|
4194
4194
|
return e;
|
|
4195
|
-
},
|
|
4195
|
+
}, me = (e, t) => Nh(e, Lh(t)), Ct = (e, t) => {
|
|
4196
4196
|
var i = {};
|
|
4197
4197
|
for (var n in e)
|
|
4198
4198
|
na.call(e, n) && t.indexOf(n) < 0 && (i[n] = e[n]);
|
|
@@ -4200,7 +4200,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
|
|
|
4200
4200
|
for (var n of bn(e))
|
|
4201
4201
|
t.indexOf(n) < 0 && sa.call(e, n) && (i[n] = e[n]);
|
|
4202
4202
|
return i;
|
|
4203
|
-
}, K = (e, t, i) => Rs(e, typeof t != "symbol" ? t + "" : t, i),
|
|
4203
|
+
}, K = (e, t, i) => Rs(e, typeof t != "symbol" ? t + "" : t, i), ye = (e, t, i) => new Promise((n, s) => {
|
|
4204
4204
|
var r = (a) => {
|
|
4205
4205
|
try {
|
|
4206
4206
|
o(i.next(a));
|
|
@@ -4218,7 +4218,7 @@ var Th = Object.defineProperty, Nh = Object.defineProperties, Lh = Object.getOwn
|
|
|
4218
4218
|
});
|
|
4219
4219
|
const Jh = {
|
|
4220
4220
|
key: "_sid"
|
|
4221
|
-
}, Yh = "rrweb/sequential-id@1",
|
|
4221
|
+
}, Yh = "rrweb/sequential-id@1", Uh = (e) => {
|
|
4222
4222
|
const t = Jh;
|
|
4223
4223
|
let i = 0;
|
|
4224
4224
|
return {
|
|
@@ -4231,30 +4231,30 @@ const Jh = {
|
|
|
4231
4231
|
options: t
|
|
4232
4232
|
};
|
|
4233
4233
|
};
|
|
4234
|
-
var
|
|
4235
|
-
const
|
|
4234
|
+
var Fh = Object.defineProperty, Kh = (e, t, i) => t in e ? Fh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, W = (e, t, i) => Kh(e, typeof t != "symbol" ? t + "" : t, i), co, Mh = Object.defineProperty, Oh = (e, t, i) => t in e ? Mh(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i, uo = (e, t, i) => Oh(e, typeof t != "symbol" ? t + "" : t, i), ae = /* @__PURE__ */ ((e) => (e[e.Document = 0] = "Document", e[e.DocumentType = 1] = "DocumentType", e[e.Element = 2] = "Element", e[e.Text = 3] = "Text", e[e.CDATA = 4] = "CDATA", e[e.Comment = 5] = "Comment", e))(ae || {});
|
|
4235
|
+
const Wi = /* @__PURE__ */ new Map(), ho = /* @__PURE__ */ new WeakSet();
|
|
4236
4236
|
function po(e) {
|
|
4237
4237
|
return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
|
|
4238
4238
|
}
|
|
4239
|
-
function
|
|
4239
|
+
function Eh(e) {
|
|
4240
4240
|
if (ho.has(e))
|
|
4241
4241
|
return;
|
|
4242
4242
|
ho.add(e);
|
|
4243
4243
|
const t = e.drawImage.bind(e);
|
|
4244
4244
|
e.drawImage = function(i, ...n) {
|
|
4245
|
-
const s =
|
|
4245
|
+
const s = Wi.get(e);
|
|
4246
4246
|
s && (s.cancelled = !0);
|
|
4247
4247
|
const r = () => {
|
|
4248
4248
|
n.length === 2 && po(i) && n.push(i.naturalWidth || i.width, i.naturalHeight || i.height), t(i, ...n);
|
|
4249
4249
|
};
|
|
4250
4250
|
if (po(i) && !i.complete) {
|
|
4251
4251
|
const l = { cancelled: !1 };
|
|
4252
|
-
|
|
4252
|
+
Wi.set(e, l);
|
|
4253
4253
|
const o = () => {
|
|
4254
|
-
l.cancelled || (
|
|
4254
|
+
l.cancelled || (Wi.delete(e), r());
|
|
4255
4255
|
}, a = () => {
|
|
4256
4256
|
if (!l.cancelled) {
|
|
4257
|
-
|
|
4257
|
+
Wi.delete(e);
|
|
4258
4258
|
try {
|
|
4259
4259
|
r();
|
|
4260
4260
|
} catch {
|
|
@@ -4276,10 +4276,10 @@ const mo = {
|
|
|
4276
4276
|
ShadowRoot: ["getSelection"],
|
|
4277
4277
|
Element: [],
|
|
4278
4278
|
MutationObserver: ["constructor"]
|
|
4279
|
-
},
|
|
4279
|
+
}, Ci = {}, Hh = () => !!globalThis.Zone;
|
|
4280
4280
|
function fr(e) {
|
|
4281
|
-
if (
|
|
4282
|
-
return
|
|
4281
|
+
if (Ci[e])
|
|
4282
|
+
return Ci[e];
|
|
4283
4283
|
const t = globalThis[e], i = t.prototype, n = e in mo ? mo[e] : void 0, s = !!(n && // @ts-expect-error 2345
|
|
4284
4284
|
n.every(
|
|
4285
4285
|
(o) => {
|
|
@@ -4293,15 +4293,15 @@ function fr(e) {
|
|
|
4293
4293
|
return typeof i[o] == "function" && ((a = i[o]) == null ? void 0 : a.toString().includes("[native code]"));
|
|
4294
4294
|
}
|
|
4295
4295
|
));
|
|
4296
|
-
if (s && l && !
|
|
4297
|
-
return
|
|
4296
|
+
if (s && l && !Hh())
|
|
4297
|
+
return Ci[e] = t.prototype, t.prototype;
|
|
4298
4298
|
try {
|
|
4299
4299
|
const o = document.createElement("iframe");
|
|
4300
4300
|
document.body.appendChild(o);
|
|
4301
4301
|
const a = o.contentWindow;
|
|
4302
4302
|
if (!a) return t.prototype;
|
|
4303
4303
|
const c = a[e].prototype;
|
|
4304
|
-
return document.body.removeChild(o), c ?
|
|
4304
|
+
return document.body.removeChild(o), c ? Ci[e] = c : i;
|
|
4305
4305
|
} catch {
|
|
4306
4306
|
return i;
|
|
4307
4307
|
}
|
|
@@ -4330,7 +4330,7 @@ function ra(e, t, i) {
|
|
|
4330
4330
|
const s = fr(e)[i];
|
|
4331
4331
|
return typeof s != "function" ? t[i] : (is[n] = s, s.bind(t));
|
|
4332
4332
|
}
|
|
4333
|
-
function
|
|
4333
|
+
function zh(e) {
|
|
4334
4334
|
return qe("Node", e, "childNodes");
|
|
4335
4335
|
}
|
|
4336
4336
|
function Ph(e) {
|
|
@@ -4386,7 +4386,7 @@ function ip(e, t, i) {
|
|
|
4386
4386
|
}
|
|
4387
4387
|
}
|
|
4388
4388
|
const he = {
|
|
4389
|
-
childNodes:
|
|
4389
|
+
childNodes: zh,
|
|
4390
4390
|
parentNode: Ph,
|
|
4391
4391
|
parentElement: Bh,
|
|
4392
4392
|
textContent: Dh,
|
|
@@ -4399,7 +4399,7 @@ const he = {
|
|
|
4399
4399
|
querySelectorAll: ep,
|
|
4400
4400
|
mutationObserver: tp,
|
|
4401
4401
|
patch: ip,
|
|
4402
|
-
wrapCanvasContextDrawImage:
|
|
4402
|
+
wrapCanvasContextDrawImage: Eh
|
|
4403
4403
|
};
|
|
4404
4404
|
function oa(e) {
|
|
4405
4405
|
return e.nodeType === e.ELEMENT_NODE;
|
|
@@ -4712,16 +4712,16 @@ const da = ({
|
|
|
4712
4712
|
const s = i && i.toLowerCase();
|
|
4713
4713
|
return n !== "true" && (!!e[t.toLowerCase()] || !!(s && e[s]));
|
|
4714
4714
|
};
|
|
4715
|
-
let
|
|
4716
|
-
const
|
|
4715
|
+
let Wp = 1;
|
|
4716
|
+
const Cp = new RegExp("[^a-z0-9-_:]"), oi = -2;
|
|
4717
4717
|
function ha() {
|
|
4718
|
-
return
|
|
4718
|
+
return Wp++;
|
|
4719
4719
|
}
|
|
4720
4720
|
function Rp(e) {
|
|
4721
4721
|
if (e instanceof HTMLFormElement)
|
|
4722
4722
|
return "form";
|
|
4723
4723
|
const t = Rt(e.tagName);
|
|
4724
|
-
return
|
|
4724
|
+
return Cp.test(t) ? "div" : t;
|
|
4725
4725
|
}
|
|
4726
4726
|
let yt, yo;
|
|
4727
4727
|
const kp = /^[^ \t\n\r\u000c]+/, vp = /^[, \t\n\r\u000c]+/;
|
|
@@ -4892,7 +4892,7 @@ function Lp(e, t) {
|
|
|
4892
4892
|
keepIframeSrcFn: S,
|
|
4893
4893
|
newlyAddedElement: I = !1,
|
|
4894
4894
|
cssCaptured: V = !1,
|
|
4895
|
-
privacySetting:
|
|
4895
|
+
privacySetting: C
|
|
4896
4896
|
} = t, X = Jp(i, n);
|
|
4897
4897
|
switch (e.nodeType) {
|
|
4898
4898
|
case e.DOCUMENT_NODE:
|
|
@@ -4914,7 +4914,7 @@ function Lp(e, t) {
|
|
|
4914
4914
|
rootId: X
|
|
4915
4915
|
};
|
|
4916
4916
|
case e.ELEMENT_NODE:
|
|
4917
|
-
return
|
|
4917
|
+
return Up(e, {
|
|
4918
4918
|
doc: i,
|
|
4919
4919
|
blockClass: s,
|
|
4920
4920
|
blockSelector: r,
|
|
@@ -4928,7 +4928,7 @@ function Lp(e, t) {
|
|
|
4928
4928
|
recordCanvas: d,
|
|
4929
4929
|
keepIframeSrcFn: S,
|
|
4930
4930
|
newlyAddedElement: I,
|
|
4931
|
-
privacySetting:
|
|
4931
|
+
privacySetting: C,
|
|
4932
4932
|
rootId: X
|
|
4933
4933
|
});
|
|
4934
4934
|
case e.TEXT_NODE:
|
|
@@ -4936,7 +4936,7 @@ function Lp(e, t) {
|
|
|
4936
4936
|
doc: i,
|
|
4937
4937
|
needsMask: l,
|
|
4938
4938
|
maskTextFn: u,
|
|
4939
|
-
privacySetting:
|
|
4939
|
+
privacySetting: C,
|
|
4940
4940
|
rootId: X,
|
|
4941
4941
|
cssCaptured: V
|
|
4942
4942
|
});
|
|
@@ -4982,7 +4982,7 @@ function Yp(e, t) {
|
|
|
4982
4982
|
rootId: l
|
|
4983
4983
|
};
|
|
4984
4984
|
}
|
|
4985
|
-
function
|
|
4985
|
+
function Up(e, t) {
|
|
4986
4986
|
const {
|
|
4987
4987
|
doc: i,
|
|
4988
4988
|
blockClass: n,
|
|
@@ -5001,7 +5001,7 @@ function Fp(e, t) {
|
|
|
5001
5001
|
rootId: S
|
|
5002
5002
|
} = t;
|
|
5003
5003
|
let I = Zo(e, n, s);
|
|
5004
|
-
const V = Zo(e, a, null),
|
|
5004
|
+
const V = Zo(e, a, null), C = d === "strict";
|
|
5005
5005
|
let X = Rp(e), G = {};
|
|
5006
5006
|
const k = e.attributes.length;
|
|
5007
5007
|
for (let g = 0; g < k; g++) {
|
|
@@ -5052,10 +5052,10 @@ function Fp(e, t) {
|
|
|
5052
5052
|
g !== J && (G.rr_dataURL = g);
|
|
5053
5053
|
}
|
|
5054
5054
|
}
|
|
5055
|
-
if (X === "img" && u && !I && !V && !
|
|
5055
|
+
if (X === "img" && u && !I && !V && !C) {
|
|
5056
5056
|
yt || (yt = i.createElement("canvas"), yo = yt.getContext("2d"));
|
|
5057
|
-
const g = e, R = g.currentSrc || g.getAttribute("src") || "<unknown-src>", J = g.crossOrigin,
|
|
5058
|
-
g.removeEventListener("load",
|
|
5057
|
+
const g = e, R = g.currentSrc || g.getAttribute("src") || "<unknown-src>", J = g.crossOrigin, E = () => {
|
|
5058
|
+
g.removeEventListener("load", E);
|
|
5059
5059
|
try {
|
|
5060
5060
|
yt.width = g.naturalWidth, yt.height = g.naturalHeight, yo.drawImage(g, 0, 0), G.rr_dataURL = yt.toDataURL(
|
|
5061
5061
|
c.type,
|
|
@@ -5063,7 +5063,7 @@ function Fp(e, t) {
|
|
|
5063
5063
|
);
|
|
5064
5064
|
} catch ($) {
|
|
5065
5065
|
if (g.crossOrigin !== "anonymous") {
|
|
5066
|
-
g.crossOrigin = "anonymous", g.complete && g.naturalWidth !== 0 ?
|
|
5066
|
+
g.crossOrigin = "anonymous", g.complete && g.naturalWidth !== 0 ? E() : g.addEventListener("load", E);
|
|
5067
5067
|
return;
|
|
5068
5068
|
} else
|
|
5069
5069
|
console.warn(
|
|
@@ -5072,13 +5072,13 @@ function Fp(e, t) {
|
|
|
5072
5072
|
}
|
|
5073
5073
|
g.crossOrigin === "anonymous" && (J ? G.crossOrigin = J : g.removeAttribute("crossorigin"));
|
|
5074
5074
|
};
|
|
5075
|
-
g.complete && g.naturalWidth !== 0 ?
|
|
5075
|
+
g.complete && g.naturalWidth !== 0 ? E() : g.addEventListener("load", E);
|
|
5076
5076
|
}
|
|
5077
5077
|
if (X === "audio" || X === "video") {
|
|
5078
5078
|
const g = G;
|
|
5079
5079
|
g.rr_mediaState = e.paused ? "paused" : "played", g.rr_mediaCurrentTime = e.currentTime, g.rr_mediaPlaybackRate = e.playbackRate, g.rr_mediaMuted = e.muted, g.rr_mediaLoop = e.loop, g.rr_mediaVolume = e.volume;
|
|
5080
5080
|
}
|
|
5081
|
-
if (b || (e.scrollLeft && (G.rr_scrollLeft = e.scrollLeft), e.scrollTop && (G.rr_scrollTop = e.scrollTop)), I || V ||
|
|
5081
|
+
if (b || (e.scrollLeft && (G.rr_scrollLeft = e.scrollLeft), e.scrollTop && (G.rr_scrollTop = e.scrollTop)), I || V || C && vs(X)) {
|
|
5082
5082
|
const { width: g, height: R } = e.getBoundingClientRect();
|
|
5083
5083
|
G = {
|
|
5084
5084
|
class: G.class,
|
|
@@ -5086,7 +5086,7 @@ function Fp(e, t) {
|
|
|
5086
5086
|
rr_height: `${R}px`
|
|
5087
5087
|
};
|
|
5088
5088
|
}
|
|
5089
|
-
|
|
5089
|
+
C && vs(X) && (I = !0), X === "iframe" && !m(G.src) && (e.contentDocument || (G.rr_src = G.src), delete G.src);
|
|
5090
5090
|
let v;
|
|
5091
5091
|
try {
|
|
5092
5092
|
customElements.get(X) && (v = !0);
|
|
@@ -5103,8 +5103,8 @@ function Fp(e, t) {
|
|
|
5103
5103
|
class: G.class,
|
|
5104
5104
|
style: G.style
|
|
5105
5105
|
}, X = "canvas";
|
|
5106
|
-
const
|
|
5107
|
-
|
|
5106
|
+
const E = i.createElement("canvas");
|
|
5107
|
+
E.width = e.width, E.height = e.height, G.rr_dataURL = E.toDataURL(
|
|
5108
5108
|
c.type,
|
|
5109
5109
|
c.quality
|
|
5110
5110
|
);
|
|
@@ -5128,7 +5128,7 @@ function Fp(e, t) {
|
|
|
5128
5128
|
function ie(e) {
|
|
5129
5129
|
return e == null ? "" : e.toLowerCase();
|
|
5130
5130
|
}
|
|
5131
|
-
function
|
|
5131
|
+
function Fp(e, t) {
|
|
5132
5132
|
return !!(t.comment && e.type === ae.Comment || e.type === ae.Element && (t.script && // script tag
|
|
5133
5133
|
(e.tagName === "script" || // (module)preload link
|
|
5134
5134
|
e.tagName === "link" && (e.attributes.rel === "preload" && e.attributes.as === "script" || e.attributes.rel === "modulepreload") || // prefetch link
|
|
@@ -5156,7 +5156,7 @@ function St(e, t) {
|
|
|
5156
5156
|
inlineVideos: S = !1,
|
|
5157
5157
|
recordCanvas: I = !1,
|
|
5158
5158
|
onSerialize: V,
|
|
5159
|
-
onIframeLoad:
|
|
5159
|
+
onIframeLoad: C,
|
|
5160
5160
|
iframeLoadTimeout: X = 5e3,
|
|
5161
5161
|
onStylesheetLoad: G,
|
|
5162
5162
|
stylesheetLoadTimeout: k = 5e3,
|
|
@@ -5165,7 +5165,7 @@ function St(e, t) {
|
|
|
5165
5165
|
cssCaptured: g = !1,
|
|
5166
5166
|
privacySetting: R
|
|
5167
5167
|
} = t;
|
|
5168
|
-
let { needsMask: J } = t, { preserveWhiteSpace:
|
|
5168
|
+
let { needsMask: J } = t, { preserveWhiteSpace: E = !0 } = t;
|
|
5169
5169
|
J || (J = ba(
|
|
5170
5170
|
e,
|
|
5171
5171
|
l,
|
|
@@ -5195,14 +5195,14 @@ function St(e, t) {
|
|
|
5195
5195
|
if (!$)
|
|
5196
5196
|
return console.warn(e, "not serialized"), null;
|
|
5197
5197
|
let f;
|
|
5198
|
-
n.hasNode(e) ? f = n.getId(e) :
|
|
5198
|
+
n.hasNode(e) ? f = n.getId(e) : Fp($, m) || !E && $.type === ae.Text && !$.textContent.replace(/^\s+|\s+$/gm, "").length ? f = oi : f = ha();
|
|
5199
5199
|
const y = Object.assign($, { id: f });
|
|
5200
5200
|
if (n.add(e, y), f === oi)
|
|
5201
5201
|
return null;
|
|
5202
5202
|
V && V(e);
|
|
5203
|
-
let T = !a,
|
|
5203
|
+
let T = !a, U = R, F = R === "strict";
|
|
5204
5204
|
if (y.type === ae.Element) {
|
|
5205
|
-
if (T = T && !y.needBlock,
|
|
5205
|
+
if (T = T && !y.needBlock, F || (F = !!y.needBlock || !!y.needMask), U = F ? "strict" : U, F && vs(y.tagName)) {
|
|
5206
5206
|
const D = e.cloneNode();
|
|
5207
5207
|
D.src = "", n.add(D, y);
|
|
5208
5208
|
}
|
|
@@ -5211,7 +5211,7 @@ function St(e, t) {
|
|
|
5211
5211
|
A && qt(A) && (y.isShadowHost = !0);
|
|
5212
5212
|
}
|
|
5213
5213
|
if ((y.type === ae.Document || y.type === ae.Element) && T) {
|
|
5214
|
-
m.headWhitespace && y.type === ae.Element && y.tagName === "head" && (
|
|
5214
|
+
m.headWhitespace && y.type === ae.Element && y.tagName === "head" && (E = !1);
|
|
5215
5215
|
const A = {
|
|
5216
5216
|
doc: i,
|
|
5217
5217
|
mirror: n,
|
|
@@ -5230,28 +5230,28 @@ function St(e, t) {
|
|
|
5230
5230
|
inlineImages: d,
|
|
5231
5231
|
inlineVideos: S,
|
|
5232
5232
|
recordCanvas: I,
|
|
5233
|
-
preserveWhiteSpace:
|
|
5233
|
+
preserveWhiteSpace: E,
|
|
5234
5234
|
onSerialize: V,
|
|
5235
|
-
onIframeLoad:
|
|
5235
|
+
onIframeLoad: C,
|
|
5236
5236
|
iframeLoadTimeout: X,
|
|
5237
5237
|
onStylesheetLoad: G,
|
|
5238
5238
|
stylesheetLoadTimeout: k,
|
|
5239
5239
|
keepIframeSrcFn: v,
|
|
5240
5240
|
cssCaptured: !1,
|
|
5241
|
-
privacySetting:
|
|
5241
|
+
privacySetting: U
|
|
5242
5242
|
};
|
|
5243
5243
|
if (!(y.type === ae.Element && y.tagName === "textarea" && y.attributes.value !== void 0)) {
|
|
5244
5244
|
y.type === ae.Element && y.attributes._cssText !== void 0 && typeof y.attributes._cssText == "string" && (A.cssCaptured = !0);
|
|
5245
5245
|
for (const de of Array.from(he.childNodes(e))) {
|
|
5246
|
-
const
|
|
5247
|
-
|
|
5246
|
+
const be = St(de, A);
|
|
5247
|
+
be && y.childNodes.push(be);
|
|
5248
5248
|
}
|
|
5249
5249
|
}
|
|
5250
5250
|
let D = null;
|
|
5251
5251
|
if (oa(e) && (D = he.shadowRoot(e)))
|
|
5252
5252
|
for (const de of Array.from(he.childNodes(D))) {
|
|
5253
|
-
const
|
|
5254
|
-
|
|
5253
|
+
const be = St(de, A);
|
|
5254
|
+
be && (qt(D) && (be.isShadow = !0), y.childNodes.push(be));
|
|
5255
5255
|
}
|
|
5256
5256
|
}
|
|
5257
5257
|
const N = he.parentNode(e);
|
|
@@ -5259,7 +5259,7 @@ function St(e, t) {
|
|
|
5259
5259
|
e,
|
|
5260
5260
|
() => {
|
|
5261
5261
|
const A = e.contentDocument;
|
|
5262
|
-
if (A &&
|
|
5262
|
+
if (A && C) {
|
|
5263
5263
|
const D = St(A, {
|
|
5264
5264
|
doc: A,
|
|
5265
5265
|
mirror: n,
|
|
@@ -5278,16 +5278,16 @@ function St(e, t) {
|
|
|
5278
5278
|
inlineImages: d,
|
|
5279
5279
|
inlineVideos: S,
|
|
5280
5280
|
recordCanvas: I,
|
|
5281
|
-
preserveWhiteSpace:
|
|
5281
|
+
preserveWhiteSpace: E,
|
|
5282
5282
|
onSerialize: V,
|
|
5283
|
-
onIframeLoad:
|
|
5283
|
+
onIframeLoad: C,
|
|
5284
5284
|
iframeLoadTimeout: X,
|
|
5285
5285
|
onStylesheetLoad: G,
|
|
5286
5286
|
stylesheetLoadTimeout: k,
|
|
5287
5287
|
keepIframeSrcFn: v,
|
|
5288
5288
|
privacySetting: R
|
|
5289
5289
|
});
|
|
5290
|
-
D &&
|
|
5290
|
+
D && C(
|
|
5291
5291
|
e,
|
|
5292
5292
|
D
|
|
5293
5293
|
);
|
|
@@ -5316,9 +5316,9 @@ function St(e, t) {
|
|
|
5316
5316
|
inlineImages: d,
|
|
5317
5317
|
inlineVideos: S,
|
|
5318
5318
|
recordCanvas: I,
|
|
5319
|
-
preserveWhiteSpace:
|
|
5319
|
+
preserveWhiteSpace: E,
|
|
5320
5320
|
onSerialize: V,
|
|
5321
|
-
onIframeLoad:
|
|
5321
|
+
onIframeLoad: C,
|
|
5322
5322
|
iframeLoadTimeout: X,
|
|
5323
5323
|
onStylesheetLoad: G,
|
|
5324
5324
|
stylesheetLoadTimeout: k,
|
|
@@ -5353,7 +5353,7 @@ function Kp(e, t) {
|
|
|
5353
5353
|
preserveWhiteSpace: S,
|
|
5354
5354
|
onSerialize: I,
|
|
5355
5355
|
onIframeLoad: V,
|
|
5356
|
-
iframeLoadTimeout:
|
|
5356
|
+
iframeLoadTimeout: C,
|
|
5357
5357
|
onStylesheetLoad: X,
|
|
5358
5358
|
stylesheetLoadTimeout: G,
|
|
5359
5359
|
keepIframeSrcFn: k = () => !1,
|
|
@@ -5413,7 +5413,7 @@ function Kp(e, t) {
|
|
|
5413
5413
|
preserveWhiteSpace: S,
|
|
5414
5414
|
onSerialize: I,
|
|
5415
5415
|
onIframeLoad: V,
|
|
5416
|
-
iframeLoadTimeout:
|
|
5416
|
+
iframeLoadTimeout: C,
|
|
5417
5417
|
onStylesheetLoad: X,
|
|
5418
5418
|
stylesheetLoadTimeout: G,
|
|
5419
5419
|
keepIframeSrcFn: k,
|
|
@@ -5421,7 +5421,7 @@ function Kp(e, t) {
|
|
|
5421
5421
|
privacySetting: v
|
|
5422
5422
|
});
|
|
5423
5423
|
}
|
|
5424
|
-
function
|
|
5424
|
+
function Mp(e) {
|
|
5425
5425
|
if (e.__esModule) return e;
|
|
5426
5426
|
var t = e.default;
|
|
5427
5427
|
if (typeof t == "function") {
|
|
@@ -5440,17 +5440,17 @@ function Op(e) {
|
|
|
5440
5440
|
});
|
|
5441
5441
|
}), i;
|
|
5442
5442
|
}
|
|
5443
|
-
var Zr = { exports: {} },
|
|
5444
|
-
return { isColorSupported: !1, reset:
|
|
5443
|
+
var Zr = { exports: {} }, M = String, fa = function() {
|
|
5444
|
+
return { isColorSupported: !1, reset: M, bold: M, dim: M, italic: M, underline: M, inverse: M, hidden: M, strikethrough: M, black: M, red: M, green: M, yellow: M, blue: M, magenta: M, cyan: M, white: M, gray: M, bgBlack: M, bgRed: M, bgGreen: M, bgYellow: M, bgBlue: M, bgMagenta: M, bgCyan: M, bgWhite: M, blackBright: M, redBright: M, greenBright: M, yellowBright: M, blueBright: M, magentaBright: M, cyanBright: M, whiteBright: M, bgBlackBright: M, bgRedBright: M, bgGreenBright: M, bgYellowBright: M, bgBlueBright: M, bgMagentaBright: M, bgCyanBright: M, bgWhiteBright: M };
|
|
5445
5445
|
};
|
|
5446
5446
|
Zr.exports = fa();
|
|
5447
5447
|
Zr.exports.createColors = fa;
|
|
5448
|
-
var
|
|
5449
|
-
const
|
|
5448
|
+
var Op = Zr.exports;
|
|
5449
|
+
const Ep = {}, Hp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
5450
5450
|
__proto__: null,
|
|
5451
|
-
default:
|
|
5452
|
-
}, Symbol.toStringTag, { value: "Module" })), Ne = /* @__PURE__ */
|
|
5453
|
-
let Io =
|
|
5451
|
+
default: Ep
|
|
5452
|
+
}, Symbol.toStringTag, { value: "Module" })), Ne = /* @__PURE__ */ Mp(Hp);
|
|
5453
|
+
let Io = Op, So = Ne, ws = class ya extends Error {
|
|
5454
5454
|
constructor(t, i, n, s, r, l) {
|
|
5455
5455
|
super(t), this.name = "CssSyntaxError", this.reason = t, r && (this.file = r), s && (this.source = s), l && (this.plugin = l), typeof i < "u" && typeof n < "u" && (typeof i == "number" ? (this.line = i, this.column = n) : (this.line = i.line, this.column = i.column, this.endLine = n.line, this.endColumn = n.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, ya);
|
|
5456
5456
|
}
|
|
@@ -5474,9 +5474,9 @@ let Io = Ep, So = Ne, ws = class ya extends Error {
|
|
|
5474
5474
|
let d = 20, S = Math.max(0, this.column - d), I = Math.max(
|
|
5475
5475
|
this.column + d,
|
|
5476
5476
|
this.endColumn + d
|
|
5477
|
-
), V = u.slice(S, I),
|
|
5477
|
+
), V = u.slice(S, I), C = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
|
|
5478
5478
|
return s(">") + n(m) + r(V) + `
|
|
5479
|
-
` +
|
|
5479
|
+
` + C + s("^");
|
|
5480
5480
|
}
|
|
5481
5481
|
let b = n(m.replace(/\d/g, " ")) + u.slice(0, this.column - 1).replace(/[^\t]/g, " ");
|
|
5482
5482
|
return s(">") + n(m) + r(u) + `
|
|
@@ -5515,7 +5515,7 @@ const Go = {
|
|
|
5515
5515
|
indent: " ",
|
|
5516
5516
|
semicolon: !1
|
|
5517
5517
|
};
|
|
5518
|
-
function
|
|
5518
|
+
function zp(e) {
|
|
5519
5519
|
return e[0].toUpperCase() + e.slice(1);
|
|
5520
5520
|
}
|
|
5521
5521
|
let xs = class {
|
|
@@ -5586,7 +5586,7 @@ let xs = class {
|
|
|
5586
5586
|
if (i === "before" || i === "after")
|
|
5587
5587
|
return this.beforeAfter(e, i);
|
|
5588
5588
|
{
|
|
5589
|
-
let l = "raw" +
|
|
5589
|
+
let l = "raw" + zp(i);
|
|
5590
5590
|
this[l] ? n = this[l](r, e) : r.walk((o) => {
|
|
5591
5591
|
if (n = o.raws[t], typeof n < "u") return !1;
|
|
5592
5592
|
});
|
|
@@ -5940,33 +5940,33 @@ let Ls = class {
|
|
|
5940
5940
|
return e.warn(t, n);
|
|
5941
5941
|
}
|
|
5942
5942
|
};
|
|
5943
|
-
var
|
|
5943
|
+
var Un = Ls;
|
|
5944
5944
|
Ls.default = Ls;
|
|
5945
|
-
let Ap =
|
|
5945
|
+
let Ap = Un, Js = class extends Ap {
|
|
5946
5946
|
constructor(e) {
|
|
5947
5947
|
super(e), this.type = "comment";
|
|
5948
5948
|
}
|
|
5949
5949
|
};
|
|
5950
|
-
var
|
|
5950
|
+
var Fn = Js;
|
|
5951
5951
|
Js.default = Js;
|
|
5952
|
-
let _p =
|
|
5952
|
+
let _p = Un, Ys = class extends _p {
|
|
5953
5953
|
get variable() {
|
|
5954
5954
|
return this.prop.startsWith("--") || this.prop[0] === "$";
|
|
5955
5955
|
}
|
|
5956
5956
|
constructor(e) {
|
|
5957
|
-
e && typeof e.value < "u" && typeof e.value != "string" && (e =
|
|
5957
|
+
e && typeof e.value < "u" && typeof e.value != "string" && (e = me(Y({}, e), { value: String(e.value) })), super(e), this.type = "decl";
|
|
5958
5958
|
}
|
|
5959
5959
|
};
|
|
5960
5960
|
var Kn = Ys;
|
|
5961
5961
|
Ys.default = Ys;
|
|
5962
|
-
let Za =
|
|
5963
|
-
function Ca(e) {
|
|
5964
|
-
return e.map((t) => (t.nodes && (t.nodes = Ca(t.nodes)), delete t.source, t));
|
|
5965
|
-
}
|
|
5962
|
+
let Za = Fn, Ia = Kn, $p = Un, { isClean: Sa, my: Ga } = yi, Sr, Va, Xa, Gr;
|
|
5966
5963
|
function Wa(e) {
|
|
5964
|
+
return e.map((t) => (t.nodes && (t.nodes = Wa(t.nodes)), delete t.source, t));
|
|
5965
|
+
}
|
|
5966
|
+
function Ca(e) {
|
|
5967
5967
|
if (e[Sa] = !1, e.proxyOf.nodes)
|
|
5968
5968
|
for (let t of e.proxyOf.nodes)
|
|
5969
|
-
|
|
5969
|
+
Ca(t);
|
|
5970
5970
|
}
|
|
5971
5971
|
let De = class Ra extends $p {
|
|
5972
5972
|
get first() {
|
|
@@ -6044,7 +6044,7 @@ let De = class Ra extends $p {
|
|
|
6044
6044
|
}
|
|
6045
6045
|
normalize(t, i) {
|
|
6046
6046
|
if (typeof t == "string")
|
|
6047
|
-
t =
|
|
6047
|
+
t = Wa(Va(t).nodes);
|
|
6048
6048
|
else if (typeof t > "u")
|
|
6049
6049
|
t = [];
|
|
6050
6050
|
else if (Array.isArray(t)) {
|
|
@@ -6069,7 +6069,7 @@ let De = class Ra extends $p {
|
|
|
6069
6069
|
t = [new Za(t)];
|
|
6070
6070
|
else
|
|
6071
6071
|
throw new Error("Unknown node type in node creation");
|
|
6072
|
-
return t.map((n) => (n[Ga] || Ra.rebuild(n), n = n.proxyOf, n.parent && n.parent.removeChild(n), n[Sa] &&
|
|
6072
|
+
return t.map((n) => (n[Ga] || Ra.rebuild(n), n = n.proxyOf, n.parent && n.parent.removeChild(n), n[Sa] && Ca(n), n.raws || (n.raws = {}), typeof n.raws.before > "u" && i && typeof i.raws.before < "u" && (n.raws.before = i.raws.before.replace(/\S/g, "")), n.parent = this.proxyOf, n));
|
|
6073
6073
|
}
|
|
6074
6074
|
prepend(...t) {
|
|
6075
6075
|
t = t.reverse();
|
|
@@ -6217,7 +6217,7 @@ let { existsSync: nm, readFileSync: sm } = Ne, { dirname: ns, join: rm } = Ne, {
|
|
|
6217
6217
|
function om(e) {
|
|
6218
6218
|
return Buffer ? Buffer.from(e, "base64").toString() : window.atob(e);
|
|
6219
6219
|
}
|
|
6220
|
-
let
|
|
6220
|
+
let Us = class {
|
|
6221
6221
|
constructor(e, t) {
|
|
6222
6222
|
if (t.map === !1) return;
|
|
6223
6223
|
this.loadAnnotation(e), this.inline = this.startWith(this.annotation, "data:");
|
|
@@ -6295,9 +6295,9 @@ let Fs = class {
|
|
|
6295
6295
|
return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
|
|
6296
6296
|
}
|
|
6297
6297
|
};
|
|
6298
|
-
var xa =
|
|
6299
|
-
|
|
6300
|
-
let { nanoid: lm } = im, { isAbsolute:
|
|
6298
|
+
var xa = Us;
|
|
6299
|
+
Us.default = Us;
|
|
6300
|
+
let { nanoid: lm } = im, { isAbsolute: Fs, resolve: Ks } = Ne, { SourceMapConsumer: am, SourceMapGenerator: cm } = Ne, { fileURLToPath: Wo, pathToFileURL: ki } = Ne, Co = Ir, um = xa, ss = Ne, rs = Symbol("lineToIndexCache"), dm = !!(am && cm), Ro = !!(Ks && Fs);
|
|
6301
6301
|
function ko(e) {
|
|
6302
6302
|
if (e[rs]) return e[rs];
|
|
6303
6303
|
let t = e.css.split(`
|
|
@@ -6313,7 +6313,7 @@ let Gn = class {
|
|
|
6313
6313
|
constructor(e, t = {}) {
|
|
6314
6314
|
if (e === null || typeof e > "u" || typeof e == "object" && !e.toString)
|
|
6315
6315
|
throw new Error(`PostCSS received ${e} instead of CSS string`);
|
|
6316
|
-
if (this.css = e.toString(), this.css[0] === "\uFEFF" || this.css[0] === "" ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, this.document = this.css, t.document && (this.document = t.document.toString()), t.from && (!Ro || /^\w+:\/\//.test(t.from) ||
|
|
6316
|
+
if (this.css = e.toString(), this.css[0] === "\uFEFF" || this.css[0] === "" ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, this.document = this.css, t.document && (this.document = t.document.toString()), t.from && (!Ro || /^\w+:\/\//.test(t.from) || Fs(t.from) ? this.file = t.from : this.file = Ks(t.from)), Ro && dm) {
|
|
6317
6317
|
let i = new um(this.css, t);
|
|
6318
6318
|
if (i.text) {
|
|
6319
6319
|
this.map = i;
|
|
@@ -6347,14 +6347,14 @@ let Gn = class {
|
|
|
6347
6347
|
t = u.line, i = u.col;
|
|
6348
6348
|
}
|
|
6349
6349
|
let c = this.origin(t, i, r, s);
|
|
6350
|
-
return c ? a = new
|
|
6350
|
+
return c ? a = new Co(
|
|
6351
6351
|
e,
|
|
6352
6352
|
c.endLine === void 0 ? c.line : { column: c.column, line: c.line },
|
|
6353
6353
|
c.endLine === void 0 ? c.column : { column: c.endColumn, line: c.endLine },
|
|
6354
6354
|
c.source,
|
|
6355
6355
|
c.file,
|
|
6356
6356
|
n.plugin
|
|
6357
|
-
) : a = new
|
|
6357
|
+
) : a = new Co(
|
|
6358
6358
|
e,
|
|
6359
6359
|
r === void 0 ? t : { column: i, line: t },
|
|
6360
6360
|
r === void 0 ? i : { column: s, line: r },
|
|
@@ -6397,7 +6397,7 @@ let Gn = class {
|
|
|
6397
6397
|
let l;
|
|
6398
6398
|
typeof i == "number" && (l = s.originalPositionFor({ column: n, line: i }));
|
|
6399
6399
|
let o;
|
|
6400
|
-
|
|
6400
|
+
Fs(r.source) ? o = ki(r.source) : o = new URL(
|
|
6401
6401
|
r.source,
|
|
6402
6402
|
this.map.consumer().sourceRoot || ki(this.map.mapFile)
|
|
6403
6403
|
);
|
|
@@ -6409,8 +6409,8 @@ let Gn = class {
|
|
|
6409
6409
|
url: o.toString()
|
|
6410
6410
|
};
|
|
6411
6411
|
if (o.protocol === "file:")
|
|
6412
|
-
if (
|
|
6413
|
-
a.file =
|
|
6412
|
+
if (Wo)
|
|
6413
|
+
a.file = Wo(o);
|
|
6414
6414
|
else
|
|
6415
6415
|
throw new Error("file: protocol is not available in this PostCSS build");
|
|
6416
6416
|
let c = s.sourceContentFor(r.source);
|
|
@@ -6423,7 +6423,7 @@ let Gn = class {
|
|
|
6423
6423
|
return this.map && (e.map = Y({}, this.map), e.map.consumerCache && (e.map.consumerCache = void 0)), e;
|
|
6424
6424
|
}
|
|
6425
6425
|
};
|
|
6426
|
-
var
|
|
6426
|
+
var Mn = Gn;
|
|
6427
6427
|
Gn.default = Gn;
|
|
6428
6428
|
ss && ss.registerInput && ss.registerInput(Gn);
|
|
6429
6429
|
let Ta = ct, Na, La, kt = class extends Ta {
|
|
@@ -6488,24 +6488,24 @@ let Ya = ct, hm = Ja, Vn = class extends Ya {
|
|
|
6488
6488
|
super(e), this.type = "rule", this.nodes || (this.nodes = []);
|
|
6489
6489
|
}
|
|
6490
6490
|
};
|
|
6491
|
-
var
|
|
6491
|
+
var Wr = Vn;
|
|
6492
6492
|
Vn.default = Vn;
|
|
6493
6493
|
Ya.registerRule(Vn);
|
|
6494
|
-
let pm = Vr, mm =
|
|
6494
|
+
let pm = Vr, mm = Fn, bm = Kn, fm = Mn, ym = xa, gm = gi, Zm = Wr;
|
|
6495
6495
|
function ci(e, t) {
|
|
6496
6496
|
if (Array.isArray(e)) return e.map((r) => ci(r));
|
|
6497
|
-
let i = e, { inputs: n } = i, s =
|
|
6497
|
+
let i = e, { inputs: n } = i, s = Ct(i, ["inputs"]);
|
|
6498
6498
|
if (n) {
|
|
6499
6499
|
t = [];
|
|
6500
6500
|
for (let r of n) {
|
|
6501
|
-
let l =
|
|
6502
|
-
l.map && (l.map =
|
|
6501
|
+
let l = me(Y({}, r), { __proto__: fm.prototype });
|
|
6502
|
+
l.map && (l.map = me(Y({}, l.map), {
|
|
6503
6503
|
__proto__: ym.prototype
|
|
6504
6504
|
})), t.push(l);
|
|
6505
6505
|
}
|
|
6506
6506
|
}
|
|
6507
6507
|
if (s.nodes && (s.nodes = e.nodes.map((r) => ci(r, t))), s.source) {
|
|
6508
|
-
let r = s.source, { inputId: l } = r, o =
|
|
6508
|
+
let r = s.source, { inputId: l } = r, o = Ct(r, ["inputId"]);
|
|
6509
6509
|
s.source = o, l != null && (s.source.input = t[l]);
|
|
6510
6510
|
}
|
|
6511
6511
|
if (s.type === "root")
|
|
@@ -6522,7 +6522,7 @@ function ci(e, t) {
|
|
|
6522
6522
|
}
|
|
6523
6523
|
var Im = ci;
|
|
6524
6524
|
ci.default = ci;
|
|
6525
|
-
let { dirname: en, relative:
|
|
6525
|
+
let { dirname: en, relative: Ua, resolve: Fa, sep: Ka } = Ne, { SourceMapConsumer: Ma, SourceMapGenerator: tn } = Ne, { pathToFileURL: vo } = Ne, Sm = Mn, Gm = !!(Ma && tn), Vm = !!(en && Fa && Ua && Ka), Xm = class {
|
|
6526
6526
|
constructor(e, t, i, n) {
|
|
6527
6527
|
this.stringify = e, this.mapOpts = i.map || {}, this.root = t, this.opts = i, this.css = n, this.originalCSS = n, this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute, this.memoizedFileURLs = /* @__PURE__ */ new Map(), this.memoizedPaths = /* @__PURE__ */ new Map(), this.memoizedURLs = /* @__PURE__ */ new Map();
|
|
6528
6528
|
}
|
|
@@ -6538,7 +6538,7 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
|
|
|
6538
6538
|
applyPrevMaps() {
|
|
6539
6539
|
for (let e of this.previous()) {
|
|
6540
6540
|
let t = this.toUrl(this.path(e.file)), i = e.root || en(e.file), n;
|
|
6541
|
-
this.mapOpts.sourcesContent === !1 ? (n = new
|
|
6541
|
+
this.mapOpts.sourcesContent === !1 ? (n = new Ma(e.text), n.sourcesContent && (n.sourcesContent = null)) : n = e.consumer(), this.map.applySourceMap(n, t, this.toUrl(this.path(i)));
|
|
6542
6542
|
}
|
|
6543
6543
|
}
|
|
6544
6544
|
clearAnnotation() {
|
|
@@ -6619,8 +6619,8 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
|
|
|
6619
6619
|
let t = this.memoizedPaths.get(e);
|
|
6620
6620
|
if (t) return t;
|
|
6621
6621
|
let i = this.opts.to ? en(this.opts.to) : ".";
|
|
6622
|
-
typeof this.mapOpts.annotation == "string" && (i = en(
|
|
6623
|
-
let n =
|
|
6622
|
+
typeof this.mapOpts.annotation == "string" && (i = en(Fa(i, this.mapOpts.annotation)));
|
|
6623
|
+
let n = Ua(i, e);
|
|
6624
6624
|
return this.memoizedPaths.set(e, n), n;
|
|
6625
6625
|
}
|
|
6626
6626
|
previous() {
|
|
@@ -6681,14 +6681,14 @@ let { dirname: en, relative: Fa, resolve: Ua, sep: Ka } = Ne, { SourceMapConsume
|
|
|
6681
6681
|
return this.memoizedURLs.set(e, i), i;
|
|
6682
6682
|
}
|
|
6683
6683
|
};
|
|
6684
|
-
var
|
|
6685
|
-
const os = 39, wo = 34, vi = 92, xo = 47, wi = 10,
|
|
6684
|
+
var Oa = Xm;
|
|
6685
|
+
const os = 39, wo = 34, vi = 92, xo = 47, wi = 10, Mt = 32, xi = 12, Ti = 9, Ni = 13, Wm = 91, Cm = 93, Rm = 40, km = 41, vm = 123, wm = 125, xm = 59, Tm = 42, Nm = 58, Lm = 64, Li = /[\t\n\f\r "#'()/;[\\\]{}]/g, Ji = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Jm = /.[\r\n"'(/\\]/, To = /[\da-f]/i;
|
|
6686
6686
|
var Ym = function(e, t = {}) {
|
|
6687
6687
|
let i = e.css.valueOf(), n = t.ignoreErrors, s, r, l, o, a, c, u, h, p, m, b = i.length, d = 0, S = [], I = [];
|
|
6688
6688
|
function V() {
|
|
6689
6689
|
return d;
|
|
6690
6690
|
}
|
|
6691
|
-
function
|
|
6691
|
+
function C(v) {
|
|
6692
6692
|
throw e.error("Unclosed " + v, d);
|
|
6693
6693
|
}
|
|
6694
6694
|
function X() {
|
|
@@ -6700,19 +6700,19 @@ var Ym = function(e, t = {}) {
|
|
|
6700
6700
|
let w = v ? v.ignoreUnclosed : !1;
|
|
6701
6701
|
switch (s = i.charCodeAt(d), s) {
|
|
6702
6702
|
case wi:
|
|
6703
|
-
case
|
|
6703
|
+
case Mt:
|
|
6704
6704
|
case Ti:
|
|
6705
6705
|
case Ni:
|
|
6706
6706
|
case xi: {
|
|
6707
6707
|
o = d;
|
|
6708
6708
|
do
|
|
6709
6709
|
o += 1, s = i.charCodeAt(o);
|
|
6710
|
-
while (s ===
|
|
6710
|
+
while (s === Mt || s === wi || s === Ti || s === Ni || s === xi);
|
|
6711
6711
|
c = ["space", i.slice(d, o)], d = o - 1;
|
|
6712
6712
|
break;
|
|
6713
6713
|
}
|
|
6714
|
-
case Cm:
|
|
6715
6714
|
case Wm:
|
|
6715
|
+
case Cm:
|
|
6716
6716
|
case vm:
|
|
6717
6717
|
case wm:
|
|
6718
6718
|
case Nm:
|
|
@@ -6723,7 +6723,7 @@ var Ym = function(e, t = {}) {
|
|
|
6723
6723
|
break;
|
|
6724
6724
|
}
|
|
6725
6725
|
case Rm: {
|
|
6726
|
-
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== os && p !== wo && p !==
|
|
6726
|
+
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== os && p !== wo && p !== Mt && p !== wi && p !== Ti && p !== xi && p !== Ni) {
|
|
6727
6727
|
o = d;
|
|
6728
6728
|
do {
|
|
6729
6729
|
if (u = !1, o = i.indexOf(")", o + 1), o === -1)
|
|
@@ -6731,7 +6731,7 @@ var Ym = function(e, t = {}) {
|
|
|
6731
6731
|
o = d;
|
|
6732
6732
|
break;
|
|
6733
6733
|
} else
|
|
6734
|
-
|
|
6734
|
+
C("bracket");
|
|
6735
6735
|
for (h = o; i.charCodeAt(h - 1) === vi; )
|
|
6736
6736
|
h -= 1, u = !u;
|
|
6737
6737
|
} while (u);
|
|
@@ -6749,7 +6749,7 @@ var Ym = function(e, t = {}) {
|
|
|
6749
6749
|
o = d + 1;
|
|
6750
6750
|
break;
|
|
6751
6751
|
} else
|
|
6752
|
-
|
|
6752
|
+
C("string");
|
|
6753
6753
|
for (h = o; i.charCodeAt(h - 1) === vi; )
|
|
6754
6754
|
h -= 1, u = !u;
|
|
6755
6755
|
} while (u);
|
|
@@ -6763,16 +6763,16 @@ var Ym = function(e, t = {}) {
|
|
|
6763
6763
|
case vi: {
|
|
6764
6764
|
for (o = d, l = !0; i.charCodeAt(o + 1) === vi; )
|
|
6765
6765
|
o += 1, l = !l;
|
|
6766
|
-
if (s = i.charCodeAt(o + 1), l && s !== xo && s !==
|
|
6766
|
+
if (s = i.charCodeAt(o + 1), l && s !== xo && s !== Mt && s !== wi && s !== Ti && s !== Ni && s !== xi && (o += 1, To.test(i.charAt(o)))) {
|
|
6767
6767
|
for (; To.test(i.charAt(o + 1)); )
|
|
6768
6768
|
o += 1;
|
|
6769
|
-
i.charCodeAt(o + 1) ===
|
|
6769
|
+
i.charCodeAt(o + 1) === Mt && (o += 1);
|
|
6770
6770
|
}
|
|
6771
6771
|
c = ["word", i.slice(d, o + 1), d, o], d = o;
|
|
6772
6772
|
break;
|
|
6773
6773
|
}
|
|
6774
6774
|
default: {
|
|
6775
|
-
s === xo && i.charCodeAt(d + 1) === Tm ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length :
|
|
6775
|
+
s === xo && i.charCodeAt(d + 1) === Tm ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : C("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Ji.lastIndex = d + 1, Ji.test(i), Ji.lastIndex === 0 ? o = i.length - 1 : o = Ji.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
|
|
6776
6776
|
break;
|
|
6777
6777
|
}
|
|
6778
6778
|
}
|
|
@@ -6788,23 +6788,23 @@ var Ym = function(e, t = {}) {
|
|
|
6788
6788
|
position: V
|
|
6789
6789
|
};
|
|
6790
6790
|
};
|
|
6791
|
-
let
|
|
6791
|
+
let Um = Vr, Fm = Fn, Km = Kn, Mm = gi, No = Wr, Om = Ym;
|
|
6792
6792
|
const Lo = {
|
|
6793
6793
|
empty: !0,
|
|
6794
6794
|
space: !0
|
|
6795
6795
|
};
|
|
6796
|
-
function
|
|
6796
|
+
function Em(e) {
|
|
6797
6797
|
for (let t = e.length - 1; t >= 0; t--) {
|
|
6798
6798
|
let i = e[t], n = i[3] || i[2];
|
|
6799
6799
|
if (n) return n;
|
|
6800
6800
|
}
|
|
6801
6801
|
}
|
|
6802
|
-
let
|
|
6802
|
+
let Hm = class {
|
|
6803
6803
|
constructor(e) {
|
|
6804
|
-
this.input = e, this.root = new
|
|
6804
|
+
this.input = e, this.root = new Mm(), this.current = this.root, this.spaces = "", this.semicolon = !1, this.createTokenizer(), this.root.source = { input: e, start: { column: 1, line: 1, offset: 0 } };
|
|
6805
6805
|
}
|
|
6806
6806
|
atrule(e) {
|
|
6807
|
-
let t = new
|
|
6807
|
+
let t = new Um();
|
|
6808
6808
|
t.name = e[1].slice(1), t.name === "" && this.unnamedAtrule(t, e), this.init(t, e[2]);
|
|
6809
6809
|
let i, n, s, r = !1, l = !1, o = [], a = [];
|
|
6810
6810
|
for (; !this.tokenizer.endOfFile(); ) {
|
|
@@ -6861,7 +6861,7 @@ let zm = class {
|
|
|
6861
6861
|
return !1;
|
|
6862
6862
|
}
|
|
6863
6863
|
comment(e) {
|
|
6864
|
-
let t = new
|
|
6864
|
+
let t = new Fm();
|
|
6865
6865
|
this.init(t, e[2]), t.source.end = this.getPosition(e[3] || e[2]), t.source.end.offset++;
|
|
6866
6866
|
let i = e[1].slice(2, -2);
|
|
6867
6867
|
if (/^\s*$/.test(i))
|
|
@@ -6872,14 +6872,14 @@ let zm = class {
|
|
|
6872
6872
|
}
|
|
6873
6873
|
}
|
|
6874
6874
|
createTokenizer() {
|
|
6875
|
-
this.tokenizer =
|
|
6875
|
+
this.tokenizer = Om(this.input);
|
|
6876
6876
|
}
|
|
6877
6877
|
decl(e, t) {
|
|
6878
6878
|
let i = new Km();
|
|
6879
6879
|
this.init(i, e[0][2]);
|
|
6880
6880
|
let n = e[e.length - 1];
|
|
6881
6881
|
for (n[0] === ";" && (this.semicolon = !0, e.pop()), i.source.end = this.getPosition(
|
|
6882
|
-
n[3] || n[2] ||
|
|
6882
|
+
n[3] || n[2] || Em(e)
|
|
6883
6883
|
), i.source.end.offset++; e[0][0] !== "word"; )
|
|
6884
6884
|
e.length === 1 && this.unknownWord(e), i.raws.before += e.shift()[1];
|
|
6885
6885
|
for (i.source.start = this.getPosition(e[0][2]), i.prop = ""; e.length; ) {
|
|
@@ -7095,8 +7095,8 @@ let zm = class {
|
|
|
7095
7095
|
);
|
|
7096
7096
|
}
|
|
7097
7097
|
};
|
|
7098
|
-
var
|
|
7099
|
-
let Pm = ct, Bm =
|
|
7098
|
+
var zm = Hm;
|
|
7099
|
+
let Pm = ct, Bm = Mn, Dm = zm;
|
|
7100
7100
|
function Xn(e, t) {
|
|
7101
7101
|
let i = new Bm(e, t), n = new Dm(i);
|
|
7102
7102
|
try {
|
|
@@ -7109,10 +7109,10 @@ You tried to parse Less with the standard CSS parser; try again with the postcss
|
|
|
7109
7109
|
}
|
|
7110
7110
|
return n.root;
|
|
7111
7111
|
}
|
|
7112
|
-
var
|
|
7112
|
+
var Cr = Xn;
|
|
7113
7113
|
Xn.default = Xn;
|
|
7114
7114
|
Pm.registerParse(Xn);
|
|
7115
|
-
let
|
|
7115
|
+
let Ms = class {
|
|
7116
7116
|
constructor(e, t = {}) {
|
|
7117
7117
|
if (this.type = "warning", this.text = e, t.node && t.node.source) {
|
|
7118
7118
|
let i = t.node.rangeBy(t);
|
|
@@ -7128,9 +7128,9 @@ let Os = class {
|
|
|
7128
7128
|
}).message : this.plugin ? this.plugin + ": " + this.text : this.text;
|
|
7129
7129
|
}
|
|
7130
7130
|
};
|
|
7131
|
-
var
|
|
7132
|
-
|
|
7133
|
-
let jm =
|
|
7131
|
+
var Ea = Ms;
|
|
7132
|
+
Ms.default = Ms;
|
|
7133
|
+
let jm = Ea, Os = class {
|
|
7134
7134
|
get content() {
|
|
7135
7135
|
return this.css;
|
|
7136
7136
|
}
|
|
@@ -7149,13 +7149,13 @@ let jm = Ma, Es = class {
|
|
|
7149
7149
|
return this.messages.filter((e) => e.type === "warning");
|
|
7150
7150
|
}
|
|
7151
7151
|
};
|
|
7152
|
-
var Rr =
|
|
7153
|
-
|
|
7152
|
+
var Rr = Os;
|
|
7153
|
+
Os.default = Os;
|
|
7154
7154
|
let Jo = {};
|
|
7155
|
-
var
|
|
7155
|
+
var Ha = function(e) {
|
|
7156
7156
|
Jo[e] || (Jo[e] = !0, typeof console < "u" && console.warn && console.warn(e));
|
|
7157
7157
|
};
|
|
7158
|
-
let Qm = ct, Am = Xr, _m =
|
|
7158
|
+
let Qm = ct, Am = Xr, _m = Oa, $m = Cr, Yo = Rr, qm = gi, eb = Yn, { isClean: Ye, my: tb } = yi, ib = Ha;
|
|
7159
7159
|
const nb = {
|
|
7160
7160
|
atrule: "AtRule",
|
|
7161
7161
|
comment: "Comment",
|
|
@@ -7185,10 +7185,10 @@ const nb = {
|
|
|
7185
7185
|
postcssPlugin: !0,
|
|
7186
7186
|
prepare: !0
|
|
7187
7187
|
}, vt = 0;
|
|
7188
|
-
function
|
|
7188
|
+
function Ot(e) {
|
|
7189
7189
|
return typeof e == "object" && typeof e.then == "function";
|
|
7190
7190
|
}
|
|
7191
|
-
function
|
|
7191
|
+
function za(e) {
|
|
7192
7192
|
let t = !1, i = nb[e.type];
|
|
7193
7193
|
return e.type === "decl" ? t = e.prop.toLowerCase() : e.type === "atrule" && (t = e.name.toLowerCase()), t && e.append ? [
|
|
7194
7194
|
i,
|
|
@@ -7198,9 +7198,9 @@ function Ha(e) {
|
|
|
7198
7198
|
i + "Exit-" + t
|
|
7199
7199
|
] : t ? [i, i + "-" + t, i + "Exit", i + "Exit-" + t] : e.append ? [i, vt, i + "Exit"] : [i, i + "Exit"];
|
|
7200
7200
|
}
|
|
7201
|
-
function
|
|
7201
|
+
function Uo(e) {
|
|
7202
7202
|
let t;
|
|
7203
|
-
return e.type === "document" ? t = ["Document", vt, "DocumentExit"] : e.type === "root" ? t = ["Root", vt, "RootExit"] : t =
|
|
7203
|
+
return e.type === "document" ? t = ["Document", vt, "DocumentExit"] : e.type === "root" ? t = ["Root", vt, "RootExit"] : t = za(e), {
|
|
7204
7204
|
eventIndex: 0,
|
|
7205
7205
|
events: t,
|
|
7206
7206
|
iterator: 0,
|
|
@@ -7209,10 +7209,10 @@ function Fo(e) {
|
|
|
7209
7209
|
visitors: []
|
|
7210
7210
|
};
|
|
7211
7211
|
}
|
|
7212
|
-
function
|
|
7213
|
-
return e[Ye] = !1, e.nodes && e.nodes.forEach((t) =>
|
|
7212
|
+
function Es(e) {
|
|
7213
|
+
return e[Ye] = !1, e.nodes && e.nodes.forEach((t) => Es(t)), e;
|
|
7214
7214
|
}
|
|
7215
|
-
let
|
|
7215
|
+
let Hs = {}, wt = class Pa {
|
|
7216
7216
|
get content() {
|
|
7217
7217
|
return this.stringify().content;
|
|
7218
7218
|
}
|
|
@@ -7241,9 +7241,9 @@ let zs = {}, wt = class Pa {
|
|
|
7241
7241
|
this.stringified = !1, this.processed = !1;
|
|
7242
7242
|
let s;
|
|
7243
7243
|
if (typeof i == "object" && i !== null && (i.type === "root" || i.type === "document"))
|
|
7244
|
-
s =
|
|
7244
|
+
s = Es(i);
|
|
7245
7245
|
else if (i instanceof Pa || i instanceof Yo)
|
|
7246
|
-
s =
|
|
7246
|
+
s = Es(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
|
|
7247
7247
|
else {
|
|
7248
7248
|
let r = $m;
|
|
7249
7249
|
n.syntax && (r = n.syntax.parse), n.parser && (r = n.parser), r.parse && (r = r.parse);
|
|
@@ -7254,7 +7254,7 @@ let zs = {}, wt = class Pa {
|
|
|
7254
7254
|
}
|
|
7255
7255
|
s && !s[tb] && Qm.rebuild(s);
|
|
7256
7256
|
}
|
|
7257
|
-
this.result = new Yo(t, s, n), this.helpers =
|
|
7257
|
+
this.result = new Yo(t, s, n), this.helpers = me(Y({}, Hs), { postcss: Hs, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
|
|
7258
7258
|
}
|
|
7259
7259
|
async() {
|
|
7260
7260
|
return this.error ? Promise.reject(this.error) : this.processed ? Promise.resolve(this.result) : (this.processing || (this.processing = this.runAsync()), this.processing);
|
|
@@ -7309,11 +7309,11 @@ let zs = {}, wt = class Pa {
|
|
|
7309
7309
|
this.hasListener = Object.keys(this.listeners).length > 0;
|
|
7310
7310
|
}
|
|
7311
7311
|
runAsync() {
|
|
7312
|
-
return
|
|
7312
|
+
return ye(this, null, function* () {
|
|
7313
7313
|
this.plugin = 0;
|
|
7314
7314
|
for (let t = 0; t < this.plugins.length; t++) {
|
|
7315
7315
|
let i = this.plugins[t], n = this.runOnRoot(i);
|
|
7316
|
-
if (
|
|
7316
|
+
if (Ot(n))
|
|
7317
7317
|
try {
|
|
7318
7318
|
yield n;
|
|
7319
7319
|
} catch (s) {
|
|
@@ -7324,10 +7324,10 @@ let zs = {}, wt = class Pa {
|
|
|
7324
7324
|
let t = this.result.root;
|
|
7325
7325
|
for (; !t[Ye]; ) {
|
|
7326
7326
|
t[Ye] = !0;
|
|
7327
|
-
let i = [
|
|
7327
|
+
let i = [Uo(t)];
|
|
7328
7328
|
for (; i.length > 0; ) {
|
|
7329
7329
|
let n = this.visitTick(i);
|
|
7330
|
-
if (
|
|
7330
|
+
if (Ot(n))
|
|
7331
7331
|
try {
|
|
7332
7332
|
yield n;
|
|
7333
7333
|
} catch (s) {
|
|
@@ -7363,7 +7363,7 @@ let zs = {}, wt = class Pa {
|
|
|
7363
7363
|
let i = this.result.root.nodes.map(
|
|
7364
7364
|
(n) => t.Once(n, this.helpers)
|
|
7365
7365
|
);
|
|
7366
|
-
return
|
|
7366
|
+
return Ot(i[0]) ? Promise.all(i) : i;
|
|
7367
7367
|
}
|
|
7368
7368
|
return t.Once(this.result.root, this.helpers);
|
|
7369
7369
|
} else if (typeof t == "function")
|
|
@@ -7388,7 +7388,7 @@ let zs = {}, wt = class Pa {
|
|
|
7388
7388
|
throw this.getAsyncError();
|
|
7389
7389
|
for (let t of this.plugins) {
|
|
7390
7390
|
let i = this.runOnRoot(t);
|
|
7391
|
-
if (
|
|
7391
|
+
if (Ot(i))
|
|
7392
7392
|
throw this.getAsyncError();
|
|
7393
7393
|
}
|
|
7394
7394
|
if (this.prepareVisitors(), this.hasListener) {
|
|
@@ -7423,7 +7423,7 @@ let zs = {}, wt = class Pa {
|
|
|
7423
7423
|
}
|
|
7424
7424
|
if (i.type !== "root" && i.type !== "document" && !i.parent)
|
|
7425
7425
|
return !0;
|
|
7426
|
-
if (
|
|
7426
|
+
if (Ot(r))
|
|
7427
7427
|
throw this.getAsyncError();
|
|
7428
7428
|
}
|
|
7429
7429
|
}
|
|
@@ -7446,7 +7446,7 @@ let zs = {}, wt = class Pa {
|
|
|
7446
7446
|
let l = i.iterator, o;
|
|
7447
7447
|
for (; o = n.nodes[n.indexes[l]]; )
|
|
7448
7448
|
if (n.indexes[l] += 1, !o[Ye]) {
|
|
7449
|
-
o[Ye] = !0, t.push(
|
|
7449
|
+
o[Ye] = !0, t.push(Uo(o));
|
|
7450
7450
|
return;
|
|
7451
7451
|
}
|
|
7452
7452
|
i.iterator = 0, delete n.indexes[l];
|
|
@@ -7466,7 +7466,7 @@ let zs = {}, wt = class Pa {
|
|
|
7466
7466
|
}
|
|
7467
7467
|
walkSync(t) {
|
|
7468
7468
|
t[Ye] = !0;
|
|
7469
|
-
let i =
|
|
7469
|
+
let i = za(t);
|
|
7470
7470
|
for (let n of i)
|
|
7471
7471
|
if (n === vt)
|
|
7472
7472
|
t.nodes && t.each((s) => {
|
|
@@ -7483,15 +7483,15 @@ let zs = {}, wt = class Pa {
|
|
|
7483
7483
|
}
|
|
7484
7484
|
};
|
|
7485
7485
|
wt.registerPostcss = (e) => {
|
|
7486
|
-
|
|
7486
|
+
Hs = e;
|
|
7487
7487
|
};
|
|
7488
7488
|
var Ba = wt;
|
|
7489
7489
|
wt.default = wt;
|
|
7490
7490
|
qm.registerLazyResult(wt);
|
|
7491
7491
|
Am.registerLazyResult(wt);
|
|
7492
|
-
let ob =
|
|
7492
|
+
let ob = Oa, lb = Cr;
|
|
7493
7493
|
const ab = Rr;
|
|
7494
|
-
let cb = Yn, ub =
|
|
7494
|
+
let cb = Yn, ub = Ha, zs = class {
|
|
7495
7495
|
get content() {
|
|
7496
7496
|
return this.result.css;
|
|
7497
7497
|
}
|
|
@@ -7568,8 +7568,8 @@ let cb = Yn, ub = za, Hs = class {
|
|
|
7568
7568
|
return [];
|
|
7569
7569
|
}
|
|
7570
7570
|
};
|
|
7571
|
-
var db =
|
|
7572
|
-
|
|
7571
|
+
var db = zs;
|
|
7572
|
+
zs.default = zs;
|
|
7573
7573
|
let hb = Xr, pb = Ba, mb = db, bb = gi, ui = class {
|
|
7574
7574
|
constructor(e = []) {
|
|
7575
7575
|
this.version = "8.5.6", this.plugins = this.normalize(e);
|
|
@@ -7603,7 +7603,7 @@ var fb = ui;
|
|
|
7603
7603
|
ui.default = ui;
|
|
7604
7604
|
bb.registerProcessor(ui);
|
|
7605
7605
|
hb.registerProcessor(ui);
|
|
7606
|
-
let Da = Vr, ja =
|
|
7606
|
+
let Da = Vr, ja = Fn, yb = ct, gb = Ir, Qa = Kn, Aa = Xr, Zb = Im, Ib = Mn, Sb = Ba, Gb = Ja, Vb = Un, Xb = Cr, kr = fb, Wb = Rr, _a = gi, $a = Wr, Cb = Yn, Rb = Ea;
|
|
7607
7607
|
function q(...e) {
|
|
7608
7608
|
return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new kr(e);
|
|
7609
7609
|
}
|
|
@@ -7629,7 +7629,7 @@ https://www.w3ctech.com/topic/2226`
|
|
|
7629
7629
|
return q([n(o)]).process(r, l);
|
|
7630
7630
|
}, n;
|
|
7631
7631
|
};
|
|
7632
|
-
q.stringify =
|
|
7632
|
+
q.stringify = Cb;
|
|
7633
7633
|
q.parse = Xb;
|
|
7634
7634
|
q.fromJSON = Zb;
|
|
7635
7635
|
q.list = Gb;
|
|
@@ -7647,7 +7647,7 @@ q.Document = Aa;
|
|
|
7647
7647
|
q.Comment = ja;
|
|
7648
7648
|
q.Warning = Rb;
|
|
7649
7649
|
q.AtRule = Da;
|
|
7650
|
-
q.Result =
|
|
7650
|
+
q.Result = Wb;
|
|
7651
7651
|
q.Input = Ib;
|
|
7652
7652
|
q.Rule = $a;
|
|
7653
7653
|
q.Root = _a;
|
|
@@ -7674,8 +7674,8 @@ function wb(e) {
|
|
|
7674
7674
|
});
|
|
7675
7675
|
}), i;
|
|
7676
7676
|
}
|
|
7677
|
-
var vr = { exports: {} },
|
|
7678
|
-
return { isColorSupported: !1, reset:
|
|
7677
|
+
var vr = { exports: {} }, O = String, qa = function() {
|
|
7678
|
+
return { isColorSupported: !1, reset: O, bold: O, dim: O, italic: O, underline: O, inverse: O, hidden: O, strikethrough: O, black: O, red: O, green: O, yellow: O, blue: O, magenta: O, cyan: O, white: O, gray: O, bgBlack: O, bgRed: O, bgGreen: O, bgYellow: O, bgBlue: O, bgMagenta: O, bgCyan: O, bgWhite: O, blackBright: O, redBright: O, greenBright: O, yellowBright: O, blueBright: O, magentaBright: O, cyanBright: O, whiteBright: O, bgBlackBright: O, bgRedBright: O, bgGreenBright: O, bgYellowBright: O, bgBlueBright: O, bgMagentaBright: O, bgCyanBright: O, bgWhiteBright: O };
|
|
7679
7679
|
};
|
|
7680
7680
|
vr.exports = qa();
|
|
7681
7681
|
vr.exports.createColors = qa;
|
|
@@ -7684,7 +7684,7 @@ const Tb = {}, Nb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
|
|
|
7684
7684
|
__proto__: null,
|
|
7685
7685
|
default: Tb
|
|
7686
7686
|
}, Symbol.toStringTag, { value: "Module" })), Le = /* @__PURE__ */ wb(Nb);
|
|
7687
|
-
let
|
|
7687
|
+
let Fo = xb, Ko = Le, Ps = class ec extends Error {
|
|
7688
7688
|
constructor(t, i, n, s, r, l) {
|
|
7689
7689
|
super(t), this.name = "CssSyntaxError", this.reason = t, r && (this.file = r), s && (this.source = s), l && (this.plugin = l), typeof i < "u" && typeof n < "u" && (typeof i == "number" ? (this.line = i, this.column = n) : (this.line = i.line, this.column = i.column, this.endLine = n.line, this.endColumn = n.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, ec);
|
|
7690
7690
|
}
|
|
@@ -7694,10 +7694,10 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
|
|
|
7694
7694
|
showSourceCode(t) {
|
|
7695
7695
|
if (!this.source) return "";
|
|
7696
7696
|
let i = this.source;
|
|
7697
|
-
t == null && (t =
|
|
7697
|
+
t == null && (t = Fo.isColorSupported);
|
|
7698
7698
|
let n = (u) => u, s = (u) => u, r = (u) => u;
|
|
7699
7699
|
if (t) {
|
|
7700
|
-
let { bold: u, gray: h, red: p } =
|
|
7700
|
+
let { bold: u, gray: h, red: p } = Fo.createColors(!0);
|
|
7701
7701
|
s = (m) => u(p(m)), n = (m) => h(m), Ko && (r = (m) => Ko(m));
|
|
7702
7702
|
}
|
|
7703
7703
|
let l = i.split(/\r?\n/), o = Math.max(this.line - 3, 0), a = Math.min(this.line + 2, l.length), c = String(a).length;
|
|
@@ -7708,9 +7708,9 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
|
|
|
7708
7708
|
let d = 20, S = Math.max(0, this.column - d), I = Math.max(
|
|
7709
7709
|
this.column + d,
|
|
7710
7710
|
this.endColumn + d
|
|
7711
|
-
), V = u.slice(S, I),
|
|
7711
|
+
), V = u.slice(S, I), C = n(m.replace(/\d/g, " ")) + u.slice(0, Math.min(this.column - 1, d - 1)).replace(/[^\t]/g, " ");
|
|
7712
7712
|
return s(">") + n(m) + r(V) + `
|
|
7713
|
-
` +
|
|
7713
|
+
` + C + s("^");
|
|
7714
7714
|
}
|
|
7715
7715
|
let b = n(m.replace(/\d/g, " ")) + u.slice(0, this.column - 1).replace(/[^\t]/g, " ");
|
|
7716
7716
|
return s(">") + n(m) + r(u) + `
|
|
@@ -7730,7 +7730,7 @@ let Uo = xb, Ko = Le, Ps = class ec extends Error {
|
|
|
7730
7730
|
};
|
|
7731
7731
|
var wr = Ps;
|
|
7732
7732
|
Ps.default = Ps;
|
|
7733
|
-
const
|
|
7733
|
+
const Mo = {
|
|
7734
7734
|
after: `
|
|
7735
7735
|
`,
|
|
7736
7736
|
beforeClose: `
|
|
@@ -7813,7 +7813,7 @@ let Bs = class {
|
|
|
7813
7813
|
let s = e.parent;
|
|
7814
7814
|
if (i === "before" && (!s || s.type === "root" && s.first === e || s && s.type === "document"))
|
|
7815
7815
|
return "";
|
|
7816
|
-
if (!s) return
|
|
7816
|
+
if (!s) return Mo[i];
|
|
7817
7817
|
let r = e.root();
|
|
7818
7818
|
if (r.rawCache || (r.rawCache = {}), typeof r.rawCache[i] < "u")
|
|
7819
7819
|
return r.rawCache[i];
|
|
@@ -7825,7 +7825,7 @@ let Bs = class {
|
|
|
7825
7825
|
if (n = o.raws[t], typeof n < "u") return !1;
|
|
7826
7826
|
});
|
|
7827
7827
|
}
|
|
7828
|
-
return typeof n > "u" && (n =
|
|
7828
|
+
return typeof n > "u" && (n = Mo[i]), r.rawCache[i] = n, n;
|
|
7829
7829
|
}
|
|
7830
7830
|
rawBeforeClose(e) {
|
|
7831
7831
|
let t;
|
|
@@ -7923,12 +7923,12 @@ let Jb = tc;
|
|
|
7923
7923
|
function Ds(e, t) {
|
|
7924
7924
|
new Jb(t).stringify(e);
|
|
7925
7925
|
}
|
|
7926
|
-
var
|
|
7926
|
+
var On = Ds;
|
|
7927
7927
|
Ds.default = Ds;
|
|
7928
7928
|
var Zi = {};
|
|
7929
7929
|
Zi.isClean = Symbol("isClean");
|
|
7930
7930
|
Zi.my = Symbol("my");
|
|
7931
|
-
let Yb = wr,
|
|
7931
|
+
let Yb = wr, Ub = tc, Fb = On, { isClean: Et, my: Kb } = Zi;
|
|
7932
7932
|
function js(e, t) {
|
|
7933
7933
|
let i = new e.constructor();
|
|
7934
7934
|
for (let n in e) {
|
|
@@ -7957,7 +7957,7 @@ let Qs = class {
|
|
|
7957
7957
|
return this;
|
|
7958
7958
|
}
|
|
7959
7959
|
constructor(e = {}) {
|
|
7960
|
-
this.raws = {}, this[
|
|
7960
|
+
this.raws = {}, this[Et] = !1, this[Kb] = !0;
|
|
7961
7961
|
for (let t in e)
|
|
7962
7962
|
if (t === "nodes") {
|
|
7963
7963
|
this.nodes = [];
|
|
@@ -8029,14 +8029,14 @@ let Qs = class {
|
|
|
8029
8029
|
}
|
|
8030
8030
|
/* c8 ignore next 3 */
|
|
8031
8031
|
markClean() {
|
|
8032
|
-
this[
|
|
8032
|
+
this[Et] = !0;
|
|
8033
8033
|
}
|
|
8034
8034
|
markDirty() {
|
|
8035
|
-
if (this[
|
|
8036
|
-
this[
|
|
8035
|
+
if (this[Et]) {
|
|
8036
|
+
this[Et] = !1;
|
|
8037
8037
|
let e = this;
|
|
8038
8038
|
for (; e = e.parent; )
|
|
8039
|
-
e[
|
|
8039
|
+
e[Et] = !1;
|
|
8040
8040
|
}
|
|
8041
8041
|
}
|
|
8042
8042
|
next() {
|
|
@@ -8114,7 +8114,7 @@ let Qs = class {
|
|
|
8114
8114
|
}), { end: n, start: i };
|
|
8115
8115
|
}
|
|
8116
8116
|
raw(e, t) {
|
|
8117
|
-
return new
|
|
8117
|
+
return new Ub().raw(this, e, t);
|
|
8118
8118
|
}
|
|
8119
8119
|
remove() {
|
|
8120
8120
|
return this.parent && this.parent.removeChild(this), this.parent = void 0, this;
|
|
@@ -8161,7 +8161,7 @@ let Qs = class {
|
|
|
8161
8161
|
toProxy() {
|
|
8162
8162
|
return this.proxyCache || (this.proxyCache = new Proxy(this, this.getProxyProcessor())), this.proxyCache;
|
|
8163
8163
|
}
|
|
8164
|
-
toString(e =
|
|
8164
|
+
toString(e = Fb) {
|
|
8165
8165
|
e.stringify && (e = e.stringify);
|
|
8166
8166
|
let t = "";
|
|
8167
8167
|
return e(this, (i) => {
|
|
@@ -8174,26 +8174,26 @@ let Qs = class {
|
|
|
8174
8174
|
return e.warn(t, n);
|
|
8175
8175
|
}
|
|
8176
8176
|
};
|
|
8177
|
-
var
|
|
8177
|
+
var En = Qs;
|
|
8178
8178
|
Qs.default = Qs;
|
|
8179
|
-
let
|
|
8179
|
+
let Mb = En, As = class extends Mb {
|
|
8180
8180
|
constructor(e) {
|
|
8181
8181
|
super(e), this.type = "comment";
|
|
8182
8182
|
}
|
|
8183
8183
|
};
|
|
8184
|
-
var
|
|
8184
|
+
var Hn = As;
|
|
8185
8185
|
As.default = As;
|
|
8186
|
-
let
|
|
8186
|
+
let Ob = En, _s = class extends Ob {
|
|
8187
8187
|
get variable() {
|
|
8188
8188
|
return this.prop.startsWith("--") || this.prop[0] === "$";
|
|
8189
8189
|
}
|
|
8190
8190
|
constructor(e) {
|
|
8191
|
-
e && typeof e.value < "u" && typeof e.value != "string" && (e =
|
|
8191
|
+
e && typeof e.value < "u" && typeof e.value != "string" && (e = me(Y({}, e), { value: String(e.value) })), super(e), this.type = "decl";
|
|
8192
8192
|
}
|
|
8193
8193
|
};
|
|
8194
|
-
var
|
|
8194
|
+
var zn = _s;
|
|
8195
8195
|
_s.default = _s;
|
|
8196
|
-
let ic =
|
|
8196
|
+
let ic = Hn, nc = zn, Eb = En, { isClean: sc, my: rc } = Zi, xr, oc, lc, Tr;
|
|
8197
8197
|
function ac(e) {
|
|
8198
8198
|
return e.map((t) => (t.nodes && (t.nodes = ac(t.nodes)), delete t.source, t));
|
|
8199
8199
|
}
|
|
@@ -8202,7 +8202,7 @@ function cc(e) {
|
|
|
8202
8202
|
for (let t of e.proxyOf.nodes)
|
|
8203
8203
|
cc(t);
|
|
8204
8204
|
}
|
|
8205
|
-
let je = class uc extends
|
|
8205
|
+
let je = class uc extends Eb {
|
|
8206
8206
|
get first() {
|
|
8207
8207
|
if (this.proxyOf.nodes)
|
|
8208
8208
|
return this.proxyOf.nodes[0];
|
|
@@ -8410,7 +8410,7 @@ je.rebuild = (e) => {
|
|
|
8410
8410
|
je.rebuild(t);
|
|
8411
8411
|
});
|
|
8412
8412
|
};
|
|
8413
|
-
let dc = ut,
|
|
8413
|
+
let dc = ut, Wn = class extends dc {
|
|
8414
8414
|
constructor(e) {
|
|
8415
8415
|
super(e), this.type = "atrule";
|
|
8416
8416
|
}
|
|
@@ -8421,10 +8421,10 @@ let dc = ut, Cn = class extends dc {
|
|
|
8421
8421
|
return this.proxyOf.nodes || (this.nodes = []), super.prepend(...e);
|
|
8422
8422
|
}
|
|
8423
8423
|
};
|
|
8424
|
-
var Nr =
|
|
8425
|
-
|
|
8426
|
-
dc.registerAtRule(
|
|
8427
|
-
let
|
|
8424
|
+
var Nr = Wn;
|
|
8425
|
+
Wn.default = Wn;
|
|
8426
|
+
dc.registerAtRule(Wn);
|
|
8427
|
+
let Hb = ut, hc, pc, di = class extends Hb {
|
|
8428
8428
|
constructor(e) {
|
|
8429
8429
|
super(Y({ type: "document" }, e)), this.nodes || (this.nodes = []);
|
|
8430
8430
|
}
|
|
@@ -8440,14 +8440,14 @@ di.registerProcessor = (e) => {
|
|
|
8440
8440
|
};
|
|
8441
8441
|
var Lr = di;
|
|
8442
8442
|
di.default = di;
|
|
8443
|
-
let
|
|
8443
|
+
let zb = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", Pb = (e = 21) => {
|
|
8444
8444
|
let t = "", i = e | 0;
|
|
8445
8445
|
for (; i--; )
|
|
8446
|
-
t +=
|
|
8446
|
+
t += zb[Math.random() * 64 | 0];
|
|
8447
8447
|
return t;
|
|
8448
8448
|
};
|
|
8449
8449
|
var Bb = { nanoid: Pb };
|
|
8450
|
-
let { existsSync: Db, readFileSync: jb } = Le, { dirname: ls, join: Qb } = Le, { SourceMapConsumer:
|
|
8450
|
+
let { existsSync: Db, readFileSync: jb } = Le, { dirname: ls, join: Qb } = Le, { SourceMapConsumer: Oo, SourceMapGenerator: Eo } = Le;
|
|
8451
8451
|
function Ab(e) {
|
|
8452
8452
|
return Buffer ? Buffer.from(e, "base64").toString() : window.atob(e);
|
|
8453
8453
|
}
|
|
@@ -8459,7 +8459,7 @@ let $s = class {
|
|
|
8459
8459
|
!this.mapFile && t.from && (this.mapFile = t.from), this.mapFile && (this.root = ls(this.mapFile)), n && (this.text = n);
|
|
8460
8460
|
}
|
|
8461
8461
|
consumer() {
|
|
8462
|
-
return this.consumerCache || (this.consumerCache = new
|
|
8462
|
+
return this.consumerCache || (this.consumerCache = new Oo(this.text)), this.consumerCache;
|
|
8463
8463
|
}
|
|
8464
8464
|
decodeInline(e) {
|
|
8465
8465
|
let t = /^data:application\/json;charset=utf-?8;base64,/, i = /^data:application\/json;base64,/, n = /^data:application\/json;charset=utf-?8,/, s = /^data:application\/json,/, r = e.match(n) || e.match(s);
|
|
@@ -8503,9 +8503,9 @@ let $s = class {
|
|
|
8503
8503
|
return n;
|
|
8504
8504
|
}
|
|
8505
8505
|
} else {
|
|
8506
|
+
if (t instanceof Oo)
|
|
8507
|
+
return Eo.fromSourceMap(t).toString();
|
|
8506
8508
|
if (t instanceof Eo)
|
|
8507
|
-
return Mo.fromSourceMap(t).toString();
|
|
8508
|
-
if (t instanceof Mo)
|
|
8509
8509
|
return t.toString();
|
|
8510
8510
|
if (this.isMap(t))
|
|
8511
8511
|
return JSON.stringify(t);
|
|
@@ -8531,7 +8531,7 @@ let $s = class {
|
|
|
8531
8531
|
};
|
|
8532
8532
|
var mc = $s;
|
|
8533
8533
|
$s.default = $s;
|
|
8534
|
-
let { nanoid: _b } = Bb, { isAbsolute: qs, resolve: er } = Le, { SourceMapConsumer: $b, SourceMapGenerator: qb } = Le, { fileURLToPath:
|
|
8534
|
+
let { nanoid: _b } = Bb, { isAbsolute: qs, resolve: er } = Le, { SourceMapConsumer: $b, SourceMapGenerator: qb } = Le, { fileURLToPath: Ho, pathToFileURL: Yi } = Le, zo = wr, ef = mc, as = Le, cs = Symbol("lineToIndexCache"), tf = !!($b && qb), Po = !!(er && qs);
|
|
8535
8535
|
function Bo(e) {
|
|
8536
8536
|
if (e[cs]) return e[cs];
|
|
8537
8537
|
let t = e.css.split(`
|
|
@@ -8540,7 +8540,7 @@ function Bo(e) {
|
|
|
8540
8540
|
i[s] = n, n += t[s].length + 1;
|
|
8541
8541
|
return e[cs] = i, i;
|
|
8542
8542
|
}
|
|
8543
|
-
let
|
|
8543
|
+
let Cn = class {
|
|
8544
8544
|
get from() {
|
|
8545
8545
|
return this.file || this.id;
|
|
8546
8546
|
}
|
|
@@ -8581,14 +8581,14 @@ let Wn = class {
|
|
|
8581
8581
|
t = u.line, i = u.col;
|
|
8582
8582
|
}
|
|
8583
8583
|
let c = this.origin(t, i, r, s);
|
|
8584
|
-
return c ? a = new
|
|
8584
|
+
return c ? a = new zo(
|
|
8585
8585
|
e,
|
|
8586
8586
|
c.endLine === void 0 ? c.line : { column: c.column, line: c.line },
|
|
8587
8587
|
c.endLine === void 0 ? c.column : { column: c.endColumn, line: c.endLine },
|
|
8588
8588
|
c.source,
|
|
8589
8589
|
c.file,
|
|
8590
8590
|
n.plugin
|
|
8591
|
-
) : a = new
|
|
8591
|
+
) : a = new zo(
|
|
8592
8592
|
e,
|
|
8593
8593
|
r === void 0 ? t : { column: i, line: t },
|
|
8594
8594
|
r === void 0 ? i : { column: s, line: r },
|
|
@@ -8643,8 +8643,8 @@ let Wn = class {
|
|
|
8643
8643
|
url: o.toString()
|
|
8644
8644
|
};
|
|
8645
8645
|
if (o.protocol === "file:")
|
|
8646
|
-
if (
|
|
8647
|
-
a.file =
|
|
8646
|
+
if (Ho)
|
|
8647
|
+
a.file = Ho(o);
|
|
8648
8648
|
else
|
|
8649
8649
|
throw new Error("file: protocol is not available in this PostCSS build");
|
|
8650
8650
|
let c = s.sourceContentFor(r.source);
|
|
@@ -8657,9 +8657,9 @@ let Wn = class {
|
|
|
8657
8657
|
return this.map && (e.map = Y({}, this.map), e.map.consumerCache && (e.map.consumerCache = void 0)), e;
|
|
8658
8658
|
}
|
|
8659
8659
|
};
|
|
8660
|
-
var Pn =
|
|
8661
|
-
|
|
8662
|
-
as && as.registerInput && as.registerInput(
|
|
8660
|
+
var Pn = Cn;
|
|
8661
|
+
Cn.default = Cn;
|
|
8662
|
+
as && as.registerInput && as.registerInput(Cn);
|
|
8663
8663
|
let bc = ut, fc, yc, xt = class extends bc {
|
|
8664
8664
|
constructor(e) {
|
|
8665
8665
|
super(e), this.type = "root", this.nodes || (this.nodes = []);
|
|
@@ -8725,21 +8725,21 @@ let Zc = ut, nf = gc, Rn = class extends Zc {
|
|
|
8725
8725
|
var Jr = Rn;
|
|
8726
8726
|
Rn.default = Rn;
|
|
8727
8727
|
Zc.registerRule(Rn);
|
|
8728
|
-
let sf = Nr, rf =
|
|
8728
|
+
let sf = Nr, rf = Hn, of = zn, lf = Pn, af = mc, cf = Ii, uf = Jr;
|
|
8729
8729
|
function pi(e, t) {
|
|
8730
8730
|
if (Array.isArray(e)) return e.map((r) => pi(r));
|
|
8731
|
-
let i = e, { inputs: n } = i, s =
|
|
8731
|
+
let i = e, { inputs: n } = i, s = Ct(i, ["inputs"]);
|
|
8732
8732
|
if (n) {
|
|
8733
8733
|
t = [];
|
|
8734
8734
|
for (let r of n) {
|
|
8735
|
-
let l =
|
|
8736
|
-
l.map && (l.map =
|
|
8735
|
+
let l = me(Y({}, r), { __proto__: lf.prototype });
|
|
8736
|
+
l.map && (l.map = me(Y({}, l.map), {
|
|
8737
8737
|
__proto__: af.prototype
|
|
8738
8738
|
})), t.push(l);
|
|
8739
8739
|
}
|
|
8740
8740
|
}
|
|
8741
8741
|
if (s.nodes && (s.nodes = e.nodes.map((r) => pi(r, t))), s.source) {
|
|
8742
|
-
let r = s.source, { inputId: l } = r, o =
|
|
8742
|
+
let r = s.source, { inputId: l } = r, o = Ct(r, ["inputId"]);
|
|
8743
8743
|
s.source = o, l != null && (s.source.input = t[l]);
|
|
8744
8744
|
}
|
|
8745
8745
|
if (s.type === "root")
|
|
@@ -8916,13 +8916,13 @@ let { dirname: nn, relative: Ic, resolve: Sc, sep: Gc } = Le, { SourceMapConsume
|
|
|
8916
8916
|
}
|
|
8917
8917
|
};
|
|
8918
8918
|
var Xc = bf;
|
|
8919
|
-
const us = 39, jo = 34,
|
|
8919
|
+
const us = 39, jo = 34, Ui = 92, Qo = 47, Fi = 10, Ht = 32, Ki = 12, Mi = 9, Oi = 13, ff = 91, yf = 93, gf = 40, Zf = 41, If = 123, Sf = 125, Gf = 59, Vf = 42, Xf = 58, Wf = 64, Ei = /[\t\n\f\r "#'()/;[\\\]{}]/g, Hi = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, Cf = /.[\r\n"'(/\\]/, Ao = /[\da-f]/i;
|
|
8920
8920
|
var Rf = function(e, t = {}) {
|
|
8921
8921
|
let i = e.css.valueOf(), n = t.ignoreErrors, s, r, l, o, a, c, u, h, p, m, b = i.length, d = 0, S = [], I = [];
|
|
8922
8922
|
function V() {
|
|
8923
8923
|
return d;
|
|
8924
8924
|
}
|
|
8925
|
-
function
|
|
8925
|
+
function C(v) {
|
|
8926
8926
|
throw e.error("Unclosed " + v, d);
|
|
8927
8927
|
}
|
|
8928
8928
|
function X() {
|
|
@@ -8933,15 +8933,15 @@ var Rf = function(e, t = {}) {
|
|
|
8933
8933
|
if (d >= b) return;
|
|
8934
8934
|
let w = v ? v.ignoreUnclosed : !1;
|
|
8935
8935
|
switch (s = i.charCodeAt(d), s) {
|
|
8936
|
-
case
|
|
8937
|
-
case
|
|
8936
|
+
case Fi:
|
|
8937
|
+
case Ht:
|
|
8938
|
+
case Mi:
|
|
8938
8939
|
case Oi:
|
|
8939
|
-
case Ei:
|
|
8940
8940
|
case Ki: {
|
|
8941
8941
|
o = d;
|
|
8942
8942
|
do
|
|
8943
8943
|
o += 1, s = i.charCodeAt(o);
|
|
8944
|
-
while (s ===
|
|
8944
|
+
while (s === Ht || s === Fi || s === Mi || s === Oi || s === Ki);
|
|
8945
8945
|
c = ["space", i.slice(d, o)], d = o - 1;
|
|
8946
8946
|
break;
|
|
8947
8947
|
}
|
|
@@ -8957,7 +8957,7 @@ var Rf = function(e, t = {}) {
|
|
|
8957
8957
|
break;
|
|
8958
8958
|
}
|
|
8959
8959
|
case gf: {
|
|
8960
|
-
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== us && p !== jo && p !==
|
|
8960
|
+
if (m = S.length ? S.pop()[1] : "", p = i.charCodeAt(d + 1), m === "url" && p !== us && p !== jo && p !== Ht && p !== Fi && p !== Mi && p !== Ki && p !== Oi) {
|
|
8961
8961
|
o = d;
|
|
8962
8962
|
do {
|
|
8963
8963
|
if (u = !1, o = i.indexOf(")", o + 1), o === -1)
|
|
@@ -8965,13 +8965,13 @@ var Rf = function(e, t = {}) {
|
|
|
8965
8965
|
o = d;
|
|
8966
8966
|
break;
|
|
8967
8967
|
} else
|
|
8968
|
-
|
|
8969
|
-
for (h = o; i.charCodeAt(h - 1) ===
|
|
8968
|
+
C("bracket");
|
|
8969
|
+
for (h = o; i.charCodeAt(h - 1) === Ui; )
|
|
8970
8970
|
h -= 1, u = !u;
|
|
8971
8971
|
} while (u);
|
|
8972
8972
|
c = ["brackets", i.slice(d, o + 1), d, o], d = o;
|
|
8973
8973
|
} else
|
|
8974
|
-
o = i.indexOf(")", d + 1), r = i.slice(d, o + 1), o === -1 ||
|
|
8974
|
+
o = i.indexOf(")", d + 1), r = i.slice(d, o + 1), o === -1 || Cf.test(r) ? c = ["(", "(", d] : (c = ["brackets", r, d, o], d = o);
|
|
8975
8975
|
break;
|
|
8976
8976
|
}
|
|
8977
8977
|
case us:
|
|
@@ -8983,30 +8983,30 @@ var Rf = function(e, t = {}) {
|
|
|
8983
8983
|
o = d + 1;
|
|
8984
8984
|
break;
|
|
8985
8985
|
} else
|
|
8986
|
-
|
|
8987
|
-
for (h = o; i.charCodeAt(h - 1) ===
|
|
8986
|
+
C("string");
|
|
8987
|
+
for (h = o; i.charCodeAt(h - 1) === Ui; )
|
|
8988
8988
|
h -= 1, u = !u;
|
|
8989
8989
|
} while (u);
|
|
8990
8990
|
c = ["string", i.slice(d, o + 1), d, o], d = o;
|
|
8991
8991
|
break;
|
|
8992
8992
|
}
|
|
8993
|
-
case
|
|
8994
|
-
|
|
8993
|
+
case Wf: {
|
|
8994
|
+
Ei.lastIndex = d + 1, Ei.test(i), Ei.lastIndex === 0 ? o = i.length - 1 : o = Ei.lastIndex - 2, c = ["at-word", i.slice(d, o + 1), d, o], d = o;
|
|
8995
8995
|
break;
|
|
8996
8996
|
}
|
|
8997
|
-
case
|
|
8998
|
-
for (o = d, l = !0; i.charCodeAt(o + 1) ===
|
|
8997
|
+
case Ui: {
|
|
8998
|
+
for (o = d, l = !0; i.charCodeAt(o + 1) === Ui; )
|
|
8999
8999
|
o += 1, l = !l;
|
|
9000
|
-
if (s = i.charCodeAt(o + 1), l && s !== Qo && s !==
|
|
9000
|
+
if (s = i.charCodeAt(o + 1), l && s !== Qo && s !== Ht && s !== Fi && s !== Mi && s !== Oi && s !== Ki && (o += 1, Ao.test(i.charAt(o)))) {
|
|
9001
9001
|
for (; Ao.test(i.charAt(o + 1)); )
|
|
9002
9002
|
o += 1;
|
|
9003
|
-
i.charCodeAt(o + 1) ===
|
|
9003
|
+
i.charCodeAt(o + 1) === Ht && (o += 1);
|
|
9004
9004
|
}
|
|
9005
9005
|
c = ["word", i.slice(d, o + 1), d, o], d = o;
|
|
9006
9006
|
break;
|
|
9007
9007
|
}
|
|
9008
9008
|
default: {
|
|
9009
|
-
s === Qo && i.charCodeAt(d + 1) === Vf ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length :
|
|
9009
|
+
s === Qo && i.charCodeAt(d + 1) === Vf ? (o = i.indexOf("*/", d + 2) + 1, o === 0 && (n || w ? o = i.length : C("comment")), c = ["comment", i.slice(d, o + 1), d, o], d = o) : (Hi.lastIndex = d + 1, Hi.test(i), Hi.lastIndex === 0 ? o = i.length - 1 : o = Hi.lastIndex - 2, c = ["word", i.slice(d, o + 1), d, o], S.push(c), d = o);
|
|
9010
9010
|
break;
|
|
9011
9011
|
}
|
|
9012
9012
|
}
|
|
@@ -9022,7 +9022,7 @@ var Rf = function(e, t = {}) {
|
|
|
9022
9022
|
position: V
|
|
9023
9023
|
};
|
|
9024
9024
|
};
|
|
9025
|
-
let kf = Nr, vf =
|
|
9025
|
+
let kf = Nr, vf = Hn, wf = zn, xf = Ii, _o = Jr, Tf = Rf;
|
|
9026
9026
|
const $o = {
|
|
9027
9027
|
empty: !0,
|
|
9028
9028
|
space: !0
|
|
@@ -9330,9 +9330,9 @@ let Lf = class {
|
|
|
9330
9330
|
}
|
|
9331
9331
|
};
|
|
9332
9332
|
var Jf = Lf;
|
|
9333
|
-
let Yf = ut,
|
|
9333
|
+
let Yf = ut, Uf = Pn, Ff = Jf;
|
|
9334
9334
|
function kn(e, t) {
|
|
9335
|
-
let i = new
|
|
9335
|
+
let i = new Uf(e, t), n = new Ff(i);
|
|
9336
9336
|
try {
|
|
9337
9337
|
n.parse();
|
|
9338
9338
|
} catch (s) {
|
|
@@ -9362,9 +9362,9 @@ let tr = class {
|
|
|
9362
9362
|
}).message : this.plugin ? this.plugin + ": " + this.text : this.text;
|
|
9363
9363
|
}
|
|
9364
9364
|
};
|
|
9365
|
-
var
|
|
9365
|
+
var Wc = tr;
|
|
9366
9366
|
tr.default = tr;
|
|
9367
|
-
let Kf =
|
|
9367
|
+
let Kf = Wc, ir = class {
|
|
9368
9368
|
get content() {
|
|
9369
9369
|
return this.css;
|
|
9370
9370
|
}
|
|
@@ -9383,13 +9383,13 @@ let Kf = Cc, ir = class {
|
|
|
9383
9383
|
return this.messages.filter((e) => e.type === "warning");
|
|
9384
9384
|
}
|
|
9385
9385
|
};
|
|
9386
|
-
var
|
|
9386
|
+
var Ur = ir;
|
|
9387
9387
|
ir.default = ir;
|
|
9388
9388
|
let qo = {};
|
|
9389
|
-
var
|
|
9389
|
+
var Cc = function(e) {
|
|
9390
9390
|
qo[e] || (qo[e] = !0, typeof console < "u" && console.warn && console.warn(e));
|
|
9391
9391
|
};
|
|
9392
|
-
let
|
|
9392
|
+
let Mf = ut, Of = Lr, Ef = Xc, Hf = Yr, el = Ur, zf = Ii, Pf = On, { isClean: Ue, my: Bf } = Zi, Df = Cc;
|
|
9393
9393
|
const jf = {
|
|
9394
9394
|
atrule: "AtRule",
|
|
9395
9395
|
comment: "Comment",
|
|
@@ -9419,7 +9419,7 @@ const jf = {
|
|
|
9419
9419
|
postcssPlugin: !0,
|
|
9420
9420
|
prepare: !0
|
|
9421
9421
|
}, Tt = 0;
|
|
9422
|
-
function
|
|
9422
|
+
function zt(e) {
|
|
9423
9423
|
return typeof e == "object" && typeof e.then == "function";
|
|
9424
9424
|
}
|
|
9425
9425
|
function Rc(e) {
|
|
@@ -9444,7 +9444,7 @@ function tl(e) {
|
|
|
9444
9444
|
};
|
|
9445
9445
|
}
|
|
9446
9446
|
function nr(e) {
|
|
9447
|
-
return e[
|
|
9447
|
+
return e[Ue] = !1, e.nodes && e.nodes.forEach((t) => nr(t)), e;
|
|
9448
9448
|
}
|
|
9449
9449
|
let sr = {}, Nt = class kc {
|
|
9450
9450
|
get content() {
|
|
@@ -9479,16 +9479,16 @@ let sr = {}, Nt = class kc {
|
|
|
9479
9479
|
else if (i instanceof kc || i instanceof el)
|
|
9480
9480
|
s = nr(i.root), i.map && (typeof n.map > "u" && (n.map = {}), n.map.inline || (n.map.inline = !1), n.map.prev = i.map);
|
|
9481
9481
|
else {
|
|
9482
|
-
let r =
|
|
9482
|
+
let r = Hf;
|
|
9483
9483
|
n.syntax && (r = n.syntax.parse), n.parser && (r = n.parser), r.parse && (r = r.parse);
|
|
9484
9484
|
try {
|
|
9485
9485
|
s = r(i, n);
|
|
9486
9486
|
} catch (l) {
|
|
9487
9487
|
this.processed = !0, this.error = l;
|
|
9488
9488
|
}
|
|
9489
|
-
s && !s[Bf] &&
|
|
9489
|
+
s && !s[Bf] && Mf.rebuild(s);
|
|
9490
9490
|
}
|
|
9491
|
-
this.result = new el(t, s, n), this.helpers =
|
|
9491
|
+
this.result = new el(t, s, n), this.helpers = me(Y({}, sr), { postcss: sr, result: this.result }), this.plugins = this.processor.plugins.map((r) => typeof r == "object" && r.prepare ? Y(Y({}, r), r.prepare(this.result)) : r);
|
|
9492
9492
|
}
|
|
9493
9493
|
async() {
|
|
9494
9494
|
return this.error ? Promise.reject(this.error) : this.processed ? Promise.resolve(this.result) : (this.processing || (this.processing = this.runAsync()), this.processing);
|
|
@@ -9543,11 +9543,11 @@ let sr = {}, Nt = class kc {
|
|
|
9543
9543
|
this.hasListener = Object.keys(this.listeners).length > 0;
|
|
9544
9544
|
}
|
|
9545
9545
|
runAsync() {
|
|
9546
|
-
return
|
|
9546
|
+
return ye(this, null, function* () {
|
|
9547
9547
|
this.plugin = 0;
|
|
9548
9548
|
for (let t = 0; t < this.plugins.length; t++) {
|
|
9549
9549
|
let i = this.plugins[t], n = this.runOnRoot(i);
|
|
9550
|
-
if (
|
|
9550
|
+
if (zt(n))
|
|
9551
9551
|
try {
|
|
9552
9552
|
yield n;
|
|
9553
9553
|
} catch (s) {
|
|
@@ -9556,12 +9556,12 @@ let sr = {}, Nt = class kc {
|
|
|
9556
9556
|
}
|
|
9557
9557
|
if (this.prepareVisitors(), this.hasListener) {
|
|
9558
9558
|
let t = this.result.root;
|
|
9559
|
-
for (; !t[
|
|
9560
|
-
t[
|
|
9559
|
+
for (; !t[Ue]; ) {
|
|
9560
|
+
t[Ue] = !0;
|
|
9561
9561
|
let i = [tl(t)];
|
|
9562
9562
|
for (; i.length > 0; ) {
|
|
9563
9563
|
let n = this.visitTick(i);
|
|
9564
|
-
if (
|
|
9564
|
+
if (zt(n))
|
|
9565
9565
|
try {
|
|
9566
9566
|
yield n;
|
|
9567
9567
|
} catch (s) {
|
|
@@ -9597,7 +9597,7 @@ let sr = {}, Nt = class kc {
|
|
|
9597
9597
|
let i = this.result.root.nodes.map(
|
|
9598
9598
|
(n) => t.Once(n, this.helpers)
|
|
9599
9599
|
);
|
|
9600
|
-
return
|
|
9600
|
+
return zt(i[0]) ? Promise.all(i) : i;
|
|
9601
9601
|
}
|
|
9602
9602
|
return t.Once(this.result.root, this.helpers);
|
|
9603
9603
|
} else if (typeof t == "function")
|
|
@@ -9612,7 +9612,7 @@ let sr = {}, Nt = class kc {
|
|
|
9612
9612
|
this.stringified = !0, this.sync();
|
|
9613
9613
|
let t = this.result.opts, i = Pf;
|
|
9614
9614
|
t.syntax && (i = t.syntax.stringify), t.stringifier && (i = t.stringifier), i.stringify && (i = i.stringify);
|
|
9615
|
-
let n = new
|
|
9615
|
+
let n = new Ef(i, this.result.root, this.result.opts).generate();
|
|
9616
9616
|
return this.result.css = n[0], this.result.map = n[1], this.result;
|
|
9617
9617
|
}
|
|
9618
9618
|
sync() {
|
|
@@ -9622,13 +9622,13 @@ let sr = {}, Nt = class kc {
|
|
|
9622
9622
|
throw this.getAsyncError();
|
|
9623
9623
|
for (let t of this.plugins) {
|
|
9624
9624
|
let i = this.runOnRoot(t);
|
|
9625
|
-
if (
|
|
9625
|
+
if (zt(i))
|
|
9626
9626
|
throw this.getAsyncError();
|
|
9627
9627
|
}
|
|
9628
9628
|
if (this.prepareVisitors(), this.hasListener) {
|
|
9629
9629
|
let t = this.result.root;
|
|
9630
|
-
for (; !t[
|
|
9631
|
-
t[
|
|
9630
|
+
for (; !t[Ue]; )
|
|
9631
|
+
t[Ue] = !0, this.walkSync(t);
|
|
9632
9632
|
if (this.listeners.OnceExit)
|
|
9633
9633
|
if (t.type === "document")
|
|
9634
9634
|
for (let i of t.nodes)
|
|
@@ -9657,7 +9657,7 @@ let sr = {}, Nt = class kc {
|
|
|
9657
9657
|
}
|
|
9658
9658
|
if (i.type !== "root" && i.type !== "document" && !i.parent)
|
|
9659
9659
|
return !0;
|
|
9660
|
-
if (
|
|
9660
|
+
if (zt(r))
|
|
9661
9661
|
throw this.getAsyncError();
|
|
9662
9662
|
}
|
|
9663
9663
|
}
|
|
@@ -9679,8 +9679,8 @@ let sr = {}, Nt = class kc {
|
|
|
9679
9679
|
if (i.iterator !== 0) {
|
|
9680
9680
|
let l = i.iterator, o;
|
|
9681
9681
|
for (; o = n.nodes[n.indexes[l]]; )
|
|
9682
|
-
if (n.indexes[l] += 1, !o[
|
|
9683
|
-
o[
|
|
9682
|
+
if (n.indexes[l] += 1, !o[Ue]) {
|
|
9683
|
+
o[Ue] = !0, t.push(tl(o));
|
|
9684
9684
|
return;
|
|
9685
9685
|
}
|
|
9686
9686
|
i.iterator = 0, delete n.indexes[l];
|
|
@@ -9689,7 +9689,7 @@ let sr = {}, Nt = class kc {
|
|
|
9689
9689
|
for (; i.eventIndex < r.length; ) {
|
|
9690
9690
|
let l = r[i.eventIndex];
|
|
9691
9691
|
if (i.eventIndex += 1, l === Tt) {
|
|
9692
|
-
n.nodes && n.nodes.length && (n[
|
|
9692
|
+
n.nodes && n.nodes.length && (n[Ue] = !0, i.iterator = n.getIterator());
|
|
9693
9693
|
return;
|
|
9694
9694
|
} else if (this.listeners[l]) {
|
|
9695
9695
|
i.visitors = this.listeners[l];
|
|
@@ -9699,12 +9699,12 @@ let sr = {}, Nt = class kc {
|
|
|
9699
9699
|
t.pop();
|
|
9700
9700
|
}
|
|
9701
9701
|
walkSync(t) {
|
|
9702
|
-
t[
|
|
9702
|
+
t[Ue] = !0;
|
|
9703
9703
|
let i = Rc(t);
|
|
9704
9704
|
for (let n of i)
|
|
9705
9705
|
if (n === Tt)
|
|
9706
9706
|
t.nodes && t.each((s) => {
|
|
9707
|
-
s[
|
|
9707
|
+
s[Ue] || this.walkSync(s);
|
|
9708
9708
|
});
|
|
9709
9709
|
else {
|
|
9710
9710
|
let s = this.listeners[n];
|
|
@@ -9721,11 +9721,11 @@ Nt.registerPostcss = (e) => {
|
|
|
9721
9721
|
};
|
|
9722
9722
|
var vc = Nt;
|
|
9723
9723
|
Nt.default = Nt;
|
|
9724
|
-
|
|
9725
|
-
|
|
9724
|
+
zf.registerLazyResult(Nt);
|
|
9725
|
+
Of.registerLazyResult(Nt);
|
|
9726
9726
|
let _f = Xc, $f = Yr;
|
|
9727
|
-
const qf =
|
|
9728
|
-
let ey =
|
|
9727
|
+
const qf = Ur;
|
|
9728
|
+
let ey = On, ty = Cc, rr = class {
|
|
9729
9729
|
get content() {
|
|
9730
9730
|
return this.result.css;
|
|
9731
9731
|
}
|
|
@@ -9837,9 +9837,9 @@ var ly = mi;
|
|
|
9837
9837
|
mi.default = mi;
|
|
9838
9838
|
oy.registerProcessor(mi);
|
|
9839
9839
|
ny.registerProcessor(mi);
|
|
9840
|
-
let wc = Nr, xc =
|
|
9840
|
+
let wc = Nr, xc = Hn, ay = ut, cy = wr, Tc = zn, Nc = Lr, uy = df, dy = Pn, hy = vc, py = gc, my = En, by = Yr, Fr = ly, fy = Ur, Lc = Ii, Jc = Jr, yy = On, gy = Wc;
|
|
9841
9841
|
function ee(...e) {
|
|
9842
|
-
return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new
|
|
9842
|
+
return e.length === 1 && Array.isArray(e[0]) && (e = e[0]), new Fr(e);
|
|
9843
9843
|
}
|
|
9844
9844
|
ee.plugin = function(e, t) {
|
|
9845
9845
|
let i = !1;
|
|
@@ -9852,7 +9852,7 @@ https://evilmartians.com/chronicles/postcss-8-plugin-migration`
|
|
|
9852
9852
|
https://www.w3ctech.com/topic/2226`
|
|
9853
9853
|
));
|
|
9854
9854
|
let l = t(...r);
|
|
9855
|
-
return l.postcssPlugin = e, l.postcssVersion = new
|
|
9855
|
+
return l.postcssPlugin = e, l.postcssVersion = new Fr().version, l;
|
|
9856
9856
|
}
|
|
9857
9857
|
let s;
|
|
9858
9858
|
return Object.defineProperty(n, "postcss", {
|
|
@@ -9876,7 +9876,7 @@ ee.document = (e) => new Nc(e);
|
|
|
9876
9876
|
ee.CssSyntaxError = cy;
|
|
9877
9877
|
ee.Declaration = Tc;
|
|
9878
9878
|
ee.Container = ay;
|
|
9879
|
-
ee.Processor =
|
|
9879
|
+
ee.Processor = Fr;
|
|
9880
9880
|
ee.Document = Nc;
|
|
9881
9881
|
ee.Comment = xc;
|
|
9882
9882
|
ee.Warning = gy;
|
|
@@ -9933,7 +9933,7 @@ class Kr {
|
|
|
9933
9933
|
return "RRNode";
|
|
9934
9934
|
}
|
|
9935
9935
|
}
|
|
9936
|
-
const
|
|
9936
|
+
const zi = /* @__PURE__ */ new Map(), il = /* @__PURE__ */ new WeakSet();
|
|
9937
9937
|
function nl(e) {
|
|
9938
9938
|
return e !== null && typeof e == "object" && "complete" in e && "naturalWidth" in e && "naturalHeight" in e && "src" in e && "onload" in e;
|
|
9939
9939
|
}
|
|
@@ -9943,19 +9943,19 @@ function Zy(e) {
|
|
|
9943
9943
|
il.add(e);
|
|
9944
9944
|
const t = e.drawImage.bind(e);
|
|
9945
9945
|
e.drawImage = function(i, ...n) {
|
|
9946
|
-
const s =
|
|
9946
|
+
const s = zi.get(e);
|
|
9947
9947
|
s && (s.cancelled = !0);
|
|
9948
9948
|
const r = () => {
|
|
9949
9949
|
n.length === 2 && nl(i) && n.push(i.naturalWidth || i.width, i.naturalHeight || i.height), t(i, ...n);
|
|
9950
9950
|
};
|
|
9951
9951
|
if (nl(i) && !i.complete) {
|
|
9952
9952
|
const l = { cancelled: !1 };
|
|
9953
|
-
|
|
9953
|
+
zi.set(e, l);
|
|
9954
9954
|
const o = () => {
|
|
9955
|
-
l.cancelled || (
|
|
9955
|
+
l.cancelled || (zi.delete(e), r());
|
|
9956
9956
|
}, a = () => {
|
|
9957
9957
|
if (!l.cancelled) {
|
|
9958
|
-
|
|
9958
|
+
zi.delete(e);
|
|
9959
9959
|
try {
|
|
9960
9960
|
r();
|
|
9961
9961
|
} catch {
|
|
@@ -9978,7 +9978,7 @@ const sl = {
|
|
|
9978
9978
|
Element: [],
|
|
9979
9979
|
MutationObserver: ["constructor"]
|
|
9980
9980
|
}, Pi = {}, Iy = () => !!globalThis.Zone;
|
|
9981
|
-
function
|
|
9981
|
+
function Mr(e) {
|
|
9982
9982
|
if (Pi[e])
|
|
9983
9983
|
return Pi[e];
|
|
9984
9984
|
const t = globalThis[e], i = t.prototype, n = e in sl ? sl[e] : void 0, s = !!(n && // @ts-expect-error 2345
|
|
@@ -10015,7 +10015,7 @@ function et(e, t, i) {
|
|
|
10015
10015
|
return ds[s].call(
|
|
10016
10016
|
t
|
|
10017
10017
|
);
|
|
10018
|
-
const r =
|
|
10018
|
+
const r = Mr(e), l = (n = Object.getOwnPropertyDescriptor(
|
|
10019
10019
|
r,
|
|
10020
10020
|
i
|
|
10021
10021
|
)) == null ? void 0 : n.get;
|
|
@@ -10028,7 +10028,7 @@ function Yc(e, t, i) {
|
|
|
10028
10028
|
return hs[n].bind(
|
|
10029
10029
|
t
|
|
10030
10030
|
);
|
|
10031
|
-
const s =
|
|
10031
|
+
const s = Mr(e)[i];
|
|
10032
10032
|
return typeof s != "function" ? t[i] : (hs[n] = s, s.bind(t));
|
|
10033
10033
|
}
|
|
10034
10034
|
function Sy(e) {
|
|
@@ -10043,10 +10043,10 @@ function Vy(e) {
|
|
|
10043
10043
|
function Xy(e) {
|
|
10044
10044
|
return et("Node", e, "textContent");
|
|
10045
10045
|
}
|
|
10046
|
-
function
|
|
10046
|
+
function Wy(e, t) {
|
|
10047
10047
|
return Yc("Node", e, "contains")(t);
|
|
10048
10048
|
}
|
|
10049
|
-
function
|
|
10049
|
+
function Cy(e) {
|
|
10050
10050
|
return Yc("Node", e, "getRootNode")();
|
|
10051
10051
|
}
|
|
10052
10052
|
function Ry(e) {
|
|
@@ -10064,8 +10064,8 @@ function wy(e, t) {
|
|
|
10064
10064
|
function xy(e, t) {
|
|
10065
10065
|
return et("Element", e, "querySelectorAll")(t);
|
|
10066
10066
|
}
|
|
10067
|
-
function
|
|
10068
|
-
return
|
|
10067
|
+
function Uc() {
|
|
10068
|
+
return Mr("MutationObserver").constructor;
|
|
10069
10069
|
}
|
|
10070
10070
|
function dt(e, t, i) {
|
|
10071
10071
|
try {
|
|
@@ -10086,23 +10086,23 @@ function dt(e, t, i) {
|
|
|
10086
10086
|
};
|
|
10087
10087
|
}
|
|
10088
10088
|
}
|
|
10089
|
-
const
|
|
10089
|
+
const z = {
|
|
10090
10090
|
childNodes: Sy,
|
|
10091
10091
|
parentNode: Gy,
|
|
10092
10092
|
parentElement: Vy,
|
|
10093
10093
|
textContent: Xy,
|
|
10094
|
-
contains:
|
|
10095
|
-
getRootNode:
|
|
10094
|
+
contains: Wy,
|
|
10095
|
+
getRootNode: Cy,
|
|
10096
10096
|
host: Ry,
|
|
10097
10097
|
styleSheets: ky,
|
|
10098
10098
|
shadowRoot: vy,
|
|
10099
10099
|
querySelector: wy,
|
|
10100
10100
|
querySelectorAll: xy,
|
|
10101
|
-
mutationObserver:
|
|
10101
|
+
mutationObserver: Uc,
|
|
10102
10102
|
patch: dt,
|
|
10103
10103
|
wrapCanvasContextDrawImage: Zy
|
|
10104
10104
|
};
|
|
10105
|
-
function
|
|
10105
|
+
function Ie(e, t, i = document) {
|
|
10106
10106
|
const n = { capture: !0 };
|
|
10107
10107
|
return i.addEventListener(e, t, n), () => i.removeEventListener(e, t, n);
|
|
10108
10108
|
}
|
|
@@ -10159,22 +10159,22 @@ function Bn(e, t, i, n, s = window) {
|
|
|
10159
10159
|
}
|
|
10160
10160
|
let vn = Date.now;
|
|
10161
10161
|
/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString()) || (vn = () => (/* @__PURE__ */ new Date()).getTime());
|
|
10162
|
-
function
|
|
10162
|
+
function Fc(e) {
|
|
10163
10163
|
var t, i, n, s;
|
|
10164
10164
|
const r = e.document;
|
|
10165
10165
|
return {
|
|
10166
|
-
left: r.scrollingElement ? r.scrollingElement.scrollLeft : e.pageXOffset !== void 0 ? e.pageXOffset : r.documentElement.scrollLeft || r?.body && ((t =
|
|
10167
|
-
top: r.scrollingElement ? r.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : r?.documentElement.scrollTop || r?.body && ((n =
|
|
10166
|
+
left: r.scrollingElement ? r.scrollingElement.scrollLeft : e.pageXOffset !== void 0 ? e.pageXOffset : r.documentElement.scrollLeft || r?.body && ((t = z.parentElement(r.body)) == null ? void 0 : t.scrollLeft) || ((i = r?.body) == null ? void 0 : i.scrollLeft) || 0,
|
|
10167
|
+
top: r.scrollingElement ? r.scrollingElement.scrollTop : e.pageYOffset !== void 0 ? e.pageYOffset : r?.documentElement.scrollTop || r?.body && ((n = z.parentElement(r.body)) == null ? void 0 : n.scrollTop) || ((s = r?.body) == null ? void 0 : s.scrollTop) || 0
|
|
10168
10168
|
};
|
|
10169
10169
|
}
|
|
10170
10170
|
function Kc() {
|
|
10171
10171
|
return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;
|
|
10172
10172
|
}
|
|
10173
|
-
function
|
|
10173
|
+
function Mc() {
|
|
10174
10174
|
return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;
|
|
10175
10175
|
}
|
|
10176
|
-
function
|
|
10177
|
-
return e ? e.nodeType === e.ELEMENT_NODE ? e :
|
|
10176
|
+
function Oc(e) {
|
|
10177
|
+
return e ? e.nodeType === e.ELEMENT_NODE ? e : z.parentElement(e) : null;
|
|
10178
10178
|
}
|
|
10179
10179
|
const Ty = (e) => {
|
|
10180
10180
|
try {
|
|
@@ -10188,7 +10188,7 @@ const Ty = (e) => {
|
|
|
10188
10188
|
function pe(e, t, i, n) {
|
|
10189
10189
|
if (!e)
|
|
10190
10190
|
return !1;
|
|
10191
|
-
const s =
|
|
10191
|
+
const s = Oc(e);
|
|
10192
10192
|
if (!s)
|
|
10193
10193
|
return !1;
|
|
10194
10194
|
try {
|
|
@@ -10205,14 +10205,14 @@ function Ny(e, t) {
|
|
|
10205
10205
|
function ps(e, t, i) {
|
|
10206
10206
|
return e.tagName === "TITLE" && i.headTitleMutations ? !0 : t.getId(e) === oi;
|
|
10207
10207
|
}
|
|
10208
|
-
function
|
|
10208
|
+
function Ec(e, t) {
|
|
10209
10209
|
if ($t(e))
|
|
10210
10210
|
return !1;
|
|
10211
10211
|
const i = t.getId(e);
|
|
10212
10212
|
if (!t.has(i))
|
|
10213
10213
|
return !0;
|
|
10214
|
-
const n =
|
|
10215
|
-
return n && n.nodeType === e.DOCUMENT_NODE ? !1 : n ?
|
|
10214
|
+
const n = z.parentNode(e);
|
|
10215
|
+
return n && n.nodeType === e.DOCUMENT_NODE ? !1 : n ? Ec(n, t) : !0;
|
|
10216
10216
|
}
|
|
10217
10217
|
function or(e) {
|
|
10218
10218
|
return !!e.changedTouches;
|
|
@@ -10220,18 +10220,18 @@ function or(e) {
|
|
|
10220
10220
|
function Ly(e = window) {
|
|
10221
10221
|
"NodeList" in e && !e.NodeList.prototype.forEach && (e.NodeList.prototype.forEach = Array.prototype.forEach), "DOMTokenList" in e && !e.DOMTokenList.prototype.forEach && (e.DOMTokenList.prototype.forEach = Array.prototype.forEach);
|
|
10222
10222
|
}
|
|
10223
|
-
function
|
|
10223
|
+
function Hc(e, t) {
|
|
10224
10224
|
return !!(e.nodeName === "IFRAME" && t.getMeta(e));
|
|
10225
10225
|
}
|
|
10226
|
-
function
|
|
10226
|
+
function zc(e, t) {
|
|
10227
10227
|
return !!(e.nodeName === "LINK" && e.nodeType === e.ELEMENT_NODE && e.getAttribute && e.getAttribute("rel") === "stylesheet" && t.getMeta(e));
|
|
10228
10228
|
}
|
|
10229
10229
|
function lr(e) {
|
|
10230
|
-
return e ? e instanceof Kr && "shadowRoot" in e ? !!e.shadowRoot : !!
|
|
10230
|
+
return e ? e instanceof Kr && "shadowRoot" in e ? !!e.shadowRoot : !!z.shadowRoot(e) : !1;
|
|
10231
10231
|
}
|
|
10232
10232
|
class Jy {
|
|
10233
10233
|
constructor() {
|
|
10234
|
-
|
|
10234
|
+
W(this, "id", 1), W(this, "styleIDMap", /* @__PURE__ */ new WeakMap()), W(this, "idStyleMap", /* @__PURE__ */ new Map());
|
|
10235
10235
|
}
|
|
10236
10236
|
getId(t) {
|
|
10237
10237
|
var i;
|
|
@@ -10261,7 +10261,7 @@ class Jy {
|
|
|
10261
10261
|
function Pc(e) {
|
|
10262
10262
|
var t;
|
|
10263
10263
|
let i = null;
|
|
10264
|
-
return "getRootNode" in e && ((t =
|
|
10264
|
+
return "getRootNode" in e && ((t = z.getRootNode(e)) == null ? void 0 : t.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && z.host(z.getRootNode(e)) && (i = z.host(z.getRootNode(e))), i;
|
|
10265
10265
|
}
|
|
10266
10266
|
function Yy(e) {
|
|
10267
10267
|
let t = e, i;
|
|
@@ -10269,23 +10269,23 @@ function Yy(e) {
|
|
|
10269
10269
|
t = i;
|
|
10270
10270
|
return t;
|
|
10271
10271
|
}
|
|
10272
|
-
function
|
|
10272
|
+
function Uy(e) {
|
|
10273
10273
|
const t = e.ownerDocument;
|
|
10274
10274
|
if (!t) return !1;
|
|
10275
10275
|
const i = Yy(e);
|
|
10276
|
-
return
|
|
10276
|
+
return z.contains(t, i);
|
|
10277
10277
|
}
|
|
10278
10278
|
function Bc(e) {
|
|
10279
10279
|
const t = e.ownerDocument;
|
|
10280
|
-
return t ?
|
|
10280
|
+
return t ? z.contains(t, e) || Uy(e) : !1;
|
|
10281
10281
|
}
|
|
10282
10282
|
var j = /* @__PURE__ */ ((e) => (e[e.DomContentLoaded = 0] = "DomContentLoaded", e[e.Load = 1] = "Load", e[e.FullSnapshot = 2] = "FullSnapshot", e[e.IncrementalSnapshot = 3] = "IncrementalSnapshot", e[e.Meta = 4] = "Meta", e[e.Custom = 5] = "Custom", e[e.Plugin = 6] = "Plugin", e))(j || {}), P = /* @__PURE__ */ ((e) => (e[e.Mutation = 0] = "Mutation", e[e.MouseMove = 1] = "MouseMove", e[e.MouseInteraction = 2] = "MouseInteraction", e[e.Scroll = 3] = "Scroll", e[e.ViewportResize = 4] = "ViewportResize", e[e.Input = 5] = "Input", e[e.TouchMove = 6] = "TouchMove", e[e.MediaInteraction = 7] = "MediaInteraction", e[e.StyleSheetRule = 8] = "StyleSheetRule", e[e.CanvasMutation = 9] = "CanvasMutation", e[e.Font = 10] = "Font", e[e.Log = 11] = "Log", e[e.Drag = 12] = "Drag", e[e.StyleDeclaration = 13] = "StyleDeclaration", e[e.Selection = 14] = "Selection", e[e.AdoptedStyleSheet = 15] = "AdoptedStyleSheet", e[e.CustomElement = 16] = "CustomElement", e))(P || {}), Ge = /* @__PURE__ */ ((e) => (e[e.MouseUp = 0] = "MouseUp", e[e.MouseDown = 1] = "MouseDown", e[e.Click = 2] = "Click", e[e.ContextMenu = 3] = "ContextMenu", e[e.DblClick = 4] = "DblClick", e[e.Focus = 5] = "Focus", e[e.Blur = 6] = "Blur", e[e.TouchStart = 7] = "TouchStart", e[e.TouchMove_Departed = 8] = "TouchMove_Departed", e[e.TouchEnd = 9] = "TouchEnd", e[e.TouchCancel = 10] = "TouchCancel", e))(Ge || {}), _e = /* @__PURE__ */ ((e) => (e[e.Mouse = 0] = "Mouse", e[e.Pen = 1] = "Pen", e[e.Touch = 2] = "Touch", e))(_e || {}), Lt = /* @__PURE__ */ ((e) => (e[e["2D"] = 0] = "2D", e[e.WebGL = 1] = "WebGL", e[e.WebGL2 = 2] = "WebGL2", e))(Lt || {}), Zt = /* @__PURE__ */ ((e) => (e[e.Play = 0] = "Play", e[e.Pause = 1] = "Pause", e[e.Seeked = 2] = "Seeked", e[e.VolumeChange = 3] = "VolumeChange", e[e.RateChange = 4] = "RateChange", e))(Zt || {}), Dc = /* @__PURE__ */ ((e) => (e[e.Document = 0] = "Document", e[e.DocumentType = 1] = "DocumentType", e[e.Element = 2] = "Element", e[e.Text = 3] = "Text", e[e.CDATA = 4] = "CDATA", e[e.Comment = 5] = "Comment", e))(Dc || {});
|
|
10283
10283
|
function ll(e) {
|
|
10284
10284
|
return "__ln" in e;
|
|
10285
10285
|
}
|
|
10286
|
-
class
|
|
10286
|
+
class Fy {
|
|
10287
10287
|
constructor() {
|
|
10288
|
-
|
|
10288
|
+
W(this, "length", 0), W(this, "head", null), W(this, "tail", null);
|
|
10289
10289
|
}
|
|
10290
10290
|
get(t) {
|
|
10291
10291
|
if (t >= this.length)
|
|
@@ -10319,18 +10319,18 @@ class Uy {
|
|
|
10319
10319
|
const al = (e, t) => `${e}@${t}`;
|
|
10320
10320
|
class Ky {
|
|
10321
10321
|
constructor() {
|
|
10322
|
-
|
|
10322
|
+
W(this, "frozen", !1), W(this, "locked", !1), W(this, "texts", []), W(this, "attributes", []), W(this, "attributeMap", /* @__PURE__ */ new WeakMap()), W(this, "removes", []), W(this, "mapRemoves", []), W(this, "movedMap", {}), W(this, "addedSet", /* @__PURE__ */ new Set()), W(this, "movedSet", /* @__PURE__ */ new Set()), W(this, "droppedSet", /* @__PURE__ */ new Set()), W(this, "removesSubTreeCache", /* @__PURE__ */ new Set()), W(this, "mutationCb"), W(this, "blockClass"), W(this, "blockSelector"), W(this, "maskTextClass"), W(this, "maskTextSelector"), W(this, "inlineStylesheet"), W(this, "maskInputOptions"), W(this, "maskTextFn"), W(this, "maskInputFn"), W(this, "keepIframeSrcFn"), W(this, "recordCanvas"), W(this, "inlineImages"), W(this, "inlineVideos"), W(this, "privacySetting"), W(this, "slimDOMOptions"), W(this, "dataURLOptions"), W(this, "doc"), W(this, "mirror"), W(this, "iframeManager"), W(this, "stylesheetManager"), W(this, "shadowDomManager"), W(this, "canvasManager"), W(this, "processedNodeManager"), W(this, "unattachedDoc"), W(this, "processMutations", (t) => {
|
|
10323
10323
|
t.forEach(this.processMutation), this.emit();
|
|
10324
|
-
}),
|
|
10324
|
+
}), W(this, "emit", () => {
|
|
10325
10325
|
if (this.frozen || this.locked)
|
|
10326
10326
|
return;
|
|
10327
|
-
const t = [], i = /* @__PURE__ */ new Set(), n = new
|
|
10327
|
+
const t = [], i = /* @__PURE__ */ new Set(), n = new Fy(), s = (a) => {
|
|
10328
10328
|
let c = a, u = oi;
|
|
10329
10329
|
for (; u === oi; )
|
|
10330
10330
|
c = c && c.nextSibling, u = c && this.mirror.getId(c);
|
|
10331
10331
|
return u;
|
|
10332
10332
|
}, r = (a) => {
|
|
10333
|
-
const c =
|
|
10333
|
+
const c = z.parentNode(a);
|
|
10334
10334
|
if (!c || !Bc(a))
|
|
10335
10335
|
return;
|
|
10336
10336
|
let u = !1;
|
|
@@ -10363,9 +10363,9 @@ class Ky {
|
|
|
10363
10363
|
inlineVideos: this.inlineVideos,
|
|
10364
10364
|
privacySetting: this.privacySetting,
|
|
10365
10365
|
onSerialize: (b) => {
|
|
10366
|
-
|
|
10366
|
+
Hc(b, this.mirror) && this.iframeManager.addIframe(b), zc(b, this.mirror) && this.stylesheetManager.trackLinkElement(
|
|
10367
10367
|
b
|
|
10368
|
-
), lr(a) && this.shadowDomManager.addShadowRoot(
|
|
10368
|
+
), lr(a) && this.shadowDomManager.addShadowRoot(z.shadowRoot(a), this.doc);
|
|
10369
10369
|
},
|
|
10370
10370
|
onIframeLoad: (b, d) => {
|
|
10371
10371
|
this.iframeManager.attachIframe(b, d), this.shadowDomManager.observeAttachShadow(b);
|
|
@@ -10384,14 +10384,14 @@ class Ky {
|
|
|
10384
10384
|
for (; this.mapRemoves.length; )
|
|
10385
10385
|
this.mirror.removeNodeFromMap(this.mapRemoves.shift());
|
|
10386
10386
|
for (const a of this.movedSet)
|
|
10387
|
-
cl(this.removesSubTreeCache, a) && !this.movedSet.has(
|
|
10387
|
+
cl(this.removesSubTreeCache, a) && !this.movedSet.has(z.parentNode(a)) || r(a);
|
|
10388
10388
|
for (const a of this.addedSet)
|
|
10389
10389
|
!ul(this.droppedSet, a) && !cl(this.removesSubTreeCache, a) || ul(this.movedSet, a) ? r(a) : this.droppedSet.add(a);
|
|
10390
10390
|
let l = null;
|
|
10391
10391
|
for (; n.length; ) {
|
|
10392
10392
|
let a = null;
|
|
10393
10393
|
if (l) {
|
|
10394
|
-
const c = this.mirror.getId(
|
|
10394
|
+
const c = this.mirror.getId(z.parentNode(l.value)), u = s(l.value);
|
|
10395
10395
|
c !== -1 && u !== -1 && (a = l);
|
|
10396
10396
|
}
|
|
10397
10397
|
if (!a) {
|
|
@@ -10399,15 +10399,15 @@ class Ky {
|
|
|
10399
10399
|
for (; c; ) {
|
|
10400
10400
|
const u = c;
|
|
10401
10401
|
if (c = c.previous, u) {
|
|
10402
|
-
const h = this.mirror.getId(
|
|
10402
|
+
const h = this.mirror.getId(z.parentNode(u.value));
|
|
10403
10403
|
if (s(u.value) === -1) continue;
|
|
10404
10404
|
if (h !== -1) {
|
|
10405
10405
|
a = u;
|
|
10406
10406
|
break;
|
|
10407
10407
|
} else {
|
|
10408
|
-
const p = u.value, m =
|
|
10408
|
+
const p = u.value, m = z.parentNode(p);
|
|
10409
10409
|
if (m && m.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
10410
|
-
const b =
|
|
10410
|
+
const b = z.host(m);
|
|
10411
10411
|
if (this.mirror.getId(b) !== -1) {
|
|
10412
10412
|
a = u;
|
|
10413
10413
|
break;
|
|
@@ -10427,7 +10427,7 @@ class Ky {
|
|
|
10427
10427
|
const o = {
|
|
10428
10428
|
texts: this.texts.map((a) => {
|
|
10429
10429
|
var c, u;
|
|
10430
|
-
const h = a.node, p =
|
|
10430
|
+
const h = a.node, p = z.parentNode(h);
|
|
10431
10431
|
p && p.tagName === "TEXTAREA" && this.genTextAreaValueMutation(p);
|
|
10432
10432
|
let m = a.value;
|
|
10433
10433
|
const b = this.privacySetting === "strict", d = this.privacySetting === "default" && ua(m), S = (u = (c = a.node) == null ? void 0 : c.parentElement) == null ? void 0 : u.getAttribute("data-hl-record");
|
|
@@ -10451,7 +10451,7 @@ class Ky {
|
|
|
10451
10451
|
adds: t
|
|
10452
10452
|
};
|
|
10453
10453
|
!o.texts.length && !o.attributes.length && !o.removes.length && !o.adds.length || (this.texts = [], this.attributes = [], this.attributeMap = /* @__PURE__ */ new WeakMap(), this.removes = [], this.addedSet = /* @__PURE__ */ new Set(), this.movedSet = /* @__PURE__ */ new Set(), this.droppedSet = /* @__PURE__ */ new Set(), this.removesSubTreeCache = /* @__PURE__ */ new Set(), this.movedMap = {}, this.mutationCb(o));
|
|
10454
|
-
}),
|
|
10454
|
+
}), W(this, "genTextAreaValueMutation", (t) => {
|
|
10455
10455
|
let i = this.attributeMap.get(t);
|
|
10456
10456
|
i || (i = {
|
|
10457
10457
|
node: t,
|
|
@@ -10460,8 +10460,8 @@ class Ky {
|
|
|
10460
10460
|
_unchangedStyles: {}
|
|
10461
10461
|
}, this.attributes.push(i), this.attributeMap.set(t, i));
|
|
10462
10462
|
const n = Array.from(
|
|
10463
|
-
|
|
10464
|
-
(s) =>
|
|
10463
|
+
z.childNodes(t),
|
|
10464
|
+
(s) => z.textContent(s) || ""
|
|
10465
10465
|
).join("");
|
|
10466
10466
|
i.attributes.value = fn({
|
|
10467
10467
|
overwriteRecord: null,
|
|
@@ -10472,11 +10472,11 @@ class Ky {
|
|
|
10472
10472
|
value: n,
|
|
10473
10473
|
maskInputFn: this.maskInputFn
|
|
10474
10474
|
});
|
|
10475
|
-
}),
|
|
10475
|
+
}), W(this, "processMutation", (t) => {
|
|
10476
10476
|
if (!ps(t.target, this.mirror, this.slimDOMOptions))
|
|
10477
10477
|
switch (t.type) {
|
|
10478
10478
|
case "characterData": {
|
|
10479
|
-
const i =
|
|
10479
|
+
const i = z.textContent(t.target);
|
|
10480
10480
|
!pe(t.target, this.blockClass, this.blockSelector, !1) && i !== t.oldValue && this.texts.push({
|
|
10481
10481
|
value: ba(
|
|
10482
10482
|
t.target,
|
|
@@ -10484,7 +10484,7 @@ class Ky {
|
|
|
10484
10484
|
this.maskTextSelector,
|
|
10485
10485
|
!0
|
|
10486
10486
|
// checkAncestors
|
|
10487
|
-
) && i ? this.maskTextFn ? this.maskTextFn(i,
|
|
10487
|
+
) && i ? this.maskTextFn ? this.maskTextFn(i, Oc(t.target)) : i.replace(/[\S]/g, "*") : i,
|
|
10488
10488
|
node: t.target
|
|
10489
10489
|
});
|
|
10490
10490
|
break;
|
|
@@ -10557,17 +10557,17 @@ class Ky {
|
|
|
10557
10557
|
return;
|
|
10558
10558
|
}
|
|
10559
10559
|
t.addedNodes.forEach((i) => this.genAdds(i, t.target)), t.removedNodes.forEach((i) => {
|
|
10560
|
-
const n = this.mirror.getId(i), s = $t(t.target) ? this.mirror.getId(
|
|
10561
|
-
pe(t.target, this.blockClass, this.blockSelector, !1) || ps(i, this.mirror, this.slimDOMOptions) || !Ny(i, this.mirror) || (this.addedSet.has(i) ? (ar(this.addedSet, i), this.droppedSet.add(i)) : this.addedSet.has(t.target) && n === -1 ||
|
|
10560
|
+
const n = this.mirror.getId(i), s = $t(t.target) ? this.mirror.getId(z.host(t.target)) : this.mirror.getId(t.target);
|
|
10561
|
+
pe(t.target, this.blockClass, this.blockSelector, !1) || ps(i, this.mirror, this.slimDOMOptions) || !Ny(i, this.mirror) || (this.addedSet.has(i) ? (ar(this.addedSet, i), this.droppedSet.add(i)) : this.addedSet.has(t.target) && n === -1 || Ec(t.target, this.mirror) || (this.movedSet.has(i) && this.movedMap[al(n, s)] ? ar(this.movedSet, i) : (this.removes.push({
|
|
10562
10562
|
parentId: s,
|
|
10563
10563
|
id: n,
|
|
10564
10564
|
isShadow: $t(t.target) && qt(t.target) ? !0 : void 0
|
|
10565
|
-
}),
|
|
10565
|
+
}), My(i, this.removesSubTreeCache))), this.mapRemoves.push(i));
|
|
10566
10566
|
});
|
|
10567
10567
|
break;
|
|
10568
10568
|
}
|
|
10569
10569
|
}
|
|
10570
|
-
}),
|
|
10570
|
+
}), W(this, "genAdds", (t, i) => {
|
|
10571
10571
|
if (!this.processedNodeManager.inOtherBuffer(t, this) && !(this.addedSet.has(t) || this.movedSet.has(t))) {
|
|
10572
10572
|
if (this.mirror.hasNode(t)) {
|
|
10573
10573
|
if (ps(t, this.mirror, this.slimDOMOptions))
|
|
@@ -10577,7 +10577,7 @@ class Ky {
|
|
|
10577
10577
|
i && this.mirror.hasNode(i) && (n = this.mirror.getId(i)), n && n !== -1 && (this.movedMap[al(this.mirror.getId(t), n)] = !0);
|
|
10578
10578
|
} else
|
|
10579
10579
|
this.addedSet.add(t), this.droppedSet.delete(t);
|
|
10580
|
-
pe(t, this.blockClass, this.blockSelector, !1) || (
|
|
10580
|
+
pe(t, this.blockClass, this.blockSelector, !1) || (z.childNodes(t).forEach((n) => this.genAdds(n)), lr(t) && z.childNodes(z.shadowRoot(t)).forEach((n) => {
|
|
10581
10581
|
this.processedNodeManager.add(n, this), this.genAdds(n, t);
|
|
10582
10582
|
}));
|
|
10583
10583
|
}
|
|
@@ -10632,34 +10632,34 @@ class Ky {
|
|
|
10632
10632
|
}
|
|
10633
10633
|
}
|
|
10634
10634
|
function ar(e, t) {
|
|
10635
|
-
e.delete(t),
|
|
10635
|
+
e.delete(t), z.childNodes(t).forEach((i) => ar(e, i));
|
|
10636
10636
|
}
|
|
10637
|
-
function
|
|
10637
|
+
function My(e, t) {
|
|
10638
10638
|
const i = [e];
|
|
10639
10639
|
for (; i.length; ) {
|
|
10640
10640
|
const n = i.pop();
|
|
10641
|
-
t.has(n) || (t.add(n),
|
|
10641
|
+
t.has(n) || (t.add(n), z.childNodes(n).forEach((s) => i.push(s)));
|
|
10642
10642
|
}
|
|
10643
10643
|
}
|
|
10644
10644
|
function cl(e, t, i) {
|
|
10645
|
-
return e.size === 0 ? !1 :
|
|
10645
|
+
return e.size === 0 ? !1 : Oy(e, t);
|
|
10646
10646
|
}
|
|
10647
|
-
function
|
|
10648
|
-
const n =
|
|
10647
|
+
function Oy(e, t, i) {
|
|
10648
|
+
const n = z.parentNode(t);
|
|
10649
10649
|
return n ? e.has(n) : !1;
|
|
10650
10650
|
}
|
|
10651
10651
|
function ul(e, t) {
|
|
10652
10652
|
return e.size === 0 ? !1 : jc(e, t);
|
|
10653
10653
|
}
|
|
10654
10654
|
function jc(e, t) {
|
|
10655
|
-
const i =
|
|
10655
|
+
const i = z.parentNode(t);
|
|
10656
10656
|
return i ? e.has(i) ? !0 : jc(e, i) : !1;
|
|
10657
10657
|
}
|
|
10658
10658
|
let ei;
|
|
10659
|
-
function
|
|
10659
|
+
function Ey(e) {
|
|
10660
10660
|
ei = e;
|
|
10661
10661
|
}
|
|
10662
|
-
function
|
|
10662
|
+
function Hy() {
|
|
10663
10663
|
ei = void 0;
|
|
10664
10664
|
}
|
|
10665
10665
|
const B = (e) => ei ? (...t) => {
|
|
@@ -10686,7 +10686,7 @@ function Si(e) {
|
|
|
10686
10686
|
function Qc(e, t) {
|
|
10687
10687
|
const i = new Ky();
|
|
10688
10688
|
rt.push(i), i.init(e);
|
|
10689
|
-
const n = new (
|
|
10689
|
+
const n = new (Uc())(
|
|
10690
10690
|
B(i.processMutations.bind(i))
|
|
10691
10691
|
);
|
|
10692
10692
|
return n.observe(t, {
|
|
@@ -10698,7 +10698,7 @@ function Qc(e, t) {
|
|
|
10698
10698
|
subtree: !0
|
|
10699
10699
|
}), n;
|
|
10700
10700
|
}
|
|
10701
|
-
function
|
|
10701
|
+
function zy({
|
|
10702
10702
|
mousemoveCb: e,
|
|
10703
10703
|
sampling: t,
|
|
10704
10704
|
doc: i,
|
|
@@ -10739,9 +10739,9 @@ function Hy({
|
|
|
10739
10739
|
}
|
|
10740
10740
|
)
|
|
10741
10741
|
), u = [
|
|
10742
|
-
|
|
10743
|
-
|
|
10744
|
-
|
|
10742
|
+
Ie("mousemove", c, i),
|
|
10743
|
+
Ie("touchmove", c, i),
|
|
10744
|
+
Ie("drag", c, i)
|
|
10745
10745
|
];
|
|
10746
10746
|
return B(() => {
|
|
10747
10747
|
u.forEach((h) => h());
|
|
@@ -10810,7 +10810,7 @@ function Py({
|
|
|
10810
10810
|
case Ge.TouchEnd:
|
|
10811
10811
|
return;
|
|
10812
10812
|
}
|
|
10813
|
-
o.push(
|
|
10813
|
+
o.push(Ie(h, p, t));
|
|
10814
10814
|
}), B(() => {
|
|
10815
10815
|
o.forEach((u) => u());
|
|
10816
10816
|
});
|
|
@@ -10831,7 +10831,7 @@ function Ac({
|
|
|
10831
10831
|
return;
|
|
10832
10832
|
const c = i.getId(a);
|
|
10833
10833
|
if (a === t && t.defaultView) {
|
|
10834
|
-
const u =
|
|
10834
|
+
const u = Fc(t.defaultView);
|
|
10835
10835
|
e({
|
|
10836
10836
|
id: c,
|
|
10837
10837
|
x: u.left,
|
|
@@ -10847,14 +10847,14 @@ function Ac({
|
|
|
10847
10847
|
r.scroll || 100
|
|
10848
10848
|
)
|
|
10849
10849
|
);
|
|
10850
|
-
return
|
|
10850
|
+
return Ie("scroll", l, t);
|
|
10851
10851
|
}
|
|
10852
10852
|
function By({ viewportResizeCb: e }, { win: t }) {
|
|
10853
10853
|
let i = -1, n = -1;
|
|
10854
10854
|
const s = B(
|
|
10855
10855
|
bi(
|
|
10856
10856
|
B(() => {
|
|
10857
|
-
const r = Kc(), l =
|
|
10857
|
+
const r = Kc(), l = Mc();
|
|
10858
10858
|
(i !== r || n !== l) && (e({
|
|
10859
10859
|
width: Number(l),
|
|
10860
10860
|
height: Number(r)
|
|
@@ -10863,7 +10863,7 @@ function By({ viewportResizeCb: e }, { win: t }) {
|
|
|
10863
10863
|
200
|
|
10864
10864
|
)
|
|
10865
10865
|
);
|
|
10866
|
-
return
|
|
10866
|
+
return Ie("resize", s, t);
|
|
10867
10867
|
}
|
|
10868
10868
|
const Dy = ["INPUT", "TEXTAREA", "SELECT"], dl = /* @__PURE__ */ new WeakMap();
|
|
10869
10869
|
function jy({
|
|
@@ -10881,8 +10881,8 @@ function jy({
|
|
|
10881
10881
|
}) {
|
|
10882
10882
|
function h(I) {
|
|
10883
10883
|
let V = Si(I);
|
|
10884
|
-
const
|
|
10885
|
-
if (V && X === "OPTION" && (V =
|
|
10884
|
+
const C = I.isTrusted, X = V && V.tagName;
|
|
10885
|
+
if (V && X === "OPTION" && (V = z.parentElement(V)), !V || !X || Dy.indexOf(X) < 0 || pe(V, n, s, !0) || V.classList.contains(r) || l && V.matches(l))
|
|
10886
10886
|
return;
|
|
10887
10887
|
let G = V.value, k = !1;
|
|
10888
10888
|
const v = yn(V) || "", w = V.getAttribute("data-hl-record");
|
|
@@ -10901,7 +10901,7 @@ function jy({
|
|
|
10901
10901
|
maskInputFn: a
|
|
10902
10902
|
})), p(
|
|
10903
10903
|
V,
|
|
10904
|
-
u ? { text: G, isChecked: k, userTriggered:
|
|
10904
|
+
u ? { text: G, isChecked: k, userTriggered: C } : { text: G, isChecked: k }
|
|
10905
10905
|
);
|
|
10906
10906
|
const g = V.name;
|
|
10907
10907
|
v === "radio" && g && k && t.querySelectorAll(`input[type="radio"][name="${g}"]`).forEach((R) => {
|
|
@@ -10915,17 +10915,17 @@ function jy({
|
|
|
10915
10915
|
});
|
|
10916
10916
|
}
|
|
10917
10917
|
function p(I, V) {
|
|
10918
|
-
const
|
|
10919
|
-
if (!
|
|
10918
|
+
const C = dl.get(I);
|
|
10919
|
+
if (!C || C.text !== V.text || C.isChecked !== V.isChecked) {
|
|
10920
10920
|
dl.set(I, V);
|
|
10921
10921
|
const X = i.getId(I);
|
|
10922
|
-
B(e)(
|
|
10922
|
+
B(e)(me(Y({}, V), {
|
|
10923
10923
|
id: X
|
|
10924
10924
|
}));
|
|
10925
10925
|
}
|
|
10926
10926
|
}
|
|
10927
10927
|
const m = (c.input === "last" ? ["change"] : ["input", "change"]).map(
|
|
10928
|
-
(I) =>
|
|
10928
|
+
(I) => Ie(I, B(h), t)
|
|
10929
10929
|
), b = t.defaultView;
|
|
10930
10930
|
if (!b)
|
|
10931
10931
|
return () => {
|
|
@@ -11134,7 +11134,7 @@ function _c({
|
|
|
11134
11134
|
}, i) {
|
|
11135
11135
|
var n, s, r;
|
|
11136
11136
|
let l = null;
|
|
11137
|
-
i.nodeName === "#document" ? l = e.getId(i) : l = e.getId(
|
|
11137
|
+
i.nodeName === "#document" ? l = e.getId(i) : l = e.getId(z.host(i));
|
|
11138
11138
|
const o = i.nodeName === "#document" ? (n = i.defaultView) == null ? void 0 : n.Document : (r = (s = i.ownerDocument) == null ? void 0 : s.defaultView) == null ? void 0 : r.ShadowRoot, a = o != null && o.prototype ? Object.getOwnPropertyDescriptor(
|
|
11139
11139
|
o?.prototype,
|
|
11140
11140
|
"adoptedStyleSheets"
|
|
@@ -11257,11 +11257,11 @@ function _y({
|
|
|
11257
11257
|
s.media || 500
|
|
11258
11258
|
)
|
|
11259
11259
|
), o = [
|
|
11260
|
-
|
|
11261
|
-
|
|
11262
|
-
|
|
11263
|
-
|
|
11264
|
-
|
|
11260
|
+
Ie("play", l(Zt.Play), r),
|
|
11261
|
+
Ie("pause", l(Zt.Pause), r),
|
|
11262
|
+
Ie("seeked", l(Zt.Seeked), r),
|
|
11263
|
+
Ie("volumechange", l(Zt.VolumeChange), r),
|
|
11264
|
+
Ie("ratechange", l(Zt.RateChange), r)
|
|
11265
11265
|
];
|
|
11266
11266
|
return B(() => {
|
|
11267
11267
|
o.forEach((a) => a());
|
|
@@ -11322,7 +11322,7 @@ function qy(e) {
|
|
|
11322
11322
|
}
|
|
11323
11323
|
r({ ranges: c });
|
|
11324
11324
|
});
|
|
11325
|
-
return o(),
|
|
11325
|
+
return o(), Ie("selectionchange", o);
|
|
11326
11326
|
}
|
|
11327
11327
|
function eg({
|
|
11328
11328
|
doc: e,
|
|
@@ -11401,7 +11401,7 @@ function ig(e, t = {}) {
|
|
|
11401
11401
|
tg(e, t);
|
|
11402
11402
|
let n;
|
|
11403
11403
|
e.recordDOM && (n = Qc(e, e.doc));
|
|
11404
|
-
const s =
|
|
11404
|
+
const s = zy(e), r = Py(e), l = Ac(e), o = By(e, {
|
|
11405
11405
|
win: i
|
|
11406
11406
|
}), a = jy(e), c = _y(e);
|
|
11407
11407
|
let u = () => {
|
|
@@ -11431,7 +11431,7 @@ function Di(e) {
|
|
|
11431
11431
|
}
|
|
11432
11432
|
class hl {
|
|
11433
11433
|
constructor(t) {
|
|
11434
|
-
|
|
11434
|
+
W(this, "iframeIdToRemoteIdMap", /* @__PURE__ */ new WeakMap()), W(this, "iframeRemoteIdToIdMap", /* @__PURE__ */ new WeakMap()), this.generateIdFn = t;
|
|
11435
11435
|
}
|
|
11436
11436
|
getId(t, i, n, s) {
|
|
11437
11437
|
const r = n || this.getIdToRemoteIdMap(t), l = s || this.getRemoteIdToIdMap(t);
|
|
@@ -11470,7 +11470,7 @@ class hl {
|
|
|
11470
11470
|
}
|
|
11471
11471
|
class ng {
|
|
11472
11472
|
constructor(t) {
|
|
11473
|
-
|
|
11473
|
+
W(this, "iframes", /* @__PURE__ */ new WeakMap()), W(this, "crossOriginIframeMap", /* @__PURE__ */ new WeakMap()), W(this, "crossOriginIframeMirror", new hl(ha)), W(this, "crossOriginIframeStyleMirror"), W(this, "crossOriginIframeRootIdMap", /* @__PURE__ */ new WeakMap()), W(this, "mirror"), W(this, "mutationCb"), W(this, "wrappedEmit"), W(this, "loadListener"), W(this, "stylesheetManager"), W(this, "recordCrossOriginIframes"), this.mutationCb = t.mutationCb, this.wrappedEmit = t.wrappedEmit, this.stylesheetManager = t.stylesheetManager, this.recordCrossOriginIframes = t.recordCrossOriginIframes, this.crossOriginIframeStyleMirror = new hl(
|
|
11474
11474
|
this.stylesheetManager.styleMirror.generateId.bind(
|
|
11475
11475
|
this.stylesheetManager.styleMirror
|
|
11476
11476
|
)
|
|
@@ -11635,7 +11635,7 @@ class ng {
|
|
|
11635
11635
|
}
|
|
11636
11636
|
class sg {
|
|
11637
11637
|
constructor(t) {
|
|
11638
|
-
|
|
11638
|
+
W(this, "shadowDoms", /* @__PURE__ */ new WeakSet()), W(this, "mutationCb"), W(this, "scrollCb"), W(this, "bypassOptions"), W(this, "mirror"), W(this, "restoreHandlers", []), this.mutationCb = t.mutationCb, this.scrollCb = t.scrollCb, this.bypassOptions = t.bypassOptions, this.mirror = t.mirror, this.init();
|
|
11639
11639
|
}
|
|
11640
11640
|
init() {
|
|
11641
11641
|
this.reset(), this.patchAttachShadow(Element, document);
|
|
@@ -11644,7 +11644,7 @@ class sg {
|
|
|
11644
11644
|
if (!qt(t) || this.shadowDoms.has(t)) return;
|
|
11645
11645
|
this.shadowDoms.add(t);
|
|
11646
11646
|
const n = Qc(
|
|
11647
|
-
|
|
11647
|
+
me(Y({}, this.bypassOptions), {
|
|
11648
11648
|
doc: i,
|
|
11649
11649
|
mutationCb: this.mutationCb,
|
|
11650
11650
|
mirror: this.mirror,
|
|
@@ -11653,7 +11653,7 @@ class sg {
|
|
|
11653
11653
|
t
|
|
11654
11654
|
);
|
|
11655
11655
|
this.restoreHandlers.push(() => n.disconnect()), this.restoreHandlers.push(
|
|
11656
|
-
Ac(
|
|
11656
|
+
Ac(me(Y({}, this.bypassOptions), {
|
|
11657
11657
|
scrollCb: this.scrollCb,
|
|
11658
11658
|
// https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813
|
|
11659
11659
|
// scroll is not allowed to pass the boundary, so we need to listen the shadow document
|
|
@@ -11663,7 +11663,7 @@ class sg {
|
|
|
11663
11663
|
), setTimeout(() => {
|
|
11664
11664
|
t.adoptedStyleSheets && t.adoptedStyleSheets.length > 0 && this.bypassOptions.stylesheetManager.adoptStyleSheets(
|
|
11665
11665
|
t.adoptedStyleSheets,
|
|
11666
|
-
this.mirror.getId(
|
|
11666
|
+
this.mirror.getId(z.host(t))
|
|
11667
11667
|
), this.restoreHandlers.push(
|
|
11668
11668
|
_c(
|
|
11669
11669
|
{
|
|
@@ -11695,7 +11695,7 @@ class sg {
|
|
|
11695
11695
|
"attachShadow",
|
|
11696
11696
|
function(s) {
|
|
11697
11697
|
return function(r) {
|
|
11698
|
-
const l = s.call(this, r), o =
|
|
11698
|
+
const l = s.call(this, r), o = z.shadowRoot(this);
|
|
11699
11699
|
return o && Bc(this) && n.addShadowRoot(o, i), l;
|
|
11700
11700
|
};
|
|
11701
11701
|
}
|
|
@@ -11992,7 +11992,7 @@ function hg(e) {
|
|
|
11992
11992
|
}
|
|
11993
11993
|
class pg {
|
|
11994
11994
|
constructor(t) {
|
|
11995
|
-
|
|
11995
|
+
W(this, "pendingCanvasMutations", /* @__PURE__ */ new Map()), W(this, "rafStamps", { latestId: 0, invokeId: null }), W(this, "mirror"), W(this, "logger"), W(this, "worker"), W(this, "snapshotInProgressMap", /* @__PURE__ */ new Map()), W(this, "lastSnapshotTime", /* @__PURE__ */ new Map()), W(this, "options"), W(this, "mutationCb"), W(this, "resetObservers"), W(this, "frozen", !1), W(this, "locked", !1), W(this, "processMutation", (h, p) => {
|
|
11996
11996
|
(this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId || !this.rafStamps.invokeId) && (this.rafStamps.invokeId = this.rafStamps.latestId), this.pendingCanvasMutations.has(h) || this.pendingCanvasMutations.set(h, []), this.pendingCanvasMutations.get(h).push(p);
|
|
11997
11997
|
});
|
|
11998
11998
|
const {
|
|
@@ -12016,7 +12016,7 @@ class pg {
|
|
|
12016
12016
|
});
|
|
12017
12017
|
return;
|
|
12018
12018
|
}
|
|
12019
|
-
const { base64: m, type: b, dx: d, dy: S, dw: I, dh: V } = h.data,
|
|
12019
|
+
const { base64: m, type: b, dx: d, dy: S, dw: I, dh: V } = h.data, C = {
|
|
12020
12020
|
id: p,
|
|
12021
12021
|
type: Lt["2D"],
|
|
12022
12022
|
commands: [
|
|
@@ -12047,7 +12047,7 @@ class pg {
|
|
|
12047
12047
|
}
|
|
12048
12048
|
]
|
|
12049
12049
|
};
|
|
12050
|
-
this.debug(null, "canvas worker recording mutation",
|
|
12050
|
+
this.debug(null, "canvas worker recording mutation", C), this.mutationCb(C);
|
|
12051
12051
|
}, this.options = t, l && i === "all" ? (this.debug(null, "initializing canvas mutation observer", { sampling: i }), this.initCanvasMutationObserver(n, s, r)) : l && typeof i == "number" && (this.debug(null, "initializing canvas fps observer", { sampling: i }), this.initCanvasFPSObserver(
|
|
12052
12052
|
o,
|
|
12053
12053
|
a,
|
|
@@ -12085,7 +12085,7 @@ class pg {
|
|
|
12085
12085
|
t && (s = `[highlight-canvas] [id:${n}]`, t.tagName.toLowerCase() === "canvas" && (s += ` [ctx:${t.__context}]`)), this.logger.debug(s, t, ...i);
|
|
12086
12086
|
}
|
|
12087
12087
|
snapshot(t) {
|
|
12088
|
-
return
|
|
12088
|
+
return ye(this, null, function* () {
|
|
12089
12089
|
var i;
|
|
12090
12090
|
const n = this.mirror.getId(t);
|
|
12091
12091
|
if (this.snapshotInProgressMap.get(n)) {
|
|
@@ -12159,50 +12159,50 @@ class pg {
|
|
|
12159
12159
|
!0
|
|
12160
12160
|
), h = 1e3 / n;
|
|
12161
12161
|
let p = 0, m;
|
|
12162
|
-
const b = /* @__PURE__ */ new Map(), d = (
|
|
12162
|
+
const b = /* @__PURE__ */ new Map(), d = (C, X) => {
|
|
12163
12163
|
const G = [];
|
|
12164
|
-
|
|
12165
|
-
const k = document.createNodeIterator(
|
|
12164
|
+
C.querySelectorAll(X).forEach((w) => G.push(w));
|
|
12165
|
+
const k = document.createNodeIterator(C, Node.ELEMENT_NODE);
|
|
12166
12166
|
let v;
|
|
12167
12167
|
for (; v = k.nextNode(); )
|
|
12168
12168
|
v != null && v.shadowRoot && G.push(...d(v.shadowRoot, X));
|
|
12169
12169
|
return G;
|
|
12170
|
-
}, S = (
|
|
12170
|
+
}, S = (C) => {
|
|
12171
12171
|
const X = [];
|
|
12172
12172
|
return d(s.document, "canvas").forEach((G) => {
|
|
12173
12173
|
if (!pe(G, r, l, !0)) {
|
|
12174
12174
|
this.debug(G, "discovered canvas"), X.push(G);
|
|
12175
12175
|
const k = this.mirror.getId(G);
|
|
12176
|
-
b.has(k) || b.set(k,
|
|
12176
|
+
b.has(k) || b.set(k, C);
|
|
12177
12177
|
}
|
|
12178
12178
|
}), X;
|
|
12179
|
-
}, I = (
|
|
12179
|
+
}, I = (C) => {
|
|
12180
12180
|
const X = [];
|
|
12181
12181
|
return (t || i) && d(s.document, "video").forEach((G) => {
|
|
12182
12182
|
if (!(!i && G.src !== "" && G.src.indexOf("blob:") === -1) && !(!t && (G.src === "" || G.src.indexOf("blob:") !== -1)) && !pe(G, r, l, !0)) {
|
|
12183
12183
|
X.push(G);
|
|
12184
12184
|
const k = this.mirror.getId(G);
|
|
12185
|
-
b.has(k) || b.set(k,
|
|
12185
|
+
b.has(k) || b.set(k, C);
|
|
12186
12186
|
}
|
|
12187
12187
|
}), X;
|
|
12188
|
-
}, V = (
|
|
12189
|
-
if (p &&
|
|
12188
|
+
}, V = (C) => ye(this, null, function* () {
|
|
12189
|
+
if (p && C - p < h) {
|
|
12190
12190
|
m = requestAnimationFrame(V);
|
|
12191
12191
|
return;
|
|
12192
12192
|
}
|
|
12193
|
-
p =
|
|
12193
|
+
p = C;
|
|
12194
12194
|
const X = (k) => {
|
|
12195
|
-
const v = this.mirror.getId(k), w = b.get(v), g = !o.initialSnapshotDelay ||
|
|
12195
|
+
const v = this.mirror.getId(k), w = b.get(v), g = !o.initialSnapshotDelay || C - w > o.initialSnapshotDelay;
|
|
12196
12196
|
return this.debug(k, {
|
|
12197
12197
|
delay: o.initialSnapshotDelay,
|
|
12198
|
-
delta:
|
|
12198
|
+
delta: C - w,
|
|
12199
12199
|
hadLoadingTime: g
|
|
12200
12200
|
}), g;
|
|
12201
12201
|
}, G = [];
|
|
12202
12202
|
G.push(
|
|
12203
|
-
...S(
|
|
12203
|
+
...S(C).filter(X).map((k) => this.snapshot(k))
|
|
12204
12204
|
), G.push(
|
|
12205
|
-
...I(
|
|
12205
|
+
...I(C).filter(X).map((k) => ye(this, null, function* () {
|
|
12206
12206
|
this.debug(k, "starting video snapshotting");
|
|
12207
12207
|
const v = this.mirror.getId(k);
|
|
12208
12208
|
if (this.snapshotInProgressMap.get(v)) {
|
|
@@ -12218,8 +12218,8 @@ class pg {
|
|
|
12218
12218
|
const { width: w, height: g } = k.getBoundingClientRect(), { actualWidth: R, actualHeight: J } = {
|
|
12219
12219
|
actualWidth: k.videoWidth,
|
|
12220
12220
|
actualHeight: k.videoHeight
|
|
12221
|
-
},
|
|
12222
|
-
if (
|
|
12221
|
+
}, E = Math.max(R, J);
|
|
12222
|
+
if (E === 0) {
|
|
12223
12223
|
this.debug(k, "not yet ready", {
|
|
12224
12224
|
width: k.width,
|
|
12225
12225
|
height: k.height,
|
|
@@ -12231,22 +12231,22 @@ class pg {
|
|
|
12231
12231
|
return;
|
|
12232
12232
|
}
|
|
12233
12233
|
let $ = a || 1;
|
|
12234
|
-
c && ($ = Math.min($, c /
|
|
12234
|
+
c && ($ = Math.min($, c / E));
|
|
12235
12235
|
const f = R * $, y = J * $, T = yield createImageBitmap(k, {
|
|
12236
12236
|
resizeWidth: f,
|
|
12237
12237
|
resizeHeight: y
|
|
12238
|
-
}),
|
|
12238
|
+
}), U = Math.max(w, g) / E, F = R * U, N = J * U, A = (w - F) / 2, D = (g - N) / 2;
|
|
12239
12239
|
this.debug(k, "created image bitmap", {
|
|
12240
12240
|
actualWidth: R,
|
|
12241
12241
|
actualHeight: J,
|
|
12242
12242
|
boxWidth: w,
|
|
12243
12243
|
boxHeight: g,
|
|
12244
|
-
outputWidth:
|
|
12244
|
+
outputWidth: F,
|
|
12245
12245
|
outputHeight: N,
|
|
12246
12246
|
resizeWidth: f,
|
|
12247
12247
|
resizeHeight: y,
|
|
12248
12248
|
scale: $,
|
|
12249
|
-
outputScale:
|
|
12249
|
+
outputScale: U,
|
|
12250
12250
|
offsetX: A,
|
|
12251
12251
|
offsetY: D
|
|
12252
12252
|
}), this.worker.postMessage(
|
|
@@ -12257,7 +12257,7 @@ class pg {
|
|
|
12257
12257
|
height: y,
|
|
12258
12258
|
dx: A,
|
|
12259
12259
|
dy: D,
|
|
12260
|
-
dw:
|
|
12260
|
+
dw: F,
|
|
12261
12261
|
dh: N,
|
|
12262
12262
|
dataURLOptions: o.dataURLOptions,
|
|
12263
12263
|
logDebug: !!this.logger
|
|
@@ -12320,13 +12320,13 @@ class pg {
|
|
|
12320
12320
|
return;
|
|
12321
12321
|
const n = this.pendingCanvasMutations.get(t);
|
|
12322
12322
|
if (!n || i === -1) return;
|
|
12323
|
-
const s = n.map((l) =>
|
|
12323
|
+
const s = n.map((l) => Ct(l, ["type"])), { type: r } = n[0];
|
|
12324
12324
|
this.mutationCb({ id: i, type: r, commands: s }), this.pendingCanvasMutations.delete(t);
|
|
12325
12325
|
}
|
|
12326
12326
|
}
|
|
12327
12327
|
class mg {
|
|
12328
12328
|
constructor(t) {
|
|
12329
|
-
|
|
12329
|
+
W(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet()), W(this, "mutationCb"), W(this, "adoptedStyleSheetCb"), W(this, "styleMirror", new Jy()), this.mutationCb = t.mutationCb, this.adoptedStyleSheetCb = t.adoptedStyleSheetCb;
|
|
12330
12330
|
}
|
|
12331
12331
|
attachLinkElement(t, i) {
|
|
12332
12332
|
"_cssText" in i.attributes && this.mutationCb({
|
|
@@ -12371,7 +12371,7 @@ class mg {
|
|
|
12371
12371
|
}
|
|
12372
12372
|
class bg {
|
|
12373
12373
|
constructor() {
|
|
12374
|
-
|
|
12374
|
+
W(this, "nodeMap", /* @__PURE__ */ new WeakMap()), W(this, "active", !1);
|
|
12375
12375
|
}
|
|
12376
12376
|
inOtherBuffer(t, i) {
|
|
12377
12377
|
const n = this.nodeMap.get(t);
|
|
@@ -12408,7 +12408,7 @@ function Be(e = {}) {
|
|
|
12408
12408
|
maskTextClass: S = "highlight-mask",
|
|
12409
12409
|
maskTextSelector: I = null,
|
|
12410
12410
|
inlineStylesheet: V = !0,
|
|
12411
|
-
maskAllInputs:
|
|
12411
|
+
maskAllInputs: C,
|
|
12412
12412
|
maskInputOptions: X,
|
|
12413
12413
|
slimDOMOptions: G,
|
|
12414
12414
|
maskInputFn: k,
|
|
@@ -12417,37 +12417,37 @@ function Be(e = {}) {
|
|
|
12417
12417
|
packFn: g,
|
|
12418
12418
|
sampling: R = {},
|
|
12419
12419
|
mousemoveWait: J,
|
|
12420
|
-
recordDOM:
|
|
12420
|
+
recordDOM: E = !0,
|
|
12421
12421
|
recordCanvas: $ = !1,
|
|
12422
12422
|
recordCrossOriginIframes: f = !1,
|
|
12423
12423
|
recordAfter: y = e.recordAfter === "DOMContentLoaded" ? e.recordAfter : "load",
|
|
12424
12424
|
userTriggeredOnInput: T = !1,
|
|
12425
|
-
collectFonts:
|
|
12426
|
-
inlineImages:
|
|
12425
|
+
collectFonts: U = !1,
|
|
12426
|
+
inlineImages: F = !1,
|
|
12427
12427
|
inlineVideos: N = !1,
|
|
12428
12428
|
plugins: A,
|
|
12429
12429
|
keepIframeSrcFn: D = () => !1,
|
|
12430
12430
|
privacySetting: de = "default",
|
|
12431
|
-
ignoreCSSAttributes:
|
|
12432
|
-
errorHandler:
|
|
12431
|
+
ignoreCSSAttributes: be = /* @__PURE__ */ new Set([]),
|
|
12432
|
+
errorHandler: Ce,
|
|
12433
12433
|
logger: ce
|
|
12434
12434
|
} = e, ve = Y(Y({}, e.dataURLOptions), (i = (t = e.sampling) == null ? void 0 : t.canvas) == null ? void 0 : i.dataURLOptions);
|
|
12435
|
-
|
|
12435
|
+
Ey(Ce);
|
|
12436
12436
|
const tt = f ? window.parent === window : !0;
|
|
12437
|
-
let
|
|
12437
|
+
let Me = !1;
|
|
12438
12438
|
if (!tt)
|
|
12439
12439
|
try {
|
|
12440
|
-
window.parent.document && (
|
|
12440
|
+
window.parent.document && (Me = !1);
|
|
12441
12441
|
} catch {
|
|
12442
|
-
|
|
12442
|
+
Me = !0;
|
|
12443
12443
|
}
|
|
12444
12444
|
if (tt && !c)
|
|
12445
12445
|
throw new Error("emit function is required");
|
|
12446
|
-
if (!tt && !
|
|
12446
|
+
if (!tt && !Me)
|
|
12447
12447
|
return () => {
|
|
12448
12448
|
};
|
|
12449
12449
|
J !== void 0 && R.mousemove === void 0 && (R.mousemove = J), Te.reset();
|
|
12450
|
-
const Yt =
|
|
12450
|
+
const Yt = C === !0 ? {
|
|
12451
12451
|
color: !0,
|
|
12452
12452
|
date: !0,
|
|
12453
12453
|
"datetime-local": !0,
|
|
@@ -12480,19 +12480,19 @@ function Be(e = {}) {
|
|
|
12480
12480
|
headTitleMutations: G === "all"
|
|
12481
12481
|
} : G || {};
|
|
12482
12482
|
Ly();
|
|
12483
|
-
let
|
|
12483
|
+
let Ut, pt = 0;
|
|
12484
12484
|
const mt = (_) => {
|
|
12485
12485
|
for (const we of A || [])
|
|
12486
12486
|
we.eventProcessor && (_ = we.eventProcessor(_));
|
|
12487
12487
|
return g && // Disable packing events which will be emitted to parent frames.
|
|
12488
|
-
!
|
|
12488
|
+
!Me && (_ = g(_)), _;
|
|
12489
12489
|
};
|
|
12490
12490
|
oe = (_, we) => {
|
|
12491
12491
|
var se;
|
|
12492
12492
|
const re = _;
|
|
12493
12493
|
if (re.timestamp = vn(), (se = rt[0]) != null && se.isFrozen() && re.type !== j.FullSnapshot && !(re.type === j.IncrementalSnapshot && re.data.source === P.Mutation) && rt.forEach((Je) => Je.unfreeze()), tt)
|
|
12494
12494
|
c?.(mt(re), we);
|
|
12495
|
-
else if (
|
|
12495
|
+
else if (Me) {
|
|
12496
12496
|
const Je = {
|
|
12497
12497
|
type: "rrweb",
|
|
12498
12498
|
event: mt(re),
|
|
@@ -12502,12 +12502,12 @@ function Be(e = {}) {
|
|
|
12502
12502
|
window.parent.postMessage(Je, "*");
|
|
12503
12503
|
}
|
|
12504
12504
|
if (re.type === j.FullSnapshot)
|
|
12505
|
-
|
|
12505
|
+
Ut = re, pt = 0;
|
|
12506
12506
|
else if (re.type === j.IncrementalSnapshot) {
|
|
12507
12507
|
if (re.data.source === P.Mutation && re.data.isAttachIframe)
|
|
12508
12508
|
return;
|
|
12509
12509
|
pt++;
|
|
12510
|
-
const Je = h && pt >= h, te = u && re.timestamp -
|
|
12510
|
+
const Je = h && pt >= h, te = u && re.timestamp - Ut.timestamp > u;
|
|
12511
12511
|
(Je || te) && on(!0);
|
|
12512
12512
|
}
|
|
12513
12513
|
};
|
|
@@ -12518,7 +12518,7 @@ function Be(e = {}) {
|
|
|
12518
12518
|
source: P.Mutation
|
|
12519
12519
|
}, _)
|
|
12520
12520
|
});
|
|
12521
|
-
},
|
|
12521
|
+
}, zr = (_) => oe({
|
|
12522
12522
|
type: j.IncrementalSnapshot,
|
|
12523
12523
|
data: Y({
|
|
12524
12524
|
source: P.Scroll
|
|
@@ -12552,7 +12552,7 @@ function Be(e = {}) {
|
|
|
12552
12552
|
const Dn = new bg();
|
|
12553
12553
|
ti = new pg({
|
|
12554
12554
|
recordCanvas: $,
|
|
12555
|
-
recordLocalVideos:
|
|
12555
|
+
recordLocalVideos: F,
|
|
12556
12556
|
recordRemoteVideos: N,
|
|
12557
12557
|
mutationCb: Pr,
|
|
12558
12558
|
win: window,
|
|
@@ -12570,7 +12570,7 @@ function Be(e = {}) {
|
|
|
12570
12570
|
});
|
|
12571
12571
|
const Gi = new sg({
|
|
12572
12572
|
mutationCb: Qe,
|
|
12573
|
-
scrollCb:
|
|
12573
|
+
scrollCb: zr,
|
|
12574
12574
|
bypassOptions: {
|
|
12575
12575
|
blockClass: p,
|
|
12576
12576
|
blockSelector: m,
|
|
@@ -12582,7 +12582,7 @@ function Be(e = {}) {
|
|
|
12582
12582
|
maskTextFn: v,
|
|
12583
12583
|
maskInputFn: k,
|
|
12584
12584
|
recordCanvas: $,
|
|
12585
|
-
inlineImages:
|
|
12585
|
+
inlineImages: F,
|
|
12586
12586
|
inlineVideos: N,
|
|
12587
12587
|
privacySetting: de,
|
|
12588
12588
|
sampling: R,
|
|
@@ -12596,14 +12596,14 @@ function Be(e = {}) {
|
|
|
12596
12596
|
mirror: Te
|
|
12597
12597
|
});
|
|
12598
12598
|
on = (_ = !1) => {
|
|
12599
|
-
if (!
|
|
12599
|
+
if (!E)
|
|
12600
12600
|
return;
|
|
12601
12601
|
oe(
|
|
12602
12602
|
{
|
|
12603
12603
|
type: j.Meta,
|
|
12604
12604
|
data: {
|
|
12605
12605
|
href: window.location.href,
|
|
12606
|
-
width:
|
|
12606
|
+
width: Mc(),
|
|
12607
12607
|
height: Kc()
|
|
12608
12608
|
}
|
|
12609
12609
|
},
|
|
@@ -12622,11 +12622,11 @@ function Be(e = {}) {
|
|
|
12622
12622
|
slimDOM: ht,
|
|
12623
12623
|
dataURLOptions: ve,
|
|
12624
12624
|
recordCanvas: $,
|
|
12625
|
-
inlineImages:
|
|
12625
|
+
inlineImages: F,
|
|
12626
12626
|
inlineVideos: N,
|
|
12627
12627
|
privacySetting: de,
|
|
12628
12628
|
onSerialize: (se) => {
|
|
12629
|
-
|
|
12629
|
+
Hc(se, Te) && nt.addIframe(se), zc(se, Te) && it.trackLinkElement(se), lr(se) && Gi.addShadowRoot(z.shadowRoot(se), document);
|
|
12630
12630
|
},
|
|
12631
12631
|
onIframeLoad: (se, re) => {
|
|
12632
12632
|
nt.attachIframe(se, re), Gi.observeAttachShadow(se);
|
|
@@ -12643,7 +12643,7 @@ function Be(e = {}) {
|
|
|
12643
12643
|
type: j.FullSnapshot,
|
|
12644
12644
|
data: {
|
|
12645
12645
|
node: we,
|
|
12646
|
-
initialOffset:
|
|
12646
|
+
initialOffset: Fc(window)
|
|
12647
12647
|
}
|
|
12648
12648
|
},
|
|
12649
12649
|
_
|
|
@@ -12671,7 +12671,7 @@ function Be(e = {}) {
|
|
|
12671
12671
|
source: P.MouseInteraction
|
|
12672
12672
|
}, te)
|
|
12673
12673
|
}),
|
|
12674
|
-
scrollCb:
|
|
12674
|
+
scrollCb: zr,
|
|
12675
12675
|
viewportResizeCb: (te) => oe({
|
|
12676
12676
|
type: j.IncrementalSnapshot,
|
|
12677
12677
|
data: Y({
|
|
@@ -12733,12 +12733,12 @@ function Be(e = {}) {
|
|
|
12733
12733
|
maskInputOptions: Yt,
|
|
12734
12734
|
inlineStylesheet: V,
|
|
12735
12735
|
sampling: R,
|
|
12736
|
-
recordDOM:
|
|
12736
|
+
recordDOM: E,
|
|
12737
12737
|
recordCanvas: $,
|
|
12738
|
-
inlineImages:
|
|
12738
|
+
inlineImages: F,
|
|
12739
12739
|
inlineVideos: N,
|
|
12740
12740
|
userTriggeredOnInput: T,
|
|
12741
|
-
collectFonts:
|
|
12741
|
+
collectFonts: U,
|
|
12742
12742
|
doc: re,
|
|
12743
12743
|
maskInputFn: k,
|
|
12744
12744
|
maskTextFn: v,
|
|
@@ -12752,7 +12752,7 @@ function Be(e = {}) {
|
|
|
12752
12752
|
shadowDomManager: Gi,
|
|
12753
12753
|
processedNodeManager: Dn,
|
|
12754
12754
|
canvasManager: ti,
|
|
12755
|
-
ignoreCSSAttributes:
|
|
12755
|
+
ignoreCSSAttributes: be,
|
|
12756
12756
|
privacySetting: de,
|
|
12757
12757
|
plugins: ((Je = A?.filter((te) => te.observer)) == null ? void 0 : Je.map((te) => ({
|
|
12758
12758
|
observer: te.observer,
|
|
@@ -12780,14 +12780,14 @@ function Be(e = {}) {
|
|
|
12780
12780
|
on(), _.push(we(document)), xn = !0;
|
|
12781
12781
|
};
|
|
12782
12782
|
return document.readyState === "interactive" || document.readyState === "complete" ? se() : (_.push(
|
|
12783
|
-
|
|
12783
|
+
Ie("DOMContentLoaded", () => {
|
|
12784
12784
|
oe({
|
|
12785
12785
|
type: j.DomContentLoaded,
|
|
12786
12786
|
data: {}
|
|
12787
12787
|
}), y === "DOMContentLoaded" && se();
|
|
12788
12788
|
})
|
|
12789
12789
|
), _.push(
|
|
12790
|
-
|
|
12790
|
+
Ie(
|
|
12791
12791
|
"load",
|
|
12792
12792
|
() => {
|
|
12793
12793
|
oe({
|
|
@@ -12798,7 +12798,7 @@ function Be(e = {}) {
|
|
|
12798
12798
|
window
|
|
12799
12799
|
)
|
|
12800
12800
|
)), () => {
|
|
12801
|
-
_.forEach((re) => re()), Dn.destroy(), xn = !1,
|
|
12801
|
+
_.forEach((re) => re()), Dn.destroy(), xn = !1, Hy();
|
|
12802
12802
|
};
|
|
12803
12803
|
} catch (_) {
|
|
12804
12804
|
console.warn(_);
|
|
@@ -12821,7 +12821,7 @@ Be.takeFullSnapshot = (e) => {
|
|
|
12821
12821
|
throw new Error("please take full snapshot after start recording");
|
|
12822
12822
|
on(e);
|
|
12823
12823
|
};
|
|
12824
|
-
Be.snapshotCanvas = (e) =>
|
|
12824
|
+
Be.snapshotCanvas = (e) => ye(void 0, null, function* () {
|
|
12825
12825
|
if (!ti)
|
|
12826
12826
|
throw new Error("canvas manager is not initialized");
|
|
12827
12827
|
yield ti.snapshot(e);
|
|
@@ -12853,14 +12853,14 @@ const { addCustomEvent: gl } = Be, fg = (e) => {
|
|
|
12853
12853
|
return window.addEventListener("locationchange", s), () => {
|
|
12854
12854
|
window.removeEventListener("popstate", n), window.removeEventListener("locationchange", s), history.pushState = t, history.replaceState = i;
|
|
12855
12855
|
};
|
|
12856
|
-
}, yg = (e) => {
|
|
12856
|
+
}, yg = (e, t, i) => {
|
|
12857
12857
|
switch (e) {
|
|
12858
12858
|
case "strict":
|
|
12859
12859
|
return [!0, void 0];
|
|
12860
12860
|
case "default":
|
|
12861
12861
|
return [!0, void 0];
|
|
12862
12862
|
case "none":
|
|
12863
|
-
return [
|
|
12863
|
+
return [!!t, me(Y({}, i), { password: !0 })];
|
|
12864
12864
|
}
|
|
12865
12865
|
}, gg = (e) => {
|
|
12866
12866
|
const t = (i) => {
|
|
@@ -12965,9 +12965,9 @@ const { addCustomEvent: gl } = Be, fg = (e) => {
|
|
|
12965
12965
|
return !1;
|
|
12966
12966
|
}
|
|
12967
12967
|
const i = Gg(t), n = Xe(
|
|
12968
|
-
|
|
12968
|
+
Ze.SEGMENT_LAST_SENT_HASH_KEY
|
|
12969
12969
|
);
|
|
12970
|
-
return n === void 0 || i !== n ? (Pe(
|
|
12970
|
+
return n === void 0 || i !== n ? (Pe(Ze.SEGMENT_LAST_SENT_HASH_KEY, i), !0) : !1;
|
|
12971
12971
|
}, Gg = (e) => {
|
|
12972
12972
|
var t = 0, i = e.length, n = 0;
|
|
12973
12973
|
if (i > 0) for (; n < i; ) t = (t << 5) - t + e.charCodeAt(n++) | 0;
|
|
@@ -12978,7 +12978,7 @@ const { addCustomEvent: gl } = Be, fg = (e) => {
|
|
|
12978
12978
|
const s = !1, r = !0;
|
|
12979
12979
|
for (let l = 0; l < i.length; l++) {
|
|
12980
12980
|
let o = i[l].split("+");
|
|
12981
|
-
n = [], o.length > 1 && (n = Rg(iu, o)), o = o[o.length - 1], o = o === "*" ? "*" :
|
|
12981
|
+
n = [], o.length > 1 && (n = Rg(iu, o)), o = o[o.length - 1], o = o === "*" ? "*" : Cg(o), o in Ke || (Ke[o] = []), Ke[o].push({
|
|
12982
12982
|
mods: n,
|
|
12983
12983
|
shortcut: i[l],
|
|
12984
12984
|
key: i[l],
|
|
@@ -12993,7 +12993,7 @@ const { addCustomEvent: gl } = Be, fg = (e) => {
|
|
|
12993
12993
|
wg(l);
|
|
12994
12994
|
});
|
|
12995
12995
|
};
|
|
12996
|
-
let
|
|
12996
|
+
let fe = [];
|
|
12997
12997
|
function Xg(e) {
|
|
12998
12998
|
typeof e != "string" && (e = ""), e = e.replace(/\s/g, "");
|
|
12999
12999
|
const t = e.split(",");
|
|
@@ -13002,7 +13002,7 @@ function Xg(e) {
|
|
|
13002
13002
|
t[i - 1] += ",", t.splice(i, 1), i = t.lastIndexOf("");
|
|
13003
13003
|
return t;
|
|
13004
13004
|
}
|
|
13005
|
-
const
|
|
13005
|
+
const Ke = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1, Wg = {
|
|
13006
13006
|
backspace: 8,
|
|
13007
13007
|
tab: 9,
|
|
13008
13008
|
clear: 12,
|
|
@@ -13061,7 +13061,7 @@ const Ue = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().i
|
|
|
13061
13061
|
ctrlKey: 17,
|
|
13062
13062
|
altKey: 18,
|
|
13063
13063
|
metaKey: 91
|
|
13064
|
-
},
|
|
13064
|
+
}, ge = {
|
|
13065
13065
|
16: !1,
|
|
13066
13066
|
18: !1,
|
|
13067
13067
|
17: !1,
|
|
@@ -13082,9 +13082,9 @@ const Ue = {}, bs = typeof navigator < "u" ? navigator.userAgent.toLowerCase().i
|
|
|
13082
13082
|
"⌘": 91,
|
|
13083
13083
|
cmd: 91,
|
|
13084
13084
|
command: 91
|
|
13085
|
-
},
|
|
13085
|
+
}, Cg = (e) => (
|
|
13086
13086
|
// @ts-expect-error
|
|
13087
|
-
|
|
13087
|
+
Wg[e.toLowerCase()] || // @ts-expect-error
|
|
13088
13088
|
iu[e.toLowerCase()] || e.toUpperCase().charCodeAt(0)
|
|
13089
13089
|
);
|
|
13090
13090
|
function Rg(e, t) {
|
|
@@ -13102,30 +13102,30 @@ function vg(e, t, i) {
|
|
|
13102
13102
|
let n;
|
|
13103
13103
|
if (t.scope === i || t.scope === "all") {
|
|
13104
13104
|
n = t.mods.length > 0;
|
|
13105
|
-
for (const s in
|
|
13106
|
-
Object.prototype.hasOwnProperty.call(
|
|
13107
|
-
(!
|
|
13108
|
-
|
|
13109
|
-
(t.mods.length === 0 && !
|
|
13105
|
+
for (const s in ge)
|
|
13106
|
+
Object.prototype.hasOwnProperty.call(ge, s) && // @ts-expect-error
|
|
13107
|
+
(!ge[s] && t.mods.indexOf(+s) > -1 || // @ts-expect-error
|
|
13108
|
+
ge[s] && t.mods.indexOf(+s) === -1) && (n = !1);
|
|
13109
|
+
(t.mods.length === 0 && !ge[16] && !ge[18] && !ge[17] && !ge[91] || n || t.shortcut === "*") && t.method(e, t) === !1 && (e.preventDefault ? e.preventDefault() : e.returnValue = !1, e.stopPropagation && e.stopPropagation(), e.cancelBubble && (e.cancelBubble = !0));
|
|
13110
13110
|
}
|
|
13111
13111
|
}
|
|
13112
13112
|
function wg(e) {
|
|
13113
|
-
const t =
|
|
13113
|
+
const t = Ke["*"];
|
|
13114
13114
|
let i = e.keyCode || e.which || e.charCode;
|
|
13115
|
-
if ((i === 93 || i === 224) && (i = 91),
|
|
13115
|
+
if ((i === 93 || i === 224) && (i = 91), fe.indexOf(i) === -1 && i !== 229 && fe.push(i), ["ctrlKey", "altKey", "shiftKey", "metaKey"].forEach((n) => {
|
|
13116
13116
|
const s = Il[n];
|
|
13117
|
-
e[n] &&
|
|
13118
|
-
}), !(i in
|
|
13119
|
-
for (const n in
|
|
13120
|
-
Object.prototype.hasOwnProperty.call(
|
|
13121
|
-
if (e.getModifierState && !(e.altKey && !e.ctrlKey) && e.getModifierState("AltGraph") && (
|
|
13122
|
-
for (let n = 0; n <
|
|
13117
|
+
e[n] && fe.indexOf(s) === -1 ? fe.push(s) : !e[n] && fe.indexOf(s) > -1 ? fe.splice(fe.indexOf(s), 1) : n === "metaKey" && e[n] && fe.length === 3 && (e.ctrlKey || e.shiftKey || e.altKey || (fe = fe.slice(fe.indexOf(s))));
|
|
13118
|
+
}), !(i in ge && (ge[i] = !0, !t))) {
|
|
13119
|
+
for (const n in ge)
|
|
13120
|
+
Object.prototype.hasOwnProperty.call(ge, n) && (ge[n] = e[Il[n]]);
|
|
13121
|
+
if (e.getModifierState && !(e.altKey && !e.ctrlKey) && e.getModifierState("AltGraph") && (fe.indexOf(17) === -1 && fe.push(17), fe.indexOf(18) === -1 && fe.push(18), ge[17] = !0, ge[18] = !0), i in Ke) {
|
|
13122
|
+
for (let n = 0; n < Ke[i].length; n++)
|
|
13123
13123
|
if (
|
|
13124
13124
|
// @ts-expect-error
|
|
13125
|
-
(e.type === "keydown" &&
|
|
13126
|
-
e.type === "keyup" &&
|
|
13125
|
+
(e.type === "keydown" && Ke[i][n].keydown || // @ts-expect-error
|
|
13126
|
+
e.type === "keyup" && Ke[i][n].keyup) && Ke[i][n].key
|
|
13127
13127
|
) {
|
|
13128
|
-
const s =
|
|
13128
|
+
const s = Ke[i][n];
|
|
13129
13129
|
vg(e, s, "all");
|
|
13130
13130
|
}
|
|
13131
13131
|
}
|
|
@@ -13145,7 +13145,7 @@ const Sl = "iframe parent ready", Gl = "iframe ok", fi = "highlightLogs", xg = (
|
|
|
13145
13145
|
`, " ")
|
|
13146
13146
|
));
|
|
13147
13147
|
};
|
|
13148
|
-
var
|
|
13148
|
+
var We = Uint8Array, ke = Uint16Array, Or = Int32Array, Er = new We([
|
|
13149
13149
|
0,
|
|
13150
13150
|
0,
|
|
13151
13151
|
0,
|
|
@@ -13180,7 +13180,7 @@ var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
|
|
|
13180
13180
|
0,
|
|
13181
13181
|
/* impossible */
|
|
13182
13182
|
0
|
|
13183
|
-
]),
|
|
13183
|
+
]), Hr = new We([
|
|
13184
13184
|
0,
|
|
13185
13185
|
0,
|
|
13186
13186
|
0,
|
|
@@ -13214,16 +13214,16 @@ var Ce = Uint8Array, ke = Uint16Array, Er = Int32Array, Mr = new Ce([
|
|
|
13214
13214
|
/* unused */
|
|
13215
13215
|
0,
|
|
13216
13216
|
0
|
|
13217
|
-
]), Vl = new
|
|
13217
|
+
]), Vl = new We([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), nu = function(e, t) {
|
|
13218
13218
|
for (var i = new ke(31), n = 0; n < 31; ++n)
|
|
13219
13219
|
i[n] = t += 1 << e[n - 1];
|
|
13220
|
-
for (var s = new
|
|
13220
|
+
for (var s = new Or(i[30]), n = 1; n < 30; ++n)
|
|
13221
13221
|
for (var r = i[n]; r < i[n + 1]; ++r)
|
|
13222
13222
|
s[r] = r - i[n] << 5 | n;
|
|
13223
13223
|
return { b: i, r: s };
|
|
13224
|
-
}, su = nu(
|
|
13224
|
+
}, su = nu(Er, 2), Lg = su.b, cr = su.r;
|
|
13225
13225
|
Lg[28] = 258, cr[258] = 28;
|
|
13226
|
-
var Jg = nu(
|
|
13226
|
+
var Jg = nu(Hr, 0), Xl = Jg.r, ru = new ke(32768);
|
|
13227
13227
|
for (var ne = 0; ne < 32768; ++ne) {
|
|
13228
13228
|
var Ae = (ne & 43690) >> 1 | (ne & 21845) << 1;
|
|
13229
13229
|
Ae = (Ae & 52428) >> 2 | (Ae & 13107) << 2, Ae = (Ae & 61680) >> 4 | (Ae & 3855) << 4, ru[ne] = ((Ae & 65280) >> 8 | (Ae & 255) << 8) >> 1;
|
|
@@ -13238,7 +13238,7 @@ var ii = function(e, t, i) {
|
|
|
13238
13238
|
for (o = new ke(n), s = 0; s < n; ++s)
|
|
13239
13239
|
e[s] && (o[s] = ru[l[e[s] - 1]++] >> 15 - e[s]);
|
|
13240
13240
|
return o;
|
|
13241
|
-
}, at = new
|
|
13241
|
+
}, at = new We(288);
|
|
13242
13242
|
for (var ne = 0; ne < 144; ++ne)
|
|
13243
13243
|
at[ne] = 8;
|
|
13244
13244
|
for (var ne = 144; ne < 256; ++ne)
|
|
@@ -13247,14 +13247,14 @@ for (var ne = 256; ne < 280; ++ne)
|
|
|
13247
13247
|
at[ne] = 7;
|
|
13248
13248
|
for (var ne = 280; ne < 288; ++ne)
|
|
13249
13249
|
at[ne] = 8;
|
|
13250
|
-
var Tn = new
|
|
13250
|
+
var Tn = new We(32);
|
|
13251
13251
|
for (var ne = 0; ne < 32; ++ne)
|
|
13252
13252
|
Tn[ne] = 5;
|
|
13253
|
-
var Yg = /* @__PURE__ */ ii(at, 9),
|
|
13253
|
+
var Yg = /* @__PURE__ */ ii(at, 9), Ug = /* @__PURE__ */ ii(Tn, 5), ou = function(e) {
|
|
13254
13254
|
return (e + 7) / 8 | 0;
|
|
13255
13255
|
}, lu = function(e, t, i) {
|
|
13256
|
-
return (i == null || i > e.length) && (i = e.length), new
|
|
13257
|
-
},
|
|
13256
|
+
return (i == null || i > e.length) && (i = e.length), new We(e.subarray(t, i));
|
|
13257
|
+
}, He = function(e, t, i) {
|
|
13258
13258
|
i <<= t & 7;
|
|
13259
13259
|
var n = t / 8 | 0;
|
|
13260
13260
|
e[n] |= i, e[n + 1] |= i >> 8;
|
|
@@ -13269,7 +13269,7 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13269
13269
|
if (!s)
|
|
13270
13270
|
return { t: cu, l: 0 };
|
|
13271
13271
|
if (s == 1) {
|
|
13272
|
-
var l = new
|
|
13272
|
+
var l = new We(i[0].s + 1);
|
|
13273
13273
|
return l[i[0].s] = 1, { t: l, l: 1 };
|
|
13274
13274
|
}
|
|
13275
13275
|
i.sort(function(G, k) {
|
|
@@ -13293,8 +13293,8 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13293
13293
|
break;
|
|
13294
13294
|
}
|
|
13295
13295
|
for (d >>= S; d > 0; ) {
|
|
13296
|
-
var
|
|
13297
|
-
m[
|
|
13296
|
+
var C = r[n].s;
|
|
13297
|
+
m[C] < t ? d -= 1 << t - m[C]++ - 1 : ++n;
|
|
13298
13298
|
}
|
|
13299
13299
|
for (; n >= 0 && d; --n) {
|
|
13300
13300
|
var X = r[n].s;
|
|
@@ -13302,10 +13302,10 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13302
13302
|
}
|
|
13303
13303
|
b = t;
|
|
13304
13304
|
}
|
|
13305
|
-
return { t: new
|
|
13305
|
+
return { t: new We(m), l: b };
|
|
13306
13306
|
}, ur = function(e, t, i) {
|
|
13307
13307
|
return e.s == -1 ? Math.max(ur(e.l, t, i + 1), ur(e.r, t, i + 1)) : t[e.s] = i;
|
|
13308
|
-
},
|
|
13308
|
+
}, Wl = function(e) {
|
|
13309
13309
|
for (var t = e.length; t && !e[--t]; )
|
|
13310
13310
|
;
|
|
13311
13311
|
for (var i = new ke(++t), n = 0, s = e[0], r = 1, l = function(a) {
|
|
@@ -13338,88 +13338,88 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13338
13338
|
for (var r = 0; r < n; ++r)
|
|
13339
13339
|
e[s + r + 4] = i[r];
|
|
13340
13340
|
return (s + 4 + n) * 8;
|
|
13341
|
-
},
|
|
13342
|
-
|
|
13343
|
-
for (var h = fs(s, 15), p = h.t, m = h.l, b = fs(r, 15), d = b.t, S = b.l, I =
|
|
13341
|
+
}, Cl = function(e, t, i, n, s, r, l, o, a, c, u) {
|
|
13342
|
+
He(t, u++, i), ++s[256];
|
|
13343
|
+
for (var h = fs(s, 15), p = h.t, m = h.l, b = fs(r, 15), d = b.t, S = b.l, I = Wl(p), V = I.c, C = I.n, X = Wl(d), G = X.c, k = X.n, v = new ke(19), w = 0; w < V.length; ++w)
|
|
13344
13344
|
++v[V[w] & 31];
|
|
13345
13345
|
for (var w = 0; w < G.length; ++w)
|
|
13346
13346
|
++v[G[w] & 31];
|
|
13347
|
-
for (var g = fs(v, 7), R = g.t, J = g.l,
|
|
13347
|
+
for (var g = fs(v, 7), R = g.t, J = g.l, E = 19; E > 4 && !R[Vl[E - 1]]; --E)
|
|
13348
13348
|
;
|
|
13349
|
-
var $ = c + 5 << 3, f = Bt(s, at) + Bt(r, Tn) + l, y = Bt(s, p) + Bt(r, d) + l + 14 + 3 *
|
|
13349
|
+
var $ = c + 5 << 3, f = Bt(s, at) + Bt(r, Tn) + l, y = Bt(s, p) + Bt(r, d) + l + 14 + 3 * E + Bt(v, R) + 2 * v[16] + 3 * v[17] + 7 * v[18];
|
|
13350
13350
|
if (a >= 0 && $ <= f && $ <= y)
|
|
13351
13351
|
return au(t, u, e.subarray(a, a + c));
|
|
13352
|
-
var T,
|
|
13353
|
-
if (
|
|
13354
|
-
T = ii(p, m),
|
|
13352
|
+
var T, U, F, N;
|
|
13353
|
+
if (He(t, u, 1 + (y < f)), u += 2, y < f) {
|
|
13354
|
+
T = ii(p, m), U = p, F = ii(d, S), N = d;
|
|
13355
13355
|
var A = ii(R, J);
|
|
13356
|
-
|
|
13357
|
-
for (var w = 0; w <
|
|
13358
|
-
|
|
13359
|
-
u += 3 *
|
|
13356
|
+
He(t, u, C - 257), He(t, u + 5, k - 1), He(t, u + 10, E - 4), u += 14;
|
|
13357
|
+
for (var w = 0; w < E; ++w)
|
|
13358
|
+
He(t, u + 3 * w, R[Vl[w]]);
|
|
13359
|
+
u += 3 * E;
|
|
13360
13360
|
for (var D = [V, G], de = 0; de < 2; ++de)
|
|
13361
|
-
for (var
|
|
13362
|
-
var
|
|
13363
|
-
|
|
13361
|
+
for (var be = D[de], w = 0; w < be.length; ++w) {
|
|
13362
|
+
var Ce = be[w] & 31;
|
|
13363
|
+
He(t, u, A[Ce]), u += R[Ce], Ce > 15 && (He(t, u, be[w] >> 5 & 127), u += be[w] >> 12);
|
|
13364
13364
|
}
|
|
13365
13365
|
} else
|
|
13366
|
-
T = Yg,
|
|
13366
|
+
T = Yg, U = at, F = Ug, N = Tn;
|
|
13367
13367
|
for (var w = 0; w < o; ++w) {
|
|
13368
13368
|
var ce = n[w];
|
|
13369
13369
|
if (ce > 255) {
|
|
13370
|
-
var
|
|
13371
|
-
Pt(t, u, T[
|
|
13370
|
+
var Ce = ce >> 18 & 31;
|
|
13371
|
+
Pt(t, u, T[Ce + 257]), u += U[Ce + 257], Ce > 7 && (He(t, u, ce >> 23 & 31), u += Er[Ce]);
|
|
13372
13372
|
var ve = ce & 31;
|
|
13373
|
-
Pt(t, u,
|
|
13373
|
+
Pt(t, u, F[ve]), u += N[ve], ve > 3 && (Pt(t, u, ce >> 5 & 8191), u += Hr[ve]);
|
|
13374
13374
|
} else
|
|
13375
|
-
Pt(t, u, T[ce]), u +=
|
|
13375
|
+
Pt(t, u, T[ce]), u += U[ce];
|
|
13376
13376
|
}
|
|
13377
|
-
return Pt(t, u, T[256]), u +
|
|
13378
|
-
},
|
|
13379
|
-
var l = r.z || e.length, o = new
|
|
13377
|
+
return Pt(t, u, T[256]), u + U[256];
|
|
13378
|
+
}, Fg = /* @__PURE__ */ new Or([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), cu = /* @__PURE__ */ new We(0), Kg = function(e, t, i, n, s, r) {
|
|
13379
|
+
var l = r.z || e.length, o = new We(n + l + 5 * (1 + Math.ceil(l / 7e3)) + s), a = o.subarray(n, o.length - s), c = r.l, u = (r.r || 0) & 7;
|
|
13380
13380
|
if (t) {
|
|
13381
13381
|
u && (a[0] = r.r >> 3);
|
|
13382
|
-
for (var h =
|
|
13382
|
+
for (var h = Fg[t - 1], p = h >> 13, m = h & 8191, b = (1 << i) - 1, d = r.p || new ke(32768), S = r.h || new ke(b + 1), I = Math.ceil(i / 3), V = 2 * I, C = function(Qe) {
|
|
13383
13383
|
return (e[Qe] ^ e[Qe + 1] << I ^ e[Qe + 2] << V) & b;
|
|
13384
|
-
}, X = new
|
|
13385
|
-
var $ =
|
|
13384
|
+
}, X = new Or(25e3), G = new ke(288), k = new ke(32), v = 0, w = 0, g = r.i || 0, R = 0, J = r.w || 0, E = 0; g + 2 < l; ++g) {
|
|
13385
|
+
var $ = C(g), f = g & 32767, y = S[$];
|
|
13386
13386
|
if (d[f] = y, S[$] = f, J <= g) {
|
|
13387
13387
|
var T = l - g;
|
|
13388
13388
|
if ((v > 7e3 || R > 24576) && (T > 423 || !c)) {
|
|
13389
|
-
u =
|
|
13390
|
-
for (var
|
|
13391
|
-
G[
|
|
13392
|
-
for (var
|
|
13393
|
-
k[
|
|
13389
|
+
u = Cl(e, a, 0, X, G, k, w, R, E, g - E, u), R = v = w = 0, E = g;
|
|
13390
|
+
for (var U = 0; U < 286; ++U)
|
|
13391
|
+
G[U] = 0;
|
|
13392
|
+
for (var U = 0; U < 30; ++U)
|
|
13393
|
+
k[U] = 0;
|
|
13394
13394
|
}
|
|
13395
|
-
var
|
|
13396
|
-
if (T > 2 && $ ==
|
|
13397
|
-
for (var de = Math.min(p, T) - 1,
|
|
13398
|
-
if (e[g +
|
|
13399
|
-
for (var ce = 0; ce <
|
|
13395
|
+
var F = 2, N = 0, A = m, D = f - y & 32767;
|
|
13396
|
+
if (T > 2 && $ == C(g - D))
|
|
13397
|
+
for (var de = Math.min(p, T) - 1, be = Math.min(32767, g), Ce = Math.min(258, T); D <= be && --A && f != y; ) {
|
|
13398
|
+
if (e[g + F] == e[g + F - D]) {
|
|
13399
|
+
for (var ce = 0; ce < Ce && e[g + ce] == e[g + ce - D]; ++ce)
|
|
13400
13400
|
;
|
|
13401
|
-
if (ce >
|
|
13402
|
-
if (
|
|
13401
|
+
if (ce > F) {
|
|
13402
|
+
if (F = ce, N = D, ce > de)
|
|
13403
13403
|
break;
|
|
13404
|
-
for (var ve = Math.min(D, ce - 2), tt = 0,
|
|
13405
|
-
var
|
|
13406
|
-
ht > tt && (tt = ht, y =
|
|
13404
|
+
for (var ve = Math.min(D, ce - 2), tt = 0, U = 0; U < ve; ++U) {
|
|
13405
|
+
var Me = g - D + U & 32767, Yt = d[Me], ht = Me - Yt & 32767;
|
|
13406
|
+
ht > tt && (tt = ht, y = Me);
|
|
13407
13407
|
}
|
|
13408
13408
|
}
|
|
13409
13409
|
}
|
|
13410
13410
|
f = y, y = d[f], D += f - y & 32767;
|
|
13411
13411
|
}
|
|
13412
13412
|
if (N) {
|
|
13413
|
-
X[R++] = 268435456 | cr[
|
|
13414
|
-
var
|
|
13415
|
-
w +=
|
|
13413
|
+
X[R++] = 268435456 | cr[F] << 18 | Xl[N];
|
|
13414
|
+
var Ut = cr[F] & 31, pt = Xl[N] & 31;
|
|
13415
|
+
w += Er[Ut] + Hr[pt], ++G[257 + Ut], ++k[pt], J = g + F, ++v;
|
|
13416
13416
|
} else
|
|
13417
13417
|
X[R++] = e[g], ++G[e[g]];
|
|
13418
13418
|
}
|
|
13419
13419
|
}
|
|
13420
13420
|
for (g = Math.max(g, J); g < l; ++g)
|
|
13421
13421
|
X[R++] = e[g], ++G[e[g]];
|
|
13422
|
-
u =
|
|
13422
|
+
u = Cl(e, a, c, X, G, k, w, R, E, g - E, u), c || (r.r = u & 7 | a[u / 8 | 0] << 3, u -= 7, r.h = S, r.p = d, r.i = g, r.w = J);
|
|
13423
13423
|
} else {
|
|
13424
13424
|
for (var g = r.w || 0; g < l + c; g += 65535) {
|
|
13425
13425
|
var mt = g + 65535;
|
|
@@ -13428,50 +13428,50 @@ var Yg = /* @__PURE__ */ ii(at, 9), Fg = /* @__PURE__ */ ii(Tn, 5), ou = functio
|
|
|
13428
13428
|
r.i = l;
|
|
13429
13429
|
}
|
|
13430
13430
|
return lu(o, 0, n + ou(u) + s);
|
|
13431
|
-
},
|
|
13431
|
+
}, Mg = /* @__PURE__ */ function() {
|
|
13432
13432
|
for (var e = new Int32Array(256), t = 0; t < 256; ++t) {
|
|
13433
13433
|
for (var i = t, n = 9; --n; )
|
|
13434
13434
|
i = (i & 1 && -306674912) ^ i >>> 1;
|
|
13435
13435
|
e[t] = i;
|
|
13436
13436
|
}
|
|
13437
13437
|
return e;
|
|
13438
|
-
}(),
|
|
13438
|
+
}(), Og = function() {
|
|
13439
13439
|
var e = -1;
|
|
13440
13440
|
return {
|
|
13441
13441
|
p: function(t) {
|
|
13442
13442
|
for (var i = e, n = 0; n < t.length; ++n)
|
|
13443
|
-
i =
|
|
13443
|
+
i = Mg[i & 255 ^ t[n]] ^ i >>> 8;
|
|
13444
13444
|
e = i;
|
|
13445
13445
|
},
|
|
13446
13446
|
d: function() {
|
|
13447
13447
|
return ~e;
|
|
13448
13448
|
}
|
|
13449
13449
|
};
|
|
13450
|
-
},
|
|
13450
|
+
}, Eg = function(e, t, i, n, s) {
|
|
13451
13451
|
if (!s && (s = { l: 1 }, t.dictionary)) {
|
|
13452
|
-
var r = t.dictionary.subarray(-32768), l = new
|
|
13452
|
+
var r = t.dictionary.subarray(-32768), l = new We(r.length + e.length);
|
|
13453
13453
|
l.set(r), l.set(e, r.length), e = l, s.w = r.length;
|
|
13454
13454
|
}
|
|
13455
13455
|
return Kg(e, t.level == null ? 6 : t.level, t.mem == null ? s.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(e.length))) * 1.5) : 20 : 12 + t.mem, i, n, s);
|
|
13456
13456
|
}, dr = function(e, t, i) {
|
|
13457
13457
|
for (; i; ++t)
|
|
13458
13458
|
e[t] = i, i >>>= 8;
|
|
13459
|
-
},
|
|
13459
|
+
}, Hg = function(e, t) {
|
|
13460
13460
|
var i = t.filename;
|
|
13461
13461
|
if (e[0] = 31, e[1] = 139, e[2] = 8, e[8] = t.level < 2 ? 4 : t.level == 9 ? 2 : 0, e[9] = 3, t.mtime != 0 && dr(e, 4, Math.floor(new Date(t.mtime || Date.now()) / 1e3)), i) {
|
|
13462
13462
|
e[3] = 8;
|
|
13463
13463
|
for (var n = 0; n <= i.length; ++n)
|
|
13464
13464
|
e[n + 10] = i.charCodeAt(n);
|
|
13465
13465
|
}
|
|
13466
|
-
},
|
|
13466
|
+
}, zg = function(e) {
|
|
13467
13467
|
return 10 + (e.filename ? e.filename.length + 1 : 0);
|
|
13468
13468
|
};
|
|
13469
13469
|
function Pg(e, t) {
|
|
13470
13470
|
t || (t = {});
|
|
13471
|
-
var i =
|
|
13471
|
+
var i = Og(), n = e.length;
|
|
13472
13472
|
i.p(e);
|
|
13473
|
-
var s =
|
|
13474
|
-
return
|
|
13473
|
+
var s = Eg(e, t, zg(t), 8), r = s.length;
|
|
13474
|
+
return Hg(s, t), dr(s, r - 8, i.d()), dr(s, r - 4, n), s;
|
|
13475
13475
|
}
|
|
13476
13476
|
var Rl = typeof TextEncoder < "u" && /* @__PURE__ */ new TextEncoder(), Bg = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder();
|
|
13477
13477
|
try {
|
|
@@ -13482,11 +13482,11 @@ function Dg(e, t) {
|
|
|
13482
13482
|
var i;
|
|
13483
13483
|
if (Rl)
|
|
13484
13484
|
return Rl.encode(e);
|
|
13485
|
-
for (var n = e.length, s = new
|
|
13485
|
+
for (var n = e.length, s = new We(e.length + (e.length >> 1)), r = 0, l = function(u) {
|
|
13486
13486
|
s[r++] = u;
|
|
13487
13487
|
}, i = 0; i < n; ++i) {
|
|
13488
13488
|
if (r + 5 > s.length) {
|
|
13489
|
-
var o = new
|
|
13489
|
+
var o = new We(r + 8 + (n - i << 1));
|
|
13490
13490
|
o.set(s), s = o;
|
|
13491
13491
|
}
|
|
13492
13492
|
var a = e.charCodeAt(i);
|
|
@@ -13495,7 +13495,7 @@ function Dg(e, t) {
|
|
|
13495
13495
|
return lu(s, 0, r);
|
|
13496
13496
|
}
|
|
13497
13497
|
function jg(e) {
|
|
13498
|
-
return
|
|
13498
|
+
return ye(this, null, function* () {
|
|
13499
13499
|
const t = Dg(JSON.stringify(e)), i = Pg(t), n = yield new Promise((s) => {
|
|
13500
13500
|
const r = new FileReader();
|
|
13501
13501
|
r.onload = () => s(r.result), r.readAsDataURL(new Blob([new Uint8Array(i)]));
|
|
@@ -13507,7 +13507,7 @@ function jg(e) {
|
|
|
13507
13507
|
};
|
|
13508
13508
|
});
|
|
13509
13509
|
}
|
|
13510
|
-
const uu = "dmFyIFZyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgcXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbm49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgZnQ9KEYsUCxNKT0+UCBpbiBGP1ZyKEYsUCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pOkZbUF09TSxEPShGLFApPT57Zm9yKHZhciBNIGluIFB8fChQPXt9KSl0bi5jYWxsKFAsTSkmJmZ0KEYsTSxQW01dKTtpZigkZSlmb3IodmFyIE0gb2YgJGUoUCkpbm4uY2FsbChQLE0pJiZmdChGLE0sUFtNXSk7cmV0dXJuIEZ9LEJlPShGLFApPT5qcihGLHFyKFApKTt2YXIgdmU9KEYsUCk9Pnt2YXIgTT17fTtmb3IodmFyIFggaW4gRil0bi5jYWxsKEYsWCkmJlAuaW5kZXhPZihYKTwwJiYoTVtYXT1GW1hdKTtpZihGIT1udWxsJiYkZSlmb3IodmFyIFggb2YgJGUoRikpUC5pbmRleE9mKFgpPDAmJm5uLmNhbGwoRixYKSYmKE1bWF09RltYXSk7cmV0dXJuIE19O3ZhciBodD0oRixQLE0pPT5mdChGLHR5cGVvZiBQIT0ic3ltYm9sIj9QKyIiOlAsTSk7dmFyIFE9KEYsUCxNKT0+bmV3IFByb21pc2UoKFgsSWUpPT57dmFyIFVlPXJlPT57dHJ5e29lKE0ubmV4dChyZSkpfWNhdGNoKEVlKXtJZShFZSl9fSxWZT1yZT0+e3RyeXtvZShNLnRocm93KHJlKSl9Y2F0Y2goRWUpe0llKEVlKX19LG9lPXJlPT5yZS5kb25lP1gocmUudmFsdWUpOlByb21pc2UucmVzb2x2ZShyZS52YWx1ZSkudGhlbihVZSxWZSk7b2UoKE09TS5hcHBseShGLFApKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEYoZSx0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJnR5cGVvZiBuIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaSE9PSJkZWZhdWx0IiYmIShpIGluIGUpKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuW2ldfX0pfX0pfSksT2JqZWN0LmZyZWV6ZShlKX1jb25zdCBQPUpTT04sTT1lPT5lLnRvVXBwZXJDYXNlKCksWD1lPT57Y29uc3QgdD17fTtyZXR1cm4gZS5mb3JFYWNoKChuLGkpPT57dFtpXT1ufSksdH0sSWU9KGUsdCxuKT0+ZS5kb2N1bWVudD9lOntkb2N1bWVudDplLHZhcmlhYmxlczp0LHJlcXVlc3RIZWFkZXJzOm4sc2lnbmFsOnZvaWQgMH0sVWU9KGUsdCxuKT0+ZS5xdWVyeT9lOntxdWVyeTplLHZhcmlhYmxlczp0LHJlcXVlc3RIZWFkZXJzOm4sc2lnbmFsOnZvaWQgMH0sVmU9KGUsdCk9PmUuZG9jdW1lbnRzP2U6e2RvY3VtZW50czplLHJlcXVlc3RIZWFkZXJzOnQsc2lnbmFsOnZvaWQgMH07ZnVuY3Rpb24gb2UoZSx0KXtpZighISFlKXRocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiByZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbH1mdW5jdGlvbiBFZShlLHQpe2lmKCEhIWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGludmFyaWFudCB0cmlnZ2VyZWQuIil9Y29uc3Qgcm49L1xyXG58W1xuXHJdL2c7ZnVuY3Rpb24gamUoZSx0KXtsZXQgbj0wLGk9MTtmb3IoY29uc3QgciBvZiBlLmJvZHkubWF0Y2hBbGwocm4pKXtpZih0eXBlb2Ygci5pbmRleD09Im51bWJlciJ8fEVlKCExKSxyLmluZGV4Pj10KWJyZWFrO249ci5pbmRleCtyWzBdLmxlbmd0aCxpKz0xfXJldHVybntsaW5lOmksY29sdW1uOnQrMS1ufX1mdW5jdGlvbiBzbihlKXtyZXR1cm4gZHQoZS5zb3VyY2UsamUoZS5zb3VyY2UsZS5zdGFydCkpfWZ1bmN0aW9uIGR0KGUsdCl7Y29uc3Qgbj1lLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbi0xLGk9IiIucGFkU3RhcnQobikrZS5ib2R5LHI9dC5saW5lLTEscz1lLmxvY2F0aW9uT2Zmc2V0LmxpbmUtMSxvPXQubGluZStzLGM9dC5saW5lPT09MT9uOjAsZj10LmNvbHVtbitjLGQ9YCR7ZS5uYW1lfToke299OiR7Zn0KYCx1PWkuc3BsaXQoL1xyXG58W1xuXHJdL2cpLHk9dVtyXTtpZih5Lmxlbmd0aD4xMjApe2NvbnN0IHY9TWF0aC5mbG9vcihmLzgwKSxiPWYlODAsbT1bXTtmb3IobGV0IE49MDtOPHkubGVuZ3RoO04rPTgwKW0ucHVzaCh5LnNsaWNlKE4sTis4MCkpO3JldHVybiBkK3B0KFtbYCR7b30gfGAsbVswXV0sLi4ubS5zbGljZSgxLHYrMSkubWFwKE49PlsifCIsTl0pLFsifCIsIl4iLnBhZFN0YXJ0KGIpXSxbInwiLG1bdisxXV1dKX1yZXR1cm4gZCtwdChbW2Ake28tMX0gfGAsdVtyLTFdXSxbYCR7b30gfGAseV0sWyJ8IiwiXiIucGFkU3RhcnQoZildLFtgJHtvKzF9IHxgLHVbcisxXV1dKX1mdW5jdGlvbiBwdChlKXtjb25zdCB0PWUuZmlsdGVyKChbaSxyXSk9PnIhPT12b2lkIDApLG49TWF0aC5tYXgoLi4udC5tYXAoKFtpXSk9PmkubGVuZ3RoKSk7cmV0dXJuIHQubWFwKChbaSxyXSk9PmkucGFkU3RhcnQobikrKHI/IiAiK3I6IiIpKS5qb2luKGAKYCl9ZnVuY3Rpb24gb24oZSl7Y29uc3QgdD1lWzBdO3JldHVybiB0PT1udWxsfHwia2luZCJpbiB0fHwibGVuZ3RoImluIHQ/e25vZGVzOnQsc291cmNlOmVbMV0scG9zaXRpb25zOmVbMl0scGF0aDplWzNdLG9yaWdpbmFsRXJyb3I6ZVs0XSxleHRlbnNpb25zOmVbNV19OnR9Y2xhc3MgcWUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LC4uLm4pe3ZhciBpLHIscztjb25zdHtub2RlczpvLHNvdXJjZTpjLHBvc2l0aW9uczpmLHBhdGg6ZCxvcmlnaW5hbEVycm9yOnUsZXh0ZW5zaW9uczp5fT1vbihuKTtzdXBlcih0KSx0aGlzLm5hbWU9IkdyYXBoUUxFcnJvciIsdGhpcy5wYXRoPWQhPW51bGw/ZDp2b2lkIDAsdGhpcy5vcmlnaW5hbEVycm9yPXUhPW51bGw/dTp2b2lkIDAsdGhpcy5ub2Rlcz1tdChBcnJheS5pc0FycmF5KG8pP286bz9bb106dm9pZCAwKTtjb25zdCB2PW10KChpPXRoaXMubm9kZXMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5tYXAobT0+bS5sb2MpLmZpbHRlcihtPT5tIT1udWxsKSk7dGhpcy5zb3VyY2U9YyE9bnVsbD9jOnY9PW51bGx8fChyPXZbMF0pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5zb3VyY2UsdGhpcy5wb3NpdGlvbnM9ZiE9bnVsbD9mOnY9PW51bGw/dm9pZCAwOnYubWFwKG09Pm0uc3RhcnQpLHRoaXMubG9jYXRpb25zPWYmJmM/Zi5tYXAobT0+amUoYyxtKSk6dj09bnVsbD92b2lkIDA6di5tYXAobT0+amUobS5zb3VyY2UsbS5zdGFydCkpO2NvbnN0IGI9cmUodT09bnVsbD92b2lkIDA6dS5leHRlbnNpb25zKT91PT1udWxsP3ZvaWQgMDp1LmV4dGVuc2lvbnM6dm9pZCAwO3RoaXMuZXh0ZW5zaW9ucz0ocz15IT1udWxsP3k6YikhPT1udWxsJiZzIT09dm9pZCAwP3M6T2JqZWN0LmNyZWF0ZShudWxsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHttZXNzYWdlOnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwfSxuYW1lOntlbnVtZXJhYmxlOiExfSxub2Rlczp7ZW51bWVyYWJsZTohMX0sc291cmNlOntlbnVtZXJhYmxlOiExfSxwb3NpdGlvbnM6e2VudW1lcmFibGU6ITF9LG9yaWdpbmFsRXJyb3I6e2VudW1lcmFibGU6ITF9fSksdSE9bnVsbCYmdS5zdGFjaz9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTp1LnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOkVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscWUpOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGFjayIse3ZhbHVlOkVycm9yKCkuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iR3JhcGhRTEVycm9yIn10b1N0cmluZygpe2xldCB0PXRoaXMubWVzc2FnZTtpZih0aGlzLm5vZGVzKWZvcihjb25zdCBuIG9mIHRoaXMubm9kZXMpbi5sb2MmJih0Kz1gCgpgK3NuKG4ubG9jKSk7ZWxzZSBpZih0aGlzLnNvdXJjZSYmdGhpcy5sb2NhdGlvbnMpZm9yKGNvbnN0IG4gb2YgdGhpcy5sb2NhdGlvbnMpdCs9YAoKYCtkdCh0aGlzLnNvdXJjZSxuKTtyZXR1cm4gdH10b0pTT04oKXtjb25zdCB0PXttZXNzYWdlOnRoaXMubWVzc2FnZX07cmV0dXJuIHRoaXMubG9jYXRpb25zIT1udWxsJiYodC5sb2NhdGlvbnM9dGhpcy5sb2NhdGlvbnMpLHRoaXMucGF0aCE9bnVsbCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuZXh0ZW5zaW9ucyE9bnVsbCYmT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5sZW5ndGg+MCYmKHQuZXh0ZW5zaW9ucz10aGlzLmV4dGVuc2lvbnMpLHR9fWZ1bmN0aW9uIG10KGUpe3JldHVybiBlPT09dm9pZCAwfHxlLmxlbmd0aD09PTA/dm9pZCAwOmV9ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIG5ldyBxZShgU3ludGF4IEVycm9yOiAke259YCx7c291cmNlOmUscG9zaXRpb25zOlt0XX0pfWNsYXNzIGFue2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnN0YXJ0PXQuc3RhcnQsdGhpcy5lbmQ9bi5lbmQsdGhpcy5zdGFydFRva2VuPXQsdGhpcy5lbmRUb2tlbj1uLHRoaXMuc291cmNlPWl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iTG9jYXRpb24ifXRvSlNPTigpe3JldHVybntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH19fWNsYXNzIHl0e2NvbnN0cnVjdG9yKHQsbixpLHIscyxvKXt0aGlzLmtpbmQ9dCx0aGlzLnN0YXJ0PW4sdGhpcy5lbmQ9aSx0aGlzLmxpbmU9cix0aGlzLmNvbHVtbj1zLHRoaXMudmFsdWU9byx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbH1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJUb2tlbiJ9dG9KU09OKCl7cmV0dXJue2tpbmQ6dGhpcy5raW5kLHZhbHVlOnRoaXMudmFsdWUsbGluZTp0aGlzLmxpbmUsY29sdW1uOnRoaXMuY29sdW1ufX19Y29uc3QgZ3Q9e05hbWU6W10sRG9jdW1lbnQ6WyJkZWZpbml0aW9ucyJdLE9wZXJhdGlvbkRlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxWYXJpYWJsZURlZmluaXRpb246WyJ2YXJpYWJsZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkaXJlY3RpdmVzIl0sVmFyaWFibGU6WyJuYW1lIl0sU2VsZWN0aW9uU2V0Olsic2VsZWN0aW9ucyJdLEZpZWxkOlsiYWxpYXMiLCJuYW1lIiwiYXJndW1lbnRzIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEFyZ3VtZW50OlsibmFtZSIsInZhbHVlIl0sRnJhZ21lbnRTcHJlYWQ6WyJuYW1lIiwiZGlyZWN0aXZlcyJdLElubGluZUZyYWdtZW50OlsidHlwZUNvbmRpdGlvbiIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxGcmFnbWVudERlZmluaXRpb246WyJuYW1lIiwidmFyaWFibGVEZWZpbml0aW9ucyIsInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sSW50VmFsdWU6W10sRmxvYXRWYWx1ZTpbXSxTdHJpbmdWYWx1ZTpbXSxCb29sZWFuVmFsdWU6W10sTnVsbFZhbHVlOltdLEVudW1WYWx1ZTpbXSxMaXN0VmFsdWU6WyJ2YWx1ZXMiXSxPYmplY3RWYWx1ZTpbImZpZWxkcyJdLE9iamVjdEZpZWxkOlsibmFtZSIsInZhbHVlIl0sRGlyZWN0aXZlOlsibmFtZSIsImFyZ3VtZW50cyJdLE5hbWVkVHlwZTpbIm5hbWUiXSxMaXN0VHlwZTpbInR5cGUiXSxOb25OdWxsVHlwZTpbInR5cGUiXSxTY2hlbWFEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJkaXJlY3RpdmVzIiwib3BlcmF0aW9uVHlwZXMiXSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjpbInR5cGUiXSxTY2FsYXJUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sRmllbGREZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwidHlwZSIsImRpcmVjdGl2ZXMiXSxJbnB1dFZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkaXJlY3RpdmVzIl0sSW50ZXJmYWNlVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sRW51bVZhbHVlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiXSxJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLERpcmVjdGl2ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJhcmd1bWVudHMiLCJsb2NhdGlvbnMiXSxTY2hlbWFFeHRlbnNpb246WyJkaXJlY3RpdmVzIiwib3BlcmF0aW9uVHlwZXMiXSxTY2FsYXJUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxPYmplY3RUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImludGVyZmFjZXMiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl0sSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLFVuaW9uVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidHlwZXMiXSxFbnVtVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwidmFsdWVzIl0sSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOlsibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXX0sY249bmV3IFNldChPYmplY3Qua2V5cyhndCkpO2Z1bmN0aW9uIHZ0KGUpe2NvbnN0IHQ9ZT09bnVsbD92b2lkIDA6ZS5raW5kO3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJmNuLmhhcyh0KX12YXIgZmU7KGZ1bmN0aW9uKGUpe2UuUVVFUlk9InF1ZXJ5IixlLk1VVEFUSU9OPSJtdXRhdGlvbiIsZS5TVUJTQ1JJUFRJT049InN1YnNjcmlwdGlvbiJ9KShmZXx8KGZlPXt9KSk7dmFyIEdlOyhmdW5jdGlvbihlKXtlLlFVRVJZPSJRVUVSWSIsZS5NVVRBVElPTj0iTVVUQVRJT04iLGUuU1VCU0NSSVBUSU9OPSJTVUJTQ1JJUFRJT04iLGUuRklFTEQ9IkZJRUxEIixlLkZSQUdNRU5UX0RFRklOSVRJT049IkZSQUdNRU5UX0RFRklOSVRJT04iLGUuRlJBR01FTlRfU1BSRUFEPSJGUkFHTUVOVF9TUFJFQUQiLGUuSU5MSU5FX0ZSQUdNRU5UPSJJTkxJTkVfRlJBR01FTlQiLGUuVkFSSUFCTEVfREVGSU5JVElPTj0iVkFSSUFCTEVfREVGSU5JVElPTiIsZS5TQ0hFTUE9IlNDSEVNQSIsZS5TQ0FMQVI9IlNDQUxBUiIsZS5PQkpFQ1Q9Ik9CSkVDVCIsZS5GSUVMRF9ERUZJTklUSU9OPSJGSUVMRF9ERUZJTklUSU9OIixlLkFSR1VNRU5UX0RFRklOSVRJT049IkFSR1VNRU5UX0RFRklOSVRJT04iLGUuSU5URVJGQUNFPSJJTlRFUkZBQ0UiLGUuVU5JT049IlVOSU9OIixlLkVOVU09IkVOVU0iLGUuRU5VTV9WQUxVRT0iRU5VTV9WQUxVRSIsZS5JTlBVVF9PQkpFQ1Q9IklOUFVUX09CSkVDVCIsZS5JTlBVVF9GSUVMRF9ERUZJTklUSU9OPSJJTlBVVF9GSUVMRF9ERUZJTklUSU9OIn0pKEdlfHwoR2U9e30pKTt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5OQU1FPSJOYW1lIixlLkRPQ1VNRU5UPSJEb2N1bWVudCIsZS5PUEVSQVRJT05fREVGSU5JVElPTj0iT3BlcmF0aW9uRGVmaW5pdGlvbiIsZS5WQVJJQUJMRV9ERUZJTklUSU9OPSJWYXJpYWJsZURlZmluaXRpb24iLGUuU0VMRUNUSU9OX1NFVD0iU2VsZWN0aW9uU2V0IixlLkZJRUxEPSJGaWVsZCIsZS5BUkdVTUVOVD0iQXJndW1lbnQiLGUuRlJBR01FTlRfU1BSRUFEPSJGcmFnbWVudFNwcmVhZCIsZS5JTkxJTkVfRlJBR01FTlQ9IklubGluZUZyYWdtZW50IixlLkZSQUdNRU5UX0RFRklOSVRJT049IkZyYWdtZW50RGVmaW5pdGlvbiIsZS5WQVJJQUJMRT0iVmFyaWFibGUiLGUuSU5UPSJJbnRWYWx1ZSIsZS5GTE9BVD0iRmxvYXRWYWx1ZSIsZS5TVFJJTkc9IlN0cmluZ1ZhbHVlIixlLkJPT0xFQU49IkJvb2xlYW5WYWx1ZSIsZS5OVUxMPSJOdWxsVmFsdWUiLGUuRU5VTT0iRW51bVZhbHVlIixlLkxJU1Q9Ikxpc3RWYWx1ZSIsZS5PQkpFQ1Q9Ik9iamVjdFZhbHVlIixlLk9CSkVDVF9GSUVMRD0iT2JqZWN0RmllbGQiLGUuRElSRUNUSVZFPSJEaXJlY3RpdmUiLGUuTkFNRURfVFlQRT0iTmFtZWRUeXBlIixlLkxJU1RfVFlQRT0iTGlzdFR5cGUiLGUuTk9OX05VTExfVFlQRT0iTm9uTnVsbFR5cGUiLGUuU0NIRU1BX0RFRklOSVRJT049IlNjaGVtYURlZmluaXRpb24iLGUuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTj0iT3BlcmF0aW9uVHlwZURlZmluaXRpb24iLGUuU0NBTEFSX1RZUEVfREVGSU5JVElPTj0iU2NhbGFyVHlwZURlZmluaXRpb24iLGUuT0JKRUNUX1RZUEVfREVGSU5JVElPTj0iT2JqZWN0VHlwZURlZmluaXRpb24iLGUuRklFTERfREVGSU5JVElPTj0iRmllbGREZWZpbml0aW9uIixlLklOUFVUX1ZBTFVFX0RFRklOSVRJT049IklucHV0VmFsdWVEZWZpbml0aW9uIixlLklOVEVSRkFDRV9UWVBFX0RFRklOSVRJT049IkludGVyZmFjZVR5cGVEZWZpbml0aW9uIixlLlVOSU9OX1RZUEVfREVGSU5JVElPTj0iVW5pb25UeXBlRGVmaW5pdGlvbiIsZS5FTlVNX1RZUEVfREVGSU5JVElPTj0iRW51bVR5cGVEZWZpbml0aW9uIixlLkVOVU1fVkFMVUVfREVGSU5JVElPTj0iRW51bVZhbHVlRGVmaW5pdGlvbiIsZS5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OPSJJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uIixlLkRJUkVDVElWRV9ERUZJTklUSU9OPSJEaXJlY3RpdmVEZWZpbml0aW9uIixlLlNDSEVNQV9FWFRFTlNJT049IlNjaGVtYUV4dGVuc2lvbiIsZS5TQ0FMQVJfVFlQRV9FWFRFTlNJT049IlNjYWxhclR5cGVFeHRlbnNpb24iLGUuT0JKRUNUX1RZUEVfRVhURU5TSU9OPSJPYmplY3RUeXBlRXh0ZW5zaW9uIixlLklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTj0iSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsZS5VTklPTl9UWVBFX0VYVEVOU0lPTj0iVW5pb25UeXBlRXh0ZW5zaW9uIixlLkVOVU1fVFlQRV9FWFRFTlNJT049IkVudW1UeXBlRXh0ZW5zaW9uIixlLklOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTj0iSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIn0pKFR8fChUPXt9KSk7ZnVuY3Rpb24gemUoZSl7cmV0dXJuIGU9PT05fHxlPT09MzJ9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N31mdW5jdGlvbiBFdChlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfWZ1bmN0aW9uIF90KGUpe3JldHVybiBFdChlKXx8ZT09PTk1fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBFdChlKXx8X2UoZSl8fGU9PT05NX1mdW5jdGlvbiBsbihlKXt2YXIgdDtsZXQgbj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixpPW51bGwscj0tMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoOysrbyl7dmFyIHM7Y29uc3QgYz1lW29dLGY9Zm4oYyk7ZiE9PWMubGVuZ3RoJiYoaT0ocz1pKSE9PW51bGwmJnMhPT12b2lkIDA/czpvLHI9byxvIT09MCYmZjxuJiYobj1mKSl9cmV0dXJuIGUubWFwKChvLGMpPT5jPT09MD9vOm8uc2xpY2UobikpLnNsaWNlKCh0PWkpIT09bnVsbCYmdCE9PXZvaWQgMD90OjAscisxKX1mdW5jdGlvbiBmbihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmemUoZS5jaGFyQ29kZUF0KHQpKTspKyt0O3JldHVybiB0fWZ1bmN0aW9uIGhuKGUsdCl7Y29uc3Qgbj1lLnJlcGxhY2UoLyIiIi9nLCdcXCIiIicpLGk9bi5zcGxpdCgvXHJcbnxbXG5ccl0vZykscj1pLmxlbmd0aD09PTEscz1pLmxlbmd0aD4xJiZpLnNsaWNlKDEpLmV2ZXJ5KGI9PmIubGVuZ3RoPT09MHx8emUoYi5jaGFyQ29kZUF0KDApKSksbz1uLmVuZHNXaXRoKCdcXCIiIicpLGM9ZS5lbmRzV2l0aCgnIicpJiYhbyxmPWUuZW5kc1dpdGgoIlxcIiksZD1jfHxmLHU9IXJ8fGUubGVuZ3RoPjcwfHxkfHxzfHxvO2xldCB5PSIiO2NvbnN0IHY9ciYmemUoZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4odSYmIXZ8fHMpJiYoeSs9YApgKSx5Kz1uLCh1fHxkKSYmKHkrPWAKYCksJyIiIicreSsnIiIiJ312YXIgbDsoZnVuY3Rpb24oZSl7ZS5TT0Y9IjxTT0Y+IixlLkVPRj0iPEVPRj4iLGUuQkFORz0iISIsZS5ET0xMQVI9IiQiLGUuQU1QPSImIixlLlBBUkVOX0w9IigiLGUuUEFSRU5fUj0iKSIsZS5TUFJFQUQ9Ii4uLiIsZS5DT0xPTj0iOiIsZS5FUVVBTFM9Ij0iLGUuQVQ9IkAiLGUuQlJBQ0tFVF9MPSJbIixlLkJSQUNLRVRfUj0iXSIsZS5CUkFDRV9MPSJ7IixlLlBJUEU9InwiLGUuQlJBQ0VfUj0ifSIsZS5OQU1FPSJOYW1lIixlLklOVD0iSW50IixlLkZMT0FUPSJGbG9hdCIsZS5TVFJJTkc9IlN0cmluZyIsZS5CTE9DS19TVFJJTkc9IkJsb2NrU3RyaW5nIixlLkNPTU1FTlQ9IkNvbW1lbnQifSkobHx8KGw9e30pKTtjbGFzcyBkbntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPW5ldyB5dChsLlNPRiwwLDAsMCwwKTt0aGlzLnNvdXJjZT10LHRoaXMubGFzdFRva2VuPW4sdGhpcy50b2tlbj1uLHRoaXMubGluZT0xLHRoaXMubGluZVN0YXJ0PTB9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iTGV4ZXIifWFkdmFuY2UoKXtyZXR1cm4gdGhpcy5sYXN0VG9rZW49dGhpcy50b2tlbix0aGlzLnRva2VuPXRoaXMubG9va2FoZWFkKCl9bG9va2FoZWFkKCl7bGV0IHQ9dGhpcy50b2tlbjtpZih0LmtpbmQhPT1sLkVPRilkbyBpZih0Lm5leHQpdD10Lm5leHQ7ZWxzZXtjb25zdCBuPW1uKHRoaXMsdC5lbmQpO3QubmV4dD1uLG4ucHJldj10LHQ9bn13aGlsZSh0LmtpbmQ9PT1sLkNPTU1FTlQpO3JldHVybiB0fX1mdW5jdGlvbiBwbihlKXtyZXR1cm4gZT09PWwuQkFOR3x8ZT09PWwuRE9MTEFSfHxlPT09bC5BTVB8fGU9PT1sLlBBUkVOX0x8fGU9PT1sLlBBUkVOX1J8fGU9PT1sLlNQUkVBRHx8ZT09PWwuQ09MT058fGU9PT1sLkVRVUFMU3x8ZT09PWwuQVR8fGU9PT1sLkJSQUNLRVRfTHx8ZT09PWwuQlJBQ0tFVF9SfHxlPT09bC5CUkFDRV9MfHxlPT09bC5QSVBFfHxlPT09bC5CUkFDRV9SfWZ1bmN0aW9uIGhlKGUpe3JldHVybiBlPj0wJiZlPD01NTI5NXx8ZT49NTczNDQmJmU8PTExMTQxMTF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gVHQoZS5jaGFyQ29kZUF0KHQpKSYmYnQoZS5jaGFyQ29kZUF0KHQrMSkpfWZ1bmN0aW9uIFR0KGUpe3JldHVybiBlPj01NTI5NiYmZTw9NTYzMTl9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIGU+PTU2MzIwJiZlPD01NzM0M31mdW5jdGlvbiB1ZShlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keS5jb2RlUG9pbnRBdCh0KTtpZihuPT09dm9pZCAwKXJldHVybiBsLkVPRjtpZihuPj0zMiYmbjw9MTI2KXtjb25zdCBpPVN0cmluZy5mcm9tQ29kZVBvaW50KG4pO3JldHVybiBpPT09JyInP2AnIidgOmAiJHtpfSJgfXJldHVybiJVKyIrbi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5wYWRTdGFydCg0LCIwIil9ZnVuY3Rpb24gVihlLHQsbixpLHIpe2NvbnN0IHM9ZS5saW5lLG89MStuLWUubGluZVN0YXJ0O3JldHVybiBuZXcgeXQodCxuLGkscyxvLHIpfWZ1bmN0aW9uIG1uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dDtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO3N3aXRjaChzKXtjYXNlIDY1Mjc5OmNhc2UgOTpjYXNlIDMyOmNhc2UgNDQ6KytyO2NvbnRpbnVlO2Nhc2UgMTA6KytyLCsrZS5saW5lLGUubGluZVN0YXJ0PXI7Y29udGludWU7Y2FzZSAxMzpuLmNoYXJDb2RlQXQocisxKT09PTEwP3IrPTI6KytyLCsrZS5saW5lLGUubGluZVN0YXJ0PXI7Y29udGludWU7Y2FzZSAzNTpyZXR1cm4geW4oZSxyKTtjYXNlIDMzOnJldHVybiBWKGUsbC5CQU5HLHIscisxKTtjYXNlIDM2OnJldHVybiBWKGUsbC5ET0xMQVIscixyKzEpO2Nhc2UgMzg6cmV0dXJuIFYoZSxsLkFNUCxyLHIrMSk7Y2FzZSA0MDpyZXR1cm4gVihlLGwuUEFSRU5fTCxyLHIrMSk7Y2FzZSA0MTpyZXR1cm4gVihlLGwuUEFSRU5fUixyLHIrMSk7Y2FzZSA0NjppZihuLmNoYXJDb2RlQXQocisxKT09PTQ2JiZuLmNoYXJDb2RlQXQocisyKT09PTQ2KXJldHVybiBWKGUsbC5TUFJFQUQscixyKzMpO2JyZWFrO2Nhc2UgNTg6cmV0dXJuIFYoZSxsLkNPTE9OLHIscisxKTtjYXNlIDYxOnJldHVybiBWKGUsbC5FUVVBTFMscixyKzEpO2Nhc2UgNjQ6cmV0dXJuIFYoZSxsLkFULHIscisxKTtjYXNlIDkxOnJldHVybiBWKGUsbC5CUkFDS0VUX0wscixyKzEpO2Nhc2UgOTM6cmV0dXJuIFYoZSxsLkJSQUNLRVRfUixyLHIrMSk7Y2FzZSAxMjM6cmV0dXJuIFYoZSxsLkJSQUNFX0wscixyKzEpO2Nhc2UgMTI0OnJldHVybiBWKGUsbC5QSVBFLHIscisxKTtjYXNlIDEyNTpyZXR1cm4gVihlLGwuQlJBQ0VfUixyLHIrMSk7Y2FzZSAzNDpyZXR1cm4gbi5jaGFyQ29kZUF0KHIrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHIrMik9PT0zND9ibihlLHIpOnZuKGUscil9aWYoX2Uocyl8fHM9PT00NSlyZXR1cm4gZ24oZSxyLHMpO2lmKF90KHMpKXJldHVybiBObihlLHIpO3Rocm93IEcoZS5zb3VyY2UscixzPT09Mzk/YFVuZXhwZWN0ZWQgc2luZ2xlIHF1b3RlIGNoYXJhY3RlciAoJyksIGRpZCB5b3UgbWVhbiB0byB1c2UgYSBkb3VibGUgcXVvdGUgKCIpP2A6aGUocyl8fFNlKG4scik/YFVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAke3VlKGUscil9LmA6YEludmFsaWQgY2hhcmFjdGVyOiAke3VlKGUscil9LmApfXJldHVybiBWKGUsbC5FT0YsaSxpKX1mdW5jdGlvbiB5bihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMTtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO2lmKHM9PT0xMHx8cz09PTEzKWJyZWFrO2lmKGhlKHMpKSsrcjtlbHNlIGlmKFNlKG4scikpcis9MjtlbHNlIGJyZWFrfXJldHVybiBWKGUsbC5DT01NRU5ULHQscixuLnNsaWNlKHQrMSxyKSl9ZnVuY3Rpb24gZ24oZSx0LG4pe2NvbnN0IGk9ZS5zb3VyY2UuYm9keTtsZXQgcj10LHM9bixvPSExO2lmKHM9PT00NSYmKHM9aS5jaGFyQ29kZUF0KCsrcikpLHM9PT00OCl7aWYocz1pLmNoYXJDb2RlQXQoKytyKSxfZShzKSl0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgbnVtYmVyLCB1bmV4cGVjdGVkIGRpZ2l0IGFmdGVyIDA6ICR7dWUoZSxyKX0uYCl9ZWxzZSByPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKTtpZihzPT09NDYmJihvPSEwLHM9aS5jaGFyQ29kZUF0KCsrcikscj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocikpLChzPT09Njl8fHM9PT0xMDEpJiYobz0hMCxzPWkuY2hhckNvZGVBdCgrK3IpLChzPT09NDN8fHM9PT00NSkmJihzPWkuY2hhckNvZGVBdCgrK3IpKSxyPUhlKGUscixzKSxzPWkuY2hhckNvZGVBdChyKSkscz09PTQ2fHxfdChzKSl0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAke3VlKGUscil9LmApO3JldHVybiBWKGUsbz9sLkZMT0FUOmwuSU5ULHQscixpLnNsaWNlKHQscikpfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighX2UobikpdGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogJHt1ZShlLHQpfS5gKTtjb25zdCBpPWUuc291cmNlLmJvZHk7bGV0IHI9dCsxO2Zvcig7X2UoaS5jaGFyQ29kZUF0KHIpKTspKytyO3JldHVybiByfWZ1bmN0aW9uIHZuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxLHM9cixvPSIiO2Zvcig7cjxpOyl7Y29uc3QgYz1uLmNoYXJDb2RlQXQocik7aWYoYz09PTM0KXJldHVybiBvKz1uLnNsaWNlKHMsciksVihlLGwuU1RSSU5HLHQscisxLG8pO2lmKGM9PT05Mil7bys9bi5zbGljZShzLHIpO2NvbnN0IGY9bi5jaGFyQ29kZUF0KHIrMSk9PT0xMTc/bi5jaGFyQ29kZUF0KHIrMik9PT0xMjM/RW4oZSxyKTpfbihlLHIpOlRuKGUscik7bys9Zi52YWx1ZSxyKz1mLnNpemUscz1yO2NvbnRpbnVlfWlmKGM9PT0xMHx8Yz09PTEzKWJyZWFrO2lmKGhlKGMpKSsrcjtlbHNlIGlmKFNlKG4scikpcis9MjtlbHNlIHRocm93IEcoZS5zb3VyY2UscixgSW52YWxpZCBjaGFyYWN0ZXIgd2l0aGluIFN0cmluZzogJHt1ZShlLHIpfS5gKX10aHJvdyBHKGUuc291cmNlLHIsIlVudGVybWluYXRlZCBzdHJpbmcuIil9ZnVuY3Rpb24gRW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHk7bGV0IGk9MCxyPTM7Zm9yKDtyPDEyOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQodCtyKyspO2lmKHM9PT0xMjUpe2lmKHI8NXx8IWhlKGkpKWJyZWFrO3JldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxzaXplOnJ9fWlmKGk9aTw8NHxUZShzKSxpPDApYnJlYWt9dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCtyKX0iLmApfWZ1bmN0aW9uIF9uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9TnQobix0KzIpO2lmKGhlKGkpKXJldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxzaXplOjZ9O2lmKFR0KGkpJiZuLmNoYXJDb2RlQXQodCs2KT09PTkyJiZuLmNoYXJDb2RlQXQodCs3KT09PTExNyl7Y29uc3Qgcj1OdChuLHQrOCk7aWYoYnQocikpcmV0dXJue3ZhbHVlOlN0cmluZy5mcm9tQ29kZVBvaW50KGksciksc2l6ZToxMn19dGhyb3cgRyhlLnNvdXJjZSx0LGBJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCs2KX0iLmApfWZ1bmN0aW9uIE50KGUsdCl7cmV0dXJuIFRlKGUuY2hhckNvZGVBdCh0KSk8PDEyfFRlKGUuY2hhckNvZGVBdCh0KzEpKTw8OHxUZShlLmNoYXJDb2RlQXQodCsyKSk8PDR8VGUoZS5jaGFyQ29kZUF0KHQrMykpfWZ1bmN0aW9uIFRlKGUpe3JldHVybiBlPj00OCYmZTw9NTc/ZS00ODplPj02NSYmZTw9NzA/ZS01NTplPj05NyYmZTw9MTAyP2UtODc6LTF9ZnVuY3Rpb24gVG4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHk7c3dpdGNoKG4uY2hhckNvZGVBdCh0KzEpKXtjYXNlIDM0OnJldHVybnt2YWx1ZTonIicsc2l6ZToyfTtjYXNlIDkyOnJldHVybnt2YWx1ZToiXFwiLHNpemU6Mn07Y2FzZSA0NzpyZXR1cm57dmFsdWU6Ii8iLHNpemU6Mn07Y2FzZSA5ODpyZXR1cm57dmFsdWU6IlxiIixzaXplOjJ9O2Nhc2UgMTAyOnJldHVybnt2YWx1ZToiXGYiLHNpemU6Mn07Y2FzZSAxMTA6cmV0dXJue3ZhbHVlOmAKYCxzaXplOjJ9O2Nhc2UgMTE0OnJldHVybnt2YWx1ZToiXHIiLHNpemU6Mn07Y2FzZSAxMTY6cmV0dXJue3ZhbHVlOiIJIixzaXplOjJ9fXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlOiAiJHtuLnNsaWNlKHQsdCsyKX0iLmApfWZ1bmN0aW9uIGJuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9ZS5saW5lU3RhcnQscz10KzMsbz1zLGM9IiI7Y29uc3QgZj1bXTtmb3IoO3M8aTspe2NvbnN0IGQ9bi5jaGFyQ29kZUF0KHMpO2lmKGQ9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMik9PT0zNCl7Yys9bi5zbGljZShvLHMpLGYucHVzaChjKTtjb25zdCB1PVYoZSxsLkJMT0NLX1NUUklORyx0LHMrMyxsbihmKS5qb2luKGAKYCkpO3JldHVybiBlLmxpbmUrPWYubGVuZ3RoLTEsZS5saW5lU3RhcnQ9cix1fWlmKGQ9PT05MiYmbi5jaGFyQ29kZUF0KHMrMSk9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMik9PT0zNCYmbi5jaGFyQ29kZUF0KHMrMyk9PT0zNCl7Yys9bi5zbGljZShvLHMpLG89cysxLHMrPTQ7Y29udGludWV9aWYoZD09PTEwfHxkPT09MTMpe2MrPW4uc2xpY2UobyxzKSxmLnB1c2goYyksZD09PTEzJiZuLmNoYXJDb2RlQXQocysxKT09PTEwP3MrPTI6KytzLGM9IiIsbz1zLHI9cztjb250aW51ZX1pZihoZShkKSkrK3M7ZWxzZSBpZihTZShuLHMpKXMrPTI7ZWxzZSB0aHJvdyBHKGUuc291cmNlLHMsYEludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICR7dWUoZSxzKX0uYCl9dGhyb3cgRyhlLnNvdXJjZSxzLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIE5uKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5LGk9bi5sZW5ndGg7bGV0IHI9dCsxO2Zvcig7cjxpOyl7Y29uc3Qgcz1uLmNoYXJDb2RlQXQocik7aWYodW4ocykpKytyO2Vsc2UgYnJlYWt9cmV0dXJuIFYoZSxsLk5BTUUsdCxyLG4uc2xpY2UodCxyKSl9Y29uc3QgeG49MTAseHQ9MjtmdW5jdGlvbiBZZShlKXtyZXR1cm4gT2UoZSxbXSl9ZnVuY3Rpb24gT2UoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIGUubmFtZT9gW2Z1bmN0aW9uICR7ZS5uYW1lfV1gOiJbZnVuY3Rpb25dIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFuKGUsdCk7ZGVmYXVsdDpyZXR1cm4gU3RyaW5nKGUpfX1mdW5jdGlvbiBBbihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJudWxsIjtpZih0LmluY2x1ZGVzKGUpKXJldHVybiJbQ2lyY3VsYXJdIjtjb25zdCBuPVsuLi50LGVdO2lmKEluKGUpKXtjb25zdCBpPWUudG9KU09OKCk7aWYoaSE9PWUpcmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9pOk9lKGksbil9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBPbihlLG4pO3JldHVybiBTbihlLG4pfWZ1bmN0aW9uIEluKGUpe3JldHVybiB0eXBlb2YgZS50b0pTT049PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gU24oZSx0KXtjb25zdCBuPU9iamVjdC5lbnRyaWVzKGUpO3JldHVybiBuLmxlbmd0aD09PTA/Int9Ijp0Lmxlbmd0aD54dD8iWyIrd24oZSkrIl0iOiJ7ICIrbi5tYXAoKFtyLHNdKT0+cisiOiAiK09lKHMsdCkpLmpvaW4oIiwgIikrIiB9In1mdW5jdGlvbiBPbihlLHQpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iW10iO2lmKHQubGVuZ3RoPnh0KXJldHVybiJbQXJyYXldIjtjb25zdCBuPU1hdGgubWluKHhuLGUubGVuZ3RoKSxpPWUubGVuZ3RoLW4scj1bXTtmb3IobGV0IHM9MDtzPG47KytzKXIucHVzaChPZShlW3NdLHQpKTtyZXR1cm4gaT09PTE/ci5wdXNoKCIuLi4gMSBtb3JlIGl0ZW0iKTppPjEmJnIucHVzaChgLi4uICR7aX0gbW9yZSBpdGVtc2ApLCJbIityLmpvaW4oIiwgIikrIl0ifWZ1bmN0aW9uIHduKGUpe2NvbnN0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnJlcGxhY2UoL15cW29iamVjdCAvLCIiKS5yZXBsYWNlKC9dJC8sIiIpO2lmKHQ9PT0iT2JqZWN0IiYmdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiIpe2NvbnN0IG49ZS5jb25zdHJ1Y3Rvci5uYW1lO2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmbiE9PSIiKXJldHVybiBufXJldHVybiB0fWNvbnN0IERuPWdsb2JhbFRoaXMucHJvY2VzcyYmcHJvY2Vzcy5lbnYuTk9ERV9FTlY9PT0icHJvZHVjdGlvbiI/ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG59OmZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIG4pcmV0dXJuITA7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCl7dmFyIGk7Y29uc3Qgcj1uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLHM9U3ltYm9sLnRvU3RyaW5nVGFnIGluIHQ/dFtTeW1ib2wudG9TdHJpbmdUYWddOihpPXQuY29uc3RydWN0b3IpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5uYW1lO2lmKHI9PT1zKXtjb25zdCBvPVllKHQpO3Rocm93IG5ldyBFcnJvcihgQ2Fubm90IHVzZSAke3J9ICIke299IiBmcm9tIGFub3RoZXIgbW9kdWxlIG9yIHJlYWxtLgoKRW5zdXJlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgImdyYXBocWwiIGluIHRoZSBub2RlX21vZHVsZXMKZGlyZWN0b3J5LiBJZiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgImdyYXBocWwiIGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIG90aGVyCnJlbGllZCBvbiBtb2R1bGVzLCB1c2UgInJlc29sdXRpb25zIiB0byBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBpbnN0YWxsZWQuCgpodHRwczovL3lhcm5wa2cuY29tL2VuL2RvY3Mvc2VsZWN0aXZlLXZlcnNpb24tcmVzb2x1dGlvbnMKCkR1cGxpY2F0ZSAiZ3JhcGhxbCIgbW9kdWxlcyBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIHNpbmNlIGRpZmZlcmVudAp2ZXJzaW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzIGFuZCBiZWhhdmlvci4gVGhlIGRhdGEgZnJvbSBvbmUKdmVyc2lvbiB1c2VkIGluIHRoZSBmdW5jdGlvbiBmcm9tIGFub3RoZXIgY291bGQgcHJvZHVjZSBjb25mdXNpbmcgYW5kCnNwdXJpb3VzIHJlc3VsdHMuYCl9fXJldHVybiExfTtjbGFzcyBBdHtjb25zdHJ1Y3Rvcih0LG49IkdyYXBoUUwgcmVxdWVzdCIsaT17bGluZToxLGNvbHVtbjoxfSl7dHlwZW9mIHQ9PSJzdHJpbmcifHxvZSghMSxgQm9keSBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZDogJHtZZSh0KX0uYCksdGhpcy5ib2R5PXQsdGhpcy5uYW1lPW4sdGhpcy5sb2NhdGlvbk9mZnNldD1pLHRoaXMubG9jYXRpb25PZmZzZXQubGluZT4wfHxvZSghMSwibGluZSBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIiksdGhpcy5sb2NhdGlvbk9mZnNldC5jb2x1bW4+MHx8b2UoITEsImNvbHVtbiBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIil9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iU291cmNlIn19ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIERuKGUsQXQpfWZ1bmN0aW9uIEl0KGUsdCl7Y29uc3Qgbj1uZXcga24oZSx0KSxpPW4ucGFyc2VEb2N1bWVudCgpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwidG9rZW5Db3VudCIse2VudW1lcmFibGU6ITEsdmFsdWU6bi50b2tlbkNvdW50fSksaX1jbGFzcyBrbntjb25zdHJ1Y3Rvcih0LG49e30pe2NvbnN0IGk9Q24odCk/dDpuZXcgQXQodCk7dGhpcy5fbGV4ZXI9bmV3IGRuKGkpLHRoaXMuX29wdGlvbnM9bix0aGlzLl90b2tlbkNvdW50ZXI9MH1nZXQgdG9rZW5Db3VudCgpe3JldHVybiB0aGlzLl90b2tlbkNvdW50ZXJ9cGFyc2VOYW1lKCl7Y29uc3QgdD10aGlzLmV4cGVjdFRva2VuKGwuTkFNRSk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuTkFNRSx2YWx1ZTp0LnZhbHVlfSl9cGFyc2VEb2N1bWVudCgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5ET0NVTUVOVCxkZWZpbml0aW9uczp0aGlzLm1hbnkobC5TT0YsdGhpcy5wYXJzZURlZmluaXRpb24sbC5FT0YpfSl9cGFyc2VEZWZpbml0aW9uKCl7aWYodGhpcy5wZWVrKGwuQlJBQ0VfTCkpcmV0dXJuIHRoaXMucGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCk7Y29uc3QgdD10aGlzLnBlZWtEZXNjcmlwdGlvbigpLG49dD90aGlzLl9sZXhlci5sb29rYWhlYWQoKTp0aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT1sLk5BTUUpe3N3aXRjaChuLnZhbHVlKXtjYXNlInNjaGVtYSI6cmV0dXJuIHRoaXMucGFyc2VTY2hlbWFEZWZpbml0aW9uKCk7Y2FzZSJzY2FsYXIiOnJldHVybiB0aGlzLnBhcnNlU2NhbGFyVHlwZURlZmluaXRpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZURlZmluaXRpb24oKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIHRoaXMucGFyc2VJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbigpO2Nhc2UidW5pb24iOnJldHVybiB0aGlzLnBhcnNlVW5pb25UeXBlRGVmaW5pdGlvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZURlZmluaXRpb24oKTtjYXNlImlucHV0IjpyZXR1cm4gdGhpcy5wYXJzZUlucHV0T2JqZWN0VHlwZURlZmluaXRpb24oKTtjYXNlImRpcmVjdGl2ZSI6cmV0dXJuIHRoaXMucGFyc2VEaXJlY3RpdmVEZWZpbml0aW9uKCl9aWYodCl0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSx0aGlzLl9sZXhlci50b2tlbi5zdGFydCwiVW5leHBlY3RlZCBkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25zIGFyZSBzdXBwb3J0ZWQgb25seSBvbiB0eXBlIGRlZmluaXRpb25zLiIpO3N3aXRjaChuLnZhbHVlKXtjYXNlInF1ZXJ5IjpjYXNlIm11dGF0aW9uIjpjYXNlInN1YnNjcmlwdGlvbiI6cmV0dXJuIHRoaXMucGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCk7Y2FzZSJmcmFnbWVudCI6cmV0dXJuIHRoaXMucGFyc2VGcmFnbWVudERlZmluaXRpb24oKTtjYXNlImV4dGVuZCI6cmV0dXJuIHRoaXMucGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uKCl9fXRocm93IHRoaXMudW5leHBlY3RlZChuKX1wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO2lmKHRoaXMucGVlayhsLkJSQUNFX0wpKXJldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpmZS5RVUVSWSxuYW1lOnZvaWQgMCx2YXJpYWJsZURlZmluaXRpb25zOltdLGRpcmVjdGl2ZXM6W10sc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pO2NvbnN0IG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTtsZXQgaTtyZXR1cm4gdGhpcy5wZWVrKGwuTkFNRSkmJihpPXRoaXMucGFyc2VOYW1lKCkpLHRoaXMubm9kZSh0LHtraW5kOlQuT1BFUkFUSU9OX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sbmFtZTppLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VPcGVyYXRpb25UeXBlKCl7Y29uc3QgdD10aGlzLmV4cGVjdFRva2VuKGwuTkFNRSk7c3dpdGNoKHQudmFsdWUpe2Nhc2UicXVlcnkiOnJldHVybiBmZS5RVUVSWTtjYXNlIm11dGF0aW9uIjpyZXR1cm4gZmUuTVVUQVRJT047Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiBmZS5TVUJTQ1JJUFRJT059dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfXBhcnNlVmFyaWFibGVEZWZpbml0aW9ucygpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsdGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbixsLlBBUkVOX1IpfXBhcnNlVmFyaWFibGVEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpULlZBUklBQkxFX0RFRklOSVRJT04sdmFyaWFibGU6dGhpcy5wYXJzZVZhcmlhYmxlKCksdHlwZToodGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpKSxkZWZhdWx0VmFsdWU6dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKT90aGlzLnBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCl9KX1wYXJzZVZhcmlhYmxlKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkRPTExBUiksdGhpcy5ub2RlKHQse2tpbmQ6VC5WQVJJQUJMRSxuYW1lOnRoaXMucGFyc2VOYW1lKCl9KX1wYXJzZVNlbGVjdGlvblNldCgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5TRUxFQ1RJT05fU0VULHNlbGVjdGlvbnM6dGhpcy5tYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlU2VsZWN0aW9uLGwuQlJBQ0VfUil9KX1wYXJzZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnBlZWsobC5TUFJFQUQpP3RoaXMucGFyc2VGcmFnbWVudCgpOnRoaXMucGFyc2VGaWVsZCgpfXBhcnNlRmllbGQoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU5hbWUoKTtsZXQgaSxyO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5DT0xPTik/KGk9bixyPXRoaXMucGFyc2VOYW1lKCkpOnI9bix0aGlzLm5vZGUodCx7a2luZDpULkZJRUxELGFsaWFzOmksbmFtZTpyLGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKCExKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wZWVrKGwuQlJBQ0VfTCk/dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpOnZvaWQgMH0pfXBhcnNlQXJndW1lbnRzKHQpe2NvbnN0IG49dD90aGlzLnBhcnNlQ29uc3RBcmd1bWVudDp0aGlzLnBhcnNlQXJndW1lbnQ7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCxuLGwuUEFSRU5fUil9cGFyc2VBcmd1bWVudCh0PSExKXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuLGk9dGhpcy5wYXJzZU5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLm5vZGUobix7a2luZDpULkFSR1VNRU5ULG5hbWU6aSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpfSl9cGFyc2VDb25zdEFyZ3VtZW50KCl7cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudCghMCl9cGFyc2VGcmFnbWVudCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RUb2tlbihsLlNQUkVBRCk7Y29uc3Qgbj10aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgib24iKTtyZXR1cm4hbiYmdGhpcy5wZWVrKGwuTkFNRSk/dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9TUFJFQUQsbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSl9KTp0aGlzLm5vZGUodCx7a2luZDpULklOTElORV9GUkFHTUVOVCx0eXBlQ29uZGl0aW9uOm4/dGhpcy5wYXJzZU5hbWVkVHlwZSgpOnZvaWQgMCxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VGcmFnbWVudERlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdEtleXdvcmQoImZyYWdtZW50IiksdGhpcy5fb3B0aW9ucy5hbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzPT09ITA/dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSk6dGhpcy5ub2RlKHQse2tpbmQ6VC5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHR5cGVDb25kaXRpb246KHRoaXMuZXhwZWN0S2V5d29yZCgib24iKSx0aGlzLnBhcnNlTmFtZWRUeXBlKCkpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KX1wYXJzZUZyYWdtZW50TmFtZSgpe2lmKHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09Im9uIil0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5wYXJzZU5hbWUoKX1wYXJzZVZhbHVlTGl0ZXJhbCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3N3aXRjaChuLmtpbmQpe2Nhc2UgbC5CUkFDS0VUX0w6cmV0dXJuIHRoaXMucGFyc2VMaXN0KHQpO2Nhc2UgbC5CUkFDRV9MOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0KHQpO2Nhc2UgbC5JTlQ6cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKG4se2tpbmQ6VC5JTlQsdmFsdWU6bi52YWx1ZX0pO2Nhc2UgbC5GTE9BVDpyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSx0aGlzLm5vZGUobix7a2luZDpULkZMT0FULHZhbHVlOm4udmFsdWV9KTtjYXNlIGwuU1RSSU5HOmNhc2UgbC5CTE9DS19TVFJJTkc6cmV0dXJuIHRoaXMucGFyc2VTdHJpbmdMaXRlcmFsKCk7Y2FzZSBsLk5BTUU6c3dpdGNoKHRoaXMuYWR2YW5jZUxleGVyKCksbi52YWx1ZSl7Y2FzZSJ0cnVlIjpyZXR1cm4gdGhpcy5ub2RlKG4se2tpbmQ6VC5CT09MRUFOLHZhbHVlOiEwfSk7Y2FzZSJmYWxzZSI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuQk9PTEVBTix2YWx1ZTohMX0pO2Nhc2UibnVsbCI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuTlVMTH0pO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuRU5VTSx2YWx1ZTpuLnZhbHVlfSl9Y2FzZSBsLkRPTExBUjppZih0KWlmKHRoaXMuZXhwZWN0VG9rZW4obC5ET0xMQVIpLHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT1sLk5BTUUpe2NvbnN0IGk9dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU7dGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgVW5leHBlY3RlZCB2YXJpYWJsZSAiJCR7aX0iIGluIGNvbnN0YW50IHZhbHVlLmApfWVsc2UgdGhyb3cgdGhpcy51bmV4cGVjdGVkKG4pO3JldHVybiB0aGlzLnBhcnNlVmFyaWFibGUoKTtkZWZhdWx0OnRocm93IHRoaXMudW5leHBlY3RlZCgpfX1wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZUxpdGVyYWwoITApfXBhcnNlU3RyaW5nTGl0ZXJhbCgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKHQse2tpbmQ6VC5TVFJJTkcsdmFsdWU6dC52YWx1ZSxibG9jazp0LmtpbmQ9PT1sLkJMT0NLX1NUUklOR30pfXBhcnNlTGlzdCh0KXtjb25zdCBuPSgpPT50aGlzLnBhcnNlVmFsdWVMaXRlcmFsKHQpO3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5MSVNULHZhbHVlczp0aGlzLmFueShsLkJSQUNLRVRfTCxuLGwuQlJBQ0tFVF9SKX0pfXBhcnNlT2JqZWN0KHQpe2NvbnN0IG49KCk9PnRoaXMucGFyc2VPYmplY3RGaWVsZCh0KTtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuT0JKRUNULGZpZWxkczp0aGlzLmFueShsLkJSQUNFX0wsbixsLkJSQUNFX1IpfSl9cGFyc2VPYmplY3RGaWVsZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuLGk9dGhpcy5wYXJzZU5hbWUoKTtyZXR1cm4gdGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKSx0aGlzLm5vZGUobix7a2luZDpULk9CSkVDVF9GSUVMRCxuYW1lOmksdmFsdWU6dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KX0pfXBhcnNlRGlyZWN0aXZlcyh0KXtjb25zdCBuPVtdO2Zvcig7dGhpcy5wZWVrKGwuQVQpOyluLnB1c2godGhpcy5wYXJzZURpcmVjdGl2ZSh0KSk7cmV0dXJuIG59cGFyc2VDb25zdERpcmVjdGl2ZXMoKXtyZXR1cm4gdGhpcy5wYXJzZURpcmVjdGl2ZXMoITApfXBhcnNlRGlyZWN0aXZlKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5BVCksdGhpcy5ub2RlKG4se2tpbmQ6VC5ESVJFQ1RJVkUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpLGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKHQpfSl9cGFyc2VUeXBlUmVmZXJlbmNlKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtsZXQgbjtpZih0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5CUkFDS0VUX0wpKXtjb25zdCBpPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCk7dGhpcy5leHBlY3RUb2tlbihsLkJSQUNLRVRfUiksbj10aGlzLm5vZGUodCx7a2luZDpULkxJU1RfVFlQRSx0eXBlOml9KX1lbHNlIG49dGhpcy5wYXJzZU5hbWVkVHlwZSgpO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5CQU5HKT90aGlzLm5vZGUodCx7a2luZDpULk5PTl9OVUxMX1RZUEUsdHlwZTpufSk6bn1wYXJzZU5hbWVkVHlwZSgpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5OQU1FRF9UWVBFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKX0pfXBlZWtEZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLnBlZWsobC5TVFJJTkcpfHx0aGlzLnBlZWsobC5CTE9DS19TVFJJTkcpfXBhcnNlRGVzY3JpcHRpb24oKXtpZih0aGlzLnBlZWtEZXNjcmlwdGlvbigpKXJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpfXBhcnNlU2NoZW1hRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO2NvbnN0IGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5tYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24sbC5CUkFDRV9SKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5TQ0hFTUFfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLGRpcmVjdGl2ZXM6aSxvcGVyYXRpb25UeXBlczpyfSl9cGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlT3BlcmF0aW9uVHlwZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZWRUeXBlKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTixvcGVyYXRpb246bix0eXBlOml9KX1wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgic2NhbGFyIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDQUxBUl9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyfSl9cGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInR5cGUiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxzPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxvPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczpzLGZpZWxkczpvfSl9cGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgiaW1wbGVtZW50cyIpP3RoaXMuZGVsaW1pdGVkTWFueShsLkFNUCx0aGlzLnBhcnNlTmFtZWRUeXBlKTpbXX1wYXJzZUZpZWxkc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VGaWVsZERlZmluaXRpb24sbC5CUkFDRV9SKX1wYXJzZUZpZWxkRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQXJndW1lbnREZWZzKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCBzPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCksbz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRklFTERfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxhcmd1bWVudHM6cix0eXBlOnMsZGlyZWN0aXZlczpvfSl9cGFyc2VBcmd1bWVudERlZnMoKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLHRoaXMucGFyc2VJbnB1dFZhbHVlRGVmLGwuUEFSRU5fUil9cGFyc2VJbnB1dFZhbHVlRGVmKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpLGk9dGhpcy5wYXJzZU5hbWUoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IHI9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKTtsZXQgczt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpJiYocz10aGlzLnBhcnNlQ29uc3RWYWx1ZUxpdGVyYWwoKSk7Y29uc3Qgbz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5QVVRfVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSx0eXBlOnIsZGVmYXVsdFZhbHVlOnMsZGlyZWN0aXZlczpvfSl9cGFyc2VJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImludGVyZmFjZSIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHM9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLG89dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGludGVyZmFjZXM6cixkaXJlY3RpdmVzOnMsZmllbGRzOm99KX1wYXJzZVVuaW9uVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ1bmlvbiIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuVU5JT05fVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cix0eXBlczpzfSl9cGFyc2VVbmlvbk1lbWJlclR5cGVzKCl7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUyk/dGhpcy5kZWxpbWl0ZWRNYW55KGwuUElQRSx0aGlzLnBhcnNlTmFtZWRUeXBlKTpbXX1wYXJzZUVudW1UeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5FTlVNX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsdmFsdWVzOnN9KX1wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbixsLkJSQUNFX1IpfXBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VFbnVtVmFsdWVOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9WQUxVRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cn0pfXBhcnNlRW51bVZhbHVlTmFtZSgpe2lmKHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09InRydWUifHx0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJmYWxzZSJ8fHRoaXMuX2xleGVyLnRva2VuLnZhbHVlPT09Im51bGwiKXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLHRoaXMuX2xleGVyLnRva2VuLnN0YXJ0LGAke3dlKHRoaXMuX2xleGVyLnRva2VuKX0gaXMgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBhbiBlbnVtIHZhbHVlLmApO3JldHVybiB0aGlzLnBhcnNlTmFtZSgpfXBhcnNlSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX09CSkVDVF9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VJbnB1dFZhbHVlRGVmLGwuQlJBQ0VfUil9cGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci5sb29rYWhlYWQoKTtpZih0LmtpbmQ9PT1sLk5BTUUpc3dpdGNoKHQudmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYUV4dGVuc2lvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZUV4dGVuc2lvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVFeHRlbnNpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZUV4dGVuc2lvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKCl9dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfXBhcnNlU2NoZW1hRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgic2NoZW1hIik7Y29uc3Qgbj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksaT10aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGwuQlJBQ0VfUik7aWYobi5sZW5ndGg9PT0wJiZpLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NIRU1BX0VYVEVOU0lPTixkaXJlY3RpdmVzOm4sb3BlcmF0aW9uVHlwZXM6aX0pfXBhcnNlU2NhbGFyVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtpZihpLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NBTEFSX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOml9KX1wYXJzZU9iamVjdFR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wJiZzLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuT0JKRUNUX1RZUEVfRVhURU5TSU9OLG5hbWU6bixpbnRlcmZhY2VzOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiaW50ZXJmYWNlIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wJiZzLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5URVJGQUNFX1RZUEVfRVhURU5TSU9OLG5hbWU6bixpbnRlcmZhY2VzOmksZGlyZWN0aXZlczpyLGZpZWxkczpzfSl9cGFyc2VVbmlvblR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJ1bmlvbiIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuVU5JT05fVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSx0eXBlczpyfSl9cGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5FTlVNX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksdmFsdWVzOnJ9KX1wYXJzZUlucHV0T2JqZWN0VHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSl9cGFyc2VEaXJlY3RpdmVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiZGlyZWN0aXZlIiksdGhpcy5leHBlY3RUb2tlbihsLkFUKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQXJndW1lbnREZWZzKCkscz10aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgicmVwZWF0YWJsZSIpO3RoaXMuZXhwZWN0S2V5d29yZCgib24iKTtjb25zdCBvPXRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5ESVJFQ1RJVkVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxhcmd1bWVudHM6cixyZXBlYXRhYmxlOnMsbG9jYXRpb25zOm99KX1wYXJzZURpcmVjdGl2ZUxvY2F0aW9ucygpe3JldHVybiB0aGlzLmRlbGltaXRlZE1hbnkobC5QSVBFLHRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbil9cGFyc2VEaXJlY3RpdmVMb2NhdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlTmFtZSgpO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHZSxuLnZhbHVlKSlyZXR1cm4gbjt0aHJvdyB0aGlzLnVuZXhwZWN0ZWQodCl9bm9kZSh0LG4pe3JldHVybiB0aGlzLl9vcHRpb25zLm5vTG9jYXRpb24hPT0hMCYmKG4ubG9jPW5ldyBhbih0LHRoaXMuX2xleGVyLmxhc3RUb2tlbix0aGlzLl9sZXhlci5zb3VyY2UpKSxufXBlZWsodCl7cmV0dXJuIHRoaXMuX2xleGVyLnRva2VuLmtpbmQ9PT10fWV4cGVjdFRva2VuKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09dClyZXR1cm4gdGhpcy5hZHZhbmNlTGV4ZXIoKSxuO3Rocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYEV4cGVjdGVkICR7U3QodCl9LCBmb3VuZCAke3dlKG4pfS5gKX1leHBlY3RPcHRpb25hbFRva2VuKHQpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09dD8odGhpcy5hZHZhbmNlTGV4ZXIoKSwhMCk6ITF9ZXhwZWN0S2V5d29yZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PWwuTkFNRSYmbi52YWx1ZT09PXQpdGhpcy5hZHZhbmNlTGV4ZXIoKTtlbHNlIHRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYEV4cGVjdGVkICIke3R9IiwgZm91bmQgJHt3ZShuKX0uYCl9ZXhwZWN0T3B0aW9uYWxLZXl3b3JkKHQpe2NvbnN0IG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIG4ua2luZD09PWwuTkFNRSYmbi52YWx1ZT09PXQ/KHRoaXMuYWR2YW5jZUxleGVyKCksITApOiExfXVuZXhwZWN0ZWQodCl7Y29uc3Qgbj10IT1udWxsP3Q6dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYFVuZXhwZWN0ZWQgJHt3ZShuKX0uYCl9YW55KHQsbixpKXt0aGlzLmV4cGVjdFRva2VuKHQpO2NvbnN0IHI9W107Zm9yKDshdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpOylyLnB1c2gobi5jYWxsKHRoaXMpKTtyZXR1cm4gcn1vcHRpb25hbE1hbnkodCxuLGkpe2lmKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KSl7Y29uc3Qgcj1bXTtkbyByLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSghdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGkpKTtyZXR1cm4gcn1yZXR1cm5bXX1tYW55KHQsbixpKXt0aGlzLmV4cGVjdFRva2VuKHQpO2NvbnN0IHI9W107ZG8gci5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUoIXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKSk7cmV0dXJuIHJ9ZGVsaW1pdGVkTWFueSh0LG4pe3RoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KTtjb25zdCBpPVtdO2RvIGkucHVzaChuLmNhbGwodGhpcykpO3doaWxlKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbih0KSk7cmV0dXJuIGl9YWR2YW5jZUxleGVyKCl7Y29uc3R7bWF4VG9rZW5zOnR9PXRoaXMuX29wdGlvbnMsbj10aGlzLl9sZXhlci5hZHZhbmNlKCk7aWYobi5raW5kIT09bC5FT0YmJigrK3RoaXMuX3Rva2VuQ291bnRlcix0IT09dm9pZCAwJiZ0aGlzLl90b2tlbkNvdW50ZXI+dCkpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2Usbi5zdGFydCxgRG9jdW1lbnQgY29udGFpbnMgbW9yZSB0aGF0ICR7dH0gdG9rZW5zLiBQYXJzaW5nIGFib3J0ZWQuYCl9fWZ1bmN0aW9uIHdlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gU3QoZS5raW5kKSsodCE9bnVsbD9gICIke3R9ImA6IiIpfWZ1bmN0aW9uIFN0KGUpe3JldHVybiBwbihlKT9gIiR7ZX0iYDplfWZ1bmN0aW9uIFJuKGUpe3JldHVybmAiJHtlLnJlcGxhY2UoUG4sTG4pfSJgfWNvbnN0IFBuPS9bXHgwMC1ceDFmXHgyMlx4NWNceDdmLVx4OWZdL2c7ZnVuY3Rpb24gTG4oZSl7cmV0dXJuIEZuW2UuY2hhckNvZGVBdCgwKV19Y29uc3QgRm49WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiLCIiLCIiLCdcXCInLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJcXFxcIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiXFx1MDA3RiIsIlxcdTAwODAiLCJcXHUwMDgxIiwiXFx1MDA4MiIsIlxcdTAwODMiLCJcXHUwMDg0IiwiXFx1MDA4NSIsIlxcdTAwODYiLCJcXHUwMDg3IiwiXFx1MDA4OCIsIlxcdTAwODkiLCJcXHUwMDhBIiwiXFx1MDA4QiIsIlxcdTAwOEMiLCJcXHUwMDhEIiwiXFx1MDA4RSIsIlxcdTAwOEYiLCJcXHUwMDkwIiwiXFx1MDA5MSIsIlxcdTAwOTIiLCJcXHUwMDkzIiwiXFx1MDA5NCIsIlxcdTAwOTUiLCJcXHUwMDk2IiwiXFx1MDA5NyIsIlxcdTAwOTgiLCJcXHUwMDk5IiwiXFx1MDA5QSIsIlxcdTAwOUIiLCJcXHUwMDlDIiwiXFx1MDA5RCIsIlxcdTAwOUUiLCJcXHUwMDlGIl0sTW49T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gJG4oZSx0LG49Z3Qpe2NvbnN0IGk9bmV3IE1hcDtmb3IoY29uc3QgRSBvZiBPYmplY3QudmFsdWVzKFQpKWkuc2V0KEUsQm4odCxFKSk7bGV0IHIscz1BcnJheS5pc0FycmF5KGUpLG89W2VdLGM9LTEsZj1bXSxkPWUsdSx5O2NvbnN0IHY9W10sYj1bXTtkb3tjKys7Y29uc3QgRT1jPT09by5sZW5ndGgsQz1FJiZmLmxlbmd0aCE9PTA7aWYoRSl7aWYodT1iLmxlbmd0aD09PTA/dm9pZCAwOnZbdi5sZW5ndGgtMV0sZD15LHk9Yi5wb3AoKSxDKWlmKHMpe2Q9ZC5zbGljZSgpO2xldCBSPTA7Zm9yKGNvbnN0WyQscV1vZiBmKXtjb25zdCBCPSQtUjtxPT09bnVsbD8oZC5zcGxpY2UoQiwxKSxSKyspOmRbQl09cX19ZWxzZXtkPUQoe30sZCk7Zm9yKGNvbnN0W1IsJF1vZiBmKWRbUl09JH1jPXIuaW5kZXgsbz1yLmtleXMsZj1yLmVkaXRzLHM9ci5pbkFycmF5LHI9ci5wcmV2fWVsc2UgaWYoeSl7aWYodT1zP2M6b1tjXSxkPXlbdV0sZD09bnVsbCljb250aW51ZTt2LnB1c2godSl9bGV0IHc7aWYoIUFycmF5LmlzQXJyYXkoZCkpe3ZhciBtLE47dnQoZCl8fG9lKCExLGBJbnZhbGlkIEFTVCBOb2RlOiAke1llKGQpfS5gKTtjb25zdCBSPUU/KG09aS5nZXQoZC5raW5kKSk9PT1udWxsfHxtPT09dm9pZCAwP3ZvaWQgMDptLmxlYXZlOihOPWkuZ2V0KGQua2luZCkpPT09bnVsbHx8Tj09PXZvaWQgMD92b2lkIDA6Ti5lbnRlcjtpZih3PVI9PW51bGw/dm9pZCAwOlIuY2FsbCh0LGQsdSx5LHYsYiksdz09PU1uKWJyZWFrO2lmKHc9PT0hMSl7aWYoIUUpe3YucG9wKCk7Y29udGludWV9fWVsc2UgaWYodyE9PXZvaWQgMCYmKGYucHVzaChbdSx3XSksIUUpKWlmKHZ0KHcpKWQ9dztlbHNle3YucG9wKCk7Y29udGludWV9fWlmKHc9PT12b2lkIDAmJkMmJmYucHVzaChbdSxkXSksRSl2LnBvcCgpO2Vsc2V7dmFyIGc7cj17aW5BcnJheTpzLGluZGV4OmMsa2V5czpvLGVkaXRzOmYscHJldjpyfSxzPUFycmF5LmlzQXJyYXkoZCksbz1zP2Q6KGc9bltkLmtpbmRdKSE9PW51bGwmJmchPT12b2lkIDA/ZzpbXSxjPS0xLGY9W10seSYmYi5wdXNoKHkpLHk9ZH19d2hpbGUociE9PXZvaWQgMCk7cmV0dXJuIGYubGVuZ3RoIT09MD9mW2YubGVuZ3RoLTFdWzFdOmV9ZnVuY3Rpb24gQm4oZSx0KXtjb25zdCBuPWVbdF07cmV0dXJuIHR5cGVvZiBuPT0ib2JqZWN0Ij9uOnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tlbnRlcjpuLGxlYXZlOnZvaWQgMH06e2VudGVyOmUuZW50ZXIsbGVhdmU6ZS5sZWF2ZX19ZnVuY3Rpb24gVW4oZSl7cmV0dXJuICRuKGUsam4pfWNvbnN0IFZuPTgwLGpuPXtOYW1lOntsZWF2ZTplPT5lLnZhbHVlfSxWYXJpYWJsZTp7bGVhdmU6ZT0+IiQiK2UubmFtZX0sRG9jdW1lbnQ6e2xlYXZlOmU9PnAoZS5kZWZpbml0aW9ucyxgCgpgKX0sT3BlcmF0aW9uRGVmaW5pdGlvbjp7bGVhdmUoZSl7Y29uc3QgdD1PKCIoIixwKGUudmFyaWFibGVEZWZpbml0aW9ucywiLCAiKSwiKSIpLG49cChbZS5vcGVyYXRpb24scChbZS5uYW1lLHRdKSxwKGUuZGlyZWN0aXZlcywiICIpXSwiICIpO3JldHVybihuPT09InF1ZXJ5Ij8iIjpuKyIgIikrZS5zZWxlY3Rpb25TZXR9fSxWYXJpYWJsZURlZmluaXRpb246e2xlYXZlOih7dmFyaWFibGU6ZSx0eXBlOnQsZGVmYXVsdFZhbHVlOm4sZGlyZWN0aXZlczppfSk9PmUrIjogIit0K08oIiA9ICIsbikrTygiICIscChpLCIgIikpfSxTZWxlY3Rpb25TZXQ6e2xlYXZlOih7c2VsZWN0aW9uczplfSk9PmVlKGUpfSxGaWVsZDp7bGVhdmUoe2FsaWFzOmUsbmFtZTp0LGFyZ3VtZW50czpuLGRpcmVjdGl2ZXM6aSxzZWxlY3Rpb25TZXQ6cn0pe2NvbnN0IHM9TygiIixlLCI6ICIpK3Q7bGV0IG89cytPKCIoIixwKG4sIiwgIiksIikiKTtyZXR1cm4gby5sZW5ndGg+Vm4mJihvPXMrTyhgKApgLERlKHAobixgCmApKSxgCilgKSkscChbbyxwKGksIiAiKSxyXSwiICIpfX0sQXJndW1lbnQ6e2xlYXZlOih7bmFtZTplLHZhbHVlOnR9KT0+ZSsiOiAiK3R9LEZyYWdtZW50U3ByZWFkOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnR9KT0+Ii4uLiIrZStPKCIgIixwKHQsIiAiKSl9LElubGluZUZyYWdtZW50OntsZWF2ZTooe3R5cGVDb25kaXRpb246ZSxkaXJlY3RpdmVzOnQsc2VsZWN0aW9uU2V0Om59KT0+cChbIi4uLiIsTygib24gIixlKSxwKHQsIiAiKSxuXSwiICIpfSxGcmFnbWVudERlZmluaXRpb246e2xlYXZlOih7bmFtZTplLHR5cGVDb25kaXRpb246dCx2YXJpYWJsZURlZmluaXRpb25zOm4sZGlyZWN0aXZlczppLHNlbGVjdGlvblNldDpyfSk9PmBmcmFnbWVudCAke2V9JHtPKCIoIixwKG4sIiwgIiksIikiKX0gb24gJHt0fSAke08oIiIscChpLCIgIiksIiAiKX1gK3J9LEludFZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZX0sRmxvYXRWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LFN0cmluZ1ZhbHVlOntsZWF2ZTooe3ZhbHVlOmUsYmxvY2s6dH0pPT50P2huKGUpOlJuKGUpfSxCb29sZWFuVmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lPyJ0cnVlIjoiZmFsc2UifSxOdWxsVmFsdWU6e2xlYXZlOigpPT4ibnVsbCJ9LEVudW1WYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LExpc3RWYWx1ZTp7bGVhdmU6KHt2YWx1ZXM6ZX0pPT4iWyIrcChlLCIsICIpKyJdIn0sT2JqZWN0VmFsdWU6e2xlYXZlOih7ZmllbGRzOmV9KT0+InsiK3AoZSwiLCAiKSsifSJ9LE9iamVjdEZpZWxkOntsZWF2ZTooe25hbWU6ZSx2YWx1ZTp0fSk9PmUrIjogIit0fSxEaXJlY3RpdmU6e2xlYXZlOih7bmFtZTplLGFyZ3VtZW50czp0fSk9PiJAIitlK08oIigiLHAodCwiLCAiKSwiKSIpfSxOYW1lZFR5cGU6e2xlYXZlOih7bmFtZTplfSk9PmV9LExpc3RUeXBlOntsZWF2ZTooe3R5cGU6ZX0pPT4iWyIrZSsiXSJ9LE5vbk51bGxUeXBlOntsZWF2ZTooe3R5cGU6ZX0pPT5lKyIhIn0sU2NoZW1hRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLGRpcmVjdGl2ZXM6dCxvcGVyYXRpb25UeXBlczpufSk9Pk8oIiIsZSxgCmApK3AoWyJzY2hlbWEiLHAodCwiICIpLGVlKG4pXSwiICIpfSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtvcGVyYXRpb246ZSx0eXBlOnR9KT0+ZSsiOiAiK3R9LFNjYWxhclR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bn0pPT5PKCIiLGUsYApgKStwKFsic2NhbGFyIix0LHAobiwiICIpXSwiICIpfSxPYmplY3RUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxpbnRlcmZhY2VzOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSk9Pk8oIiIsZSxgCmApK3AoWyJ0eXBlIix0LE8oImltcGxlbWVudHMgIixwKG4sIiAmICIpKSxwKGksIiAiKSxlZShyKV0sIiAiKX0sRmllbGREZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGFyZ3VtZW50czpuLHR5cGU6aSxkaXJlY3RpdmVzOnJ9KT0+TygiIixlLGAKYCkrdCsoT3Qobik/TyhgKApgLERlKHAobixgCmApKSxgCilgKTpPKCIoIixwKG4sIiwgIiksIikiKSkrIjogIitpK08oIiAiLHAociwiICIpKX0sSW5wdXRWYWx1ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsdHlwZTpuLGRlZmF1bHRWYWx1ZTppLGRpcmVjdGl2ZXM6cn0pPT5PKCIiLGUsYApgKStwKFt0KyI6ICIrbixPKCI9ICIsaSkscChyLCIgIildLCIgIil9LEludGVyZmFjZVR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGludGVyZmFjZXM6bixkaXJlY3RpdmVzOmksZmllbGRzOnJ9KT0+TygiIixlLGAKYCkrcChbImludGVyZmFjZSIsdCxPKCJpbXBsZW1lbnRzICIscChuLCIgJiAiKSkscChpLCIgIiksZWUocildLCIgIil9LFVuaW9uVHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLHR5cGVzOml9KT0+TygiIixlLGAKYCkrcChbInVuaW9uIix0LHAobiwiICIpLE8oIj0gIixwKGksIiB8ICIpKV0sIiAiKX0sRW51bVR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bix2YWx1ZXM6aX0pPT5PKCIiLGUsYApgKStwKFsiZW51bSIsdCxwKG4sIiAiKSxlZShpKV0sIiAiKX0sRW51bVZhbHVlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm59KT0+TygiIixlLGAKYCkrcChbdCxwKG4sIiAiKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+TygiIixlLGAKYCkrcChbImlucHV0Iix0LHAobiwiICIpLGVlKGkpXSwiICIpfSxEaXJlY3RpdmVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGFyZ3VtZW50czpuLHJlcGVhdGFibGU6aSxsb2NhdGlvbnM6cn0pPT5PKCIiLGUsYApgKSsiZGlyZWN0aXZlIEAiK3QrKE90KG4pP08oYCgKYCxEZShwKG4sYApgKSksYAopYCk6TygiKCIscChuLCIsICIpLCIpIikpKyhpPyIgcmVwZWF0YWJsZSI6IiIpKyIgb24gIitwKHIsIiB8ICIpfSxTY2hlbWFFeHRlbnNpb246e2xlYXZlOih7ZGlyZWN0aXZlczplLG9wZXJhdGlvblR5cGVzOnR9KT0+cChbImV4dGVuZCBzY2hlbWEiLHAoZSwiICIpLGVlKHQpXSwiICIpfSxTY2FsYXJUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnR9KT0+cChbImV4dGVuZCBzY2FsYXIiLGUscCh0LCIgIildLCIgIil9LE9iamVjdFR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGludGVyZmFjZXM6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+cChbImV4dGVuZCB0eXBlIixlLE8oImltcGxlbWVudHMgIixwKHQsIiAmICIpKSxwKG4sIiAiKSxlZShpKV0sIiAiKX0sSW50ZXJmYWNlVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsaW50ZXJmYWNlczp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6aX0pPT5wKFsiZXh0ZW5kIGludGVyZmFjZSIsZSxPKCJpbXBsZW1lbnRzICIscCh0LCIgJiAiKSkscChuLCIgIiksZWUoaSldLCIgIil9LFVuaW9uVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LHR5cGVzOm59KT0+cChbImV4dGVuZCB1bmlvbiIsZSxwKHQsIiAiKSxPKCI9ICIscChuLCIgfCAiKSldLCIgIil9LEVudW1UeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsdmFsdWVzOm59KT0+cChbImV4dGVuZCBlbnVtIixlLHAodCwiICIpLGVlKG4pXSwiICIpfSxJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCxmaWVsZHM6bn0pPT5wKFsiZXh0ZW5kIGlucHV0IixlLHAodCwiICIpLGVlKG4pXSwiICIpfX07ZnVuY3Rpb24gcChlLHQ9IiIpe3ZhciBuO3JldHVybihuPWU9PW51bGw/dm9pZCAwOmUuZmlsdGVyKGk9PmkpLmpvaW4odCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOiIifWZ1bmN0aW9uIGVlKGUpe3JldHVybiBPKGB7CmAsRGUocChlLGAKYCkpLGAKfWApfWZ1bmN0aW9uIE8oZSx0LG49IiIpe3JldHVybiB0IT1udWxsJiZ0IT09IiI/ZSt0K246IiJ9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIE8oIiAgIixlLnJlcGxhY2UoL1xuL2csYAogIGApKX1mdW5jdGlvbiBPdChlKXt2YXIgdDtyZXR1cm4odD1lPT1udWxsP3ZvaWQgMDplLnNvbWUobj0+bi5pbmNsdWRlcyhgCmApKSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6ITF9Y29uc3Qgd3Q9ZT0+e3ZhciBpLHI7bGV0IHQ7Y29uc3Qgbj1lLmRlZmluaXRpb25zLmZpbHRlcihzPT5zLmtpbmQ9PT0iT3BlcmF0aW9uRGVmaW5pdGlvbiIpO3JldHVybiBuLmxlbmd0aD09PTEmJih0PShyPShpPW5bMF0pPT1udWxsP3ZvaWQgMDppLm5hbWUpPT1udWxsP3ZvaWQgMDpyLnZhbHVlKSx0fSxKZT1lPT57aWYodHlwZW9mIGU9PSJzdHJpbmciKXtsZXQgbjt0cnl7Y29uc3QgaT1JdChlKTtuPXd0KGkpfWNhdGNoKGkpe31yZXR1cm57cXVlcnk6ZSxvcGVyYXRpb25OYW1lOm59fWNvbnN0IHQ9d3QoZSk7cmV0dXJue3F1ZXJ5OlVuKGUpLG9wZXJhdGlvbk5hbWU6dH19O2NsYXNzIGRlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuKXtjb25zdCBpPWAke2RlLmV4dHJhY3RNZXNzYWdlKHQpfTogJHtKU09OLnN0cmluZ2lmeSh7cmVzcG9uc2U6dCxyZXF1ZXN0Om59KX1gO3N1cGVyKGkpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGRlLnByb3RvdHlwZSksdGhpcy5yZXNwb25zZT10LHRoaXMucmVxdWVzdD1uLHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT09ImZ1bmN0aW9uIiYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxkZSl9c3RhdGljIGV4dHJhY3RNZXNzYWdlKHQpe3ZhciBuLGkscjtyZXR1cm4ocj0oaT0obj10LmVycm9ycyk9PW51bGw/dm9pZCAwOm5bMF0pPT1udWxsP3ZvaWQgMDppLm1lc3NhZ2UpIT1udWxsP3I6YEdyYXBoUUwgRXJyb3IgKENvZGU6ICR7dC5zdGF0dXN9KWB9fXZhciBxbj10eXBlb2YgZ2xvYmFsVGhpcyE9InVuZGVmaW5lZCI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIj93aW5kb3c6dHlwZW9mIGdsb2JhbCE9InVuZGVmaW5lZCI/Z2xvYmFsOnR5cGVvZiBzZWxmIT0idW5kZWZpbmVkIj9zZWxmOnt9O2Z1bmN0aW9uIER0KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9dmFyIFFlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjpxbixpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe3RoaXMuZmV0Y2g9ITEsdGhpcy5ET01FeGNlcHRpb249bi5ET01FeGNlcHRpb259cmV0dXJuIHMucHJvdG90eXBlPW4sbmV3IHN9KCk7KGZ1bmN0aW9uKHMpeyhmdW5jdGlvbihvKXt2YXIgYz17c2VhcmNoUGFyYW1zOiJVUkxTZWFyY2hQYXJhbXMiaW4gcyxpdGVyYWJsZToiU3ltYm9sImluIHMmJiJpdGVyYXRvciJpbiBTeW1ib2wsYmxvYjoiRmlsZVJlYWRlciJpbiBzJiYiQmxvYiJpbiBzJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goYSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOiJGb3JtRGF0YSJpbiBzLGFycmF5QnVmZmVyOiJBcnJheUJ1ZmZlciJpbiBzfTtmdW5jdGlvbiBmKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX1pZihjLmFycmF5QnVmZmVyKXZhciBkPVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZkLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZnVuY3Rpb24geShhKXtpZih0eXBlb2YgYSE9InN0cmluZyImJihhPVN0cmluZyhhKSksL1teYS16MC05XC0jJCUmJyorLl5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHYoYSl7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIiYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGIoYSl7dmFyIGg9e25leHQ6ZnVuY3Rpb24oKXt2YXIgXz1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6Xz09PXZvaWQgMCx2YWx1ZTpffX19O3JldHVybiBjLml0ZXJhYmxlJiYoaFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxofWZ1bmN0aW9uIG0oYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIG0/YS5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7dGhpcy5hcHBlbmQoXyxoKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpcy5hcHBlbmQoaFswXSxoWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihoKXt0aGlzLmFwcGVuZChoLGFbaF0pfSx0aGlzKX1tLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxoKXthPXkoYSksaD12KGgpO3ZhciBfPXRoaXMubWFwW2FdO3RoaXMubWFwW2FdPV8/XysiLCAiK2g6aH0sbS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFt5KGEpXX0sbS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPXkoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sbS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eSh5KGEpKX0sbS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsaCl7dGhpcy5tYXBbeShhKV09dihoKX0sbS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGgpe2Zvcih2YXIgXyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShfKSYmYS5jYWxsKGgsdGhpcy5tYXBbX10sXyx0aGlzKX0sbS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oaCxfKXthLnB1c2goXyl9KSxiKGEpfSxtLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgpe2EucHVzaChoKX0pLGIoYSl9LG0ucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7YS5wdXNoKFtfLGhdKX0pLGIoYSl9LGMuaXRlcmFibGUmJihtLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPW0ucHJvdG90eXBlLmVudHJpZXMpO2Z1bmN0aW9uIE4oYSl7aWYoYS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaCxfKXthLm9ubG9hZD1mdW5jdGlvbigpe2goYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtfKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIEUoYSl7dmFyIGg9bmV3IEZpbGVSZWFkZXIsXz1nKGgpO3JldHVybiBoLnJlYWRBc0FycmF5QnVmZmVyKGEpLF99ZnVuY3Rpb24gQyhhKXt2YXIgaD1uZXcgRmlsZVJlYWRlcixfPWcoaCk7cmV0dXJuIGgucmVhZEFzVGV4dChhKSxffWZ1bmN0aW9uIHcoYSl7Zm9yKHZhciBoPW5ldyBVaW50OEFycmF5KGEpLF89bmV3IEFycmF5KGgubGVuZ3RoKSxBPTA7QTxoLmxlbmd0aDtBKyspX1tBXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbQV0pO3JldHVybiBfLmpvaW4oIiIpfWZ1bmN0aW9uIFIoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgaD1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBoLnNldChuZXcgVWludDhBcnJheShhKSksaC5idWZmZXJ9ZnVuY3Rpb24gJCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe3RoaXMuX2JvZHlJbml0PWEsYT90eXBlb2YgYT09InN0cmluZyI/dGhpcy5fYm9keVRleHQ9YTpjLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keUJsb2I9YTpjLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5Rm9ybURhdGE9YTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlUZXh0PWEudG9TdHJpbmcoKTpjLmFycmF5QnVmZmVyJiZjLmJsb2ImJmYoYSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1SKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOmMuYXJyYXlCdWZmZXImJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKXx8dShhKSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPVIoYSk6dGhpcy5fYm9keVRleHQ9YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk6dGhpcy5fYm9keVRleHQ9IiIsdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCh0eXBlb2YgYT09InN0cmluZyI/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYy5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Tih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP04odGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oRSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1OKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIEModGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHcodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMuZm9ybURhdGEmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oUyl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc312YXIgcT1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2Z1bmN0aW9uIEIoYSl7dmFyIGg9YS50b1VwcGVyQ2FzZSgpO3JldHVybiBxLmluZGV4T2YoaCk+LTE/aDphfWZ1bmN0aW9uIEkoYSxoKXtoPWh8fHt9O3ZhciBfPWguYm9keTtpZihhIGluc3RhbmNlb2YgSSl7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD1hLnVybCx0aGlzLmNyZWRlbnRpYWxzPWEuY3JlZGVudGlhbHMsaC5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBtKGEuaGVhZGVycykpLHRoaXMubWV0aG9kPWEubWV0aG9kLHRoaXMubW9kZT1hLm1vZGUsdGhpcy5zaWduYWw9YS5zaWduYWwsIV8mJmEuX2JvZHlJbml0IT1udWxsJiYoXz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWguY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJzYW1lLW9yaWdpbiIsKGguaGVhZGVyc3x8IXRoaXMuaGVhZGVycykmJih0aGlzLmhlYWRlcnM9bmV3IG0oaC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9QihoLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiKSx0aGlzLm1vZGU9aC5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9aC5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwodGhpcy5tZXRob2Q9PT0iR0VUInx8dGhpcy5tZXRob2Q9PT0iSEVBRCIpJiZfKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkoXyl9SS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfTtmdW5jdGlvbiBTKGEpe3ZhciBoPW5ldyBGb3JtRGF0YTtyZXR1cm4gYS50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe2lmKF8pe3ZhciBBPV8uc3BsaXQoIj0iKSxrPUEuc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIikseD1BLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7aC5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KGspLGRlY29kZVVSSUNvbXBvbmVudCh4KSl9fSksaH1mdW5jdGlvbiBqKGEpe3ZhciBoPW5ldyBtLF89YS5yZXBsYWNlKC9ccj9cbltcdCBdKy9nLCIgIik7cmV0dXJuIF8uc3BsaXQoL1xyP1xuLykuZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgaz1BLnNwbGl0KCI6IikseD1rLnNoaWZ0KCkudHJpbSgpO2lmKHgpe3ZhciBjZT1rLmpvaW4oIjoiKS50cmltKCk7aC5hcHBlbmQoeCxjZSl9fSksaH0kLmNhbGwoSS5wcm90b3R5cGUpO2Z1bmN0aW9uIFUoYSxoKXtofHwoaD17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz1oLnN0YXR1cz09PXZvaWQgMD8yMDA6aC5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGg/aC5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBtKGguaGVhZGVycyksdGhpcy51cmw9aC51cmx8fCIiLHRoaXMuX2luaXRCb2R5KGEpfSQuY2FsbChVLnByb3RvdHlwZSksVS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFUodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBtKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LFUuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIGEudHlwZT0iZXJyb3IiLGF9O3ZhciB6PVszMDEsMzAyLDMwMywzMDcsMzA4XTtVLnJlZGlyZWN0PWZ1bmN0aW9uKGEsaCl7aWYoei5pbmRleE9mKGgpPT09LTEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IFUobnVsbCx7c3RhdHVzOmgsaGVhZGVyczp7bG9jYXRpb246YX19KX0sby5ET01FeGNlcHRpb249cy5ET01FeGNlcHRpb247dHJ5e25ldyBvLkRPTUV4Y2VwdGlvbn1jYXRjaChhKXtvLkRPTUV4Y2VwdGlvbj1mdW5jdGlvbihoLF8pe3RoaXMubWVzc2FnZT1oLHRoaXMubmFtZT1fO3ZhciBBPUVycm9yKGgpO3RoaXMuc3RhY2s9QS5zdGFja30sby5ET01FeGNlcHRpb24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I9by5ET01FeGNlcHRpb259ZnVuY3Rpb24gSyhhLGgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfLEEpe3ZhciBrPW5ldyBJKGEsaCk7aWYoay5zaWduYWwmJmsuc2lnbmFsLmFib3J0ZWQpcmV0dXJuIEEobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gY2UoKXt4LmFib3J0KCl9eC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgSD17c3RhdHVzOnguc3RhdHVzLHN0YXR1c1RleHQ6eC5zdGF0dXNUZXh0LGhlYWRlcnM6aih4LmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O0gudXJsPSJyZXNwb25zZVVSTCJpbiB4P3gucmVzcG9uc2VVUkw6SC5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBzZT0icmVzcG9uc2UiaW4geD94LnJlc3BvbnNlOngucmVzcG9uc2VUZXh0O18obmV3IFUoc2UsSCkpfSx4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtBKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LHgub250aW1lb3V0PWZ1bmN0aW9uKCl7QShuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSx4Lm9uYWJvcnQ9ZnVuY3Rpb24oKXtBKG5ldyBvLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LHgub3BlbihrLm1ldGhvZCxrLnVybCwhMCksay5jcmVkZW50aWFscz09PSJpbmNsdWRlIj94LndpdGhDcmVkZW50aWFscz0hMDprLmNyZWRlbnRpYWxzPT09Im9taXQiJiYoeC53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4geCYmYy5ibG9iJiYoeC5yZXNwb25zZVR5cGU9ImJsb2IiKSxrLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihILHNlKXt4LnNldFJlcXVlc3RIZWFkZXIoc2UsSCl9KSxrLnNpZ25hbCYmKGsuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjZSkseC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt4LnJlYWR5U3RhdGU9PT00JiZrLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpfSkseC5zZW5kKHR5cGVvZiBrLl9ib2R5SW5pdD09InVuZGVmaW5lZCI/bnVsbDprLl9ib2R5SW5pdCl9KX1yZXR1cm4gSy5wb2x5ZmlsbD0hMCxzLmZldGNofHwocy5mZXRjaD1LLHMuSGVhZGVycz1tLHMuUmVxdWVzdD1JLHMuUmVzcG9uc2U9VSksby5IZWFkZXJzPW0sby5SZXF1ZXN0PUksby5SZXNwb25zZT1VLG8uZmV0Y2g9SyxPYmplY3QuZGVmaW5lUHJvcGVydHkobywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksb30pKHt9KX0pKGkpLGkuZmV0Y2gucG9ueWZpbGw9ITAsZGVsZXRlIGkuZmV0Y2gucG9seWZpbGw7dmFyIHI9aTt0PXIuZmV0Y2gsdC5kZWZhdWx0PXIuZmV0Y2gsdC5mZXRjaD1yLmZldGNoLHQuSGVhZGVycz1yLkhlYWRlcnMsdC5SZXF1ZXN0PXIuUmVxdWVzdCx0LlJlc3BvbnNlPXIuUmVzcG9uc2UsZS5leHBvcnRzPXR9KShRZSxRZS5leHBvcnRzKTt2YXIgQ2U9UWUuZXhwb3J0cyxrZT1EdChDZSksR249Rih7X19wcm90b19fOm51bGwsZGVmYXVsdDprZX0sW0NlXSk7Y29uc3QgcGU9ZT0+e2xldCB0PXt9O3JldHVybiBlJiYodHlwZW9mIEhlYWRlcnMhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSGVhZGVyc3x8R24mJkNlLkhlYWRlcnMmJmUgaW5zdGFuY2VvZiBDZS5IZWFkZXJzP3Q9WChlKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoW24saV0pPT57biYmaSE9PXZvaWQgMCYmKHRbbl09aSl9KTp0PWUpLHR9LEN0PWU9PmUucmVwbGFjZSgvKFtccyxdfCNbXlxuXHJdKykrL2csIiAiKS50cmltKCksem49ZT0+e2lmKCFBcnJheS5pc0FycmF5KGUucXVlcnkpKXtjb25zdCBpPWUscj1bYHF1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEN0KGkucXVlcnkpKX1gXTtyZXR1cm4gZS52YXJpYWJsZXMmJnIucHVzaChgdmFyaWFibGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuanNvblNlcmlhbGl6ZXIuc3RyaW5naWZ5KGkudmFyaWFibGVzKSl9YCksaS5vcGVyYXRpb25OYW1lJiZyLnB1c2goYG9wZXJhdGlvbk5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoaS5vcGVyYXRpb25OYW1lKX1gKSxyLmpvaW4oIiYiKX1pZih0eXBlb2YgZS52YXJpYWJsZXMhPSJ1bmRlZmluZWQiJiYhQXJyYXkuaXNBcnJheShlLnZhcmlhYmxlcykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHF1ZXJ5IHdpdGggZ2l2ZW4gdmFyaWFibGUgdHlwZSwgYXJyYXkgZXhwZWN0ZWQiKTtjb25zdCB0PWUsbj1lLnF1ZXJ5LnJlZHVjZSgoaSxyLHMpPT4oaS5wdXNoKHtxdWVyeTpDdChyKSx2YXJpYWJsZXM6dC52YXJpYWJsZXM/dC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkodC52YXJpYWJsZXNbc10pOnZvaWQgMH0pLGkpLFtdKTtyZXR1cm5gcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQodC5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkobikpfWB9LEhuPWU9PnQ9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe3ZhciBOO2NvbnN0e3VybDpuLHF1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGZldGNoOm8sZmV0Y2hPcHRpb25zOmMsbWlkZGxld2FyZTpmfT10LGQ9RCh7fSx0LmhlYWRlcnMpO2xldCB1PSIiLHk7ZT09PSJQT1NUIj8oeT1KbihpLHIscyxjLmpzb25TZXJpYWxpemVyKSx0eXBlb2YgeT09InN0cmluZyImJihkWyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24vanNvbiIpKTp1PXpuKHtxdWVyeTppLHZhcmlhYmxlczpyLG9wZXJhdGlvbk5hbWU6cyxqc29uU2VyaWFsaXplcjooTj1jLmpzb25TZXJpYWxpemVyKSE9bnVsbD9OOlB9KTtjb25zdCB2PUQoe21ldGhvZDplLGhlYWRlcnM6ZCxib2R5Onl9LGMpO2xldCBiPW4sbT12O2lmKGYpe2NvbnN0IGc9eWllbGQgUHJvbWlzZS5yZXNvbHZlKGYoQmUoRCh7fSx2KSx7dXJsOm4sb3BlcmF0aW9uTmFtZTpzLHZhcmlhYmxlczpyfSkpKSx7dXJsOkN9PWcsdz12ZShnLFsidXJsIl0pO2I9QyxtPXd9cmV0dXJuIHUmJihiPWAke2J9PyR7dX1gKSx5aWVsZCBvKGIsbSl9KTtjbGFzcyBZbntjb25zdHJ1Y3Rvcih0LG49e30pe3RoaXMudXJsPXQsdGhpcy5yZXF1ZXN0Q29uZmlnPW4sdGhpcy5yYXdSZXF1ZXN0PSguLi5pKT0+USh0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3RbcixzLG9dPWksYz1VZShyLHMsbyksZz10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6ZixmZXRjaDpkPWtlLG1ldGhvZDp1PSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTp5LHJlc3BvbnNlTWlkZGxld2FyZTp2fT1nLGI9dmUoZyxbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6bX09dGhpcztjLnNpZ25hbCE9PXZvaWQgMCYmKGIuc2lnbmFsPWMuc2lnbmFsKTtjb25zdHtvcGVyYXRpb25OYW1lOk59PUplKGMucXVlcnkpO3JldHVybiBYZSh7dXJsOm0scXVlcnk6Yy5xdWVyeSx2YXJpYWJsZXM6Yy52YXJpYWJsZXMsaGVhZGVyczpEKEQoe30scGUoV2UoZikpKSxwZShjLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTpOLGZldGNoOmQsbWV0aG9kOnUsZmV0Y2hPcHRpb25zOmIsbWlkZGxld2FyZTp5fSkudGhlbihFPT4odiYmdihFKSxFKSkuY2F0Y2goRT0+e3Rocm93IHYmJnYoRSksRX0pfSl9cmVxdWVzdCh0LC4uLm4pe3JldHVybiBRKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtpLHJdPW4scz1JZSh0LGksciksTj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6byxmZXRjaDpjPWtlLG1ldGhvZDpmPSJQT1NUIixyZXF1ZXN0TWlkZGxld2FyZTpkLHJlc3BvbnNlTWlkZGxld2FyZTp1fT1OLHk9dmUoTixbImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsInJlcXVlc3RNaWRkbGV3YXJlIiwicmVzcG9uc2VNaWRkbGV3YXJlIl0pLHt1cmw6dn09dGhpcztzLnNpZ25hbCE9PXZvaWQgMCYmKHkuc2lnbmFsPXMuc2lnbmFsKTtjb25zdHtxdWVyeTpiLG9wZXJhdGlvbk5hbWU6bX09SmUocy5kb2N1bWVudCk7cmV0dXJuIFhlKHt1cmw6dixxdWVyeTpiLHZhcmlhYmxlczpzLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShXZShvKSkpLHBlKHMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOm0sZmV0Y2g6YyxtZXRob2Q6ZixmZXRjaE9wdGlvbnM6eSxtaWRkbGV3YXJlOmR9KS50aGVuKGc9Pih1JiZ1KGcpLGcuZGF0YSkpLmNhdGNoKGc9Pnt0aHJvdyB1JiZ1KGcpLGd9KX0pfWJhdGNoUmVxdWVzdHModCxuKXt2YXIgZDtjb25zdCBpPVZlKHQsbiksZj10aGlzLnJlcXVlc3RDb25maWcse2hlYWRlcnM6cn09ZixzPXZlKGYsWyJoZWFkZXJzIl0pO2kuc2lnbmFsIT09dm9pZCAwJiYocy5zaWduYWw9aS5zaWduYWwpO2NvbnN0IG89aS5kb2N1bWVudHMubWFwKCh7ZG9jdW1lbnQ6dX0pPT5KZSh1KS5xdWVyeSksYz1pLmRvY3VtZW50cy5tYXAoKHt2YXJpYWJsZXM6dX0pPT51KTtyZXR1cm4gWGUoe3VybDp0aGlzLnVybCxxdWVyeTpvLHZhcmlhYmxlczpjLGhlYWRlcnM6RChEKHt9LHBlKFdlKHIpKSkscGUoaS5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6dm9pZCAwLGZldGNoOihkPXRoaXMucmVxdWVzdENvbmZpZy5mZXRjaCkhPW51bGw/ZDprZSxtZXRob2Q6dGhpcy5yZXF1ZXN0Q29uZmlnLm1ldGhvZHx8IlBPU1QiLGZldGNoT3B0aW9uczpzLG1pZGRsZXdhcmU6dGhpcy5yZXF1ZXN0Q29uZmlnLnJlcXVlc3RNaWRkbGV3YXJlfSkudGhlbih1PT4odGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1LmRhdGEpKS5jYXRjaCh1PT57dGhyb3cgdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSYmdGhpcy5yZXF1ZXN0Q29uZmlnLnJlc3BvbnNlTWlkZGxld2FyZSh1KSx1fSl9c2V0SGVhZGVycyh0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q29uZmlnLmhlYWRlcnM9dCx0aGlzfXNldEhlYWRlcih0LG4pe2NvbnN0e2hlYWRlcnM6aX09dGhpcy5yZXF1ZXN0Q29uZmlnO3JldHVybiBpP2lbdF09bjp0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz17W3RdOm59LHRoaXN9c2V0RW5kcG9pbnQodCl7cmV0dXJuIHRoaXMudXJsPXQsdGhpc319Y29uc3QgWGU9ZT0+USh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIHUseTtjb25zdHtxdWVyeTp0LHZhcmlhYmxlczpuLGZldGNoT3B0aW9uczppfT1lLHI9SG4oTSgodT1lLm1ldGhvZCkhPW51bGw/dToicG9zdCIpKSxzPUFycmF5LmlzQXJyYXkoZS5xdWVyeSksbz15aWVsZCByKGUpLGM9eWllbGQgUW4obywoeT1pLmpzb25TZXJpYWxpemVyKSE9bnVsbD95OlApLGY9QXJyYXkuaXNBcnJheShjKT8hYy5zb21lKCh7ZGF0YTpifSk9PiFiKTohIWMuZGF0YSxkPUFycmF5LmlzQXJyYXkoYyl8fCFjLmVycm9yc3x8QXJyYXkuaXNBcnJheShjLmVycm9ycykmJiFjLmVycm9ycy5sZW5ndGh8fGkuZXJyb3JQb2xpY3k9PT0iYWxsInx8aS5lcnJvclBvbGljeT09PSJpZ25vcmUiO2lmKG8ub2smJmQmJmYpe2NvbnN0IHY9KEFycmF5LmlzQXJyYXkoYyksYykse2Vycm9yczpifT12LG09dmUodixbImVycm9ycyJdKSxOPWkuZXJyb3JQb2xpY3k9PT0iaWdub3JlIj9tOmM7cmV0dXJuIEJlKEQoe30scz97ZGF0YTpOfTpOKSx7aGVhZGVyczpvLmhlYWRlcnMsc3RhdHVzOm8uc3RhdHVzfSl9ZWxzZXtjb25zdCBiPXR5cGVvZiBjPT0ic3RyaW5nIj97ZXJyb3I6Y306Yzt0aHJvdyBuZXcgZGUoQmUoRCh7fSxiKSx7c3RhdHVzOm8uc3RhdHVzLGhlYWRlcnM6by5oZWFkZXJzfSkse3F1ZXJ5OnQsdmFyaWFibGVzOm59KX19KSxKbj0oZSx0LG4saSk9Pntjb25zdCByPWkhPW51bGw/aTpQO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiByLnN0cmluZ2lmeSh7cXVlcnk6ZSx2YXJpYWJsZXM6dCxvcGVyYXRpb25OYW1lOm59KTtpZih0eXBlb2YgdCE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSByZXF1ZXN0IGJvZHkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHM9ZS5yZWR1Y2UoKG8sYyxmKT0+KG8ucHVzaCh7cXVlcnk6Yyx2YXJpYWJsZXM6dD90W2ZdOnZvaWQgMH0pLG8pLFtdKTtyZXR1cm4gci5zdHJpbmdpZnkocyl9LFFuPShlLHQpPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgbjtyZXR1cm4gZS5oZWFkZXJzLmZvckVhY2goKGkscik9PntyLnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIiYmKG49aSl9KSxuJiYobi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKXx8bi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2dyYXBocWwranNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbC1yZXNwb25zZStqc29uIikpP3QucGFyc2UoeWllbGQgZS50ZXh0KCkpOmUudGV4dCgpfSksV2U9ZT0+dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSgpOmU7dmFyIFplPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXt0PWUuZXhwb3J0cz1uLHQuZ2V0U2VyaWFsaXplPWk7ZnVuY3Rpb24gbihyLHMsbyxjKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixpKHMsYyksbyl9ZnVuY3Rpb24gaShyLHMpe3ZhciBvPVtdLGM9W107cmV0dXJuIHM9PW51bGwmJihzPWZ1bmN0aW9uKGYsZCl7cmV0dXJuIG9bMF09PT1kPyJbQ2lyY3VsYXIgfl0iOiJbQ2lyY3VsYXIgfi4iK2Muc2xpY2UoMCxvLmluZGV4T2YoZCkpLmpvaW4oIi4iKSsiXSJ9KSxmdW5jdGlvbihmLGQpe2lmKG8ubGVuZ3RoPjApe3ZhciB1PW8uaW5kZXhPZih0aGlzKTt+dT9vLnNwbGljZSh1KzEpOm8ucHVzaCh0aGlzKSx+dT9jLnNwbGljZSh1LDEvMCxmKTpjLnB1c2goZiksfm8uaW5kZXhPZihkKSYmKGQ9cy5jYWxsKHRoaXMsZixkKSl9ZWxzZSBvLnB1c2goZCk7cmV0dXJuIHI9PW51bGw/ZDpyLmNhbGwodGhpcyxmLGQpfX19KShaZSxaZS5leHBvcnRzKTt2YXIgWG49WmUuZXhwb3J0cyxtZT1EdChYbik7Y29uc3Qga3Q9MWUzKjE1O3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBSZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0xLHI9YXJndW1lbnRzLmxlbmd0aDtpPHI7aSsrKXtuPWFyZ3VtZW50c1tpXTtmb3IodmFyIHMgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixzKSYmKHRbc109bltzXSl9cmV0dXJuIHR9LFJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dHlwZW9mIFN1cHByZXNzZWRFcnJvcj09ImZ1bmN0aW9uIiYmU3VwcHJlc3NlZEVycm9yO3ZhciBQZT1uZXcgTWFwLEtlPW5ldyBNYXAsUnQ9ITAsTGU9ITE7ZnVuY3Rpb24gUHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xzLF0rL2csIiAiKS50cmltKCl9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIFB0KGUuc291cmNlLmJvZHkuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpKX1mdW5jdGlvbiBabihlKXt2YXIgdD1uZXcgU2V0LG49W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLmtpbmQ9PT0iRnJhZ21lbnREZWZpbml0aW9uIil7dmFyIHI9aS5uYW1lLnZhbHVlLHM9V24oaS5sb2MpLG89S2UuZ2V0KHIpO28mJiFvLmhhcyhzKT9SdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBmcmFnbWVudCB3aXRoIG5hbWUgIityK2AgYWxyZWFkeSBleGlzdHMuCmdyYXBocWwtdGFnIGVuZm9yY2VzIGFsbCBmcmFnbWVudCBuYW1lcyBhY3Jvc3MgeW91ciBhcHBsaWNhdGlvbiB0byBiZSB1bmlxdWU7IHJlYWQgbW9yZSBhYm91dAp0aGlzIGluIHRoZSBkb2NzOiBodHRwOi8vZGV2LmFwb2xsb2RhdGEuY29tL2NvcmUvZnJhZ21lbnRzLmh0bWwjdW5pcXVlLW5hbWVzYCk6b3x8S2Uuc2V0KHIsbz1uZXcgU2V0KSxvLmFkZChzKSx0LmhhcyhzKXx8KHQuYWRkKHMpLG4ucHVzaChpKSl9ZWxzZSBuLnB1c2goaSl9KSxSZShSZSh7fSxlKSx7ZGVmaW5pdGlvbnM6bn0pfWZ1bmN0aW9uIEtuKGUpe3ZhciB0PW5ldyBTZXQoZS5kZWZpbml0aW9ucyk7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubG9jJiZkZWxldGUgaS5sb2MsT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgcz1pW3JdO3MmJnR5cGVvZiBzPT0ib2JqZWN0IiYmdC5hZGQocyl9KX0pO3ZhciBuPWUubG9jO3JldHVybiBuJiYoZGVsZXRlIG4uc3RhcnRUb2tlbixkZWxldGUgbi5lbmRUb2tlbiksZX1mdW5jdGlvbiBlcihlKXt2YXIgdD1QdChlKTtpZighUGUuaGFzKHQpKXt2YXIgbj1JdChlLHtleHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpMZSxhbGxvd0xlZ2FjeUZyYWdtZW50VmFyaWFibGVzOkxlfSk7aWYoIW58fG4ua2luZCE9PSJEb2N1bWVudCIpdGhyb3cgbmV3IEVycm9yKCJOb3QgYSB2YWxpZCBHcmFwaFFMIGRvY3VtZW50LiIpO1BlLnNldCh0LEtuKFpuKG4pKSl9cmV0dXJuIFBlLmdldCh0KX1mdW5jdGlvbiBKKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9W2VdKTt2YXIgaT1lWzBdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocixzKXtyJiZyLmtpbmQ9PT0iRG9jdW1lbnQiP2krPXIubG9jLnNvdXJjZS5ib2R5OmkrPXIsaSs9ZVtzKzFdfSksZXIoaSl9ZnVuY3Rpb24gdHIoKXtQZS5jbGVhcigpLEtlLmNsZWFyKCl9ZnVuY3Rpb24gbnIoKXtSdD0hMX1mdW5jdGlvbiBycigpe0xlPSEwfWZ1bmN0aW9uIGlyKCl7TGU9ITF9dmFyIGJlPXtncWw6SixyZXNldENhY2hlczp0cixkaXNhYmxlRnJhZ21lbnRXYXJuaW5nczpucixlbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpycixkaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM6aXJ9OyhmdW5jdGlvbihlKXtlLmdxbD1iZS5ncWwsZS5yZXNldENhY2hlcz1iZS5yZXNldENhY2hlcyxlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzPWJlLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzLGUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9YmUuZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXMsZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9YmUuZGlzYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzfSkoSnx8KEo9e30pKSxKLmRlZmF1bHQ9Sjtjb25zdCBMdD1KYAoJZnJhZ21lbnQgTWF0Y2hQYXJ0cyBvbiBNYXRjaENvbmZpZyB7CgkJcmVnZXhWYWx1ZQoJCW1hdGNoVmFsdWUKCX0KYCxzcj1KYAoJbXV0YXRpb24gUHVzaFBheWxvYWQoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IElEIQoJCSRldmVudHM6IFJlcGxheUV2ZW50c0lucHV0IQoJCSRtZXNzYWdlczogU3RyaW5nIQoJCSRyZXNvdXJjZXM6IFN0cmluZyEKCQkkd2ViX3NvY2tldF9ldmVudHM6IFN0cmluZyEKCQkkZXJyb3JzOiBbRXJyb3JPYmplY3RJbnB1dF0hCgkJJGlzX2JlYWNvbjogQm9vbGVhbgoJCSRoYXNfc2Vzc2lvbl91bmxvYWRlZDogQm9vbGVhbgoJCSRoaWdobGlnaHRfbG9nczogU3RyaW5nCgkpIHsKCQlwdXNoUGF5bG9hZCgKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwYXlsb2FkX2lkOiAkcGF5bG9hZF9pZAoJCQlldmVudHM6ICRldmVudHMKCQkJbWVzc2FnZXM6ICRtZXNzYWdlcwoJCQlyZXNvdXJjZXM6ICRyZXNvdXJjZXMKCQkJd2ViX3NvY2tldF9ldmVudHM6ICR3ZWJfc29ja2V0X2V2ZW50cwoJCQllcnJvcnM6ICRlcnJvcnMKCQkJaXNfYmVhY29uOiAkaXNfYmVhY29uCgkJCWhhc19zZXNzaW9uX3VubG9hZGVkOiAkaGFzX3Nlc3Npb25fdW5sb2FkZWQKCQkJaGlnaGxpZ2h0X2xvZ3M6ICRoaWdobGlnaHRfbG9ncwoJCSkKCX0KYCxvcj1KYAoJbXV0YXRpb24gUHVzaFNlc3Npb25FdmVudHMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHBheWxvYWRfaWQ6IEludDY0SUQhCgkJJGRhdGE6IFN0cmluZyEKCSkgewoJCXB1c2hTZXNzaW9uRXZlbnRzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWRhdGE6ICRkYXRhCgkJKQoJfQpgLGFyPUpgCgltdXRhdGlvbiBpZGVudGlmeVNlc3Npb24oCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfaWRlbnRpZmllcjogU3RyaW5nIQoJCSR1c2VyX29iamVjdDogQW55CgkpIHsKCQlpZGVudGlmeVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9pZGVudGlmaWVyOiAkdXNlcl9pZGVudGlmaWVyCgkJCXVzZXJfb2JqZWN0OiAkdXNlcl9vYmplY3QKCQkpCgl9CmAsY3I9SmAKCW11dGF0aW9uIGFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRwcm9wZXJ0aWVzX29iamVjdDogQW55CgkpIHsKCQlhZGRTZXNzaW9uUHJvcGVydGllcygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlwcm9wZXJ0aWVzX29iamVjdDogJHByb3BlcnRpZXNfb2JqZWN0CgkJKQoJfQpgLHVyPUpgCgltdXRhdGlvbiBwdXNoTWV0cmljcygkbWV0cmljczogW01ldHJpY0lucHV0XSEpIHsKCQlwdXNoTWV0cmljcyhtZXRyaWNzOiAkbWV0cmljcykKCX0KYCxscj1KYAoJbXV0YXRpb24gYWRkU2Vzc2lvbkZlZWRiYWNrKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSR1c2VyX25hbWU6IFN0cmluZwoJCSR1c2VyX2VtYWlsOiBTdHJpbmcKCQkkdmVyYmF0aW06IFN0cmluZyEKCQkkdGltZXN0YW1wOiBUaW1lc3RhbXAhCgkpIHsKCQlhZGRTZXNzaW9uRmVlZGJhY2soCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJdXNlcl9uYW1lOiAkdXNlcl9uYW1lCgkJCXVzZXJfZW1haWw6ICR1c2VyX2VtYWlsCgkJCXZlcmJhdGltOiAkdmVyYmF0aW0KCQkJdGltZXN0YW1wOiAkdGltZXN0YW1wCgkJKQoJfQpgLGZyPUpgCgltdXRhdGlvbiBpbml0aWFsaXplU2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkc2Vzc2lvbl9rZXk6IFN0cmluZwoJCSRvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogU3RyaW5nIQoJCSRlbmFibGVfc3RyaWN0X3ByaXZhY3k6IEJvb2xlYW4hCgkJJHByaXZhY3lfc2V0dGluZzogU3RyaW5nIQoJCSRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6IEJvb2xlYW4hCgkJJGNsaWVudFZlcnNpb246IFN0cmluZyEKCQkkZmlyc3Rsb2FkVmVyc2lvbjogU3RyaW5nIQoJCSRjbGllbnRDb25maWc6IFN0cmluZyEKCQkkZW52aXJvbm1lbnQ6IFN0cmluZyEKCQkkaWQ6IFN0cmluZyEKCQkkYXBwVmVyc2lvbjogU3RyaW5nCgkJJHNlcnZpY2VOYW1lOiBTdHJpbmchCgkJJGNsaWVudF9pZDogU3RyaW5nIQoJCSRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiBbU3RyaW5nIV0KCQkkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZzogQm9vbGVhbgoJKSB7CgkJaW5pdGlhbGl6ZVNlc3Npb24oCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJc2Vzc2lvbl9rZXk6ICRzZXNzaW9uX2tleQoJCQlvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkCgkJCWVuYWJsZV9zdHJpY3RfcHJpdmFjeTogJGVuYWJsZV9zdHJpY3RfcHJpdmFjeQoJCQllbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHM6ICRlbmFibGVfcmVjb3JkaW5nX25ldHdvcmtfY29udGVudHMKCQkJY2xpZW50VmVyc2lvbjogJGNsaWVudFZlcnNpb24KCQkJZmlyc3Rsb2FkVmVyc2lvbjogJGZpcnN0bG9hZFZlcnNpb24KCQkJY2xpZW50Q29uZmlnOiAkY2xpZW50Q29uZmlnCgkJCWVudmlyb25tZW50OiAkZW52aXJvbm1lbnQKCQkJYXBwVmVyc2lvbjogJGFwcFZlcnNpb24KCQkJc2VydmljZU5hbWU6ICRzZXJ2aWNlTmFtZQoJCQlmaW5nZXJwcmludDogJGlkCgkJCWNsaWVudF9pZDogJGNsaWVudF9pZAoJCQluZXR3b3JrX3JlY29yZGluZ19kb21haW5zOiAkbmV0d29ya19yZWNvcmRpbmdfZG9tYWlucwoJCQlkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiAkZGlzYWJsZV9zZXNzaW9uX3JlY29yZGluZwoJCQlwcml2YWN5X3NldHRpbmc6ICRwcml2YWN5X3NldHRpbmcKCQkpIHsKCQkJc2VjdXJlX2lkCgkJCXByb2plY3RfaWQKCQkJc2FtcGxpbmcgewoJCQkJc3BhbnMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQkJZXZlbnRzIHsKCQkJCQkJbmFtZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCQlrZXkgewoJCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJCX0KCQkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJCWxvZ3MgewoJCQkJCW1lc3NhZ2UgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlzYW1wbGluZ1JhdGlvCgkJCQl9CgkJCX0KCQl9Cgl9Cgkke0x0fQpgLGhyPUpgCglxdWVyeSBJZ25vcmUoJGlkOiBJRCEpIHsKCQlpZ25vcmUoaWQ6ICRpZCkKCX0KYCxkcj1KYAoJcXVlcnkgR2V0U2FtcGxpbmdDb25maWcoJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchKSB7CgkJc2FtcGxpbmcob3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6ICRvcmdhbml6YXRpb25fdmVyYm9zZV9pZCkgewoJCQlzcGFucyB7CgkJCQluYW1lIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlhdHRyaWJ1dGVzIHsKCQkJCQlrZXkgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQl9CgkJCQlldmVudHMgewoJCQkJCW5hbWUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJCWF0dHJpYnV0ZXMgewoJCQkJCQlrZXkgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJCWF0dHJpYnV0ZSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlzYW1wbGluZ1JhdGlvCgkJCX0KCQkJbG9ncyB7CgkJCQltZXNzYWdlIHsKCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQl9CgkJCQlzZXZlcml0eVRleHQgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCX0KCX0KCSR7THR9CmAscHI9KGUsdCxuLGkpPT5lKCk7ZnVuY3Rpb24gbXIoZSx0PXByKXtyZXR1cm57UHVzaFBheWxvYWQobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3Qoc3IsbixEKEQoe30saSkscikpLCJQdXNoUGF5bG9hZCIsIm11dGF0aW9uIixuKX0sUHVzaFNlc3Npb25FdmVudHMobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3Qob3IsbixEKEQoe30saSkscikpLCJQdXNoU2Vzc2lvbkV2ZW50cyIsIm11dGF0aW9uIixuKX0saWRlbnRpZnlTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGFyLG4sRChEKHt9LGkpLHIpKSwiaWRlbnRpZnlTZXNzaW9uIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uUHJvcGVydGllcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChjcixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25Qcm9wZXJ0aWVzIiwibXV0YXRpb24iLG4pfSxwdXNoTWV0cmljcyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdCh1cixuLEQoRCh7fSxpKSxyKSksInB1c2hNZXRyaWNzIiwibXV0YXRpb24iLG4pfSxhZGRTZXNzaW9uRmVlZGJhY2sobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QobHIsbixEKEQoe30saSkscikpLCJhZGRTZXNzaW9uRmVlZGJhY2siLCJtdXRhdGlvbiIsbil9LGluaXRpYWxpemVTZXNzaW9uKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGZyLG4sRChEKHt9LGkpLHIpKSwiaW5pdGlhbGl6ZVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LElnbm9yZShuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChocixuLEQoRCh7fSxpKSxyKSksIklnbm9yZSIsInF1ZXJ5IixuKX0sR2V0U2FtcGxpbmdDb25maWcobixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZHIsbixEKEQoe30saSkscikpLCJHZXRTYW1wbGluZ0NvbmZpZyIsInF1ZXJ5IixuKX19fXZhciBXPVVpbnQ4QXJyYXksWj1VaW50MTZBcnJheSxldD1JbnQzMkFycmF5LHR0PW5ldyBXKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxudD1uZXcgVyhbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxGdD1uZXcgVyhbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLE10PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBaKDMxKSxpPTA7aTwzMTsrK2kpbltpXT10Kz0xPDxlW2ktMV07Zm9yKHZhciByPW5ldyBldChuWzMwXSksaT0xO2k8MzA7KytpKWZvcih2YXIgcz1uW2ldO3M8bltpKzFdOysrcylyW3NdPXMtbltpXTw8NXxpO3JldHVybntiOm4scn19LCR0PU10KHR0LDIpLHlyPSR0LmIscnQ9JHQucjt5clsyOF09MjU4LHJ0WzI1OF09Mjg7Zm9yKHZhciBncj1NdChudCwwKSxCdD1nci5yLGl0PW5ldyBaKDMyNzY4KSxMPTA7TDwzMjc2ODsrK0wpe3ZhciBhZT0oTCY0MzY5MCk+PjF8KEwmMjE4NDUpPDwxO2FlPShhZSY1MjQyOCk+PjJ8KGFlJjEzMTA3KTw8MixhZT0oYWUmNjE2ODApPj40fChhZSYzODU1KTw8NCxpdFtMXT0oKGFlJjY1MjgwKT4+OHwoYWUmMjU1KTw8OCk+PjF9Zm9yKHZhciBOZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxzPW5ldyBaKHQpO3I8aTsrK3IpZVtyXSYmKytzW2Vbcl0tMV07dmFyIG89bmV3IFoodCk7Zm9yKHI9MTtyPHQ7KytyKW9bcl09b1tyLTFdK3Nbci0xXTw8MTt2YXIgYztpZihuKXtjPW5ldyBaKDE8PHQpO3ZhciBmPTE1LXQ7Zm9yKHI9MDtyPGk7KytyKWlmKGVbcl0pZm9yKHZhciBkPXI8PDR8ZVtyXSx1PXQtZVtyXSx5PW9bZVtyXS0xXSsrPDx1LHY9eXwoMTw8dSktMTt5PD12OysreSljW2l0W3ldPj5mXT1kfWVsc2UgZm9yKGM9bmV3IFooaSkscj0wO3I8aTsrK3IpZVtyXSYmKGNbcl09aXRbb1tlW3JdLTFdKytdPj4xNS1lW3JdKTtyZXR1cm4gY30sbGU9bmV3IFcoMjg4KSxMPTA7TDwxNDQ7KytMKWxlW0xdPTg7Zm9yKHZhciBMPTE0NDtMPDI1NjsrK0wpbGVbTF09OTtmb3IodmFyIEw9MjU2O0w8MjgwOysrTClsZVtMXT03O2Zvcih2YXIgTD0yODA7TDwyODg7KytMKWxlW0xdPTg7Zm9yKHZhciBGZT1uZXcgVygzMiksTD0wO0w8MzI7KytMKUZlW0xdPTU7dmFyIHZyPU5lKGxlLDksMCksRXI9TmUoRmUsNSwwKSxVdD1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LFZ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgVyhlLnN1YmFycmF5KHQsbikpfSxpZT1mdW5jdGlvbihlLHQsbil7bjw8PXQmNzt2YXIgaT10Lzh8MDtlW2ldfD1uLGVbaSsxXXw9bj4+OH0seGU9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIGk9dC84fDA7ZVtpXXw9bixlW2krMV18PW4+PjgsZVtpKzJdfD1uPj4xNn0sc3Q9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7KytpKWVbaV0mJm4ucHVzaCh7czppLGY6ZVtpXX0pO3ZhciByPW4ubGVuZ3RoLHM9bi5zbGljZSgpO2lmKCFyKXJldHVybnt0Onp0LGw6MH07aWYocj09MSl7dmFyIG89bmV3IFcoblswXS5zKzEpO3JldHVybiBvW25bMF0uc109MSx7dDpvLGw6MX19bi5zb3J0KGZ1bmN0aW9uKCQscSl7cmV0dXJuICQuZi1xLmZ9KSxuLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBjPW5bMF0sZj1uWzFdLGQ9MCx1PTEseT0yO2ZvcihuWzBdPXtzOi0xLGY6Yy5mK2YuZixsOmMscjpmfTt1IT1yLTE7KWM9bltuW2RdLmY8blt5XS5mP2QrKzp5KytdLGY9bltkIT11JiZuW2RdLmY8blt5XS5mP2QrKzp5KytdLG5bdSsrXT17czotMSxmOmMuZitmLmYsbDpjLHI6Zn07Zm9yKHZhciB2PXNbMF0ucyxpPTE7aTxyOysraSlzW2ldLnM+diYmKHY9c1tpXS5zKTt2YXIgYj1uZXcgWih2KzEpLG09b3Qoblt1LTFdLGIsMCk7aWYobT50KXt2YXIgaT0wLE49MCxnPW0tdCxFPTE8PGc7Zm9yKHMuc29ydChmdW5jdGlvbihxLEIpe3JldHVybiBiW0Iuc10tYltxLnNdfHxxLmYtQi5mfSk7aTxyOysraSl7dmFyIEM9c1tpXS5zO2lmKGJbQ10+dClOKz1FLSgxPDxtLWJbQ10pLGJbQ109dDtlbHNlIGJyZWFrfWZvcihOPj49ZztOPjA7KXt2YXIgdz1zW2ldLnM7Ylt3XTx0P04tPTE8PHQtYlt3XSsrLTE6KytpfWZvcig7aT49MCYmTjstLWkpe3ZhciBSPXNbaV0ucztiW1JdPT10JiYoLS1iW1JdLCsrTil9bT10fXJldHVybnt0Om5ldyBXKGIpLGw6bX19LG90PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5zPT0tMT9NYXRoLm1heChvdChlLmwsdCxuKzEpLG90KGUucix0LG4rMSkpOnRbZS5zXT1ufSxqdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dCYmIWVbLS10XTspO2Zvcih2YXIgbj1uZXcgWigrK3QpLGk9MCxyPWVbMF0scz0xLG89ZnVuY3Rpb24oZil7bltpKytdPWZ9LGM9MTtjPD10OysrYylpZihlW2NdPT1yJiZjIT10KSsrcztlbHNle2lmKCFyJiZzPjIpe2Zvcig7cz4xMzg7cy09MTM4KW8oMzI3NTQpO3M+MiYmKG8ocz4xMD9zLTExPDw1fDI4NjkwOnMtMzw8NXwxMjMwNSkscz0wKX1lbHNlIGlmKHM+Myl7Zm9yKG8ociksLS1zO3M+NjtzLT02KW8oODMwNCk7cz4yJiYobyhzLTM8PDV8ODIwOCkscz0wKX1mb3IoO3MtLTspbyhyKTtzPTEscj1lW2NdfXJldHVybntjOm4uc3ViYXJyYXkoMCxpKSxuOnR9fSxBZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSluKz1lW2ldKnRbaV07cmV0dXJuIG59LHF0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uLmxlbmd0aCxyPVV0KHQrMik7ZVtyXT1pJjI1NSxlW3IrMV09aT4+OCxlW3IrMl09ZVtyXV4yNTUsZVtyKzNdPWVbcisxXV4yNTU7Zm9yKHZhciBzPTA7czxpOysrcyllW3Ircys0XT1uW3NdO3JldHVybihyKzQraSkqOH0sR3Q9ZnVuY3Rpb24oZSx0LG4saSxyLHMsbyxjLGYsZCx1KXtpZSh0LHUrKyxuKSwrK3JbMjU2XTtmb3IodmFyIHk9c3QociwxNSksdj15LnQsYj15LmwsbT1zdChzLDE1KSxOPW0udCxnPW0ubCxFPWp0KHYpLEM9RS5jLHc9RS5uLFI9anQoTiksJD1SLmMscT1SLm4sQj1uZXcgWigxOSksST0wO0k8Qy5sZW5ndGg7KytJKSsrQltDW0ldJjMxXTtmb3IodmFyIEk9MDtJPCQubGVuZ3RoOysrSSkrK0JbJFtJXSYzMV07Zm9yKHZhciBTPXN0KEIsNyksaj1TLnQsVT1TLmwsej0xOTt6PjQmJiFqW0Z0W3otMV1dOy0teik7dmFyIEs9ZCs1PDwzLGE9QWUocixsZSkrQWUocyxGZSkrbyxoPUFlKHIsdikrQWUocyxOKStvKzE0KzMqeitBZShCLGopKzIqQlsxNl0rMypCWzE3XSs3KkJbMThdO2lmKGY+PTAmJks8PWEmJks8PWgpcmV0dXJuIHF0KHQsdSxlLnN1YmFycmF5KGYsZitkKSk7dmFyIF8sQSxrLHg7aWYoaWUodCx1LDErKGg8YSkpLHUrPTIsaDxhKXtfPU5lKHYsYiwwKSxBPXYsaz1OZShOLGcsMCkseD1OO3ZhciBjZT1OZShqLFUsMCk7aWUodCx1LHctMjU3KSxpZSh0LHUrNSxxLTEpLGllKHQsdSsxMCx6LTQpLHUrPTE0O2Zvcih2YXIgST0wO0k8ejsrK0kpaWUodCx1KzMqSSxqW0Z0W0ldXSk7dSs9Myp6O2Zvcih2YXIgSD1bQywkXSxzZT0wO3NlPDI7KytzZSlmb3IodmFyIHllPUhbc2VdLEk9MDtJPHllLmxlbmd0aDsrK0kpe3ZhciBuZT15ZVtJXSYzMTtpZSh0LHUsY2VbbmVdKSx1Kz1qW25lXSxuZT4xNSYmKGllKHQsdSx5ZVtJXT4+NSYxMjcpLHUrPXllW0ldPj4xMil9fWVsc2UgXz12cixBPWxlLGs9RXIseD1GZTtmb3IodmFyIEk9MDtJPGM7KytJKXt2YXIgWT1pW0ldO2lmKFk+MjU1KXt2YXIgbmU9WT4+MTgmMzE7eGUodCx1LF9bbmUrMjU3XSksdSs9QVtuZSsyNTddLG5lPjcmJihpZSh0LHUsWT4+MjMmMzEpLHUrPXR0W25lXSk7dmFyIGdlPVkmMzE7eGUodCx1LGtbZ2VdKSx1Kz14W2dlXSxnZT4zJiYoeGUodCx1LFk+PjUmODE5MSksdSs9bnRbZ2VdKX1lbHNlIHhlKHQsdSxfW1ldKSx1Kz1BW1ldfXJldHVybiB4ZSh0LHUsX1syNTZdKSx1K0FbMjU2XX0sX3I9bmV3IGV0KFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLHp0PW5ldyBXKDApLFRyPWZ1bmN0aW9uKGUsdCxuLGkscixzKXt2YXIgbz1zLnp8fGUubGVuZ3RoLGM9bmV3IFcoaStvKzUqKDErTWF0aC5jZWlsKG8vN2UzKSkrciksZj1jLnN1YmFycmF5KGksYy5sZW5ndGgtciksZD1zLmwsdT0ocy5yfHwwKSY3O2lmKHQpe3UmJihmWzBdPXMucj4+Myk7Zm9yKHZhciB5PV9yW3QtMV0sdj15Pj4xMyxiPXkmODE5MSxtPSgxPDxuKS0xLE49cy5wfHxuZXcgWigzMjc2OCksZz1zLmh8fG5ldyBaKG0rMSksRT1NYXRoLmNlaWwobi8zKSxDPTIqRSx3PWZ1bmN0aW9uKGx0KXtyZXR1cm4oZVtsdF1eZVtsdCsxXTw8RV5lW2x0KzJdPDxDKSZtfSxSPW5ldyBldCgyNWUzKSwkPW5ldyBaKDI4OCkscT1uZXcgWigzMiksQj0wLEk9MCxTPXMuaXx8MCxqPTAsVT1zLnd8fDAsej0wO1MrMjxvOysrUyl7dmFyIEs9dyhTKSxhPVMmMzI3NjcsaD1nW0tdO2lmKE5bYV09aCxnW0tdPWEsVTw9Uyl7dmFyIF89by1TO2lmKChCPjdlM3x8aj4yNDU3NikmJihfPjQyM3x8IWQpKXt1PUd0KGUsZiwwLFIsJCxxLEksaix6LFMteix1KSxqPUI9ST0wLHo9Uztmb3IodmFyIEE9MDtBPDI4NjsrK0EpJFtBXT0wO2Zvcih2YXIgQT0wO0E8MzA7KytBKXFbQV09MH12YXIgaz0yLHg9MCxjZT1iLEg9YS1oJjMyNzY3O2lmKF8+MiYmSz09dyhTLUgpKWZvcih2YXIgc2U9TWF0aC5taW4odixfKS0xLHllPU1hdGgubWluKDMyNzY3LFMpLG5lPU1hdGgubWluKDI1OCxfKTtIPD15ZSYmLS1jZSYmYSE9aDspe2lmKGVbUytrXT09ZVtTK2stSF0pe2Zvcih2YXIgWT0wO1k8bmUmJmVbUytZXT09ZVtTK1ktSF07KytZKTtpZihZPmspe2lmKGs9WSx4PUgsWT5zZSlicmVhaztmb3IodmFyIGdlPU1hdGgubWluKEgsWS0yKSxXdD0wLEE9MDtBPGdlOysrQSl7dmFyIGN0PVMtSCtBJjMyNzY3LFVyPU5bY3RdLFp0PWN0LVVyJjMyNzY3O1p0Pld0JiYoV3Q9WnQsaD1jdCl9fX1hPWgsaD1OW2FdLEgrPWEtaCYzMjc2N31pZih4KXtSW2orK109MjY4NDM1NDU2fHJ0W2tdPDwxOHxCdFt4XTt2YXIgS3Q9cnRba10mMzEsZW49QnRbeF0mMzE7SSs9dHRbS3RdK250W2VuXSwrKyRbMjU3K0t0XSwrK3FbZW5dLFU9UytrLCsrQn1lbHNlIFJbaisrXT1lW1NdLCsrJFtlW1NdXX19Zm9yKFM9TWF0aC5tYXgoUyxVKTtTPG87KytTKVJbaisrXT1lW1NdLCsrJFtlW1NdXTt1PUd0KGUsZixkLFIsJCxxLEksaix6LFMteix1KSxkfHwocy5yPXUmN3xmW3UvOHwwXTw8Myx1LT03LHMuaD1nLHMucD1OLHMuaT1TLHMudz1VKX1lbHNle2Zvcih2YXIgUz1zLnd8fDA7UzxvK2Q7Uys9NjU1MzUpe3ZhciB1dD1TKzY1NTM1O3V0Pj1vJiYoZlt1Lzh8MF09ZCx1dD1vKSx1PXF0KGYsdSsxLGUuc3ViYXJyYXkoUyx1dCkpfXMuaT1vfXJldHVybiBWdChjLDAsaStVdCh1KStyKX0sYnI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEludDMyQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KXtmb3IodmFyIG49dCxpPTk7LS1pOyluPShuJjEmJi0zMDY2NzQ5MTIpXm4+Pj4xO2VbdF09bn1yZXR1cm4gZX0oKSxOcj1mdW5jdGlvbigpe3ZhciBlPS0xO3JldHVybntwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLGk9MDtpPHQubGVuZ3RoOysraSluPWJyW24mMjU1XnRbaV1dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LHhyPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIXImJihyPXtsOjF9LHQuZGljdGlvbmFyeSkpe3ZhciBzPXQuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpLG89bmV3IFcocy5sZW5ndGgrZS5sZW5ndGgpO28uc2V0KHMpLG8uc2V0KGUscy5sZW5ndGgpLGU9byxyLnc9cy5sZW5ndGh9cmV0dXJuIFRyKGUsdC5sZXZlbD09bnVsbD82OnQubGV2ZWwsdC5tZW09PW51bGw/ci5sP01hdGguY2VpbChNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKGUubGVuZ3RoKSkpKjEuNSk6MjA6MTIrdC5tZW0sbixpLHIpfSxhdD1mdW5jdGlvbihlLHQsbil7Zm9yKDtuOysrdCllW3RdPW4sbj4+Pj04fSxBcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsZW5hbWU7aWYoZVswXT0zMSxlWzFdPTEzOSxlWzJdPTgsZVs4XT10LmxldmVsPDI/NDp0LmxldmVsPT05PzI6MCxlWzldPTMsdC5tdGltZSE9MCYmYXQoZSw0LE1hdGguZmxvb3IobmV3IERhdGUodC5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSksbil7ZVszXT04O2Zvcih2YXIgaT0wO2k8PW4ubGVuZ3RoOysraSllW2krMTBdPW4uY2hhckNvZGVBdChpKX19LElyPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZT9lLmZpbGVuYW1lLmxlbmd0aCsxOjApfTtmdW5jdGlvbiBTcihlLHQpe3R8fCh0PXt9KTt2YXIgbj1OcigpLGk9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPXhyKGUsdCxJcih0KSw4KSxzPXIubGVuZ3RoO3JldHVybiBBcihyLHQpLGF0KHIscy04LG4uZCgpKSxhdChyLHMtNCxpKSxyfXZhciBIdD10eXBlb2YgVGV4dEVuY29kZXIhPSJ1bmRlZmluZWQiJiZuZXcgVGV4dEVuY29kZXIsT3I9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHREZWNvZGVyLHdyPTA7dHJ5e09yLmRlY29kZSh6dCx7c3RyZWFtOiEwfSksd3I9MX1jYXRjaChlKXt9ZnVuY3Rpb24gRHIoZSx0KXt2YXIgbjtpZihIdClyZXR1cm4gSHQuZW5jb2RlKGUpO2Zvcih2YXIgaT1lLmxlbmd0aCxyPW5ldyBXKGUubGVuZ3RoKyhlLmxlbmd0aD4+MSkpLHM9MCxvPWZ1bmN0aW9uKGQpe3JbcysrXT1kfSxuPTA7bjxpOysrbil7aWYocys1PnIubGVuZ3RoKXt2YXIgYz1uZXcgVyhzKzgrKGktbjw8MSkpO2Muc2V0KHIpLHI9Y312YXIgZj1lLmNoYXJDb2RlQXQobik7ZjwxMjh8fHQ/byhmKTpmPDIwNDg/KG8oMTkyfGY+PjYpLG8oMTI4fGYmNjMpKTpmPjU1Mjk1JiZmPDU3MzQ0PyhmPTY1NTM2KyhmJjEwNDc1NTIpfGUuY2hhckNvZGVBdCgrK24pJjEwMjMsbygyNDB8Zj4+MTgpLG8oMTI4fGY+PjEyJjYzKSxvKDEyOHxmPj42JjYzKSxvKDEyOHxmJjYzKSk6KG8oMjI0fGY+PjEyKSxvKDEyOHxmPj42JjYzKSxvKDEyOHxmJjYzKSl9cmV0dXJuIFZ0KHIsMCxzKX1mdW5jdGlvbiBDcihlKXtyZXR1cm4gUSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7Y29uc3QgdD1EcihKU09OLnN0cmluZ2lmeShlKSksbj1Tcih0KSxpPXlpZWxkIG5ldyBQcm9taXNlKHI9Pntjb25zdCBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPSgpPT5yKHMucmVzdWx0KSxzLnJlYWRBc0RhdGFVUkwobmV3IEJsb2IoW25ldyBVaW50OEFycmF5KG4pXSkpfSk7cmV0dXJue2NvbXByZXNzZWRCYXNlNjQ6aS5zbGljZShpLmluZGV4T2YoIiwiKSsxKSxjb21wcmVzc2VkU2l6ZTpuLmxlbmd0aCxidWZmZXJMZW5ndGg6dC5sZW5ndGh9fSl9Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXtodCh0aGlzLCJkZWJ1ZyIpO2h0KHRoaXMsIm5hbWUiKTt0aGlzLmRlYnVnPXQsdGhpcy5uYW1lPW59bG9nKC4uLnQpe2lmKHRoaXMuZGVidWcpe2xldCBuPWBbJHtEYXRlLm5vdygpfV1gO3RoaXMubmFtZSYmKG4rPWAgLSAke3RoaXMubmFtZX1gKSxjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLFtuLC4uLnRdKX19d2FybiguLi50KXtsZXQgbj1gWyR7RGF0ZS5ub3coKX1dYDt0aGlzLm5hbWUmJihuKz1gIC0gJHt0aGlzLm5hbWV9YCksY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsW24sLi4udF0pfX12YXIgWXQ9KGU9PihlLkJpbGxpbmdRdW90YUV4Y2VlZGVkPSJCaWxsaW5nUXVvdGFFeGNlZWRlZCIsZSkpKFl0fHx7fSk7Y29uc3QgUnI9MyxQcj0xZTMsTHI9NTAwLEZyPVtZdC5CaWxsaW5nUXVvdGFFeGNlZWRlZC50b1N0cmluZygpXSxNcj1lPT57dmFyIG47cmV0dXJuKChuPWUucmVzcG9uc2UuZXJyb3JzKT09bnVsbD92b2lkIDA6bi5maW5kKGk9PkZyLmluY2x1ZGVzKGkubWVzc2FnZSkpKT09PXZvaWQgMH0sJHI9KCk9Pntjb25zdCBlPSh0LG4saSxyLHM9MCk9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgdCgpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBkZSYmIU1yKG8pKXRocm93IG87aWYoczxScilyZXR1cm4geWllbGQgbmV3IFByb21pc2UoYz0+c2V0VGltZW91dChjLFByK0xyKk1hdGgucG93KDIscykpKSx5aWVsZCBlKHQsbixpLHIscysxKTt0aHJvdyBjb25zb2xlLmVycm9yKGBoaWdobGlnaHQuaW86IGRhdGEgcmVxdWVzdCBmYWlsZWQgYWZ0ZXIgJHtzfSByZXRyaWVzYCksb319KTtyZXR1cm4gZX0sSnQ9NSxRdD0yZTMsQnI9WyJudW1iZXIiLCJzdHJpbmciLCJib29sZWFuIl07dmFyIHRlPShlPT4oZVtlLkluaXRpYWxpemU9MF09IkluaXRpYWxpemUiLGVbZS5Bc3luY0V2ZW50cz0xXT0iQXN5bmNFdmVudHMiLGVbZS5JZGVudGlmeT0yXT0iSWRlbnRpZnkiLGVbZS5Qcm9wZXJ0aWVzPTNdPSJQcm9wZXJ0aWVzIixlW2UuTWV0cmljcz00XT0iTWV0cmljcyIsZVtlLkZlZWRiYWNrPTVdPSJGZWVkYmFjayIsZVtlLkN1c3RvbUV2ZW50PTZdPSJDdXN0b21FdmVudCIsZVtlLlN0b3A9N109IlN0b3AiLGUpKSh0ZXx8e30pO2NvbnN0IE1lPXNlbGY7ZnVuY3Rpb24gWHQoZSx0KXtjb25zdCBuPXt9LGk9W10scj1bXTtmb3IoY29uc3RbcyxvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtpZihvPT1udWxsKWNvbnRpbnVlO0JyLmluY2x1ZGVzKHR5cGVvZiBvKXx8aS5wdXNoKHtbc106b30pO2xldCBjO3R5cGVvZiBvPT0ic3RyaW5nIj9jPW86Yz1tZShvKSxjLmxlbmd0aD5RdCYmKHIucHVzaCh7W3NdOm99KSxjPWMuc3Vic3RyaW5nKDAsUXQpKSxuW3NdPWN9cmV0dXJuIHQhPT0ic2Vzc2lvbiImJihpLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oYEhpZ2hsaWdodCB3YXMgcGFzc2VkIG9uZSBvciBtb3JlICR7dH0gcHJvcGVydGllcyBub3Qgb2YgdHlwZSBzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbi5gLGkpLHIubGVuZ3RoPjAmJmNvbnNvbGUud2FybihgSGlnaGxpZ2h0IHdhcyBwYXNzZWQgb25lIG9yIG1vcmUgJHt0fSBwcm9wZXJ0aWVzIGV4Y2VlZGluZyAyMDAwIGNoYXJhY3RlcnMsIHdoaWNoIHdpbGwgYmUgdHJ1bmNhdGVkLmAscikpLG59e2xldCBlLHQsbixpPTAscj0wLHM9ITEsbz0wLGM9bmV3IGtyKCExLCJbd29ya2VyXSIpO2NvbnN0IGY9W10sZD0oKT0+byE9PTAmJmk8SnQmJiEhKG4hPW51bGwmJm4ubGVuZ3RoKSx1PShnLEUpPT57TWUucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOnRlLkN1c3RvbUV2ZW50LHRhZzpnLHBheWxvYWQ6RX19KX0seT1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHtpZDpFLGV2ZW50czpDLG1lc3NhZ2VzOncsZXJyb3JzOlIscmVzb3VyY2VzU3RyaW5nOiQsd2ViU29ja2V0RXZlbnRzU3RyaW5nOnEsaGFzU2Vzc2lvblVubG9hZGVkOkIsaGlnaGxpZ2h0TG9nczpJfT1nLFM9bWUoe21lc3NhZ2VzOnd9KTtsZXQgaj17c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxldmVudHM6e2V2ZW50czpDfSxtZXNzYWdlczpTLHJlc291cmNlczokLHdlYl9zb2NrZXRfZXZlbnRzOnEsZXJyb3JzOlIsaXNfYmVhY29uOiExLGhhc19zZXNzaW9uX3VubG9hZGVkOkJ9O0kmJihqLmhpZ2hsaWdodF9sb2dzPUkpO2NvbnN0e2NvbXByZXNzZWRCYXNlNjQ6VSxidWZmZXJMZW5ndGg6eixjb21wcmVzc2VkU2l6ZTpLfT15aWVsZCBDcihqKSxhPXt0eXBlOnRlLkFzeW5jRXZlbnRzLGlkOkUsZXZlbnRzU2l6ZTp6LGNvbXByZXNzZWRTaXplOlUubGVuZ3RofTtjLmxvZyhgUHVzaGluZyBwYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KHtzZXNzaW9uU2VjdXJlSUQ6bixpZDpFLGZpcnN0U0lEOk1hdGgubWluKC4uLmouZXZlbnRzLmV2ZW50cy5tYXAoeD0+eD09bnVsbD92b2lkIDA6eC5fc2lkKS5maWx0ZXIoeD0+ISF4KSksZXZlbnRzTGVuZ3RoOmouZXZlbnRzLmV2ZW50cy5sZW5ndGgsbWVzc2FnZXNMZW5ndGg6dy5sZW5ndGgscmVzb3VyY2VzTGVuZ3RoOiQubGVuZ3RoLHdlYlNvY2tldExlbmd0aDpxLmxlbmd0aCxlcnJvcnNMZW5ndGg6Ui5sZW5ndGgsYnVmTGVuZ3RoOnosY29tcHJlc3NlZExlbmd0aDpLLGNvbXByZXNzZWRCYXNlNjRMZW5ndGg6VS5sZW5ndGh9LHZvaWQgMCwyKX1gKTtjb25zdCBoPWUuUHVzaFNlc3Npb25FdmVudHMoe3Nlc3Npb25fc2VjdXJlX2lkOm4scGF5bG9hZF9pZDpFLnRvU3RyaW5nKCksZGF0YTpVfSk7bGV0IF89UHJvbWlzZS5yZXNvbHZlKCk7Zi5sZW5ndGgmJihfPWUucHVzaE1ldHJpY3Moe21ldHJpY3M6Zn0pLGYuc3BsaWNlKDApKTtsZXQgQT1wZXJmb3JtYW5jZS5ub3coKTtjb25zdCBrPXNldEludGVydmFsKCgpPT57QSYmcGVyZm9ybWFuY2Uubm93KCktQT5rdCYmKGNvbnNvbGUud2FybihgVXBsb2FkaW5nIHB1c2hQYXlsb2FkIHRvb2sgdG9vIGxvbmcsIGZhaWx1cmUgbnVtYmVyICMke3J9LmApLHIrPTEsY2xlYXJJbnRlcnZhbChrKSxyPj1KdCYmKGNvbnNvbGUud2FybigiVXBsb2FkaW5nIHB1c2hQYXlsb2FkIHRvb2sgdG9vIGxvbmcsIHN0b3BwaW5nIHJlY29yZGluZyB0byBhdm9pZCBPT00uIiksTWUucG9zdE1lc3NhZ2Uoe3Jlc3BvbnNlOnt0eXBlOnRlLlN0b3AscmVxdWVzdFN0YXJ0OkEsYXN5bmNFdmVudHNSZXNwb25zZTphfX0pLGIoe3R5cGU6dGUuUHJvcGVydGllcyxwcm9wZXJ0aWVzT2JqZWN0OntzdG9wUmVhc29uOiJQdXNoIFBheWxvYWQgVGltZW91dCJ9LHByb3BlcnR5VHlwZTp7dHlwZToidHJhY2sifX0pKSl9LDEwMCk7dHJ5e3lpZWxkIFByb21pc2UuYWxsKFtoLF9dKSxyJiZwZXJmb3JtYW5jZS5ub3coKS1BPD1rdCYmKGNvbnNvbGUud2FybihgcHVzaFBheWxvYWQgc3VjY2VlZGVkIGFmdGVyICMke3J9IGZhaWx1cmVzLCByZXNldHRpbmcgc3RvcCBzd2l0Y2guYCkscj0wKX1maW5hbGx5e0E9MCxjbGVhckludGVydmFsKGspfU1lLnBvc3RNZXNzYWdlKHtyZXNwb25zZTphfSl9KSx2PWc9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3VzZXJPYmplY3Q6RSx1c2VySWRlbnRpZmllcjpDLHNvdXJjZTp3fT1nO3c9PT0ic2VnbWVudCI/dSgiU2VnbWVudCBJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6Q30sRSkpKTp1KCJJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6Q30sRSkpKSx5aWVsZCBlLmlkZW50aWZ5U2Vzc2lvbih7c2Vzc2lvbl9zZWN1cmVfaWQ6bix1c2VyX2lkZW50aWZpZXI6Qyx1c2VyX29iamVjdDpYdChFLCJ1c2VyIil9KTtjb25zdCBSPXc9PT0ic2VnbWVudCI/dzoiZGVmYXVsdCI7Yy5sb2coYElkZW50aWZ5ICgke0N9LCBzb3VyY2U6ICR7Un0pIHcvIG9iajogJHttZShFKX0gQCAke3R9YCl9KSxiPWc9PlEodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3Byb3BlcnRpZXNPYmplY3Q6RSxwcm9wZXJ0eVR5cGU6Q309ZztsZXQgdzsoQz09bnVsbD92b2lkIDA6Qy50eXBlKT09PSJzZXNzaW9uIj8odz0iU2Vzc2lvbiIseWllbGQgZS5hZGRTZXNzaW9uUHJvcGVydGllcyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwcm9wZXJ0aWVzX29iamVjdDpYdChFLCJzZXNzaW9uIil9KSk6KEM9PW51bGw/dm9pZCAwOkMuc291cmNlKT09PSJzZWdtZW50Ij93PSJTZWdtZW50Ijp3PSJUcmFjayIsdyE9PSJTZXNzaW9uIiYmdSh3LG1lKEUpKSxjLmxvZyhgQWRkaW5nICR7d30gUHJvcGVydGllcyB0byBzZXNzaW9uICgke259KSB3LyBvYmo6ICR7SlNPTi5zdHJpbmdpZnkoRSl9IEAgJHt0fWApfSksbT1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmLnB1c2goLi4uZy5tZXRyaWNzLm1hcChFPT4oe25hbWU6RS5uYW1lLHZhbHVlOkUudmFsdWUsc2Vzc2lvbl9zZWN1cmVfaWQ6bixjYXRlZ29yeTpFLmNhdGVnb3J5LGdyb3VwOkUuZ3JvdXAsdGltZXN0YW1wOkUudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksdGFnczpFLnRhZ3N9KSkpfSksTj1nPT5RKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHt0aW1lc3RhbXA6RSx2ZXJiYXRpbTpDLHVzZXJFbWFpbDp3LHVzZXJOYW1lOlJ9PWc7eWllbGQgZS5hZGRTZXNzaW9uRmVlZGJhY2soe3Nlc3Npb25fc2VjdXJlX2lkOm4sdGltZXN0YW1wOkUsdmVyYmF0aW06Qyx1c2VyX2VtYWlsOncsdXNlcl9uYW1lOlJ9KX0pO01lLm9ubWVzc2FnZT1mdW5jdGlvbihnKXtyZXR1cm4gUSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoZy5kYXRhLm1lc3NhZ2UudHlwZT09PXRlLkluaXRpYWxpemUpe3Q9Zy5kYXRhLm1lc3NhZ2UuYmFja2VuZCxuPWcuZGF0YS5tZXNzYWdlLnNlc3Npb25TZWN1cmVJRCxzPWcuZGF0YS5tZXNzYWdlLmRlYnVnLG89Zy5kYXRhLm1lc3NhZ2UucmVjb3JkaW5nU3RhcnRUaW1lLGMuZGVidWc9cyxlPW1yKG5ldyBZbih0LHtoZWFkZXJzOnt9fSksJHIoKSk7cmV0dXJufWlmKGQoKSl0cnl7Zy5kYXRhLm1lc3NhZ2UudHlwZT09PXRlLkFzeW5jRXZlbnRzP3lpZWxkIHkoZy5kYXRhLm1lc3NhZ2UpOmcuZGF0YS5tZXNzYWdlLnR5cGU9PT10ZS5JZGVudGlmeT95aWVsZCB2KGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuUHJvcGVydGllcz95aWVsZCBiKGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuTWV0cmljcz95aWVsZCBtKGcuZGF0YS5tZXNzYWdlKTpnLmRhdGEubWVzc2FnZS50eXBlPT09dGUuRmVlZGJhY2smJih5aWVsZCBOKGcuZGF0YS5tZXNzYWdlKSksaT0wfWNhdGNoKEUpe3MmJmNvbnNvbGUuZXJyb3IoRSksaSs9MX19KX19fSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGlnaGxpZ2h0LWNsaWVudC13b3JrZXItQkRSd0N1OU8uanMubWFwCg==", Qg = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), kl = typeof self < "u" && self.Blob && new Blob([Qg(uu)], { type: "text/javascript;charset=utf-8" });
|
|
13510
|
+
const uu = "dmFyIFZyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcj1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgcXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyICRlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbm49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgZnQ9KCQsRixCKT0+RiBpbiAkP1ZyKCQsRix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Qn0pOiRbRl09QixEPSgkLEYpPT57Zm9yKHZhciBCIGluIEZ8fChGPXt9KSl0bi5jYWxsKEYsQikmJmZ0KCQsQixGW0JdKTtpZigkZSlmb3IodmFyIEIgb2YgJGUoRikpbm4uY2FsbChGLEIpJiZmdCgkLEIsRltCXSk7cmV0dXJuICR9LEJlPSgkLEYpPT5qcigkLHFyKEYpKTt2YXIgZ2U9KCQsRik9Pnt2YXIgQj17fTtmb3IodmFyIGVlIGluICQpdG4uY2FsbCgkLGVlKSYmRi5pbmRleE9mKGVlKTwwJiYoQltlZV09JFtlZV0pO2lmKCQhPW51bGwmJiRlKWZvcih2YXIgZWUgb2YgJGUoJCkpRi5pbmRleE9mKGVlKTwwJiZubi5jYWxsKCQsZWUpJiYoQltlZV09JFtlZV0pO3JldHVybiBCfTt2YXIgaHQ9KCQsRixCKT0+ZnQoJCx0eXBlb2YgRiE9InN5bWJvbCI/RisiIjpGLEIpO3ZhciBKPSgkLEYsQik9Pm5ldyBQcm9taXNlKChlZSxTZSk9Pnt2YXIgVWU9c2U9Pnt0cnl7YWUoQi5uZXh0KHNlKSl9Y2F0Y2goRWUpe1NlKEVlKX19LFZlPXNlPT57dHJ5e2FlKEIudGhyb3coc2UpKX1jYXRjaChFZSl7U2UoRWUpfX0sYWU9c2U9PnNlLmRvbmU/ZWUoc2UudmFsdWUpOlByb21pc2UucmVzb2x2ZShzZS52YWx1ZSkudGhlbihVZSxWZSk7YWUoKEI9Qi5hcHBseSgkLEYpKS5uZXh0KCkpfSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uICQoZSx0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJnR5cGVvZiBuIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaSE9PSJkZWZhdWx0IiYmIShpIGluIGUpKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4saSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuW2ldfX0pfX0pfSksT2JqZWN0LmZyZWV6ZShlKX1jb25zdCBGPUpTT04sQj1lPT5lLnRvVXBwZXJDYXNlKCksZWU9ZT0+e2NvbnN0IHQ9e307cmV0dXJuIGUuZm9yRWFjaCgobixpKT0+e3RbaV09bn0pLHR9LFNlPShlLHQsbik9PmUuZG9jdW1lbnQ/ZTp7ZG9jdW1lbnQ6ZSx2YXJpYWJsZXM6dCxyZXF1ZXN0SGVhZGVyczpuLHNpZ25hbDp2b2lkIDB9LFVlPShlLHQsbik9PmUucXVlcnk/ZTp7cXVlcnk6ZSx2YXJpYWJsZXM6dCxyZXF1ZXN0SGVhZGVyczpuLHNpZ25hbDp2b2lkIDB9LFZlPShlLHQpPT5lLmRvY3VtZW50cz9lOntkb2N1bWVudHM6ZSxyZXF1ZXN0SGVhZGVyczp0LHNpZ25hbDp2b2lkIDB9O2Z1bmN0aW9uIGFlKGUsdCl7aWYoISEhZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx9ZnVuY3Rpb24gRWUoZSx0KXtpZighISFlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnZhcmlhbnQgdHJpZ2dlcmVkLiIpfWNvbnN0IHJuPS9cclxufFtcblxyXS9nO2Z1bmN0aW9uIGplKGUsdCl7bGV0IG49MCxpPTE7Zm9yKGNvbnN0IHIgb2YgZS5ib2R5Lm1hdGNoQWxsKHJuKSl7aWYodHlwZW9mIHIuaW5kZXg9PSJudW1iZXIifHxFZSghMSksci5pbmRleD49dClicmVhaztuPXIuaW5kZXgrclswXS5sZW5ndGgsaSs9MX1yZXR1cm57bGluZTppLGNvbHVtbjp0KzEtbn19ZnVuY3Rpb24gc24oZSl7cmV0dXJuIGR0KGUuc291cmNlLGplKGUuc291cmNlLGUuc3RhcnQpKX1mdW5jdGlvbiBkdChlLHQpe2NvbnN0IG49ZS5sb2NhdGlvbk9mZnNldC5jb2x1bW4tMSxpPSIiLnBhZFN0YXJ0KG4pK2UuYm9keSxyPXQubGluZS0xLHM9ZS5sb2NhdGlvbk9mZnNldC5saW5lLTEsbz10LmxpbmUrcyxjPXQubGluZT09PTE/bjowLGY9dC5jb2x1bW4rYyxkPWAke2UubmFtZX06JHtvfToke2Z9CmAsdT1pLnNwbGl0KC9cclxufFtcblxyXS9nKSx5PXVbcl07aWYoeS5sZW5ndGg+MTIwKXtjb25zdCBnPU1hdGguZmxvb3IoZi84MCksYj1mJTgwLG09W107Zm9yKGxldCBOPTA7Tjx5Lmxlbmd0aDtOKz04MCltLnB1c2goeS5zbGljZShOLE4rODApKTtyZXR1cm4gZCtwdChbW2Ake299IHxgLG1bMF1dLC4uLm0uc2xpY2UoMSxnKzEpLm1hcChOPT5bInwiLE5dKSxbInwiLCJeIi5wYWRTdGFydChiKV0sWyJ8IixtW2crMV1dXSl9cmV0dXJuIGQrcHQoW1tgJHtvLTF9IHxgLHVbci0xXV0sW2Ake299IHxgLHldLFsifCIsIl4iLnBhZFN0YXJ0KGYpXSxbYCR7bysxfSB8YCx1W3IrMV1dXSl9ZnVuY3Rpb24gcHQoZSl7Y29uc3QgdD1lLmZpbHRlcigoW2kscl0pPT5yIT09dm9pZCAwKSxuPU1hdGgubWF4KC4uLnQubWFwKChbaV0pPT5pLmxlbmd0aCkpO3JldHVybiB0Lm1hcCgoW2kscl0pPT5pLnBhZFN0YXJ0KG4pKyhyPyIgIityOiIiKSkuam9pbihgCmApfWZ1bmN0aW9uIG9uKGUpe2NvbnN0IHQ9ZVswXTtyZXR1cm4gdD09bnVsbHx8ImtpbmQiaW4gdHx8Imxlbmd0aCJpbiB0P3tub2Rlczp0LHNvdXJjZTplWzFdLHBvc2l0aW9uczplWzJdLHBhdGg6ZVszXSxvcmlnaW5hbEVycm9yOmVbNF0sZXh0ZW5zaW9uczplWzVdfTp0fWNsYXNzIHFlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCwuLi5uKXt2YXIgaSxyLHM7Y29uc3R7bm9kZXM6byxzb3VyY2U6Yyxwb3NpdGlvbnM6ZixwYXRoOmQsb3JpZ2luYWxFcnJvcjp1LGV4dGVuc2lvbnM6eX09b24obik7c3VwZXIodCksdGhpcy5uYW1lPSJHcmFwaFFMRXJyb3IiLHRoaXMucGF0aD1kIT1udWxsP2Q6dm9pZCAwLHRoaXMub3JpZ2luYWxFcnJvcj11IT1udWxsP3U6dm9pZCAwLHRoaXMubm9kZXM9bXQoQXJyYXkuaXNBcnJheShvKT9vOm8/W29dOnZvaWQgMCk7Y29uc3QgZz1tdCgoaT10aGlzLm5vZGVzKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubWFwKG09Pm0ubG9jKS5maWx0ZXIobT0+bSE9bnVsbCkpO3RoaXMuc291cmNlPWMhPW51bGw/YzpnPT1udWxsfHwocj1nWzBdKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuc291cmNlLHRoaXMucG9zaXRpb25zPWYhPW51bGw/ZjpnPT1udWxsP3ZvaWQgMDpnLm1hcChtPT5tLnN0YXJ0KSx0aGlzLmxvY2F0aW9ucz1mJiZjP2YubWFwKG09PmplKGMsbSkpOmc9PW51bGw/dm9pZCAwOmcubWFwKG09PmplKG0uc291cmNlLG0uc3RhcnQpKTtjb25zdCBiPXNlKHU9PW51bGw/dm9pZCAwOnUuZXh0ZW5zaW9ucyk/dT09bnVsbD92b2lkIDA6dS5leHRlbnNpb25zOnZvaWQgMDt0aGlzLmV4dGVuc2lvbnM9KHM9eSE9bnVsbD95OmIpIT09bnVsbCYmcyE9PXZvaWQgMD9zOk9iamVjdC5jcmVhdGUobnVsbCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bWVzc2FnZTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMH0sbmFtZTp7ZW51bWVyYWJsZTohMX0sbm9kZXM6e2VudW1lcmFibGU6ITF9LHNvdXJjZTp7ZW51bWVyYWJsZTohMX0scG9zaXRpb25zOntlbnVtZXJhYmxlOiExfSxvcmlnaW5hbEVycm9yOntlbnVtZXJhYmxlOiExfX0pLHUhPW51bGwmJnUuc3RhY2s/T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YWNrIix7dmFsdWU6dS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTpFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHFlKTpPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhY2siLHt2YWx1ZTpFcnJvcigpLnN0YWNrLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkdyYXBoUUxFcnJvciJ9dG9TdHJpbmcoKXtsZXQgdD10aGlzLm1lc3NhZ2U7aWYodGhpcy5ub2Rlcylmb3IoY29uc3QgbiBvZiB0aGlzLm5vZGVzKW4ubG9jJiYodCs9YAoKYCtzbihuLmxvYykpO2Vsc2UgaWYodGhpcy5zb3VyY2UmJnRoaXMubG9jYXRpb25zKWZvcihjb25zdCBuIG9mIHRoaXMubG9jYXRpb25zKXQrPWAKCmArZHQodGhpcy5zb3VyY2Usbik7cmV0dXJuIHR9dG9KU09OKCl7Y29uc3QgdD17bWVzc2FnZTp0aGlzLm1lc3NhZ2V9O3JldHVybiB0aGlzLmxvY2F0aW9ucyE9bnVsbCYmKHQubG9jYXRpb25zPXRoaXMubG9jYXRpb25zKSx0aGlzLnBhdGghPW51bGwmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLmV4dGVuc2lvbnMhPW51bGwmJk9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9ucykubGVuZ3RoPjAmJih0LmV4dGVuc2lvbnM9dGhpcy5leHRlbnNpb25zKSx0fX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZT09PXZvaWQgMHx8ZS5sZW5ndGg9PT0wP3ZvaWQgMDplfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBuZXcgcWUoYFN5bnRheCBFcnJvcjogJHtufWAse3NvdXJjZTplLHBvc2l0aW9uczpbdF19KX1jbGFzcyBhbntjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5zdGFydD10LnN0YXJ0LHRoaXMuZW5kPW4uZW5kLHRoaXMuc3RhcnRUb2tlbj10LHRoaXMuZW5kVG9rZW49bix0aGlzLnNvdXJjZT1pfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxvY2F0aW9uIn10b0pTT04oKXtyZXR1cm57c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9fX1jbGFzcyB5dHtjb25zdHJ1Y3Rvcih0LG4saSxyLHMsbyl7dGhpcy5raW5kPXQsdGhpcy5zdGFydD1uLHRoaXMuZW5kPWksdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49cyx0aGlzLnZhbHVlPW8sdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGx9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iVG9rZW4ifXRvSlNPTigpe3JldHVybntraW5kOnRoaXMua2luZCx2YWx1ZTp0aGlzLnZhbHVlLGxpbmU6dGhpcy5saW5lLGNvbHVtbjp0aGlzLmNvbHVtbn19fWNvbnN0IHZ0PXtOYW1lOltdLERvY3VtZW50OlsiZGVmaW5pdGlvbnMiXSxPcGVyYXRpb25EZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sVmFyaWFibGVEZWZpbml0aW9uOlsidmFyaWFibGUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLFZhcmlhYmxlOlsibmFtZSJdLFNlbGVjdGlvblNldDpbInNlbGVjdGlvbnMiXSxGaWVsZDpbImFsaWFzIiwibmFtZSIsImFyZ3VtZW50cyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxBcmd1bWVudDpbIm5hbWUiLCJ2YWx1ZSJdLEZyYWdtZW50U3ByZWFkOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxJbmxpbmVGcmFnbWVudDpbInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sRnJhZ21lbnREZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJ0eXBlQ29uZGl0aW9uIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEludFZhbHVlOltdLEZsb2F0VmFsdWU6W10sU3RyaW5nVmFsdWU6W10sQm9vbGVhblZhbHVlOltdLE51bGxWYWx1ZTpbXSxFbnVtVmFsdWU6W10sTGlzdFZhbHVlOlsidmFsdWVzIl0sT2JqZWN0VmFsdWU6WyJmaWVsZHMiXSxPYmplY3RGaWVsZDpbIm5hbWUiLCJ2YWx1ZSJdLERpcmVjdGl2ZTpbIm5hbWUiLCJhcmd1bWVudHMiXSxOYW1lZFR5cGU6WyJuYW1lIl0sTGlzdFR5cGU6WyJ0eXBlIl0sTm9uTnVsbFR5cGU6WyJ0eXBlIl0sU2NoZW1hRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246WyJ0eXBlIl0sU2NhbGFyVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEZpZWxkRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsInR5cGUiLCJkaXJlY3RpdmVzIl0sSW5wdXRWYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLEludGVyZmFjZVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLEVudW1WYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxEaXJlY3RpdmVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwibG9jYXRpb25zIl0sU2NoZW1hRXh0ZW5zaW9uOlsiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sU2NhbGFyVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEludGVyZmFjZVR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl19LGNuPW5ldyBTZXQoT2JqZWN0LmtleXModnQpKTtmdW5jdGlvbiBndChlKXtjb25zdCB0PWU9PW51bGw/dm9pZCAwOmUua2luZDtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiZjbi5oYXModCl9dmFyIGZlOyhmdW5jdGlvbihlKXtlLlFVRVJZPSJxdWVyeSIsZS5NVVRBVElPTj0ibXV0YXRpb24iLGUuU1VCU0NSSVBUSU9OPSJzdWJzY3JpcHRpb24ifSkoZmV8fChmZT17fSkpO3ZhciBHZTsoZnVuY3Rpb24oZSl7ZS5RVUVSWT0iUVVFUlkiLGUuTVVUQVRJT049Ik1VVEFUSU9OIixlLlNVQlNDUklQVElPTj0iU1VCU0NSSVBUSU9OIixlLkZJRUxEPSJGSUVMRCIsZS5GUkFHTUVOVF9ERUZJTklUSU9OPSJGUkFHTUVOVF9ERUZJTklUSU9OIixlLkZSQUdNRU5UX1NQUkVBRD0iRlJBR01FTlRfU1BSRUFEIixlLklOTElORV9GUkFHTUVOVD0iSU5MSU5FX0ZSQUdNRU5UIixlLlZBUklBQkxFX0RFRklOSVRJT049IlZBUklBQkxFX0RFRklOSVRJT04iLGUuU0NIRU1BPSJTQ0hFTUEiLGUuU0NBTEFSPSJTQ0FMQVIiLGUuT0JKRUNUPSJPQkpFQ1QiLGUuRklFTERfREVGSU5JVElPTj0iRklFTERfREVGSU5JVElPTiIsZS5BUkdVTUVOVF9ERUZJTklUSU9OPSJBUkdVTUVOVF9ERUZJTklUSU9OIixlLklOVEVSRkFDRT0iSU5URVJGQUNFIixlLlVOSU9OPSJVTklPTiIsZS5FTlVNPSJFTlVNIixlLkVOVU1fVkFMVUU9IkVOVU1fVkFMVUUiLGUuSU5QVVRfT0JKRUNUPSJJTlBVVF9PQkpFQ1QiLGUuSU5QVVRfRklFTERfREVGSU5JVElPTj0iSU5QVVRfRklFTERfREVGSU5JVElPTiJ9KShHZXx8KEdlPXt9KSk7dmFyIFQ7KGZ1bmN0aW9uKGUpe2UuTkFNRT0iTmFtZSIsZS5ET0NVTUVOVD0iRG9jdW1lbnQiLGUuT1BFUkFUSU9OX0RFRklOSVRJT049Ik9wZXJhdGlvbkRlZmluaXRpb24iLGUuVkFSSUFCTEVfREVGSU5JVElPTj0iVmFyaWFibGVEZWZpbml0aW9uIixlLlNFTEVDVElPTl9TRVQ9IlNlbGVjdGlvblNldCIsZS5GSUVMRD0iRmllbGQiLGUuQVJHVU1FTlQ9IkFyZ3VtZW50IixlLkZSQUdNRU5UX1NQUkVBRD0iRnJhZ21lbnRTcHJlYWQiLGUuSU5MSU5FX0ZSQUdNRU5UPSJJbmxpbmVGcmFnbWVudCIsZS5GUkFHTUVOVF9ERUZJTklUSU9OPSJGcmFnbWVudERlZmluaXRpb24iLGUuVkFSSUFCTEU9IlZhcmlhYmxlIixlLklOVD0iSW50VmFsdWUiLGUuRkxPQVQ9IkZsb2F0VmFsdWUiLGUuU1RSSU5HPSJTdHJpbmdWYWx1ZSIsZS5CT09MRUFOPSJCb29sZWFuVmFsdWUiLGUuTlVMTD0iTnVsbFZhbHVlIixlLkVOVU09IkVudW1WYWx1ZSIsZS5MSVNUPSJMaXN0VmFsdWUiLGUuT0JKRUNUPSJPYmplY3RWYWx1ZSIsZS5PQkpFQ1RfRklFTEQ9Ik9iamVjdEZpZWxkIixlLkRJUkVDVElWRT0iRGlyZWN0aXZlIixlLk5BTUVEX1RZUEU9Ik5hbWVkVHlwZSIsZS5MSVNUX1RZUEU9Ikxpc3RUeXBlIixlLk5PTl9OVUxMX1RZUEU9Ik5vbk51bGxUeXBlIixlLlNDSEVNQV9ERUZJTklUSU9OPSJTY2hlbWFEZWZpbml0aW9uIixlLk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT049Ik9wZXJhdGlvblR5cGVEZWZpbml0aW9uIixlLlNDQUxBUl9UWVBFX0RFRklOSVRJT049IlNjYWxhclR5cGVEZWZpbml0aW9uIixlLk9CSkVDVF9UWVBFX0RFRklOSVRJT049Ik9iamVjdFR5cGVEZWZpbml0aW9uIixlLkZJRUxEX0RFRklOSVRJT049IkZpZWxkRGVmaW5pdGlvbiIsZS5JTlBVVF9WQUxVRV9ERUZJTklUSU9OPSJJbnB1dFZhbHVlRGVmaW5pdGlvbiIsZS5JTlRFUkZBQ0VfVFlQRV9ERUZJTklUSU9OPSJJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbiIsZS5VTklPTl9UWVBFX0RFRklOSVRJT049IlVuaW9uVHlwZURlZmluaXRpb24iLGUuRU5VTV9UWVBFX0RFRklOSVRJT049IkVudW1UeXBlRGVmaW5pdGlvbiIsZS5FTlVNX1ZBTFVFX0RFRklOSVRJT049IkVudW1WYWx1ZURlZmluaXRpb24iLGUuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTj0iSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbiIsZS5ESVJFQ1RJVkVfREVGSU5JVElPTj0iRGlyZWN0aXZlRGVmaW5pdGlvbiIsZS5TQ0hFTUFfRVhURU5TSU9OPSJTY2hlbWFFeHRlbnNpb24iLGUuU0NBTEFSX1RZUEVfRVhURU5TSU9OPSJTY2FsYXJUeXBlRXh0ZW5zaW9uIixlLk9CSkVDVF9UWVBFX0VYVEVOU0lPTj0iT2JqZWN0VHlwZUV4dGVuc2lvbiIsZS5JTlRFUkZBQ0VfVFlQRV9FWFRFTlNJT049IkludGVyZmFjZVR5cGVFeHRlbnNpb24iLGUuVU5JT05fVFlQRV9FWFRFTlNJT049IlVuaW9uVHlwZUV4dGVuc2lvbiIsZS5FTlVNX1RZUEVfRVhURU5TSU9OPSJFbnVtVHlwZUV4dGVuc2lvbiIsZS5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT049IklucHV0T2JqZWN0VHlwZUV4dGVuc2lvbiJ9KShUfHwoVD17fSkpO2Z1bmN0aW9uIHplKGUpe3JldHVybiBlPT09OXx8ZT09PTMyfWZ1bmN0aW9uIF9lKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MH1mdW5jdGlvbiBfdChlKXtyZXR1cm4gRXQoZSl8fGU9PT05NX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gRXQoZSl8fF9lKGUpfHxlPT09OTV9ZnVuY3Rpb24gbG4oZSl7dmFyIHQ7bGV0IG49TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsaT1udWxsLHI9LTE7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzO2NvbnN0IGM9ZVtvXSxmPWZuKGMpO2YhPT1jLmxlbmd0aCYmKGk9KHM9aSkhPT1udWxsJiZzIT09dm9pZCAwP3M6byxyPW8sbyE9PTAmJmY8biYmKG49ZikpfXJldHVybiBlLm1hcCgobyxjKT0+Yz09PTA/bzpvLnNsaWNlKG4pKS5zbGljZSgodD1pKSE9PW51bGwmJnQhPT12b2lkIDA/dDowLHIrMSl9ZnVuY3Rpb24gZm4oZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJnplKGUuY2hhckNvZGVBdCh0KSk7KSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBobihlLHQpe2NvbnN0IG49ZS5yZXBsYWNlKC8iIiIvZywnXFwiIiInKSxpPW4uc3BsaXQoL1xyXG58W1xuXHJdL2cpLHI9aS5sZW5ndGg9PT0xLHM9aS5sZW5ndGg+MSYmaS5zbGljZSgxKS5ldmVyeShiPT5iLmxlbmd0aD09PTB8fHplKGIuY2hhckNvZGVBdCgwKSkpLG89bi5lbmRzV2l0aCgnXFwiIiInKSxjPWUuZW5kc1dpdGgoJyInKSYmIW8sZj1lLmVuZHNXaXRoKCJcXCIpLGQ9Y3x8Zix1PSFyfHxlLmxlbmd0aD43MHx8ZHx8c3x8bztsZXQgeT0iIjtjb25zdCBnPXImJnplKGUuY2hhckNvZGVBdCgwKSk7cmV0dXJuKHUmJiFnfHxzKSYmKHkrPWAKYCkseSs9biwodXx8ZCkmJih5Kz1gCmApLCciIiInK3krJyIiIid9dmFyIGw7KGZ1bmN0aW9uKGUpe2UuU09GPSI8U09GPiIsZS5FT0Y9IjxFT0Y+IixlLkJBTkc9IiEiLGUuRE9MTEFSPSIkIixlLkFNUD0iJiIsZS5QQVJFTl9MPSIoIixlLlBBUkVOX1I9IikiLGUuU1BSRUFEPSIuLi4iLGUuQ09MT049IjoiLGUuRVFVQUxTPSI9IixlLkFUPSJAIixlLkJSQUNLRVRfTD0iWyIsZS5CUkFDS0VUX1I9Il0iLGUuQlJBQ0VfTD0ieyIsZS5QSVBFPSJ8IixlLkJSQUNFX1I9In0iLGUuTkFNRT0iTmFtZSIsZS5JTlQ9IkludCIsZS5GTE9BVD0iRmxvYXQiLGUuU1RSSU5HPSJTdHJpbmciLGUuQkxPQ0tfU1RSSU5HPSJCbG9ja1N0cmluZyIsZS5DT01NRU5UPSJDb21tZW50In0pKGx8fChsPXt9KSk7Y2xhc3MgZG57Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1uZXcgeXQobC5TT0YsMCwwLDAsMCk7dGhpcy5zb3VyY2U9dCx0aGlzLmxhc3RUb2tlbj1uLHRoaXMudG9rZW49bix0aGlzLmxpbmU9MSx0aGlzLmxpbmVTdGFydD0wfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxleGVyIn1hZHZhbmNlKCl7cmV0dXJuIHRoaXMubGFzdFRva2VuPXRoaXMudG9rZW4sdGhpcy50b2tlbj10aGlzLmxvb2thaGVhZCgpfWxvb2thaGVhZCgpe2xldCB0PXRoaXMudG9rZW47aWYodC5raW5kIT09bC5FT0YpZG8gaWYodC5uZXh0KXQ9dC5uZXh0O2Vsc2V7Y29uc3Qgbj1tbih0aGlzLHQuZW5kKTt0Lm5leHQ9bixuLnByZXY9dCx0PW59d2hpbGUodC5raW5kPT09bC5DT01NRU5UKTtyZXR1cm4gdH19ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGU9PT1sLkJBTkd8fGU9PT1sLkRPTExBUnx8ZT09PWwuQU1QfHxlPT09bC5QQVJFTl9MfHxlPT09bC5QQVJFTl9SfHxlPT09bC5TUFJFQUR8fGU9PT1sLkNPTE9OfHxlPT09bC5FUVVBTFN8fGU9PT1sLkFUfHxlPT09bC5CUkFDS0VUX0x8fGU9PT1sLkJSQUNLRVRfUnx8ZT09PWwuQlJBQ0VfTHx8ZT09PWwuUElQRXx8ZT09PWwuQlJBQ0VfUn1mdW5jdGlvbiBoZShlKXtyZXR1cm4gZT49MCYmZTw9NTUyOTV8fGU+PTU3MzQ0JiZlPD0xMTE0MTExfWZ1bmN0aW9uIE9lKGUsdCl7cmV0dXJuIFR0KGUuY2hhckNvZGVBdCh0KSkmJmJ0KGUuY2hhckNvZGVBdCh0KzEpKX1mdW5jdGlvbiBUdChlKXtyZXR1cm4gZT49NTUyOTYmJmU8PTU2MzE5fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlPj01NjMyMCYmZTw9NTczNDN9ZnVuY3Rpb24gdWUoZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHkuY29kZVBvaW50QXQodCk7aWYobj09PXZvaWQgMClyZXR1cm4gbC5FT0Y7aWYobj49MzImJm48PTEyNil7Y29uc3QgaT1TdHJpbmcuZnJvbUNvZGVQb2ludChuKTtyZXR1cm4gaT09PSciJz9gJyInYDpgIiR7aX0iYH1yZXR1cm4iVSsiK24udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkU3RhcnQoNCwiMCIpfWZ1bmN0aW9uIFUoZSx0LG4saSxyKXtjb25zdCBzPWUubGluZSxvPTErbi1lLmxpbmVTdGFydDtyZXR1cm4gbmV3IHl0KHQsbixpLHMsbyxyKX1mdW5jdGlvbiBtbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQ7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtzd2l0Y2gocyl7Y2FzZSA2NTI3OTpjYXNlIDk6Y2FzZSAzMjpjYXNlIDQ0Oisrcjtjb250aW51ZTtjYXNlIDEwOisrciwrK2UubGluZSxlLmxpbmVTdGFydD1yO2NvbnRpbnVlO2Nhc2UgMTM6bi5jaGFyQ29kZUF0KHIrMSk9PT0xMD9yKz0yOisrciwrK2UubGluZSxlLmxpbmVTdGFydD1yO2NvbnRpbnVlO2Nhc2UgMzU6cmV0dXJuIHluKGUscik7Y2FzZSAzMzpyZXR1cm4gVShlLGwuQkFORyxyLHIrMSk7Y2FzZSAzNjpyZXR1cm4gVShlLGwuRE9MTEFSLHIscisxKTtjYXNlIDM4OnJldHVybiBVKGUsbC5BTVAscixyKzEpO2Nhc2UgNDA6cmV0dXJuIFUoZSxsLlBBUkVOX0wscixyKzEpO2Nhc2UgNDE6cmV0dXJuIFUoZSxsLlBBUkVOX1IscixyKzEpO2Nhc2UgNDY6aWYobi5jaGFyQ29kZUF0KHIrMSk9PT00NiYmbi5jaGFyQ29kZUF0KHIrMik9PT00NilyZXR1cm4gVShlLGwuU1BSRUFELHIsciszKTticmVhaztjYXNlIDU4OnJldHVybiBVKGUsbC5DT0xPTixyLHIrMSk7Y2FzZSA2MTpyZXR1cm4gVShlLGwuRVFVQUxTLHIscisxKTtjYXNlIDY0OnJldHVybiBVKGUsbC5BVCxyLHIrMSk7Y2FzZSA5MTpyZXR1cm4gVShlLGwuQlJBQ0tFVF9MLHIscisxKTtjYXNlIDkzOnJldHVybiBVKGUsbC5CUkFDS0VUX1IscixyKzEpO2Nhc2UgMTIzOnJldHVybiBVKGUsbC5CUkFDRV9MLHIscisxKTtjYXNlIDEyNDpyZXR1cm4gVShlLGwuUElQRSxyLHIrMSk7Y2FzZSAxMjU6cmV0dXJuIFUoZSxsLkJSQUNFX1IscixyKzEpO2Nhc2UgMzQ6cmV0dXJuIG4uY2hhckNvZGVBdChyKzEpPT09MzQmJm4uY2hhckNvZGVBdChyKzIpPT09MzQ/Ym4oZSxyKTpnbihlLHIpfWlmKF9lKHMpfHxzPT09NDUpcmV0dXJuIHZuKGUscixzKTtpZihfdChzKSlyZXR1cm4gTm4oZSxyKTt0aHJvdyBHKGUuc291cmNlLHIscz09PTM5P2BVbmV4cGVjdGVkIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXIgKCcpLCBkaWQgeW91IG1lYW4gdG8gdXNlIGEgZG91YmxlIHF1b3RlICgiKT9gOmhlKHMpfHxPZShuLHIpP2BVbmV4cGVjdGVkIGNoYXJhY3RlcjogJHt1ZShlLHIpfS5gOmBJbnZhbGlkIGNoYXJhY3RlcjogJHt1ZShlLHIpfS5gKX1yZXR1cm4gVShlLGwuRU9GLGksaSl9ZnVuY3Rpb24geW4oZSx0KXtjb25zdCBuPWUuc291cmNlLmJvZHksaT1uLmxlbmd0aDtsZXQgcj10KzE7Zm9yKDtyPGk7KXtjb25zdCBzPW4uY2hhckNvZGVBdChyKTtpZihzPT09MTB8fHM9PT0xMylicmVhaztpZihoZShzKSkrK3I7ZWxzZSBpZihPZShuLHIpKXIrPTI7ZWxzZSBicmVha31yZXR1cm4gVShlLGwuQ09NTUVOVCx0LHIsbi5zbGljZSh0KzEscikpfWZ1bmN0aW9uIHZuKGUsdCxuKXtjb25zdCBpPWUuc291cmNlLmJvZHk7bGV0IHI9dCxzPW4sbz0hMTtpZihzPT09NDUmJihzPWkuY2hhckNvZGVBdCgrK3IpKSxzPT09NDgpe2lmKHM9aS5jaGFyQ29kZUF0KCsrciksX2UocykpdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIG51bWJlciwgdW5leHBlY3RlZCBkaWdpdCBhZnRlciAwOiAke3VlKGUscil9LmApfWVsc2Ugcj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocik7aWYocz09PTQ2JiYobz0hMCxzPWkuY2hhckNvZGVBdCgrK3IpLHI9SGUoZSxyLHMpLHM9aS5jaGFyQ29kZUF0KHIpKSwocz09PTY5fHxzPT09MTAxKSYmKG89ITAscz1pLmNoYXJDb2RlQXQoKytyKSwocz09PTQzfHxzPT09NDUpJiYocz1pLmNoYXJDb2RlQXQoKytyKSkscj1IZShlLHIscykscz1pLmNoYXJDb2RlQXQocikpLHM9PT00Nnx8X3QocykpdGhyb3cgRyhlLnNvdXJjZSxyLGBJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogJHt1ZShlLHIpfS5gKTtyZXR1cm4gVShlLG8/bC5GTE9BVDpsLklOVCx0LHIsaS5zbGljZSh0LHIpKX1mdW5jdGlvbiBIZShlLHQsbil7aWYoIV9lKG4pKXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBudW1iZXIsIGV4cGVjdGVkIGRpZ2l0IGJ1dCBnb3Q6ICR7dWUoZSx0KX0uYCk7Y29uc3QgaT1lLnNvdXJjZS5ib2R5O2xldCByPXQrMTtmb3IoO19lKGkuY2hhckNvZGVBdChyKSk7KSsrcjtyZXR1cm4gcn1mdW5jdGlvbiBnbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMSxzPXIsbz0iIjtmb3IoO3I8aTspe2NvbnN0IGM9bi5jaGFyQ29kZUF0KHIpO2lmKGM9PT0zNClyZXR1cm4gbys9bi5zbGljZShzLHIpLFUoZSxsLlNUUklORyx0LHIrMSxvKTtpZihjPT09OTIpe28rPW4uc2xpY2UocyxyKTtjb25zdCBmPW4uY2hhckNvZGVBdChyKzEpPT09MTE3P24uY2hhckNvZGVBdChyKzIpPT09MTIzP0VuKGUscik6X24oZSxyKTpUbihlLHIpO28rPWYudmFsdWUscis9Zi5zaXplLHM9cjtjb250aW51ZX1pZihjPT09MTB8fGM9PT0xMylicmVhaztpZihoZShjKSkrK3I7ZWxzZSBpZihPZShuLHIpKXIrPTI7ZWxzZSB0aHJvdyBHKGUuc291cmNlLHIsYEludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICR7dWUoZSxyKX0uYCl9dGhyb3cgRyhlLnNvdXJjZSxyLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIEVuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5O2xldCBpPTAscj0zO2Zvcig7cjwxMjspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHQrcisrKTtpZihzPT09MTI1KXtpZihyPDV8fCFoZShpKSlicmVhaztyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSksc2l6ZTpyfX1pZihpPWk8PDR8VGUocyksaTwwKWJyZWFrfXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrcil9Ii5gKX1mdW5jdGlvbiBfbihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPU50KG4sdCsyKTtpZihoZShpKSlyZXR1cm57dmFsdWU6U3RyaW5nLmZyb21Db2RlUG9pbnQoaSksc2l6ZTo2fTtpZihUdChpKSYmbi5jaGFyQ29kZUF0KHQrNik9PT05MiYmbi5jaGFyQ29kZUF0KHQrNyk9PT0xMTcpe2NvbnN0IHI9TnQobix0KzgpO2lmKGJ0KHIpKXJldHVybnt2YWx1ZTpTdHJpbmcuZnJvbUNvZGVQb2ludChpLHIpLHNpemU6MTJ9fXRocm93IEcoZS5zb3VyY2UsdCxgSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrNil9Ii5gKX1mdW5jdGlvbiBOdChlLHQpe3JldHVybiBUZShlLmNoYXJDb2RlQXQodCkpPDwxMnxUZShlLmNoYXJDb2RlQXQodCsxKSk8PDh8VGUoZS5jaGFyQ29kZUF0KHQrMikpPDw0fFRlKGUuY2hhckNvZGVBdCh0KzMpKX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gZT49NDgmJmU8PTU3P2UtNDg6ZT49NjUmJmU8PTcwP2UtNTU6ZT49OTcmJmU8PTEwMj9lLTg3Oi0xfWZ1bmN0aW9uIFRuKGUsdCl7Y29uc3Qgbj1lLnNvdXJjZS5ib2R5O3N3aXRjaChuLmNoYXJDb2RlQXQodCsxKSl7Y2FzZSAzNDpyZXR1cm57dmFsdWU6JyInLHNpemU6Mn07Y2FzZSA5MjpyZXR1cm57dmFsdWU6IlxcIixzaXplOjJ9O2Nhc2UgNDc6cmV0dXJue3ZhbHVlOiIvIixzaXplOjJ9O2Nhc2UgOTg6cmV0dXJue3ZhbHVlOiJcYiIsc2l6ZToyfTtjYXNlIDEwMjpyZXR1cm57dmFsdWU6IlxmIixzaXplOjJ9O2Nhc2UgMTEwOnJldHVybnt2YWx1ZTpgCmAsc2l6ZToyfTtjYXNlIDExNDpyZXR1cm57dmFsdWU6IlxyIixzaXplOjJ9O2Nhc2UgMTE2OnJldHVybnt2YWx1ZToiCSIsc2l6ZToyfX10aHJvdyBHKGUuc291cmNlLHQsYEludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogIiR7bi5zbGljZSh0LHQrMil9Ii5gKX1mdW5jdGlvbiBibihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPWUubGluZVN0YXJ0LHM9dCszLG89cyxjPSIiO2NvbnN0IGY9W107Zm9yKDtzPGk7KXtjb25zdCBkPW4uY2hhckNvZGVBdChzKTtpZihkPT09MzQmJm4uY2hhckNvZGVBdChzKzEpPT09MzQmJm4uY2hhckNvZGVBdChzKzIpPT09MzQpe2MrPW4uc2xpY2UobyxzKSxmLnB1c2goYyk7Y29uc3QgdT1VKGUsbC5CTE9DS19TVFJJTkcsdCxzKzMsbG4oZikuam9pbihgCmApKTtyZXR1cm4gZS5saW5lKz1mLmxlbmd0aC0xLGUubGluZVN0YXJ0PXIsdX1pZihkPT09OTImJm4uY2hhckNvZGVBdChzKzEpPT09MzQmJm4uY2hhckNvZGVBdChzKzIpPT09MzQmJm4uY2hhckNvZGVBdChzKzMpPT09MzQpe2MrPW4uc2xpY2UobyxzKSxvPXMrMSxzKz00O2NvbnRpbnVlfWlmKGQ9PT0xMHx8ZD09PTEzKXtjKz1uLnNsaWNlKG8scyksZi5wdXNoKGMpLGQ9PT0xMyYmbi5jaGFyQ29kZUF0KHMrMSk9PT0xMD9zKz0yOisrcyxjPSIiLG89cyxyPXM7Y29udGludWV9aWYoaGUoZCkpKytzO2Vsc2UgaWYoT2UobixzKSlzKz0yO2Vsc2UgdGhyb3cgRyhlLnNvdXJjZSxzLGBJbnZhbGlkIGNoYXJhY3RlciB3aXRoaW4gU3RyaW5nOiAke3VlKGUscyl9LmApfXRocm93IEcoZS5zb3VyY2UscywiVW50ZXJtaW5hdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBObihlLHQpe2NvbnN0IG49ZS5zb3VyY2UuYm9keSxpPW4ubGVuZ3RoO2xldCByPXQrMTtmb3IoO3I8aTspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KHIpO2lmKHVuKHMpKSsrcjtlbHNlIGJyZWFrfXJldHVybiBVKGUsbC5OQU1FLHQscixuLnNsaWNlKHQscikpfWNvbnN0IHhuPTEwLHh0PTI7ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIHdlKGUsW10pfWZ1bmN0aW9uIHdlKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlInN0cmluZyI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBlLm5hbWU/YFtmdW5jdGlvbiAke2UubmFtZX1dYDoiW2Z1bmN0aW9uXSI7Y2FzZSJvYmplY3QiOnJldHVybiBBbihlLHQpO2RlZmF1bHQ6cmV0dXJuIFN0cmluZyhlKX19ZnVuY3Rpb24gQW4oZSx0KXtpZihlPT09bnVsbClyZXR1cm4ibnVsbCI7aWYodC5pbmNsdWRlcyhlKSlyZXR1cm4iW0NpcmN1bGFyXSI7Y29uc3Qgbj1bLi4udCxlXTtpZihJbihlKSl7Y29uc3QgaT1lLnRvSlNPTigpO2lmKGkhPT1lKXJldHVybiB0eXBlb2YgaT09InN0cmluZyI/aTp3ZShpLG4pfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gT24oZSxuKTtyZXR1cm4gU24oZSxuKX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gdHlwZW9mIGUudG9KU09OPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIFNuKGUsdCl7Y29uc3Qgbj1PYmplY3QuZW50cmllcyhlKTtyZXR1cm4gbi5sZW5ndGg9PT0wPyJ7fSI6dC5sZW5ndGg+eHQ/IlsiK3duKGUpKyJdIjoieyAiK24ubWFwKChbcixzXSk9PnIrIjogIit3ZShzLHQpKS5qb2luKCIsICIpKyIgfSJ9ZnVuY3Rpb24gT24oZSx0KXtpZihlLmxlbmd0aD09PTApcmV0dXJuIltdIjtpZih0Lmxlbmd0aD54dClyZXR1cm4iW0FycmF5XSI7Y29uc3Qgbj1NYXRoLm1pbih4bixlLmxlbmd0aCksaT1lLmxlbmd0aC1uLHI9W107Zm9yKGxldCBzPTA7czxuOysrcylyLnB1c2god2UoZVtzXSx0KSk7cmV0dXJuIGk9PT0xP3IucHVzaCgiLi4uIDEgbW9yZSBpdGVtIik6aT4xJiZyLnB1c2goYC4uLiAke2l9IG1vcmUgaXRlbXNgKSwiWyIrci5qb2luKCIsICIpKyJdIn1mdW5jdGlvbiB3bihlKXtjb25zdCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5yZXBsYWNlKC9eXFtvYmplY3QgLywiIikucmVwbGFjZSgvXSQvLCIiKTtpZih0PT09Ik9iamVjdCImJnR5cGVvZiBlLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iKXtjb25zdCBuPWUuY29uc3RydWN0b3IubmFtZTtpZih0eXBlb2Ygbj09InN0cmluZyImJm4hPT0iIilyZXR1cm4gbn1yZXR1cm4gdH1jb25zdCBEbj1nbG9iYWxUaGlzLnByb2Nlc3MmJnByb2Nlc3MuZW52Lk5PREVfRU5WPT09InByb2R1Y3Rpb24iP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBufTpmdW5jdGlvbih0LG4pe2lmKHQgaW5zdGFuY2VvZiBuKXJldHVybiEwO2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwpe3ZhciBpO2NvbnN0IHI9bi5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSxzPVN5bWJvbC50b1N0cmluZ1RhZyBpbiB0P3RbU3ltYm9sLnRvU3RyaW5nVGFnXTooaT10LmNvbnN0cnVjdG9yKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubmFtZTtpZihyPT09cyl7Y29uc3Qgbz1ZZSh0KTt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1c2UgJHtyfSAiJHtvfSIgZnJvbSBhbm90aGVyIG1vZHVsZSBvciByZWFsbS4KCkVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlIG9mICJncmFwaHFsIiBpbiB0aGUgbm9kZV9tb2R1bGVzCmRpcmVjdG9yeS4gSWYgZGlmZmVyZW50IHZlcnNpb25zIG9mICJncmFwaHFsIiBhcmUgdGhlIGRlcGVuZGVuY2llcyBvZiBvdGhlcgpyZWxpZWQgb24gbW9kdWxlcywgdXNlICJyZXNvbHV0aW9ucyIgdG8gZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgaW5zdGFsbGVkLgoKaHR0cHM6Ly95YXJucGtnLmNvbS9lbi9kb2NzL3NlbGVjdGl2ZS12ZXJzaW9uLXJlc29sdXRpb25zCgpEdXBsaWNhdGUgImdyYXBocWwiIG1vZHVsZXMgY2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBzaW5jZSBkaWZmZXJlbnQKdmVyc2lvbnMgbWF5IGhhdmUgZGlmZmVyZW50IGNhcGFiaWxpdGllcyBhbmQgYmVoYXZpb3IuIFRoZSBkYXRhIGZyb20gb25lCnZlcnNpb24gdXNlZCBpbiB0aGUgZnVuY3Rpb24gZnJvbSBhbm90aGVyIGNvdWxkIHByb2R1Y2UgY29uZnVzaW5nIGFuZApzcHVyaW91cyByZXN1bHRzLmApfX1yZXR1cm4hMX07Y2xhc3MgQXR7Y29uc3RydWN0b3IodCxuPSJHcmFwaFFMIHJlcXVlc3QiLGk9e2xpbmU6MSxjb2x1bW46MX0pe3R5cGVvZiB0PT0ic3RyaW5nInx8YWUoITEsYEJvZHkgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQ6ICR7WWUodCl9LmApLHRoaXMuYm9keT10LHRoaXMubmFtZT1uLHRoaXMubG9jYXRpb25PZmZzZXQ9aSx0aGlzLmxvY2F0aW9uT2Zmc2V0LmxpbmU+MHx8YWUoITEsImxpbmUgaW4gbG9jYXRpb25PZmZzZXQgaXMgMS1pbmRleGVkIGFuZCBtdXN0IGJlIHBvc2l0aXZlLiIpLHRoaXMubG9jYXRpb25PZmZzZXQuY29sdW1uPjB8fGFlKCExLCJjb2x1bW4gaW4gbG9jYXRpb25PZmZzZXQgaXMgMS1pbmRleGVkIGFuZCBtdXN0IGJlIHBvc2l0aXZlLiIpfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlNvdXJjZSJ9fWZ1bmN0aW9uIENuKGUpe3JldHVybiBEbihlLEF0KX1mdW5jdGlvbiBJdChlLHQpe2NvbnN0IG49bmV3IGtuKGUsdCksaT1uLnBhcnNlRG9jdW1lbnQoKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInRva2VuQ291bnQiLHtlbnVtZXJhYmxlOiExLHZhbHVlOm4udG9rZW5Db3VudH0pLGl9Y2xhc3Mga257Y29uc3RydWN0b3IodCxuPXt9KXtjb25zdCBpPUNuKHQpP3Q6bmV3IEF0KHQpO3RoaXMuX2xleGVyPW5ldyBkbihpKSx0aGlzLl9vcHRpb25zPW4sdGhpcy5fdG9rZW5Db3VudGVyPTB9Z2V0IHRva2VuQ291bnQoKXtyZXR1cm4gdGhpcy5fdG9rZW5Db3VudGVyfXBhcnNlTmFtZSgpe2NvbnN0IHQ9dGhpcy5leHBlY3RUb2tlbihsLk5BTUUpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk5BTUUsdmFsdWU6dC52YWx1ZX0pfXBhcnNlRG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuRE9DVU1FTlQsZGVmaW5pdGlvbnM6dGhpcy5tYW55KGwuU09GLHRoaXMucGFyc2VEZWZpbml0aW9uLGwuRU9GKX0pfXBhcnNlRGVmaW5pdGlvbigpe2lmKHRoaXMucGVlayhsLkJSQUNFX0wpKXJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2NvbnN0IHQ9dGhpcy5wZWVrRGVzY3JpcHRpb24oKSxuPXQ/dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk6dGhpcy5fbGV4ZXIudG9rZW47aWYobi5raW5kPT09bC5OQU1FKXtzd2l0Y2gobi52YWx1ZSl7Y2FzZSJzY2hlbWEiOnJldHVybiB0aGlzLnBhcnNlU2NoZW1hRGVmaW5pdGlvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uKCk7Y2FzZSJ0eXBlIjpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdFR5cGVEZWZpbml0aW9uKCk7Y2FzZSJpbnRlcmZhY2UiOnJldHVybiB0aGlzLnBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZURlZmluaXRpb24oKTtjYXNlImVudW0iOnJldHVybiB0aGlzLnBhcnNlRW51bVR5cGVEZWZpbml0aW9uKCk7Y2FzZSJpbnB1dCI6cmV0dXJuIHRoaXMucGFyc2VJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uKCk7Y2FzZSJkaXJlY3RpdmUiOnJldHVybiB0aGlzLnBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbigpfWlmKHQpdGhyb3cgRyh0aGlzLl9sZXhlci5zb3VyY2UsdGhpcy5fbGV4ZXIudG9rZW4uc3RhcnQsIlVuZXhwZWN0ZWQgZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9ucyBhcmUgc3VwcG9ydGVkIG9ubHkgb24gdHlwZSBkZWZpbml0aW9ucy4iKTtzd2l0Y2gobi52YWx1ZSl7Y2FzZSJxdWVyeSI6Y2FzZSJtdXRhdGlvbiI6Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2Nhc2UiZnJhZ21lbnQiOnJldHVybiB0aGlzLnBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCk7Y2FzZSJleHRlbmQiOnJldHVybiB0aGlzLnBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpfX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQobil9cGFyc2VPcGVyYXRpb25EZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtpZih0aGlzLnBlZWsobC5CUkFDRV9MKSlyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5PUEVSQVRJT05fREVGSU5JVElPTixvcGVyYXRpb246ZmUuUVVFUlksbmFtZTp2b2lkIDAsdmFyaWFibGVEZWZpbml0aW9uczpbXSxkaXJlY3RpdmVzOltdLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCl9KTtjb25zdCBuPXRoaXMucGFyc2VPcGVyYXRpb25UeXBlKCk7bGV0IGk7cmV0dXJuIHRoaXMucGVlayhsLk5BTUUpJiYoaT10aGlzLnBhcnNlTmFtZSgpKSx0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLG5hbWU6aSx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlT3BlcmF0aW9uVHlwZSgpe2NvbnN0IHQ9dGhpcy5leHBlY3RUb2tlbihsLk5BTUUpO3N3aXRjaCh0LnZhbHVlKXtjYXNlInF1ZXJ5IjpyZXR1cm4gZmUuUVVFUlk7Y2FzZSJtdXRhdGlvbiI6cmV0dXJuIGZlLk1VVEFUSU9OO2Nhc2Uic3Vic2NyaXB0aW9uIjpyZXR1cm4gZmUuU1VCU0NSSVBUSU9OfXRocm93IHRoaXMudW5leHBlY3RlZCh0KX1wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkobC5QQVJFTl9MLHRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb24sbC5QQVJFTl9SKX1wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm5vZGUodGhpcy5fbGV4ZXIudG9rZW4se2tpbmQ6VC5WQVJJQUJMRV9ERUZJTklUSU9OLHZhcmlhYmxlOnRoaXMucGFyc2VWYXJpYWJsZSgpLHR5cGU6KHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSksZGVmYXVsdFZhbHVlOnRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihsLkVRVUFMUyk/dGhpcy5wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCk6dm9pZCAwLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpfSl9cGFyc2VWYXJpYWJsZSgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5ET0xMQVIpLHRoaXMubm9kZSh0LHtraW5kOlQuVkFSSUFCTEUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpfSl9cGFyc2VTZWxlY3Rpb25TZXQoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuU0VMRUNUSU9OX1NFVCxzZWxlY3Rpb25zOnRoaXMubWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZVNlbGVjdGlvbixsLkJSQUNFX1IpfSl9cGFyc2VTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5wZWVrKGwuU1BSRUFEKT90aGlzLnBhcnNlRnJhZ21lbnQoKTp0aGlzLnBhcnNlRmllbGQoKX1wYXJzZUZpZWxkKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VOYW1lKCk7bGV0IGkscjtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQ09MT04pPyhpPW4scj10aGlzLnBhcnNlTmFtZSgpKTpyPW4sdGhpcy5ub2RlKHQse2tpbmQ6VC5GSUVMRCxhbGlhczppLG5hbWU6cixhcmd1bWVudHM6dGhpcy5wYXJzZUFyZ3VtZW50cyghMSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGVlayhsLkJSQUNFX0wpP3RoaXMucGFyc2VTZWxlY3Rpb25TZXQoKTp2b2lkIDB9KX1wYXJzZUFyZ3VtZW50cyh0KXtjb25zdCBuPXQ/dGhpcy5wYXJzZUNvbnN0QXJndW1lbnQ6dGhpcy5wYXJzZUFyZ3VtZW50O3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLlBBUkVOX0wsbixsLlBBUkVOX1IpfXBhcnNlQXJndW1lbnQodD0hMSl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbixpPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5ub2RlKG4se2tpbmQ6VC5BUkdVTUVOVCxuYW1lOmksdmFsdWU6dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KX0pfXBhcnNlQ29uc3RBcmd1bWVudCgpe3JldHVybiB0aGlzLnBhcnNlQXJndW1lbnQoITApfXBhcnNlRnJhZ21lbnQoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0VG9rZW4obC5TUFJFQUQpO2NvbnN0IG49dGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoIm9uIik7cmV0dXJuIW4mJnRoaXMucGVlayhsLk5BTUUpP3RoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfU1BSRUFELG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpfSk6dGhpcy5ub2RlKHQse2tpbmQ6VC5JTkxJTkVfRlJBR01FTlQsdHlwZUNvbmRpdGlvbjpuP3RoaXMucGFyc2VOYW1lZFR5cGUoKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pfXBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdGhpcy5leHBlY3RLZXl3b3JkKCJmcmFnbWVudCIpLHRoaXMuX29wdGlvbnMuYWxsb3dMZWdhY3lGcmFnbWVudFZhcmlhYmxlcz09PSEwP3RoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksdHlwZUNvbmRpdGlvbjoodGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpLHRoaXMucGFyc2VOYW1lZFR5cGUoKSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKX0pOnRoaXMubm9kZSh0LHtraW5kOlQuRlJBR01FTlRfREVGSU5JVElPTixuYW1lOnRoaXMucGFyc2VGcmFnbWVudE5hbWUoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpfSl9cGFyc2VGcmFnbWVudE5hbWUoKXtpZih0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJvbiIpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMucGFyc2VOYW1lKCl9cGFyc2VWYWx1ZUxpdGVyYWwodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtzd2l0Y2gobi5raW5kKXtjYXNlIGwuQlJBQ0tFVF9MOnJldHVybiB0aGlzLnBhcnNlTGlzdCh0KTtjYXNlIGwuQlJBQ0VfTDpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdCh0KTtjYXNlIGwuSU5UOnJldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZShuLHtraW5kOlQuSU5ULHZhbHVlOm4udmFsdWV9KTtjYXNlIGwuRkxPQVQ6cmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksdGhpcy5ub2RlKG4se2tpbmQ6VC5GTE9BVCx2YWx1ZTpuLnZhbHVlfSk7Y2FzZSBsLlNUUklORzpjYXNlIGwuQkxPQ0tfU1RSSU5HOnJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpO2Nhc2UgbC5OQU1FOnN3aXRjaCh0aGlzLmFkdmFuY2VMZXhlcigpLG4udmFsdWUpe2Nhc2UidHJ1ZSI6cmV0dXJuIHRoaXMubm9kZShuLHtraW5kOlQuQk9PTEVBTix2YWx1ZTohMH0pO2Nhc2UiZmFsc2UiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULkJPT0xFQU4sdmFsdWU6ITF9KTtjYXNlIm51bGwiOnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULk5VTEx9KTtkZWZhdWx0OnJldHVybiB0aGlzLm5vZGUobix7a2luZDpULkVOVU0sdmFsdWU6bi52YWx1ZX0pfWNhc2UgbC5ET0xMQVI6aWYodClpZih0aGlzLmV4cGVjdFRva2VuKGwuRE9MTEFSKSx0aGlzLl9sZXhlci50b2tlbi5raW5kPT09bC5OQU1FKXtjb25zdCBpPXRoaXMuX2xleGVyLnRva2VuLnZhbHVlO3Rocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYFVuZXhwZWN0ZWQgdmFyaWFibGUgIiQke2l9IiBpbiBjb25zdGFudCB2YWx1ZS5gKX1lbHNlIHRocm93IHRoaXMudW5leHBlY3RlZChuKTtyZXR1cm4gdGhpcy5wYXJzZVZhcmlhYmxlKCk7ZGVmYXVsdDp0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19cGFyc2VDb25zdFZhbHVlTGl0ZXJhbCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKCEwKX1wYXJzZVN0cmluZ0xpdGVyYWwoKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmFkdmFuY2VMZXhlcigpLHRoaXMubm9kZSh0LHtraW5kOlQuU1RSSU5HLHZhbHVlOnQudmFsdWUsYmxvY2s6dC5raW5kPT09bC5CTE9DS19TVFJJTkd9KX1wYXJzZUxpc3QodCl7Y29uc3Qgbj0oKT0+dGhpcy5wYXJzZVZhbHVlTGl0ZXJhbCh0KTtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuTElTVCx2YWx1ZXM6dGhpcy5hbnkobC5CUkFDS0VUX0wsbixsLkJSQUNLRVRfUil9KX1wYXJzZU9iamVjdCh0KXtjb25zdCBuPSgpPT50aGlzLnBhcnNlT2JqZWN0RmllbGQodCk7cmV0dXJuIHRoaXMubm9kZSh0aGlzLl9sZXhlci50b2tlbix7a2luZDpULk9CSkVDVCxmaWVsZHM6dGhpcy5hbnkobC5CUkFDRV9MLG4sbC5CUkFDRV9SKX0pfXBhcnNlT2JqZWN0RmllbGQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbixpPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4obC5DT0xPTiksdGhpcy5ub2RlKG4se2tpbmQ6VC5PQkpFQ1RfRklFTEQsbmFtZTppLHZhbHVlOnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwodCl9KX1wYXJzZURpcmVjdGl2ZXModCl7Y29uc3Qgbj1bXTtmb3IoO3RoaXMucGVlayhsLkFUKTspbi5wdXNoKHRoaXMucGFyc2VEaXJlY3RpdmUodCkpO3JldHVybiBufXBhcnNlQ29uc3REaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKX1wYXJzZURpcmVjdGl2ZSh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGwuQVQpLHRoaXMubm9kZShuLHtraW5kOlQuRElSRUNUSVZFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKSxhcmd1bWVudHM6dGhpcy5wYXJzZUFyZ3VtZW50cyh0KX0pfXBhcnNlVHlwZVJlZmVyZW5jZSgpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47bGV0IG47aWYodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQlJBQ0tFVF9MKSl7Y29uc3QgaT10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpO3RoaXMuZXhwZWN0VG9rZW4obC5CUkFDS0VUX1IpLG49dGhpcy5ub2RlKHQse2tpbmQ6VC5MSVNUX1RZUEUsdHlwZTppfSl9ZWxzZSBuPXRoaXMucGFyc2VOYW1lZFR5cGUoKTtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuQkFORyk/dGhpcy5ub2RlKHQse2tpbmQ6VC5OT05fTlVMTF9UWVBFLHR5cGU6bn0pOm59cGFyc2VOYW1lZFR5cGUoKXtyZXR1cm4gdGhpcy5ub2RlKHRoaXMuX2xleGVyLnRva2VuLHtraW5kOlQuTkFNRURfVFlQRSxuYW1lOnRoaXMucGFyc2VOYW1lKCl9KX1wZWVrRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5wZWVrKGwuU1RSSU5HKXx8dGhpcy5wZWVrKGwuQkxPQ0tfU1RSSU5HKX1wYXJzZURlc2NyaXB0aW9uKCl7aWYodGhpcy5wZWVrRGVzY3JpcHRpb24oKSlyZXR1cm4gdGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwoKX1wYXJzZVNjaGVtYURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzY2hlbWEiKTtjb25zdCBpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMubWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGwuQlJBQ0VfUik7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuU0NIRU1BX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixkaXJlY3RpdmVzOmksb3BlcmF0aW9uVHlwZXM6cn0pfXBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTt0aGlzLmV4cGVjdFRva2VuKGwuQ09MT04pO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWVkVHlwZSgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9QRVJBVElPTl9UWVBFX0RFRklOSVRJT04sb3BlcmF0aW9uOm4sdHlwZTppfSl9cGFyc2VTY2FsYXJUeXBlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5TQ0FMQVJfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cn0pfXBhcnNlT2JqZWN0VHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscz10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCksbz10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9CSkVDVF9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksaW50ZXJmYWNlczpyLGRpcmVjdGl2ZXM6cyxmaWVsZHM6b30pfXBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKXtyZXR1cm4gdGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoImltcGxlbWVudHMiKT90aGlzLmRlbGltaXRlZE1hbnkobC5BTVAsdGhpcy5wYXJzZU5hbWVkVHlwZSk6W119cGFyc2VGaWVsZHNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlRmllbGREZWZpbml0aW9uLGwuQlJBQ0VfUil9cGFyc2VGaWVsZERlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpO3RoaXMuZXhwZWN0VG9rZW4obC5DT0xPTik7Y29uc3Qgcz10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpLG89dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULkZJRUxEX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksYXJndW1lbnRzOnIsdHlwZTpzLGRpcmVjdGl2ZXM6b30pfXBhcnNlQXJndW1lbnREZWZzKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuUEFSRU5fTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixsLlBBUkVOX1IpfXBhcnNlSW5wdXRWYWx1ZURlZigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxpPXRoaXMucGFyc2VOYW1lKCk7dGhpcy5leHBlY3RUb2tlbihsLkNPTE9OKTtjb25zdCByPXRoaXMucGFyc2VUeXBlUmVmZXJlbmNlKCk7bGV0IHM7dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGwuRVFVQUxTKSYmKHM9dGhpcy5wYXJzZUNvbnN0VmFsdWVMaXRlcmFsKCkpO2NvbnN0IG89dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOUFVUX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksdHlwZTpyLGRlZmF1bHRWYWx1ZTpzLGRpcmVjdGl2ZXM6b30pfXBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbnRlcmZhY2UiKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlSW1wbGVtZW50c0ludGVyZmFjZXMoKSxzPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxvPXRoaXMucGFyc2VGaWVsZHNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczpzLGZpZWxkczpvfSl9cGFyc2VVbmlvblR5cGVEZWZpbml0aW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgidW5pb24iKTtjb25zdCBpPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscz10aGlzLnBhcnNlVW5pb25NZW1iZXJUeXBlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlVOSU9OX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnIsdHlwZXM6c30pfXBhcnNlVW5pb25NZW1iZXJUeXBlcygpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obC5FUVVBTFMpP3RoaXMuZGVsaW1pdGVkTWFueShsLlBJUEUsdGhpcy5wYXJzZU5hbWVkVHlwZSk6W119cGFyc2VFbnVtVHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJlbnVtIik7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksZGlyZWN0aXZlczpyLHZhbHVlczpzfSl9cGFyc2VFbnVtVmFsdWVzRGVmaW5pdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShsLkJSQUNFX0wsdGhpcy5wYXJzZUVudW1WYWx1ZURlZmluaXRpb24sbC5CUkFDRV9SKX1wYXJzZUVudW1WYWx1ZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksaT10aGlzLnBhcnNlRW51bVZhbHVlTmFtZSgpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULkVOVU1fVkFMVUVfREVGSU5JVElPTixkZXNjcmlwdGlvbjpuLG5hbWU6aSxkaXJlY3RpdmVzOnJ9KX1wYXJzZUVudW1WYWx1ZU5hbWUoKXtpZih0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJ0cnVlInx8dGhpcy5fbGV4ZXIudG9rZW4udmFsdWU9PT0iZmFsc2UifHx0aGlzLl9sZXhlci50b2tlbi52YWx1ZT09PSJudWxsIil0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSx0aGlzLl9sZXhlci50b2tlbi5zdGFydCxgJHtEZSh0aGlzLl9sZXhlci50b2tlbil9IGlzIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgYW4gZW51bSB2YWx1ZS5gKTtyZXR1cm4gdGhpcy5wYXJzZU5hbWUoKX1wYXJzZUlucHV0T2JqZWN0VHlwZURlZmluaXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJpbnB1dCIpO2NvbnN0IGk9dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxzPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlBVVF9PQkpFQ1RfVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOm4sbmFtZTppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlSW5wdXRGaWVsZHNEZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGwuQlJBQ0VfTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixsLkJSQUNFX1IpfXBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk7aWYodC5raW5kPT09bC5OQU1FKXN3aXRjaCh0LnZhbHVlKXtjYXNlInNjaGVtYSI6cmV0dXJuIHRoaXMucGFyc2VTY2hlbWFFeHRlbnNpb24oKTtjYXNlInNjYWxhciI6cmV0dXJuIHRoaXMucGFyc2VTY2FsYXJUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJ0eXBlIjpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdFR5cGVFeHRlbnNpb24oKTtjYXNlImludGVyZmFjZSI6cmV0dXJuIHRoaXMucGFyc2VJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uKCk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHRoaXMucGFyc2VVbmlvblR5cGVFeHRlbnNpb24oKTtjYXNlImVudW0iOnJldHVybiB0aGlzLnBhcnNlRW51bVR5cGVFeHRlbnNpb24oKTtjYXNlImlucHV0IjpyZXR1cm4gdGhpcy5wYXJzZUlucHV0T2JqZWN0VHlwZUV4dGVuc2lvbigpfXRocm93IHRoaXMudW5leHBlY3RlZCh0KX1wYXJzZVNjaGVtYUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO2NvbnN0IG49dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLGk9dGhpcy5vcHRpb25hbE1hbnkobC5CUkFDRV9MLHRoaXMucGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbixsLkJSQUNFX1IpO2lmKG4ubGVuZ3RoPT09MCYmaS5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDSEVNQV9FWFRFTlNJT04sZGlyZWN0aXZlczpuLG9wZXJhdGlvblR5cGVzOml9KX1wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJzY2FsYXIiKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCk7aWYoaS5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlNDQUxBUl9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppfSl9cGFyc2VPYmplY3RUeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgidHlwZSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCYmcy5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULk9CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOm4saW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlSW50ZXJmYWNlVHlwZUV4dGVuc2lvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoImludGVyZmFjZSIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLHI9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHM9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCYmcy5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTixuYW1lOm4saW50ZXJmYWNlczppLGRpcmVjdGl2ZXM6cixmaWVsZHM6c30pfXBhcnNlVW5pb25UeXBlRXh0ZW5zaW9uKCl7Y29uc3QgdD10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgidW5pb24iKTtjb25zdCBuPXRoaXMucGFyc2VOYW1lKCksaT10aGlzLnBhcnNlQ29uc3REaXJlY3RpdmVzKCkscj10aGlzLnBhcnNlVW5pb25NZW1iZXJUeXBlcygpO2lmKGkubGVuZ3RoPT09MCYmci5sZW5ndGg9PT0wKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLm5vZGUodCx7a2luZDpULlVOSU9OX1RZUEVfRVhURU5TSU9OLG5hbWU6bixkaXJlY3RpdmVzOmksdHlwZXM6cn0pfXBhcnNlRW51bVR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJlbnVtIik7Y29uc3Qgbj10aGlzLnBhcnNlTmFtZSgpLGk9dGhpcy5wYXJzZUNvbnN0RGlyZWN0aXZlcygpLHI9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7aWYoaS5sZW5ndGg9PT0wJiZyLmxlbmd0aD09PTApdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRU5VTV9UWVBFX0VYVEVOU0lPTixuYW1lOm4sZGlyZWN0aXZlczppLHZhbHVlczpyfSl9cGFyc2VJbnB1dE9iamVjdFR5cGVFeHRlbnNpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJpbnB1dCIpO2NvbnN0IG49dGhpcy5wYXJzZU5hbWUoKSxpPXRoaXMucGFyc2VDb25zdERpcmVjdGl2ZXMoKSxyPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtpZihpLmxlbmd0aD09PTAmJnIubGVuZ3RoPT09MCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5ub2RlKHQse2tpbmQ6VC5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT04sbmFtZTpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pfXBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbigpe2NvbnN0IHQ9dGhpcy5fbGV4ZXIudG9rZW4sbj10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImRpcmVjdGl2ZSIpLHRoaXMuZXhwZWN0VG9rZW4obC5BVCk7Y29uc3QgaT10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpLHM9dGhpcy5leHBlY3RPcHRpb25hbEtleXdvcmQoInJlcGVhdGFibGUiKTt0aGlzLmV4cGVjdEtleXdvcmQoIm9uIik7Y29uc3Qgbz10aGlzLnBhcnNlRGlyZWN0aXZlTG9jYXRpb25zKCk7cmV0dXJuIHRoaXMubm9kZSh0LHtraW5kOlQuRElSRUNUSVZFX0RFRklOSVRJT04sZGVzY3JpcHRpb246bixuYW1lOmksYXJndW1lbnRzOnIscmVwZWF0YWJsZTpzLGxvY2F0aW9uczpvfSl9cGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKXtyZXR1cm4gdGhpcy5kZWxpbWl0ZWRNYW55KGwuUElQRSx0aGlzLnBhcnNlRGlyZWN0aXZlTG9jYXRpb24pfXBhcnNlRGlyZWN0aXZlTG9jYXRpb24oKXtjb25zdCB0PXRoaXMuX2xleGVyLnRva2VuLG49dGhpcy5wYXJzZU5hbWUoKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR2Usbi52YWx1ZSkpcmV0dXJuIG47dGhyb3cgdGhpcy51bmV4cGVjdGVkKHQpfW5vZGUodCxuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ub0xvY2F0aW9uIT09ITAmJihuLmxvYz1uZXcgYW4odCx0aGlzLl9sZXhlci5sYXN0VG9rZW4sdGhpcy5fbGV4ZXIuc291cmNlKSksbn1wZWVrKHQpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09dH1leHBlY3RUb2tlbih0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO2lmKG4ua2luZD09PXQpcmV0dXJuIHRoaXMuYWR2YW5jZUxleGVyKCksbjt0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBFeHBlY3RlZCAke1N0KHQpfSwgZm91bmQgJHtEZShuKX0uYCl9ZXhwZWN0T3B0aW9uYWxUb2tlbih0KXtyZXR1cm4gdGhpcy5fbGV4ZXIudG9rZW4ua2luZD09PXQ/KHRoaXMuYWR2YW5jZUxleGVyKCksITApOiExfWV4cGVjdEtleXdvcmQodCl7Y29uc3Qgbj10aGlzLl9sZXhlci50b2tlbjtpZihuLmtpbmQ9PT1sLk5BTUUmJm4udmFsdWU9PT10KXRoaXMuYWR2YW5jZUxleGVyKCk7ZWxzZSB0aHJvdyBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBFeHBlY3RlZCAiJHt0fSIsIGZvdW5kICR7RGUobil9LmApfWV4cGVjdE9wdGlvbmFsS2V5d29yZCh0KXtjb25zdCBuPXRoaXMuX2xleGVyLnRva2VuO3JldHVybiBuLmtpbmQ9PT1sLk5BTUUmJm4udmFsdWU9PT10Pyh0aGlzLmFkdmFuY2VMZXhlcigpLCEwKTohMX11bmV4cGVjdGVkKHQpe2NvbnN0IG49dCE9bnVsbD90OnRoaXMuX2xleGVyLnRva2VuO3JldHVybiBHKHRoaXMuX2xleGVyLnNvdXJjZSxuLnN0YXJ0LGBVbmV4cGVjdGVkICR7RGUobil9LmApfWFueSh0LG4saSl7dGhpcy5leHBlY3RUb2tlbih0KTtjb25zdCByPVtdO2Zvcig7IXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKTspci5wdXNoKG4uY2FsbCh0aGlzKSk7cmV0dXJuIHJ9b3B0aW9uYWxNYW55KHQsbixpKXtpZih0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCkpe2NvbnN0IHI9W107ZG8gci5wdXNoKG4uY2FsbCh0aGlzKSk7d2hpbGUoIXRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihpKSk7cmV0dXJuIHJ9cmV0dXJuW119bWFueSh0LG4saSl7dGhpcy5leHBlY3RUb2tlbih0KTtjb25zdCByPVtdO2RvIHIucHVzaChuLmNhbGwodGhpcykpO3doaWxlKCF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oaSkpO3JldHVybiByfWRlbGltaXRlZE1hbnkodCxuKXt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCk7Y29uc3QgaT1bXTtkbyBpLnB1c2gobi5jYWxsKHRoaXMpKTt3aGlsZSh0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4odCkpO3JldHVybiBpfWFkdmFuY2VMZXhlcigpe2NvbnN0e21heFRva2Vuczp0fT10aGlzLl9vcHRpb25zLG49dGhpcy5fbGV4ZXIuYWR2YW5jZSgpO2lmKG4ua2luZCE9PWwuRU9GJiYoKyt0aGlzLl90b2tlbkNvdW50ZXIsdCE9PXZvaWQgMCYmdGhpcy5fdG9rZW5Db3VudGVyPnQpKXRocm93IEcodGhpcy5fbGV4ZXIuc291cmNlLG4uc3RhcnQsYERvY3VtZW50IGNvbnRhaW5zIG1vcmUgdGhhdCAke3R9IHRva2Vucy4gUGFyc2luZyBhYm9ydGVkLmApfX1mdW5jdGlvbiBEZShlKXtjb25zdCB0PWUudmFsdWU7cmV0dXJuIFN0KGUua2luZCkrKHQhPW51bGw/YCAiJHt0fSJgOiIiKX1mdW5jdGlvbiBTdChlKXtyZXR1cm4gcG4oZSk/YCIke2V9ImA6ZX1mdW5jdGlvbiBSbihlKXtyZXR1cm5gIiR7ZS5yZXBsYWNlKFBuLExuKX0iYH1jb25zdCBQbj0vW1x4MDAtXHgxZlx4MjJceDVjXHg3Zi1ceDlmXS9nO2Z1bmN0aW9uIExuKGUpe3JldHVybiBGbltlLmNoYXJDb2RlQXQoMCldfWNvbnN0IEZuPVsiXFx1MDAwMCIsIlxcdTAwMDEiLCJcXHUwMDAyIiwiXFx1MDAwMyIsIlxcdTAwMDQiLCJcXHUwMDA1IiwiXFx1MDAwNiIsIlxcdTAwMDciLCJcXGIiLCJcXHQiLCJcXG4iLCJcXHUwMDBCIiwiXFxmIiwiXFxyIiwiXFx1MDAwRSIsIlxcdTAwMEYiLCJcXHUwMDEwIiwiXFx1MDAxMSIsIlxcdTAwMTIiLCJcXHUwMDEzIiwiXFx1MDAxNCIsIlxcdTAwMTUiLCJcXHUwMDE2IiwiXFx1MDAxNyIsIlxcdTAwMTgiLCJcXHUwMDE5IiwiXFx1MDAxQSIsIlxcdTAwMUIiLCJcXHUwMDFDIiwiXFx1MDAxRCIsIlxcdTAwMUUiLCJcXHUwMDFGIiwiIiwiIiwnXFwiJywiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiXFxcXCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIlxcdTAwN0YiLCJcXHUwMDgwIiwiXFx1MDA4MSIsIlxcdTAwODIiLCJcXHUwMDgzIiwiXFx1MDA4NCIsIlxcdTAwODUiLCJcXHUwMDg2IiwiXFx1MDA4NyIsIlxcdTAwODgiLCJcXHUwMDg5IiwiXFx1MDA4QSIsIlxcdTAwOEIiLCJcXHUwMDhDIiwiXFx1MDA4RCIsIlxcdTAwOEUiLCJcXHUwMDhGIiwiXFx1MDA5MCIsIlxcdTAwOTEiLCJcXHUwMDkyIiwiXFx1MDA5MyIsIlxcdTAwOTQiLCJcXHUwMDk1IiwiXFx1MDA5NiIsIlxcdTAwOTciLCJcXHUwMDk4IiwiXFx1MDA5OSIsIlxcdTAwOUEiLCJcXHUwMDlCIiwiXFx1MDA5QyIsIlxcdTAwOUQiLCJcXHUwMDlFIiwiXFx1MDA5RiJdLE1uPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uICRuKGUsdCxuPXZ0KXtjb25zdCBpPW5ldyBNYXA7Zm9yKGNvbnN0IFAgb2YgT2JqZWN0LnZhbHVlcyhUKSlpLnNldChQLEJuKHQsUCkpO2xldCByLHM9QXJyYXkuaXNBcnJheShlKSxvPVtlXSxjPS0xLGY9W10sZD1lLHUseTtjb25zdCBnPVtdLGI9W107ZG97YysrO2NvbnN0IFA9Yz09PW8ubGVuZ3RoLGo9UCYmZi5sZW5ndGghPT0wO2lmKFApe2lmKHU9Yi5sZW5ndGg9PT0wP3ZvaWQgMDpnW2cubGVuZ3RoLTFdLGQ9eSx5PWIucG9wKCksailpZihzKXtkPWQuc2xpY2UoKTtsZXQgRT0wO2Zvcihjb25zdFt3LENdb2YgZil7Y29uc3QgTD13LUU7Qz09PW51bGw/KGQuc3BsaWNlKEwsMSksRSsrKTpkW0xdPUN9fWVsc2V7ZD1EKHt9LGQpO2Zvcihjb25zdFtFLHddb2YgZilkW0VdPXd9Yz1yLmluZGV4LG89ci5rZXlzLGY9ci5lZGl0cyxzPXIuaW5BcnJheSxyPXIucHJldn1lbHNlIGlmKHkpe2lmKHU9cz9jOm9bY10sZD15W3VdLGQ9PW51bGwpY29udGludWU7Zy5wdXNoKHUpfWxldCB2O2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgbSxOO2d0KGQpfHxhZSghMSxgSW52YWxpZCBBU1QgTm9kZTogJHtZZShkKX0uYCk7Y29uc3QgRT1QPyhtPWkuZ2V0KGQua2luZCkpPT09bnVsbHx8bT09PXZvaWQgMD92b2lkIDA6bS5sZWF2ZTooTj1pLmdldChkLmtpbmQpKT09PW51bGx8fE49PT12b2lkIDA/dm9pZCAwOk4uZW50ZXI7aWYodj1FPT1udWxsP3ZvaWQgMDpFLmNhbGwodCxkLHUseSxnLGIpLHY9PT1NbilicmVhaztpZih2PT09ITEpe2lmKCFQKXtnLnBvcCgpO2NvbnRpbnVlfX1lbHNlIGlmKHYhPT12b2lkIDAmJihmLnB1c2goW3Usdl0pLCFQKSlpZihndCh2KSlkPXY7ZWxzZXtnLnBvcCgpO2NvbnRpbnVlfX1pZih2PT09dm9pZCAwJiZqJiZmLnB1c2goW3UsZF0pLFApZy5wb3AoKTtlbHNle3ZhciBSO3I9e2luQXJyYXk6cyxpbmRleDpjLGtleXM6byxlZGl0czpmLHByZXY6cn0scz1BcnJheS5pc0FycmF5KGQpLG89cz9kOihSPW5bZC5raW5kXSkhPT1udWxsJiZSIT09dm9pZCAwP1I6W10sYz0tMSxmPVtdLHkmJmIucHVzaCh5KSx5PWR9fXdoaWxlKHIhPT12b2lkIDApO3JldHVybiBmLmxlbmd0aCE9PTA/ZltmLmxlbmd0aC0xXVsxXTplfWZ1bmN0aW9uIEJuKGUsdCl7Y29uc3Qgbj1lW3RdO3JldHVybiB0eXBlb2Ygbj09Im9iamVjdCI/bjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj97ZW50ZXI6bixsZWF2ZTp2b2lkIDB9OntlbnRlcjplLmVudGVyLGxlYXZlOmUubGVhdmV9fWZ1bmN0aW9uIFVuKGUpe3JldHVybiAkbihlLGpuKX1jb25zdCBWbj04MCxqbj17TmFtZTp7bGVhdmU6ZT0+ZS52YWx1ZX0sVmFyaWFibGU6e2xlYXZlOmU9PiIkIitlLm5hbWV9LERvY3VtZW50OntsZWF2ZTplPT5wKGUuZGVmaW5pdGlvbnMsYAoKYCl9LE9wZXJhdGlvbkRlZmluaXRpb246e2xlYXZlKGUpe2NvbnN0IHQ9TygiKCIscChlLnZhcmlhYmxlRGVmaW5pdGlvbnMsIiwgIiksIikiKSxuPXAoW2Uub3BlcmF0aW9uLHAoW2UubmFtZSx0XSkscChlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKTtyZXR1cm4obj09PSJxdWVyeSI/IiI6bisiICIpK2Uuc2VsZWN0aW9uU2V0fX0sVmFyaWFibGVEZWZpbml0aW9uOntsZWF2ZTooe3ZhcmlhYmxlOmUsdHlwZTp0LGRlZmF1bHRWYWx1ZTpuLGRpcmVjdGl2ZXM6aX0pPT5lKyI6ICIrdCtPKCIgPSAiLG4pK08oIiAiLHAoaSwiICIpKX0sU2VsZWN0aW9uU2V0OntsZWF2ZTooe3NlbGVjdGlvbnM6ZX0pPT5yZShlKX0sRmllbGQ6e2xlYXZlKHthbGlhczplLG5hbWU6dCxhcmd1bWVudHM6bixkaXJlY3RpdmVzOmksc2VsZWN0aW9uU2V0OnJ9KXtjb25zdCBzPU8oIiIsZSwiOiAiKSt0O2xldCBvPXMrTygiKCIscChuLCIsICIpLCIpIik7cmV0dXJuIG8ubGVuZ3RoPlZuJiYobz1zK08oYCgKYCxDZShwKG4sYApgKSksYAopYCkpLHAoW28scChpLCIgIikscl0sIiAiKX19LEFyZ3VtZW50OntsZWF2ZTooe25hbWU6ZSx2YWx1ZTp0fSk9PmUrIjogIit0fSxGcmFnbWVudFNwcmVhZDp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0fSk9PiIuLi4iK2UrTygiICIscCh0LCIgIikpfSxJbmxpbmVGcmFnbWVudDp7bGVhdmU6KHt0eXBlQ29uZGl0aW9uOmUsZGlyZWN0aXZlczp0LHNlbGVjdGlvblNldDpufSk9PnAoWyIuLi4iLE8oIm9uICIsZSkscCh0LCIgIiksbl0sIiAiKX0sRnJhZ21lbnREZWZpbml0aW9uOntsZWF2ZTooe25hbWU6ZSx0eXBlQ29uZGl0aW9uOnQsdmFyaWFibGVEZWZpbml0aW9uczpuLGRpcmVjdGl2ZXM6aSxzZWxlY3Rpb25TZXQ6cn0pPT5gZnJhZ21lbnQgJHtlfSR7TygiKCIscChuLCIsICIpLCIpIil9IG9uICR7dH0gJHtPKCIiLHAoaSwiICIpLCIgIil9YCtyfSxJbnRWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplfSk9PmV9LEZsb2F0VmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxTdHJpbmdWYWx1ZTp7bGVhdmU6KHt2YWx1ZTplLGJsb2NrOnR9KT0+dD9obihlKTpSbihlKX0sQm9vbGVhblZhbHVlOntsZWF2ZTooe3ZhbHVlOmV9KT0+ZT8idHJ1ZSI6ImZhbHNlIn0sTnVsbFZhbHVlOntsZWF2ZTooKT0+Im51bGwifSxFbnVtVmFsdWU6e2xlYXZlOih7dmFsdWU6ZX0pPT5lfSxMaXN0VmFsdWU6e2xlYXZlOih7dmFsdWVzOmV9KT0+IlsiK3AoZSwiLCAiKSsiXSJ9LE9iamVjdFZhbHVlOntsZWF2ZTooe2ZpZWxkczplfSk9PiJ7IitwKGUsIiwgIikrIn0ifSxPYmplY3RGaWVsZDp7bGVhdmU6KHtuYW1lOmUsdmFsdWU6dH0pPT5lKyI6ICIrdH0sRGlyZWN0aXZlOntsZWF2ZTooe25hbWU6ZSxhcmd1bWVudHM6dH0pPT4iQCIrZStPKCIoIixwKHQsIiwgIiksIikiKX0sTmFtZWRUeXBlOntsZWF2ZTooe25hbWU6ZX0pPT5lfSxMaXN0VHlwZTp7bGVhdmU6KHt0eXBlOmV9KT0+IlsiK2UrIl0ifSxOb25OdWxsVHlwZTp7bGVhdmU6KHt0eXBlOmV9KT0+ZSsiISJ9LFNjaGVtYURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxkaXJlY3RpdmVzOnQsb3BlcmF0aW9uVHlwZXM6bn0pPT5PKCIiLGUsYApgKStwKFsic2NoZW1hIixwKHQsIiAiKSxyZShuKV0sIiAiKX0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246e2xlYXZlOih7b3BlcmF0aW9uOmUsdHlwZTp0fSk9PmUrIjogIit0fSxTY2FsYXJUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm59KT0+TygiIixlLGAKYCkrcChbInNjYWxhciIsdCxwKG4sIiAiKV0sIiAiKX0sT2JqZWN0VHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6aSxmaWVsZHM6cn0pPT5PKCIiLGUsYApgKStwKFsidHlwZSIsdCxPKCJpbXBsZW1lbnRzICIscChuLCIgJiAiKSkscChpLCIgIikscmUocildLCIgIil9LEZpZWxkRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxhcmd1bWVudHM6bix0eXBlOmksZGlyZWN0aXZlczpyfSk9Pk8oIiIsZSxgCmApK3QrKE90KG4pP08oYCgKYCxDZShwKG4sYApgKSksYAopYCk6TygiKCIscChuLCIsICIpLCIpIikpKyI6ICIraStPKCIgIixwKHIsIiAiKSl9LElucHV0VmFsdWVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LHR5cGU6bixkZWZhdWx0VmFsdWU6aSxkaXJlY3RpdmVzOnJ9KT0+TygiIixlLGAKYCkrcChbdCsiOiAiK24sTygiPSAiLGkpLHAociwiICIpXSwiICIpfSxJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxpbnRlcmZhY2VzOm4sZGlyZWN0aXZlczppLGZpZWxkczpyfSk9Pk8oIiIsZSxgCmApK3AoWyJpbnRlcmZhY2UiLHQsTygiaW1wbGVtZW50cyAiLHAobiwiICYgIikpLHAoaSwiICIpLHJlKHIpXSwiICIpfSxVbmlvblR5cGVEZWZpbml0aW9uOntsZWF2ZTooe2Rlc2NyaXB0aW9uOmUsbmFtZTp0LGRpcmVjdGl2ZXM6bix0eXBlczppfSk9Pk8oIiIsZSxgCmApK3AoWyJ1bmlvbiIsdCxwKG4sIiAiKSxPKCI9ICIscChpLCIgfCAiKSldLCIgIil9LEVudW1UeXBlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxkaXJlY3RpdmVzOm4sdmFsdWVzOml9KT0+TygiIixlLGAKYCkrcChbImVudW0iLHQscChuLCIgIikscmUoaSldLCIgIil9LEVudW1WYWx1ZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpufSk9Pk8oIiIsZSxgCmApK3AoW3QscChuLCIgIildLCIgIil9LElucHV0T2JqZWN0VHlwZURlZmluaXRpb246e2xlYXZlOih7ZGVzY3JpcHRpb246ZSxuYW1lOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9Pk8oIiIsZSxgCmApK3AoWyJpbnB1dCIsdCxwKG4sIiAiKSxyZShpKV0sIiAiKX0sRGlyZWN0aXZlRGVmaW5pdGlvbjp7bGVhdmU6KHtkZXNjcmlwdGlvbjplLG5hbWU6dCxhcmd1bWVudHM6bixyZXBlYXRhYmxlOmksbG9jYXRpb25zOnJ9KT0+TygiIixlLGAKYCkrImRpcmVjdGl2ZSBAIit0KyhPdChuKT9PKGAoCmAsQ2UocChuLGAKYCkpLGAKKWApOk8oIigiLHAobiwiLCAiKSwiKSIpKSsoaT8iIHJlcGVhdGFibGUiOiIiKSsiIG9uICIrcChyLCIgfCAiKX0sU2NoZW1hRXh0ZW5zaW9uOntsZWF2ZTooe2RpcmVjdGl2ZXM6ZSxvcGVyYXRpb25UeXBlczp0fSk9PnAoWyJleHRlbmQgc2NoZW1hIixwKGUsIiAiKSxyZSh0KV0sIiAiKX0sU2NhbGFyVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0fSk9PnAoWyJleHRlbmQgc2NhbGFyIixlLHAodCwiICIpXSwiICIpfSxPYmplY3RUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxpbnRlcmZhY2VzOnQsZGlyZWN0aXZlczpuLGZpZWxkczppfSk9PnAoWyJleHRlbmQgdHlwZSIsZSxPKCJpbXBsZW1lbnRzICIscCh0LCIgJiAiKSkscChuLCIgIikscmUoaSldLCIgIil9LEludGVyZmFjZVR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGludGVyZmFjZXM6dCxkaXJlY3RpdmVzOm4sZmllbGRzOml9KT0+cChbImV4dGVuZCBpbnRlcmZhY2UiLGUsTygiaW1wbGVtZW50cyAiLHAodCwiICYgIikpLHAobiwiICIpLHJlKGkpXSwiICIpfSxVbmlvblR5cGVFeHRlbnNpb246e2xlYXZlOih7bmFtZTplLGRpcmVjdGl2ZXM6dCx0eXBlczpufSk9PnAoWyJleHRlbmQgdW5pb24iLGUscCh0LCIgIiksTygiPSAiLHAobiwiIHwgIikpXSwiICIpfSxFbnVtVHlwZUV4dGVuc2lvbjp7bGVhdmU6KHtuYW1lOmUsZGlyZWN0aXZlczp0LHZhbHVlczpufSk9PnAoWyJleHRlbmQgZW51bSIsZSxwKHQsIiAiKSxyZShuKV0sIiAiKX0sSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uOntsZWF2ZTooe25hbWU6ZSxkaXJlY3RpdmVzOnQsZmllbGRzOm59KT0+cChbImV4dGVuZCBpbnB1dCIsZSxwKHQsIiAiKSxyZShuKV0sIiAiKX19O2Z1bmN0aW9uIHAoZSx0PSIiKXt2YXIgbjtyZXR1cm4obj1lPT1udWxsP3ZvaWQgMDplLmZpbHRlcihpPT5pKS5qb2luKHQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjoiIn1mdW5jdGlvbiByZShlKXtyZXR1cm4gTyhgewpgLENlKHAoZSxgCmApKSxgCn1gKX1mdW5jdGlvbiBPKGUsdCxuPSIiKXtyZXR1cm4gdCE9bnVsbCYmdCE9PSIiP2UrdCtuOiIifWZ1bmN0aW9uIENlKGUpe3JldHVybiBPKCIgICIsZS5yZXBsYWNlKC9cbi9nLGAKICBgKSl9ZnVuY3Rpb24gT3QoZSl7dmFyIHQ7cmV0dXJuKHQ9ZT09bnVsbD92b2lkIDA6ZS5zb21lKG49Pm4uaW5jbHVkZXMoYApgKSkpIT09bnVsbCYmdCE9PXZvaWQgMD90OiExfWNvbnN0IHd0PWU9Pnt2YXIgaSxyO2xldCB0O2NvbnN0IG49ZS5kZWZpbml0aW9ucy5maWx0ZXIocz0+cy5raW5kPT09Ik9wZXJhdGlvbkRlZmluaXRpb24iKTtyZXR1cm4gbi5sZW5ndGg9PT0xJiYodD0ocj0oaT1uWzBdKT09bnVsbD92b2lkIDA6aS5uYW1lKT09bnVsbD92b2lkIDA6ci52YWx1ZSksdH0sSmU9ZT0+e2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7bGV0IG47dHJ5e2NvbnN0IGk9SXQoZSk7bj13dChpKX1jYXRjaChpKXt9cmV0dXJue3F1ZXJ5OmUsb3BlcmF0aW9uTmFtZTpufX1jb25zdCB0PXd0KGUpO3JldHVybntxdWVyeTpVbihlKSxvcGVyYXRpb25OYW1lOnR9fTtjbGFzcyBkZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7Y29uc3QgaT1gJHtkZS5leHRyYWN0TWVzc2FnZSh0KX06ICR7SlNPTi5zdHJpbmdpZnkoe3Jlc3BvbnNlOnQscmVxdWVzdDpufSl9YDtzdXBlcihpKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkZS5wcm90b3R5cGUpLHRoaXMucmVzcG9uc2U9dCx0aGlzLnJlcXVlc3Q9bix0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U9PSJmdW5jdGlvbiImJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZGUpfXN0YXRpYyBleHRyYWN0TWVzc2FnZSh0KXt2YXIgbixpLHI7cmV0dXJuKHI9KGk9KG49dC5lcnJvcnMpPT1udWxsP3ZvaWQgMDpuWzBdKT09bnVsbD92b2lkIDA6aS5tZXNzYWdlKSE9bnVsbD9yOmBHcmFwaFFMIEVycm9yIChDb2RlOiAke3Quc3RhdHVzfSlgfX12YXIgcW49dHlwZW9mIGdsb2JhbFRoaXMhPSJ1bmRlZmluZWQiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCI/d2luZG93OnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiP2dsb2JhbDp0eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjp7fTtmdW5jdGlvbiBEdChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfXZhciBRZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6cW4saT1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt0aGlzLmZldGNoPSExLHRoaXMuRE9NRXhjZXB0aW9uPW4uRE9NRXhjZXB0aW9ufXJldHVybiBzLnByb3RvdHlwZT1uLG5ldyBzfSgpOyhmdW5jdGlvbihzKXsoZnVuY3Rpb24obyl7dmFyIGM9e3NlYXJjaFBhcmFtczoiVVJMU2VhcmNoUGFyYW1zImluIHMsaXRlcmFibGU6IlN5bWJvbCJpbiBzJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGJsb2I6IkZpbGVSZWFkZXIiaW4gcyYmIkJsb2IiaW4gcyYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YToiRm9ybURhdGEiaW4gcyxhcnJheUJ1ZmZlcjoiQXJyYXlCdWZmZXIiaW4gc307ZnVuY3Rpb24gZihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9aWYoYy5hcnJheUJ1ZmZlcil2YXIgZD1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmZC5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2Z1bmN0aW9uIHkoYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBnKGEpe3JldHVybiB0eXBlb2YgYSE9InN0cmluZyImJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBiKGEpe3ZhciBoPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIF89YS5zaGlmdCgpO3JldHVybntkb25lOl89PT12b2lkIDAsdmFsdWU6X319fTtyZXR1cm4gYy5pdGVyYWJsZSYmKGhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBofSksaH1mdW5jdGlvbiBtKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBtP2EuZm9yRWFjaChmdW5jdGlvbihoLF8pe3RoaXMuYXBwZW5kKF8saCl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3RoaXMuYXBwZW5kKGhbMF0saFsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpcy5hcHBlbmQoaCxhW2hdKX0sdGhpcyl9bS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsaCl7YT15KGEpLGg9ZyhoKTt2YXIgXz10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1fP18rIiwgIitoOmh9LG0ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5tYXBbeShhKV19LG0ucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYT15KGEpLHRoaXMuaGFzKGEpP3RoaXMubWFwW2FdOm51bGx9LG0ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoeShhKSl9LG0ucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGgpe3RoaXMubWFwW3koYSldPWcoaCl9LG0ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxoKXtmb3IodmFyIF8gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoXykmJmEuY2FsbChoLHRoaXMubWFwW19dLF8sdGhpcyl9LG0ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGgsXyl7YS5wdXNoKF8pfSksYihhKX0sbS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihoKXthLnB1c2goaCl9KSxiKGEpfSxtLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihoLF8pe2EucHVzaChbXyxoXSl9KSxiKGEpfSxjLml0ZXJhYmxlJiYobS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1tLnByb3RvdHlwZS5lbnRyaWVzKTtmdW5jdGlvbiBOKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIFIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGgsXyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtoKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7XyhhLmVycm9yKX19KX1mdW5jdGlvbiBQKGEpe3ZhciBoPW5ldyBGaWxlUmVhZGVyLF89UihoKTtyZXR1cm4gaC5yZWFkQXNBcnJheUJ1ZmZlcihhKSxffWZ1bmN0aW9uIGooYSl7dmFyIGg9bmV3IEZpbGVSZWFkZXIsXz1SKGgpO3JldHVybiBoLnJlYWRBc1RleHQoYSksX31mdW5jdGlvbiB2KGEpe2Zvcih2YXIgaD1uZXcgVWludDhBcnJheShhKSxfPW5ldyBBcnJheShoLmxlbmd0aCksUz0wO1M8aC5sZW5ndGg7UysrKV9bU109U3RyaW5nLmZyb21DaGFyQ29kZShoW1NdKTtyZXR1cm4gXy5qb2luKCIiKX1mdW5jdGlvbiBFKGEpe2lmKGEuc2xpY2UpcmV0dXJuIGEuc2xpY2UoMCk7dmFyIGg9bmV3IFVpbnQ4QXJyYXkoYS5ieXRlTGVuZ3RoKTtyZXR1cm4gaC5zZXQobmV3IFVpbnQ4QXJyYXkoYSkpLGguYnVmZmVyfWZ1bmN0aW9uIHcoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihhKXt0aGlzLl9ib2R5SW5pdD1hLGE/dHlwZW9mIGE9PSJzdHJpbmciP3RoaXMuX2JvZHlUZXh0PWE6Yy5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpP3RoaXMuX2JvZHlCbG9iPWE6Yy5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSk/dGhpcy5fYm9keUZvcm1EYXRhPWE6Yy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKT90aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk6Yy5hcnJheUJ1ZmZlciYmYy5ibG9iJiZmKGEpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9RShhLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpjLmFycmF5QnVmZmVyJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl8fHUoYSkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1FKGEpOnRoaXMuX2JvZHlUZXh0PWE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwodHlwZW9mIGE9PSJzdHJpbmciP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6Yy5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSl9LGMuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPU4odGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj9OKHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKFApfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIGE9Tih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBqKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxjLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKHgpfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9dmFyIEM9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtmdW5jdGlvbiBMKGEpe3ZhciBoPWEudG9VcHBlckNhc2UoKTtyZXR1cm4gQy5pbmRleE9mKGgpPi0xP2g6YX1mdW5jdGlvbiBJKGEsaCl7aD1ofHx7fTt2YXIgXz1oLmJvZHk7aWYoYSBpbnN0YW5jZW9mIEkpe2lmKGEuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGguaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLHRoaXMuc2lnbmFsPWEuc2lnbmFsLCFfJiZhLl9ib2R5SW5pdCE9bnVsbCYmKF89YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1oLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHwic2FtZS1vcmlnaW4iLChoLmhlYWRlcnN8fCF0aGlzLmhlYWRlcnMpJiYodGhpcy5oZWFkZXJzPW5ldyBtKGguaGVhZGVycykpLHRoaXMubWV0aG9kPUwoaC5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIiksdGhpcy5tb2RlPWgubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMuc2lnbmFsPWguc2lnbmFsfHx0aGlzLnNpZ25hbCx0aGlzLnJlZmVycmVyPW51bGwsKHRoaXMubWV0aG9kPT09IkdFVCJ8fHRoaXMubWV0aG9kPT09IkhFQUQiKSYmXyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KF8pfUkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX07ZnVuY3Rpb24geChhKXt2YXIgaD1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihfKXtpZihfKXt2YXIgUz1fLnNwbGl0KCI9Iiksaz1TLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLEE9Uy5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO2guYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChrKSxkZWNvZGVVUklDb21wb25lbnQoQSkpfX0pLGh9ZnVuY3Rpb24geihhKXt2YXIgaD1uZXcgbSxfPWEucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpO3JldHVybiBfLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oUyl7dmFyIGs9Uy5zcGxpdCgiOiIpLEE9ay5zaGlmdCgpLnRyaW0oKTtpZihBKXt2YXIgSz1rLmpvaW4oIjoiKS50cmltKCk7aC5hcHBlbmQoQSxLKX19KSxofXcuY2FsbChJLnByb3RvdHlwZSk7ZnVuY3Rpb24gVihhLGgpe2h8fChoPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPWguc3RhdHVzPT09dm9pZCAwPzIwMDpoLnN0YXR1cyx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gaD9oLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IG0oaC5oZWFkZXJzKSx0aGlzLnVybD1oLnVybHx8IiIsdGhpcy5faW5pdEJvZHkoYSl9dy5jYWxsKFYucHJvdG90eXBlKSxWLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVih0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IG0odGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0sVi5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBWKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6IiJ9KTtyZXR1cm4gYS50eXBlPSJlcnJvciIsYX07dmFyIEg9WzMwMSwzMDIsMzAzLDMwNywzMDhdO1YucmVkaXJlY3Q9ZnVuY3Rpb24oYSxoKXtpZihILmluZGV4T2YoaCk9PT0tMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZSIpO3JldHVybiBuZXcgVihudWxsLHtzdGF0dXM6aCxoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxvLkRPTUV4Y2VwdGlvbj1zLkRPTUV4Y2VwdGlvbjt0cnl7bmV3IG8uRE9NRXhjZXB0aW9ufWNhdGNoKGEpe28uRE9NRXhjZXB0aW9uPWZ1bmN0aW9uKGgsXyl7dGhpcy5tZXNzYWdlPWgsdGhpcy5uYW1lPV87dmFyIFM9RXJyb3IoaCk7dGhpcy5zdGFjaz1TLnN0YWNrfSxvLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLG8uRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vLkRPTUV4Y2VwdGlvbn1mdW5jdGlvbiBYKGEsaCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sUyl7dmFyIGs9bmV3IEkoYSxoKTtpZihrLnNpZ25hbCYmay5zaWduYWwuYWJvcnRlZClyZXR1cm4gUyhuZXcgby5ET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBBPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBLKCl7QS5hYm9ydCgpfUEub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHE9e3N0YXR1czpBLnN0YXR1cyxzdGF0dXNUZXh0OkEuc3RhdHVzVGV4dCxoZWFkZXJzOnooQS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTtxLnVybD0icmVzcG9uc2VVUkwiaW4gQT9BLnJlc3BvbnNlVVJMOnEuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgVz0icmVzcG9uc2UiaW4gQT9BLnJlc3BvbnNlOkEucmVzcG9uc2VUZXh0O18obmV3IFYoVyxxKSl9LEEub25lcnJvcj1mdW5jdGlvbigpe1MobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0sQS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtTKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LEEub25hYm9ydD1mdW5jdGlvbigpe1MobmV3IG8uRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX0sQS5vcGVuKGsubWV0aG9kLGsudXJsLCEwKSxrLmNyZWRlbnRpYWxzPT09ImluY2x1ZGUiP0Eud2l0aENyZWRlbnRpYWxzPSEwOmsuY3JlZGVudGlhbHM9PT0ib21pdCImJihBLndpdGhDcmVkZW50aWFscz0hMSksInJlc3BvbnNlVHlwZSJpbiBBJiZjLmJsb2ImJihBLnJlc3BvbnNlVHlwZT0iYmxvYiIpLGsuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHEsVyl7QS5zZXRSZXF1ZXN0SGVhZGVyKFcscSl9KSxrLnNpZ25hbCYmKGsuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixLKSxBLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0EucmVhZHlTdGF0ZT09PTQmJmsuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixLKX0pLEEuc2VuZCh0eXBlb2Ygay5fYm9keUluaXQ9PSJ1bmRlZmluZWQiP251bGw6ay5fYm9keUluaXQpfSl9cmV0dXJuIFgucG9seWZpbGw9ITAscy5mZXRjaHx8KHMuZmV0Y2g9WCxzLkhlYWRlcnM9bSxzLlJlcXVlc3Q9SSxzLlJlc3BvbnNlPVYpLG8uSGVhZGVycz1tLG8uUmVxdWVzdD1JLG8uUmVzcG9uc2U9VixvLmZldGNoPVgsT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG99KSh7fSl9KShpKSxpLmZldGNoLnBvbnlmaWxsPSEwLGRlbGV0ZSBpLmZldGNoLnBvbHlmaWxsO3ZhciByPWk7dD1yLmZldGNoLHQuZGVmYXVsdD1yLmZldGNoLHQuZmV0Y2g9ci5mZXRjaCx0LkhlYWRlcnM9ci5IZWFkZXJzLHQuUmVxdWVzdD1yLlJlcXVlc3QsdC5SZXNwb25zZT1yLlJlc3BvbnNlLGUuZXhwb3J0cz10fSkoUWUsUWUuZXhwb3J0cyk7dmFyIGtlPVFlLmV4cG9ydHMsUmU9RHQoa2UpLEduPSQoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6UmV9LFtrZV0pO2NvbnN0IHBlPWU9PntsZXQgdD17fTtyZXR1cm4gZSYmKHR5cGVvZiBIZWFkZXJzIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhlYWRlcnN8fEduJiZrZS5IZWFkZXJzJiZlIGluc3RhbmNlb2Yga2UuSGVhZGVycz90PWVlKGUpOkFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKChbbixpXSk9PntuJiZpIT09dm9pZCAwJiYodFtuXT1pKX0pOnQ9ZSksdH0sQ3Q9ZT0+ZS5yZXBsYWNlKC8oW1xzLF18I1teXG5ccl0rKSsvZywiICIpLnRyaW0oKSx6bj1lPT57aWYoIUFycmF5LmlzQXJyYXkoZS5xdWVyeSkpe2NvbnN0IGk9ZSxyPVtgcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQoQ3QoaS5xdWVyeSkpfWBdO3JldHVybiBlLnZhcmlhYmxlcyYmci5wdXNoKGB2YXJpYWJsZXM9JHtlbmNvZGVVUklDb21wb25lbnQoaS5qc29uU2VyaWFsaXplci5zdHJpbmdpZnkoaS52YXJpYWJsZXMpKX1gKSxpLm9wZXJhdGlvbk5hbWUmJnIucHVzaChgb3BlcmF0aW9uTmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChpLm9wZXJhdGlvbk5hbWUpfWApLHIuam9pbigiJiIpfWlmKHR5cGVvZiBlLnZhcmlhYmxlcyE9InVuZGVmaW5lZCImJiFBcnJheS5pc0FycmF5KGUudmFyaWFibGVzKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgcXVlcnkgd2l0aCBnaXZlbiB2YXJpYWJsZSB0eXBlLCBhcnJheSBleHBlY3RlZCIpO2NvbnN0IHQ9ZSxuPWUucXVlcnkucmVkdWNlKChpLHIscyk9PihpLnB1c2goe3F1ZXJ5OkN0KHIpLHZhcmlhYmxlczp0LnZhcmlhYmxlcz90Lmpzb25TZXJpYWxpemVyLnN0cmluZ2lmeSh0LnZhcmlhYmxlc1tzXSk6dm9pZCAwfSksaSksW10pO3JldHVybmBxdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudCh0Lmpzb25TZXJpYWxpemVyLnN0cmluZ2lmeShuKSl9YH0sSG49ZT0+dD0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dmFyIE47Y29uc3R7dXJsOm4scXVlcnk6aSx2YXJpYWJsZXM6cixvcGVyYXRpb25OYW1lOnMsZmV0Y2g6byxmZXRjaE9wdGlvbnM6YyxtaWRkbGV3YXJlOmZ9PXQsZD1EKHt9LHQuaGVhZGVycyk7bGV0IHU9IiIseTtlPT09IlBPU1QiPyh5PUpuKGkscixzLGMuanNvblNlcmlhbGl6ZXIpLHR5cGVvZiB5PT0ic3RyaW5nIiYmKGRbIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi9qc29uIikpOnU9em4oe3F1ZXJ5OmksdmFyaWFibGVzOnIsb3BlcmF0aW9uTmFtZTpzLGpzb25TZXJpYWxpemVyOihOPWMuanNvblNlcmlhbGl6ZXIpIT1udWxsP046Rn0pO2NvbnN0IGc9RCh7bWV0aG9kOmUsaGVhZGVyczpkLGJvZHk6eX0sYyk7bGV0IGI9bixtPWc7aWYoZil7Y29uc3QgUj15aWVsZCBQcm9taXNlLnJlc29sdmUoZihCZShEKHt9LGcpLHt1cmw6bixvcGVyYXRpb25OYW1lOnMsdmFyaWFibGVzOnJ9KSkpLHt1cmw6an09Uix2PWdlKFIsWyJ1cmwiXSk7Yj1qLG09dn1yZXR1cm4gdSYmKGI9YCR7Yn0/JHt1fWApLHlpZWxkIG8oYixtKX0pO2NsYXNzIFlue2NvbnN0cnVjdG9yKHQsbj17fSl7dGhpcy51cmw9dCx0aGlzLnJlcXVlc3RDb25maWc9bix0aGlzLnJhd1JlcXVlc3Q9KC4uLmkpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdFtyLHMsb109aSxjPVVlKHIscyxvKSxSPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpmLGZldGNoOmQ9UmUsbWV0aG9kOnU9IlBPU1QiLHJlcXVlc3RNaWRkbGV3YXJlOnkscmVzcG9uc2VNaWRkbGV3YXJlOmd9PVIsYj1nZShSLFsiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwicmVxdWVzdE1pZGRsZXdhcmUiLCJyZXNwb25zZU1pZGRsZXdhcmUiXSkse3VybDptfT10aGlzO2Muc2lnbmFsIT09dm9pZCAwJiYoYi5zaWduYWw9Yy5zaWduYWwpO2NvbnN0e29wZXJhdGlvbk5hbWU6Tn09SmUoYy5xdWVyeSk7cmV0dXJuIFhlKHt1cmw6bSxxdWVyeTpjLnF1ZXJ5LHZhcmlhYmxlczpjLnZhcmlhYmxlcyxoZWFkZXJzOkQoRCh7fSxwZShXZShmKSkpLHBlKGMucmVxdWVzdEhlYWRlcnMpKSxvcGVyYXRpb25OYW1lOk4sZmV0Y2g6ZCxtZXRob2Q6dSxmZXRjaE9wdGlvbnM6YixtaWRkbGV3YXJlOnl9KS50aGVuKFA9PihnJiZnKFApLFApKS5jYXRjaChQPT57dGhyb3cgZyYmZyhQKSxQfSl9KX1yZXF1ZXN0KHQsLi4ubil7cmV0dXJuIEoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0W2kscl09bixzPVNlKHQsaSxyKSxOPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpvLGZldGNoOmM9UmUsbWV0aG9kOmY9IlBPU1QiLHJlcXVlc3RNaWRkbGV3YXJlOmQscmVzcG9uc2VNaWRkbGV3YXJlOnV9PU4seT1nZShOLFsiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwicmVxdWVzdE1pZGRsZXdhcmUiLCJyZXNwb25zZU1pZGRsZXdhcmUiXSkse3VybDpnfT10aGlzO3Muc2lnbmFsIT09dm9pZCAwJiYoeS5zaWduYWw9cy5zaWduYWwpO2NvbnN0e3F1ZXJ5OmIsb3BlcmF0aW9uTmFtZTptfT1KZShzLmRvY3VtZW50KTtyZXR1cm4gWGUoe3VybDpnLHF1ZXJ5OmIsdmFyaWFibGVzOnMudmFyaWFibGVzLGhlYWRlcnM6RChEKHt9LHBlKFdlKG8pKSkscGUocy5yZXF1ZXN0SGVhZGVycykpLG9wZXJhdGlvbk5hbWU6bSxmZXRjaDpjLG1ldGhvZDpmLGZldGNoT3B0aW9uczp5LG1pZGRsZXdhcmU6ZH0pLnRoZW4oUj0+KHUmJnUoUiksUi5kYXRhKSkuY2F0Y2goUj0+e3Rocm93IHUmJnUoUiksUn0pfSl9YmF0Y2hSZXF1ZXN0cyh0LG4pe3ZhciBkO2NvbnN0IGk9VmUodCxuKSxmPXRoaXMucmVxdWVzdENvbmZpZyx7aGVhZGVyczpyfT1mLHM9Z2UoZixbImhlYWRlcnMiXSk7aS5zaWduYWwhPT12b2lkIDAmJihzLnNpZ25hbD1pLnNpZ25hbCk7Y29uc3Qgbz1pLmRvY3VtZW50cy5tYXAoKHtkb2N1bWVudDp1fSk9PkplKHUpLnF1ZXJ5KSxjPWkuZG9jdW1lbnRzLm1hcCgoe3ZhcmlhYmxlczp1fSk9PnUpO3JldHVybiBYZSh7dXJsOnRoaXMudXJsLHF1ZXJ5Om8sdmFyaWFibGVzOmMsaGVhZGVyczpEKEQoe30scGUoV2UocikpKSxwZShpLnJlcXVlc3RIZWFkZXJzKSksb3BlcmF0aW9uTmFtZTp2b2lkIDAsZmV0Y2g6KGQ9dGhpcy5yZXF1ZXN0Q29uZmlnLmZldGNoKSE9bnVsbD9kOlJlLG1ldGhvZDp0aGlzLnJlcXVlc3RDb25maWcubWV0aG9kfHwiUE9TVCIsZmV0Y2hPcHRpb25zOnMsbWlkZGxld2FyZTp0aGlzLnJlcXVlc3RDb25maWcucmVxdWVzdE1pZGRsZXdhcmV9KS50aGVuKHU9Pih0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlJiZ0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlKHUpLHUuZGF0YSkpLmNhdGNoKHU9Pnt0aHJvdyB0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlJiZ0aGlzLnJlcXVlc3RDb25maWcucmVzcG9uc2VNaWRkbGV3YXJlKHUpLHV9KX1zZXRIZWFkZXJzKHQpe3JldHVybiB0aGlzLnJlcXVlc3RDb25maWcuaGVhZGVycz10LHRoaXN9c2V0SGVhZGVyKHQsbil7Y29uc3R7aGVhZGVyczppfT10aGlzLnJlcXVlc3RDb25maWc7cmV0dXJuIGk/aVt0XT1uOnRoaXMucmVxdWVzdENvbmZpZy5oZWFkZXJzPXtbdF06bn0sdGhpc31zZXRFbmRwb2ludCh0KXtyZXR1cm4gdGhpcy51cmw9dCx0aGlzfX1jb25zdCBYZT1lPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt2YXIgdSx5O2NvbnN0e3F1ZXJ5OnQsdmFyaWFibGVzOm4sZmV0Y2hPcHRpb25zOml9PWUscj1IbihCKCh1PWUubWV0aG9kKSE9bnVsbD91OiJwb3N0IikpLHM9QXJyYXkuaXNBcnJheShlLnF1ZXJ5KSxvPXlpZWxkIHIoZSksYz15aWVsZCBRbihvLCh5PWkuanNvblNlcmlhbGl6ZXIpIT1udWxsP3k6RiksZj1BcnJheS5pc0FycmF5KGMpPyFjLnNvbWUoKHtkYXRhOmJ9KT0+IWIpOiEhYy5kYXRhLGQ9QXJyYXkuaXNBcnJheShjKXx8IWMuZXJyb3JzfHxBcnJheS5pc0FycmF5KGMuZXJyb3JzKSYmIWMuZXJyb3JzLmxlbmd0aHx8aS5lcnJvclBvbGljeT09PSJhbGwifHxpLmVycm9yUG9saWN5PT09Imlnbm9yZSI7aWYoby5vayYmZCYmZil7Y29uc3QgZz0oQXJyYXkuaXNBcnJheShjKSxjKSx7ZXJyb3JzOmJ9PWcsbT1nZShnLFsiZXJyb3JzIl0pLE49aS5lcnJvclBvbGljeT09PSJpZ25vcmUiP206YztyZXR1cm4gQmUoRCh7fSxzP3tkYXRhOk59Ok4pLHtoZWFkZXJzOm8uaGVhZGVycyxzdGF0dXM6by5zdGF0dXN9KX1lbHNle2NvbnN0IGI9dHlwZW9mIGM9PSJzdHJpbmciP3tlcnJvcjpjfTpjO3Rocm93IG5ldyBkZShCZShEKHt9LGIpLHtzdGF0dXM6by5zdGF0dXMsaGVhZGVyczpvLmhlYWRlcnN9KSx7cXVlcnk6dCx2YXJpYWJsZXM6bn0pfX0pLEpuPShlLHQsbixpKT0+e2NvbnN0IHI9aSE9bnVsbD9pOkY7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHIuc3RyaW5naWZ5KHtxdWVyeTplLHZhcmlhYmxlczp0LG9wZXJhdGlvbk5hbWU6bn0pO2lmKHR5cGVvZiB0IT0idW5kZWZpbmVkIiYmIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIHJlcXVlc3QgYm9keSB3aXRoIGdpdmVuIHZhcmlhYmxlIHR5cGUsIGFycmF5IGV4cGVjdGVkIik7Y29uc3Qgcz1lLnJlZHVjZSgobyxjLGYpPT4oby5wdXNoKHtxdWVyeTpjLHZhcmlhYmxlczp0P3RbZl06dm9pZCAwfSksbyksW10pO3JldHVybiByLnN0cmluZ2lmeShzKX0sUW49KGUsdCk9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuO3JldHVybiBlLmhlYWRlcnMuZm9yRWFjaCgoaSxyKT0+e3IudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiJiYobj1pKX0pLG4mJihuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpfHxuLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vZ3JhcGhxbCtqc29uIil8fG4udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJhcHBsaWNhdGlvbi9ncmFwaHFsLXJlc3BvbnNlK2pzb24iKSk/dC5wYXJzZSh5aWVsZCBlLnRleHQoKSk6ZS50ZXh0KCl9KSxXZT1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIj9lKCk6ZTt2YXIgWmU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe3Q9ZS5leHBvcnRzPW4sdC5nZXRTZXJpYWxpemU9aTtmdW5jdGlvbiBuKHIscyxvLGMpe3JldHVybiBKU09OLnN0cmluZ2lmeShyLGkocyxjKSxvKX1mdW5jdGlvbiBpKHIscyl7dmFyIG89W10sYz1bXTtyZXR1cm4gcz09bnVsbCYmKHM9ZnVuY3Rpb24oZixkKXtyZXR1cm4gb1swXT09PWQ/IltDaXJjdWxhciB+XSI6IltDaXJjdWxhciB+LiIrYy5zbGljZSgwLG8uaW5kZXhPZihkKSkuam9pbigiLiIpKyJdIn0pLGZ1bmN0aW9uKGYsZCl7aWYoby5sZW5ndGg+MCl7dmFyIHU9by5pbmRleE9mKHRoaXMpO351P28uc3BsaWNlKHUrMSk6by5wdXNoKHRoaXMpLH51P2Muc3BsaWNlKHUsMS8wLGYpOmMucHVzaChmKSx+by5pbmRleE9mKGQpJiYoZD1zLmNhbGwodGhpcyxmLGQpKX1lbHNlIG8ucHVzaChkKTtyZXR1cm4gcj09bnVsbD9kOnIuY2FsbCh0aGlzLGYsZCl9fX0pKFplLFplLmV4cG9ydHMpO3ZhciBYbj1aZS5leHBvcnRzLG1lPUR0KFhuKTtjb25zdCBrdD0xZTMqMTU7dmFyIFBlPWZ1bmN0aW9uKCl7cmV0dXJuIFBlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTEscj1hcmd1bWVudHMubGVuZ3RoO2k8cjtpKyspe249YXJndW1lbnRzW2ldO2Zvcih2YXIgcyBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHMpJiYodFtzXT1uW3NdKX1yZXR1cm4gdH0sUGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt0eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iJiZTdXBwcmVzc2VkRXJyb3I7dmFyIExlPW5ldyBNYXAsS2U9bmV3IE1hcCxSdD0hMCxGZT0hMTtmdW5jdGlvbiBQdChlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXHMsXSsvZywiICIpLnRyaW0oKX1mdW5jdGlvbiBXbihlKXtyZXR1cm4gUHQoZS5zb3VyY2UuYm9keS5zdWJzdHJpbmcoZS5zdGFydCxlLmVuZCkpfWZ1bmN0aW9uIFpuKGUpe3ZhciB0PW5ldyBTZXQsbj1bXTtyZXR1cm4gZS5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKGkua2luZD09PSJGcmFnbWVudERlZmluaXRpb24iKXt2YXIgcj1pLm5hbWUudmFsdWUscz1XbihpLmxvYyksbz1LZS5nZXQocik7byYmIW8uaGFzKHMpP1J0JiZjb25zb2xlLndhcm4oIldhcm5pbmc6IGZyYWdtZW50IHdpdGggbmFtZSAiK3IrYCBhbHJlYWR5IGV4aXN0cy4KZ3JhcGhxbC10YWcgZW5mb3JjZXMgYWxsIGZyYWdtZW50IG5hbWVzIGFjcm9zcyB5b3VyIGFwcGxpY2F0aW9uIHRvIGJlIHVuaXF1ZTsgcmVhZCBtb3JlIGFib3V0CnRoaXMgaW4gdGhlIGRvY3M6IGh0dHA6Ly9kZXYuYXBvbGxvZGF0YS5jb20vY29yZS9mcmFnbWVudHMuaHRtbCN1bmlxdWUtbmFtZXNgKTpvfHxLZS5zZXQocixvPW5ldyBTZXQpLG8uYWRkKHMpLHQuaGFzKHMpfHwodC5hZGQocyksbi5wdXNoKGkpKX1lbHNlIG4ucHVzaChpKX0pLFBlKFBlKHt9LGUpLHtkZWZpbml0aW9uczpufSl9ZnVuY3Rpb24gS24oZSl7dmFyIHQ9bmV3IFNldChlLmRlZmluaXRpb25zKTt0LmZvckVhY2goZnVuY3Rpb24oaSl7aS5sb2MmJmRlbGV0ZSBpLmxvYyxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPWlbcl07cyYmdHlwZW9mIHM9PSJvYmplY3QiJiZ0LmFkZChzKX0pfSk7dmFyIG49ZS5sb2M7cmV0dXJuIG4mJihkZWxldGUgbi5zdGFydFRva2VuLGRlbGV0ZSBuLmVuZFRva2VuKSxlfWZ1bmN0aW9uIGVyKGUpe3ZhciB0PVB0KGUpO2lmKCFMZS5oYXModCkpe3ZhciBuPUl0KGUse2V4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOkZlLGFsbG93TGVnYWN5RnJhZ21lbnRWYXJpYWJsZXM6RmV9KTtpZighbnx8bi5raW5kIT09IkRvY3VtZW50Iil0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIHZhbGlkIEdyYXBoUUwgZG9jdW1lbnQuIik7TGUuc2V0KHQsS24oWm4obikpKX1yZXR1cm4gTGUuZ2V0KHQpfWZ1bmN0aW9uIFEoZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dHlwZW9mIGU9PSJzdHJpbmciJiYoZT1bZV0pO3ZhciBpPWVbMF07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihyLHMpe3ImJnIua2luZD09PSJEb2N1bWVudCI/aSs9ci5sb2Muc291cmNlLmJvZHk6aSs9cixpKz1lW3MrMV19KSxlcihpKX1mdW5jdGlvbiB0cigpe0xlLmNsZWFyKCksS2UuY2xlYXIoKX1mdW5jdGlvbiBucigpe1J0PSExfWZ1bmN0aW9uIHJyKCl7RmU9ITB9ZnVuY3Rpb24gaXIoKXtGZT0hMX12YXIgYmU9e2dxbDpRLHJlc2V0Q2FjaGVzOnRyLGRpc2FibGVGcmFnbWVudFdhcm5pbmdzOm5yLGVuYWJsZUV4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOnJyLGRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczppcn07KGZ1bmN0aW9uKGUpe2UuZ3FsPWJlLmdxbCxlLnJlc2V0Q2FjaGVzPWJlLnJlc2V0Q2FjaGVzLGUuZGlzYWJsZUZyYWdtZW50V2FybmluZ3M9YmUuZGlzYWJsZUZyYWdtZW50V2FybmluZ3MsZS5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1iZS5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcyxlLmRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1iZS5kaXNhYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXN9KShRfHwoUT17fSkpLFEuZGVmYXVsdD1RO2NvbnN0IEx0PVFgCglmcmFnbWVudCBNYXRjaFBhcnRzIG9uIE1hdGNoQ29uZmlnIHsKCQlyZWdleFZhbHVlCgkJbWF0Y2hWYWx1ZQoJfQpgLHNyPVFgCgltdXRhdGlvbiBQdXNoUGF5bG9hZCgKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkcGF5bG9hZF9pZDogSUQhCgkJJGV2ZW50czogUmVwbGF5RXZlbnRzSW5wdXQhCgkJJG1lc3NhZ2VzOiBTdHJpbmchCgkJJHJlc291cmNlczogU3RyaW5nIQoJCSR3ZWJfc29ja2V0X2V2ZW50czogU3RyaW5nIQoJCSRlcnJvcnM6IFtFcnJvck9iamVjdElucHV0XSEKCQkkaXNfYmVhY29uOiBCb29sZWFuCgkJJGhhc19zZXNzaW9uX3VubG9hZGVkOiBCb29sZWFuCgkJJGhpZ2hsaWdodF9sb2dzOiBTdHJpbmcKCSkgewoJCXB1c2hQYXlsb2FkKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXBheWxvYWRfaWQ6ICRwYXlsb2FkX2lkCgkJCWV2ZW50czogJGV2ZW50cwoJCQltZXNzYWdlczogJG1lc3NhZ2VzCgkJCXJlc291cmNlczogJHJlc291cmNlcwoJCQl3ZWJfc29ja2V0X2V2ZW50czogJHdlYl9zb2NrZXRfZXZlbnRzCgkJCWVycm9yczogJGVycm9ycwoJCQlpc19iZWFjb246ICRpc19iZWFjb24KCQkJaGFzX3Nlc3Npb25fdW5sb2FkZWQ6ICRoYXNfc2Vzc2lvbl91bmxvYWRlZAoJCQloaWdobGlnaHRfbG9nczogJGhpZ2hsaWdodF9sb2dzCgkJKQoJfQpgLG9yPVFgCgltdXRhdGlvbiBQdXNoU2Vzc2lvbkV2ZW50cygKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkcGF5bG9hZF9pZDogSW50NjRJRCEKCQkkZGF0YTogU3RyaW5nIQoJKSB7CgkJcHVzaFNlc3Npb25FdmVudHMoCgkJCXNlc3Npb25fc2VjdXJlX2lkOiAkc2Vzc2lvbl9zZWN1cmVfaWQKCQkJcGF5bG9hZF9pZDogJHBheWxvYWRfaWQKCQkJZGF0YTogJGRhdGEKCQkpCgl9CmAsYXI9UWAKCW11dGF0aW9uIGlkZW50aWZ5U2Vzc2lvbigKCQkkc2Vzc2lvbl9zZWN1cmVfaWQ6IFN0cmluZyEKCQkkdXNlcl9pZGVudGlmaWVyOiBTdHJpbmchCgkJJHVzZXJfb2JqZWN0OiBBbnkKCSkgewoJCWlkZW50aWZ5U2Vzc2lvbigKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQl1c2VyX2lkZW50aWZpZXI6ICR1c2VyX2lkZW50aWZpZXIKCQkJdXNlcl9vYmplY3Q6ICR1c2VyX29iamVjdAoJCSkKCX0KYCxjcj1RYAoJbXV0YXRpb24gYWRkU2Vzc2lvblByb3BlcnRpZXMoCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHByb3BlcnRpZXNfb2JqZWN0OiBBbnkKCSkgewoJCWFkZFNlc3Npb25Qcm9wZXJ0aWVzKAoJCQlzZXNzaW9uX3NlY3VyZV9pZDogJHNlc3Npb25fc2VjdXJlX2lkCgkJCXByb3BlcnRpZXNfb2JqZWN0OiAkcHJvcGVydGllc19vYmplY3QKCQkpCgl9CmAsdXI9UWAKCW11dGF0aW9uIHB1c2hNZXRyaWNzKCRtZXRyaWNzOiBbTWV0cmljSW5wdXRdISkgewoJCXB1c2hNZXRyaWNzKG1ldHJpY3M6ICRtZXRyaWNzKQoJfQpgLGxyPVFgCgltdXRhdGlvbiBhZGRTZXNzaW9uRmVlZGJhY2soCgkJJHNlc3Npb25fc2VjdXJlX2lkOiBTdHJpbmchCgkJJHVzZXJfbmFtZTogU3RyaW5nCgkJJHVzZXJfZW1haWw6IFN0cmluZwoJCSR2ZXJiYXRpbTogU3RyaW5nIQoJCSR0aW1lc3RhbXA6IFRpbWVzdGFtcCEKCSkgewoJCWFkZFNlc3Npb25GZWVkYmFjaygKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQl1c2VyX25hbWU6ICR1c2VyX25hbWUKCQkJdXNlcl9lbWFpbDogJHVzZXJfZW1haWwKCQkJdmVyYmF0aW06ICR2ZXJiYXRpbQoJCQl0aW1lc3RhbXA6ICR0aW1lc3RhbXAKCQkpCgl9CmAsZnI9UWAKCW11dGF0aW9uIGluaXRpYWxpemVTZXNzaW9uKAoJCSRzZXNzaW9uX3NlY3VyZV9pZDogU3RyaW5nIQoJCSRzZXNzaW9uX2tleTogU3RyaW5nCgkJJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiBTdHJpbmchCgkJJGVuYWJsZV9zdHJpY3RfcHJpdmFjeTogQm9vbGVhbiEKCQkkcHJpdmFjeV9zZXR0aW5nOiBTdHJpbmchCgkJJGVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50czogQm9vbGVhbiEKCQkkY2xpZW50VmVyc2lvbjogU3RyaW5nIQoJCSRmaXJzdGxvYWRWZXJzaW9uOiBTdHJpbmchCgkJJGNsaWVudENvbmZpZzogU3RyaW5nIQoJCSRlbnZpcm9ubWVudDogU3RyaW5nIQoJCSRpZDogU3RyaW5nIQoJCSRhcHBWZXJzaW9uOiBTdHJpbmcKCQkkc2VydmljZU5hbWU6IFN0cmluZyEKCQkkY2xpZW50X2lkOiBTdHJpbmchCgkJJG5ldHdvcmtfcmVjb3JkaW5nX2RvbWFpbnM6IFtTdHJpbmchXQoJCSRkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nOiBCb29sZWFuCgkpIHsKCQlpbml0aWFsaXplU2Vzc2lvbigKCQkJc2Vzc2lvbl9zZWN1cmVfaWQ6ICRzZXNzaW9uX3NlY3VyZV9pZAoJCQlzZXNzaW9uX2tleTogJHNlc3Npb25fa2V5CgkJCW9yZ2FuaXphdGlvbl92ZXJib3NlX2lkOiAkb3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQKCQkJZW5hYmxlX3N0cmljdF9wcml2YWN5OiAkZW5hYmxlX3N0cmljdF9wcml2YWN5CgkJCWVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50czogJGVuYWJsZV9yZWNvcmRpbmdfbmV0d29ya19jb250ZW50cwoJCQljbGllbnRWZXJzaW9uOiAkY2xpZW50VmVyc2lvbgoJCQlmaXJzdGxvYWRWZXJzaW9uOiAkZmlyc3Rsb2FkVmVyc2lvbgoJCQljbGllbnRDb25maWc6ICRjbGllbnRDb25maWcKCQkJZW52aXJvbm1lbnQ6ICRlbnZpcm9ubWVudAoJCQlhcHBWZXJzaW9uOiAkYXBwVmVyc2lvbgoJCQlzZXJ2aWNlTmFtZTogJHNlcnZpY2VOYW1lCgkJCWZpbmdlcnByaW50OiAkaWQKCQkJY2xpZW50X2lkOiAkY2xpZW50X2lkCgkJCW5ldHdvcmtfcmVjb3JkaW5nX2RvbWFpbnM6ICRuZXR3b3JrX3JlY29yZGluZ19kb21haW5zCgkJCWRpc2FibGVfc2Vzc2lvbl9yZWNvcmRpbmc6ICRkaXNhYmxlX3Nlc3Npb25fcmVjb3JkaW5nCgkJCXByaXZhY3lfc2V0dGluZzogJHByaXZhY3lfc2V0dGluZwoJCSkgewoJCQlzZWN1cmVfaWQKCQkJcHJvamVjdF9pZAoJCQlzYW1wbGluZyB7CgkJCQlzcGFucyB7CgkJCQkJbmFtZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCQlldmVudHMgewoJCQkJCQluYW1lIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCQlhdHRyaWJ1dGVzIHsKCQkJCQkJCWtleSB7CgkJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQkJfQoJCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJc2FtcGxpbmdSYXRpbwoJCQkJfQoJCQkJbG9ncyB7CgkJCQkJbWVzc2FnZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJc2V2ZXJpdHlUZXh0IHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCQlhdHRyaWJ1dGVzIHsKCQkJCQkJa2V5IHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCQlhdHRyaWJ1dGUgewoJCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCQl9CgkJCQkJfQoJCQkJCXNhbXBsaW5nUmF0aW8KCQkJCX0KCQkJfQoJCX0KCX0KCSR7THR9CmAsaHI9UWAKCXF1ZXJ5IElnbm9yZSgkaWQ6IElEISkgewoJCWlnbm9yZShpZDogJGlkKQoJfQpgLGRyPVFgCglxdWVyeSBHZXRTYW1wbGluZ0NvbmZpZygkb3JnYW5pemF0aW9uX3ZlcmJvc2VfaWQ6IFN0cmluZyEpIHsKCQlzYW1wbGluZyhvcmdhbml6YXRpb25fdmVyYm9zZV9pZDogJG9yZ2FuaXphdGlvbl92ZXJib3NlX2lkKSB7CgkJCXNwYW5zIHsKCQkJCW5hbWUgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCWF0dHJpYnV0ZXMgewoJCQkJCWtleSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlIHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCX0KCQkJCWV2ZW50cyB7CgkJCQkJbmFtZSB7CgkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQl9CgkJCQkJYXR0cmlidXRlcyB7CgkJCQkJCWtleSB7CgkJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJCX0KCQkJCQkJYXR0cmlidXRlIHsKCQkJCQkJCS4uLk1hdGNoUGFydHMKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXNhbXBsaW5nUmF0aW8KCQkJfQoJCQlsb2dzIHsKCQkJCW1lc3NhZ2UgewoJCQkJCS4uLk1hdGNoUGFydHMKCQkJCX0KCQkJCXNldmVyaXR5VGV4dCB7CgkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJfQoJCQkJYXR0cmlidXRlcyB7CgkJCQkJa2V5IHsKCQkJCQkJLi4uTWF0Y2hQYXJ0cwoJCQkJCX0KCQkJCQlhdHRyaWJ1dGUgewoJCQkJCQkuLi5NYXRjaFBhcnRzCgkJCQkJfQoJCQkJfQoJCQkJc2FtcGxpbmdSYXRpbwoJCQl9CgkJfQoJfQoJJHtMdH0KYCxwcj0oZSx0LG4saSk9PmUoKTtmdW5jdGlvbiBtcihlLHQ9cHIpe3JldHVybntQdXNoUGF5bG9hZChuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChzcixuLEQoRCh7fSxpKSxyKSksIlB1c2hQYXlsb2FkIiwibXV0YXRpb24iLG4pfSxQdXNoU2Vzc2lvbkV2ZW50cyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChvcixuLEQoRCh7fSxpKSxyKSksIlB1c2hTZXNzaW9uRXZlbnRzIiwibXV0YXRpb24iLG4pfSxpZGVudGlmeVNlc3Npb24obixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoYXIsbixEKEQoe30saSkscikpLCJpZGVudGlmeVNlc3Npb24iLCJtdXRhdGlvbiIsbil9LGFkZFNlc3Npb25Qcm9wZXJ0aWVzKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGNyLG4sRChEKHt9LGkpLHIpKSwiYWRkU2Vzc2lvblByb3BlcnRpZXMiLCJtdXRhdGlvbiIsbil9LHB1c2hNZXRyaWNzKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KHVyLG4sRChEKHt9LGkpLHIpKSwicHVzaE1ldHJpY3MiLCJtdXRhdGlvbiIsbil9LGFkZFNlc3Npb25GZWVkYmFjayhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChscixuLEQoRCh7fSxpKSxyKSksImFkZFNlc3Npb25GZWVkYmFjayIsIm11dGF0aW9uIixuKX0saW5pdGlhbGl6ZVNlc3Npb24obixpKXtyZXR1cm4gdChyPT5lLnJlcXVlc3QoZnIsbixEKEQoe30saSkscikpLCJpbml0aWFsaXplU2Vzc2lvbiIsIm11dGF0aW9uIixuKX0sSWdub3JlKG4saSl7cmV0dXJuIHQocj0+ZS5yZXF1ZXN0KGhyLG4sRChEKHt9LGkpLHIpKSwiSWdub3JlIiwicXVlcnkiLG4pfSxHZXRTYW1wbGluZ0NvbmZpZyhuLGkpe3JldHVybiB0KHI9PmUucmVxdWVzdChkcixuLEQoRCh7fSxpKSxyKSksIkdldFNhbXBsaW5nQ29uZmlnIiwicXVlcnkiLG4pfX19dmFyIHRlPVVpbnQ4QXJyYXksbmU9VWludDE2QXJyYXksZXQ9SW50MzJBcnJheSx0dD1uZXcgdGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLG50PW5ldyB0ZShbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdKSxGdD1uZXcgdGUoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxNdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgbmUoMzEpLGk9MDtpPDMxOysraSluW2ldPXQrPTE8PGVbaS0xXTtmb3IodmFyIHI9bmV3IGV0KG5bMzBdKSxpPTE7aTwzMDsrK2kpZm9yKHZhciBzPW5baV07czxuW2krMV07KytzKXJbc109cy1uW2ldPDw1fGk7cmV0dXJue2I6bixyfX0sJHQ9TXQodHQsMikseXI9JHQuYixydD0kdC5yO3lyWzI4XT0yNTgscnRbMjU4XT0yODtmb3IodmFyIHZyPU10KG50LDApLEJ0PXZyLnIsaXQ9bmV3IG5lKDMyNzY4KSxNPTA7TTwzMjc2ODsrK00pe3ZhciBjZT0oTSY0MzY5MCk+PjF8KE0mMjE4NDUpPDwxO2NlPShjZSY1MjQyOCk+PjJ8KGNlJjEzMTA3KTw8MixjZT0oY2UmNjE2ODApPj40fChjZSYzODU1KTw8NCxpdFtNXT0oKGNlJjY1MjgwKT4+OHwoY2UmMjU1KTw8OCk+PjF9Zm9yKHZhciBOZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxzPW5ldyBuZSh0KTtyPGk7KytyKWVbcl0mJisrc1tlW3JdLTFdO3ZhciBvPW5ldyBuZSh0KTtmb3Iocj0xO3I8dDsrK3Ipb1tyXT1vW3ItMV0rc1tyLTFdPDwxO3ZhciBjO2lmKG4pe2M9bmV3IG5lKDE8PHQpO3ZhciBmPTE1LXQ7Zm9yKHI9MDtyPGk7KytyKWlmKGVbcl0pZm9yKHZhciBkPXI8PDR8ZVtyXSx1PXQtZVtyXSx5PW9bZVtyXS0xXSsrPDx1LGc9eXwoMTw8dSktMTt5PD1nOysreSljW2l0W3ldPj5mXT1kfWVsc2UgZm9yKGM9bmV3IG5lKGkpLHI9MDtyPGk7KytyKWVbcl0mJihjW3JdPWl0W29bZVtyXS0xXSsrXT4+MTUtZVtyXSk7cmV0dXJuIGN9LGxlPW5ldyB0ZSgyODgpLE09MDtNPDE0NDsrK00pbGVbTV09ODtmb3IodmFyIE09MTQ0O008MjU2OysrTSlsZVtNXT05O2Zvcih2YXIgTT0yNTY7TTwyODA7KytNKWxlW01dPTc7Zm9yKHZhciBNPTI4MDtNPDI4ODsrK00pbGVbTV09ODtmb3IodmFyIE1lPW5ldyB0ZSgzMiksTT0wO008MzI7KytNKU1lW01dPTU7dmFyIGdyPU5lKGxlLDksMCksRXI9TmUoTWUsNSwwKSxVdD1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LFZ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj09bnVsbHx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKSxuZXcgdGUoZS5zdWJhcnJheSh0LG4pKX0sb2U9ZnVuY3Rpb24oZSx0LG4pe248PD10Jjc7dmFyIGk9dC84fDA7ZVtpXXw9bixlW2krMV18PW4+Pjh9LHhlPWZ1bmN0aW9uKGUsdCxuKXtuPDw9dCY3O3ZhciBpPXQvOHwwO2VbaV18PW4sZVtpKzFdfD1uPj44LGVbaSsyXXw9bj4+MTZ9LHN0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9MDtpPGUubGVuZ3RoOysraSllW2ldJiZuLnB1c2goe3M6aSxmOmVbaV19KTt2YXIgcj1uLmxlbmd0aCxzPW4uc2xpY2UoKTtpZighcilyZXR1cm57dDp6dCxsOjB9O2lmKHI9PTEpe3ZhciBvPW5ldyB0ZShuWzBdLnMrMSk7cmV0dXJuIG9bblswXS5zXT0xLHt0Om8sbDoxfX1uLnNvcnQoZnVuY3Rpb24odyxDKXtyZXR1cm4gdy5mLUMuZn0pLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIGM9blswXSxmPW5bMV0sZD0wLHU9MSx5PTI7Zm9yKG5bMF09e3M6LTEsZjpjLmYrZi5mLGw6YyxyOmZ9O3UhPXItMTspYz1uW25bZF0uZjxuW3ldLmY/ZCsrOnkrK10sZj1uW2QhPXUmJm5bZF0uZjxuW3ldLmY/ZCsrOnkrK10sblt1KytdPXtzOi0xLGY6Yy5mK2YuZixsOmMscjpmfTtmb3IodmFyIGc9c1swXS5zLGk9MTtpPHI7KytpKXNbaV0ucz5nJiYoZz1zW2ldLnMpO3ZhciBiPW5ldyBuZShnKzEpLG09b3Qoblt1LTFdLGIsMCk7aWYobT50KXt2YXIgaT0wLE49MCxSPW0tdCxQPTE8PFI7Zm9yKHMuc29ydChmdW5jdGlvbihDLEwpe3JldHVybiBiW0wuc10tYltDLnNdfHxDLmYtTC5mfSk7aTxyOysraSl7dmFyIGo9c1tpXS5zO2lmKGJbal0+dClOKz1QLSgxPDxtLWJbal0pLGJbal09dDtlbHNlIGJyZWFrfWZvcihOPj49UjtOPjA7KXt2YXIgdj1zW2ldLnM7Ylt2XTx0P04tPTE8PHQtYlt2XSsrLTE6KytpfWZvcig7aT49MCYmTjstLWkpe3ZhciBFPXNbaV0ucztiW0VdPT10JiYoLS1iW0VdLCsrTil9bT10fXJldHVybnt0Om5ldyB0ZShiKSxsOm19fSxvdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucz09LTE/TWF0aC5tYXgob3QoZS5sLHQsbisxKSxvdChlLnIsdCxuKzEpKTp0W2Uuc109bn0sanQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QmJiFlWy0tdF07KTtmb3IodmFyIG49bmV3IG5lKCsrdCksaT0wLHI9ZVswXSxzPTEsbz1mdW5jdGlvbihmKXtuW2krK109Zn0sYz0xO2M8PXQ7KytjKWlmKGVbY109PXImJmMhPXQpKytzO2Vsc2V7aWYoIXImJnM+Mil7Zm9yKDtzPjEzODtzLT0xMzgpbygzMjc1NCk7cz4yJiYobyhzPjEwP3MtMTE8PDV8Mjg2OTA6cy0zPDw1fDEyMzA1KSxzPTApfWVsc2UgaWYocz4zKXtmb3IobyhyKSwtLXM7cz42O3MtPTYpbyg4MzA0KTtzPjImJihvKHMtMzw8NXw4MjA4KSxzPTApfWZvcig7cy0tOylvKHIpO3M9MSxyPWVbY119cmV0dXJue2M6bi5zdWJhcnJheSgwLGkpLG46dH19LEFlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKW4rPWVbaV0qdFtpXTtyZXR1cm4gbn0scXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4ubGVuZ3RoLHI9VXQodCsyKTtlW3JdPWkmMjU1LGVbcisxXT1pPj44LGVbcisyXT1lW3JdXjI1NSxlW3IrM109ZVtyKzFdXjI1NTtmb3IodmFyIHM9MDtzPGk7KytzKWVbcitzKzRdPW5bc107cmV0dXJuKHIrNCtpKSo4fSxHdD1mdW5jdGlvbihlLHQsbixpLHIscyxvLGMsZixkLHUpe29lKHQsdSsrLG4pLCsrclsyNTZdO2Zvcih2YXIgeT1zdChyLDE1KSxnPXkudCxiPXkubCxtPXN0KHMsMTUpLE49bS50LFI9bS5sLFA9anQoZyksaj1QLmMsdj1QLm4sRT1qdChOKSx3PUUuYyxDPUUubixMPW5ldyBuZSgxOSksST0wO0k8ai5sZW5ndGg7KytJKSsrTFtqW0ldJjMxXTtmb3IodmFyIEk9MDtJPHcubGVuZ3RoOysrSSkrK0xbd1tJXSYzMV07Zm9yKHZhciB4PXN0KEwsNyksej14LnQsVj14LmwsSD0xOTtIPjQmJiF6W0Z0W0gtMV1dOy0tSCk7dmFyIFg9ZCs1PDwzLGE9QWUocixsZSkrQWUocyxNZSkrbyxoPUFlKHIsZykrQWUocyxOKStvKzE0KzMqSCtBZShMLHopKzIqTFsxNl0rMypMWzE3XSs3KkxbMThdO2lmKGY+PTAmJlg8PWEmJlg8PWgpcmV0dXJuIHF0KHQsdSxlLnN1YmFycmF5KGYsZitkKSk7dmFyIF8sUyxrLEE7aWYob2UodCx1LDErKGg8YSkpLHUrPTIsaDxhKXtfPU5lKGcsYiwwKSxTPWcsaz1OZShOLFIsMCksQT1OO3ZhciBLPU5lKHosViwwKTtvZSh0LHUsdi0yNTcpLG9lKHQsdSs1LEMtMSksb2UodCx1KzEwLEgtNCksdSs9MTQ7Zm9yKHZhciBJPTA7STxIOysrSSlvZSh0LHUrMypJLHpbRnRbSV1dKTt1Kz0zKkg7Zm9yKHZhciBxPVtqLHddLFc9MDtXPDI7KytXKWZvcih2YXIgeWU9cVtXXSxJPTA7STx5ZS5sZW5ndGg7KytJKXt2YXIgaWU9eWVbSV0mMzE7b2UodCx1LEtbaWVdKSx1Kz16W2llXSxpZT4xNSYmKG9lKHQsdSx5ZVtJXT4+NSYxMjcpLHUrPXllW0ldPj4xMil9fWVsc2UgXz1ncixTPWxlLGs9RXIsQT1NZTtmb3IodmFyIEk9MDtJPGM7KytJKXt2YXIgWT1pW0ldO2lmKFk+MjU1KXt2YXIgaWU9WT4+MTgmMzE7eGUodCx1LF9baWUrMjU3XSksdSs9U1tpZSsyNTddLGllPjcmJihvZSh0LHUsWT4+MjMmMzEpLHUrPXR0W2llXSk7dmFyIHZlPVkmMzE7eGUodCx1LGtbdmVdKSx1Kz1BW3ZlXSx2ZT4zJiYoeGUodCx1LFk+PjUmODE5MSksdSs9bnRbdmVdKX1lbHNlIHhlKHQsdSxfW1ldKSx1Kz1TW1ldfXJldHVybiB4ZSh0LHUsX1syNTZdKSx1K1NbMjU2XX0sX3I9bmV3IGV0KFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLHp0PW5ldyB0ZSgwKSxUcj1mdW5jdGlvbihlLHQsbixpLHIscyl7dmFyIG89cy56fHxlLmxlbmd0aCxjPW5ldyB0ZShpK28rNSooMStNYXRoLmNlaWwoby83ZTMpKStyKSxmPWMuc3ViYXJyYXkoaSxjLmxlbmd0aC1yKSxkPXMubCx1PShzLnJ8fDApJjc7aWYodCl7dSYmKGZbMF09cy5yPj4zKTtmb3IodmFyIHk9X3JbdC0xXSxnPXk+PjEzLGI9eSY4MTkxLG09KDE8PG4pLTEsTj1zLnB8fG5ldyBuZSgzMjc2OCksUj1zLmh8fG5ldyBuZShtKzEpLFA9TWF0aC5jZWlsKG4vMyksaj0yKlAsdj1mdW5jdGlvbihsdCl7cmV0dXJuKGVbbHRdXmVbbHQrMV08PFBeZVtsdCsyXTw8aikmbX0sRT1uZXcgZXQoMjVlMyksdz1uZXcgbmUoMjg4KSxDPW5ldyBuZSgzMiksTD0wLEk9MCx4PXMuaXx8MCx6PTAsVj1zLnd8fDAsSD0wO3grMjxvOysreCl7dmFyIFg9dih4KSxhPXgmMzI3NjcsaD1SW1hdO2lmKE5bYV09aCxSW1hdPWEsVjw9eCl7dmFyIF89by14O2lmKChMPjdlM3x8ej4yNDU3NikmJihfPjQyM3x8IWQpKXt1PUd0KGUsZiwwLEUsdyxDLEkseixILHgtSCx1KSx6PUw9ST0wLEg9eDtmb3IodmFyIFM9MDtTPDI4NjsrK1Mpd1tTXT0wO2Zvcih2YXIgUz0wO1M8MzA7KytTKUNbU109MH12YXIgaz0yLEE9MCxLPWIscT1hLWgmMzI3Njc7aWYoXz4yJiZYPT12KHgtcSkpZm9yKHZhciBXPU1hdGgubWluKGcsXyktMSx5ZT1NYXRoLm1pbigzMjc2Nyx4KSxpZT1NYXRoLm1pbigyNTgsXyk7cTw9eWUmJi0tSyYmYSE9aDspe2lmKGVbeCtrXT09ZVt4K2stcV0pe2Zvcih2YXIgWT0wO1k8aWUmJmVbeCtZXT09ZVt4K1ktcV07KytZKTtpZihZPmspe2lmKGs9WSxBPXEsWT5XKWJyZWFrO2Zvcih2YXIgdmU9TWF0aC5taW4ocSxZLTIpLFd0PTAsUz0wO1M8dmU7KytTKXt2YXIgY3Q9eC1xK1MmMzI3NjcsVXI9TltjdF0sWnQ9Y3QtVXImMzI3Njc7WnQ+V3QmJihXdD1adCxoPWN0KX19fWE9aCxoPU5bYV0scSs9YS1oJjMyNzY3fWlmKEEpe0VbeisrXT0yNjg0MzU0NTZ8cnRba108PDE4fEJ0W0FdO3ZhciBLdD1ydFtrXSYzMSxlbj1CdFtBXSYzMTtJKz10dFtLdF0rbnRbZW5dLCsrd1syNTcrS3RdLCsrQ1tlbl0sVj14K2ssKytMfWVsc2UgRVt6KytdPWVbeF0sKyt3W2VbeF1dfX1mb3IoeD1NYXRoLm1heCh4LFYpO3g8bzsrK3gpRVt6KytdPWVbeF0sKyt3W2VbeF1dO3U9R3QoZSxmLGQsRSx3LEMsSSx6LEgseC1ILHUpLGR8fChzLnI9dSY3fGZbdS84fDBdPDwzLHUtPTcscy5oPVIscy5wPU4scy5pPXgscy53PVYpfWVsc2V7Zm9yKHZhciB4PXMud3x8MDt4PG8rZDt4Kz02NTUzNSl7dmFyIHV0PXgrNjU1MzU7dXQ+PW8mJihmW3UvOHwwXT1kLHV0PW8pLHU9cXQoZix1KzEsZS5zdWJhcnJheSh4LHV0KSl9cy5pPW99cmV0dXJuIFZ0KGMsMCxpK1V0KHUpK3IpfSxicj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LGk9OTstLWk7KW49KG4mMSYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLE5yPWZ1bmN0aW9uKCl7dmFyIGU9LTE7cmV0dXJue3A6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUsaT0wO2k8dC5sZW5ndGg7KytpKW49YnJbbiYyNTVedFtpXV1ebj4+Pjg7ZT1ufSxkOmZ1bmN0aW9uKCl7cmV0dXJufmV9fX0seHI9ZnVuY3Rpb24oZSx0LG4saSxyKXtpZighciYmKHI9e2w6MX0sdC5kaWN0aW9uYXJ5KSl7dmFyIHM9dC5kaWN0aW9uYXJ5LnN1YmFycmF5KC0zMjc2OCksbz1uZXcgdGUocy5sZW5ndGgrZS5sZW5ndGgpO28uc2V0KHMpLG8uc2V0KGUscy5sZW5ndGgpLGU9byxyLnc9cy5sZW5ndGh9cmV0dXJuIFRyKGUsdC5sZXZlbD09bnVsbD82OnQubGV2ZWwsdC5tZW09PW51bGw/ci5sP01hdGguY2VpbChNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKGUubGVuZ3RoKSkpKjEuNSk6MjA6MTIrdC5tZW0sbixpLHIpfSxhdD1mdW5jdGlvbihlLHQsbil7Zm9yKDtuOysrdCllW3RdPW4sbj4+Pj04fSxBcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZmlsZW5hbWU7aWYoZVswXT0zMSxlWzFdPTEzOSxlWzJdPTgsZVs4XT10LmxldmVsPDI/NDp0LmxldmVsPT05PzI6MCxlWzldPTMsdC5tdGltZSE9MCYmYXQoZSw0LE1hdGguZmxvb3IobmV3IERhdGUodC5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSksbil7ZVszXT04O2Zvcih2YXIgaT0wO2k8PW4ubGVuZ3RoOysraSllW2krMTBdPW4uY2hhckNvZGVBdChpKX19LElyPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZT9lLmZpbGVuYW1lLmxlbmd0aCsxOjApfTtmdW5jdGlvbiBTcihlLHQpe3R8fCh0PXt9KTt2YXIgbj1OcigpLGk9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPXhyKGUsdCxJcih0KSw4KSxzPXIubGVuZ3RoO3JldHVybiBBcihyLHQpLGF0KHIscy04LG4uZCgpKSxhdChyLHMtNCxpKSxyfXZhciBIdD10eXBlb2YgVGV4dEVuY29kZXIhPSJ1bmRlZmluZWQiJiZuZXcgVGV4dEVuY29kZXIsT3I9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIiYmbmV3IFRleHREZWNvZGVyLHdyPTA7dHJ5e09yLmRlY29kZSh6dCx7c3RyZWFtOiEwfSksd3I9MX1jYXRjaChlKXt9ZnVuY3Rpb24gRHIoZSx0KXt2YXIgbjtpZihIdClyZXR1cm4gSHQuZW5jb2RlKGUpO2Zvcih2YXIgaT1lLmxlbmd0aCxyPW5ldyB0ZShlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxzPTAsbz1mdW5jdGlvbihkKXtyW3MrK109ZH0sbj0wO248aTsrK24pe2lmKHMrNT5yLmxlbmd0aCl7dmFyIGM9bmV3IHRlKHMrOCsoaS1uPDwxKSk7Yy5zZXQocikscj1jfXZhciBmPWUuY2hhckNvZGVBdChuKTtmPDEyOHx8dD9vKGYpOmY8MjA0OD8obygxOTJ8Zj4+NiksbygxMjh8ZiY2MykpOmY+NTUyOTUmJmY8NTczNDQ/KGY9NjU1MzYrKGYmMTA0NzU1Mil8ZS5jaGFyQ29kZUF0KCsrbikmMTAyMyxvKDI0MHxmPj4xOCksbygxMjh8Zj4+MTImNjMpLG8oMTI4fGY+PjYmNjMpLG8oMTI4fGYmNjMpKToobygyMjR8Zj4+MTIpLG8oMTI4fGY+PjYmNjMpLG8oMTI4fGYmNjMpKX1yZXR1cm4gVnQociwwLHMpfWZ1bmN0aW9uIENyKGUpe3JldHVybiBKKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdCB0PURyKEpTT04uc3RyaW5naWZ5KGUpKSxuPVNyKHQpLGk9eWllbGQgbmV3IFByb21pc2Uocj0+e2NvbnN0IHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9KCk9PnIocy5yZXN1bHQpLHMucmVhZEFzRGF0YVVSTChuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkobildKSl9KTtyZXR1cm57Y29tcHJlc3NlZEJhc2U2NDppLnNsaWNlKGkuaW5kZXhPZigiLCIpKzEpLGNvbXByZXNzZWRTaXplOm4ubGVuZ3RoLGJ1ZmZlckxlbmd0aDp0Lmxlbmd0aH19KX1jbGFzcyBrcntjb25zdHJ1Y3Rvcih0LG4pe2h0KHRoaXMsImRlYnVnIik7aHQodGhpcywibmFtZSIpO3RoaXMuZGVidWc9dCx0aGlzLm5hbWU9bn1sb2coLi4udCl7aWYodGhpcy5kZWJ1Zyl7bGV0IG49YFske0RhdGUubm93KCl9XWA7dGhpcy5uYW1lJiYobis9YCAtICR7dGhpcy5uYW1lfWApLGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsW24sLi4udF0pfX13YXJuKC4uLnQpe2xldCBuPWBbJHtEYXRlLm5vdygpfV1gO3RoaXMubmFtZSYmKG4rPWAgLSAke3RoaXMubmFtZX1gKSxjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSxbbiwuLi50XSl9fXZhciBZdD0oZT0+KGUuQmlsbGluZ1F1b3RhRXhjZWVkZWQ9IkJpbGxpbmdRdW90YUV4Y2VlZGVkIixlKSkoWXR8fHt9KTtjb25zdCBScj0zLFByPTFlMyxMcj01MDAsRnI9W1l0LkJpbGxpbmdRdW90YUV4Y2VlZGVkLnRvU3RyaW5nKCldLE1yPWU9Pnt2YXIgbjtyZXR1cm4oKG49ZS5yZXNwb25zZS5lcnJvcnMpPT1udWxsP3ZvaWQgMDpuLmZpbmQoaT0+RnIuaW5jbHVkZXMoaS5tZXNzYWdlKSkpPT09dm9pZCAwfSwkcj0oKT0+e2NvbnN0IGU9KHQsbixpLHIscz0wKT0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCB0KCl9Y2F0Y2gobyl7aWYobyBpbnN0YW5jZW9mIGRlJiYhTXIobykpdGhyb3cgbztpZihzPFJyKXJldHVybiB5aWVsZCBuZXcgUHJvbWlzZShjPT5zZXRUaW1lb3V0KGMsUHIrTHIqTWF0aC5wb3coMixzKSkpLHlpZWxkIGUodCxuLGkscixzKzEpO3Rocm93IGNvbnNvbGUuZXJyb3IoYGhpZ2hsaWdodC5pbzogZGF0YSByZXF1ZXN0IGZhaWxlZCBhZnRlciAke3N9IHJldHJpZXNgKSxvfX0pO3JldHVybiBlfSxKdD01LFF0PTJlMyxCcj1bIm51bWJlciIsInN0cmluZyIsImJvb2xlYW4iXTt2YXIgWj0oZT0+KGVbZS5Jbml0aWFsaXplPTBdPSJJbml0aWFsaXplIixlW2UuUmVzZXQ9MV09IlJlc2V0IixlW2UuQXN5bmNFdmVudHM9Ml09IkFzeW5jRXZlbnRzIixlW2UuSWRlbnRpZnk9M109IklkZW50aWZ5IixlW2UuUHJvcGVydGllcz00XT0iUHJvcGVydGllcyIsZVtlLk1ldHJpY3M9NV09Ik1ldHJpY3MiLGVbZS5GZWVkYmFjaz02XT0iRmVlZGJhY2siLGVbZS5DdXN0b21FdmVudD03XT0iQ3VzdG9tRXZlbnQiLGVbZS5TdG9wPThdPSJTdG9wIixlW2UuR2V0U3RhdHVzPTldPSJHZXRTdGF0dXMiLGUpKShafHx7fSk7Y29uc3QgSWU9c2VsZjtmdW5jdGlvbiBYdChlLHQpe2NvbnN0IG49e30saT1bXSxyPVtdO2Zvcihjb25zdFtzLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpe2lmKG89PW51bGwpY29udGludWU7QnIuaW5jbHVkZXModHlwZW9mIG8pfHxpLnB1c2goe1tzXTpvfSk7bGV0IGM7dHlwZW9mIG89PSJzdHJpbmciP2M9bzpjPW1lKG8pLGMubGVuZ3RoPlF0JiYoci5wdXNoKHtbc106b30pLGM9Yy5zdWJzdHJpbmcoMCxRdCkpLG5bc109Y31yZXR1cm4gdCE9PSJzZXNzaW9uIiYmKGkubGVuZ3RoPjAmJmNvbnNvbGUud2FybihgSGlnaGxpZ2h0IHdhcyBwYXNzZWQgb25lIG9yIG1vcmUgJHt0fSBwcm9wZXJ0aWVzIG5vdCBvZiB0eXBlIHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuLmAsaSksci5sZW5ndGg+MCYmY29uc29sZS53YXJuKGBIaWdobGlnaHQgd2FzIHBhc3NlZCBvbmUgb3IgbW9yZSAke3R9IHByb3BlcnRpZXMgZXhjZWVkaW5nIDIwMDAgY2hhcmFjdGVycywgd2hpY2ggd2lsbCBiZSB0cnVuY2F0ZWQuYCxyKSksbn17bGV0IGUsdCxuLGk9MCxyPTAscz0hMSxvPTAsYz1uZXcga3IoITEsIlt3b3JrZXJdIik7Y29uc3QgZj1bXSxkPVtdLHU9KCk9Pm8hPT0wJiZpPEp0JiYhIShuIT1udWxsJiZuLmxlbmd0aCkseT0odixFKT0+e0llLnBvc3RNZXNzYWdlKHtyZXNwb25zZTp7dHlwZTpaLkN1c3RvbUV2ZW50LHRhZzp2LHBheWxvYWQ6RX19KX0sZz12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHtpZDpFLGV2ZW50czp3LG1lc3NhZ2VzOkMsZXJyb3JzOkwscmVzb3VyY2VzU3RyaW5nOkksd2ViU29ja2V0RXZlbnRzU3RyaW5nOngsaGFzU2Vzc2lvblVubG9hZGVkOnosaGlnaGxpZ2h0TG9nczpWfT12LEg9bWUoe21lc3NhZ2VzOkN9KTtsZXQgWD17c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxldmVudHM6e2V2ZW50czp3fSxtZXNzYWdlczpILHJlc291cmNlczpJLHdlYl9zb2NrZXRfZXZlbnRzOngsZXJyb3JzOkwsaXNfYmVhY29uOiExLGhhc19zZXNzaW9uX3VubG9hZGVkOnp9O1YmJihYLmhpZ2hsaWdodF9sb2dzPVYpO2NvbnN0e2NvbXByZXNzZWRCYXNlNjQ6YSxidWZmZXJMZW5ndGg6aCxjb21wcmVzc2VkU2l6ZTpffT15aWVsZCBDcihYKSxTPXt0eXBlOlouQXN5bmNFdmVudHMsaWQ6RSxldmVudHNTaXplOmgsY29tcHJlc3NlZFNpemU6YS5sZW5ndGh9O2MubG9nKGBQdXNoaW5nIHBheWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25TZWN1cmVJRDpuLGlkOkUsZmlyc3RTSUQ6TWF0aC5taW4oLi4uWC5ldmVudHMuZXZlbnRzLm1hcChXPT5XPT1udWxsP3ZvaWQgMDpXLl9zaWQpLmZpbHRlcihXPT4hIVcpKSxldmVudHNMZW5ndGg6WC5ldmVudHMuZXZlbnRzLmxlbmd0aCxtZXNzYWdlc0xlbmd0aDpDLmxlbmd0aCxyZXNvdXJjZXNMZW5ndGg6SS5sZW5ndGgsd2ViU29ja2V0TGVuZ3RoOngubGVuZ3RoLGVycm9yc0xlbmd0aDpMLmxlbmd0aCxidWZMZW5ndGg6aCxjb21wcmVzc2VkTGVuZ3RoOl8sY29tcHJlc3NlZEJhc2U2NExlbmd0aDphLmxlbmd0aH0sdm9pZCAwLDIpfWApO2NvbnN0IGs9ZS5QdXNoU2Vzc2lvbkV2ZW50cyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwYXlsb2FkX2lkOkUudG9TdHJpbmcoKSxkYXRhOmF9KTtsZXQgQT1Qcm9taXNlLnJlc29sdmUoKTtmLmxlbmd0aCYmKEE9ZS5wdXNoTWV0cmljcyh7bWV0cmljczpmfSksZi5zcGxpY2UoMCkpO2xldCBLPXBlcmZvcm1hbmNlLm5vdygpO2NvbnN0IHE9c2V0SW50ZXJ2YWwoKCk9PntLJiZwZXJmb3JtYW5jZS5ub3coKS1LPmt0JiYoY29uc29sZS53YXJuKGBVcGxvYWRpbmcgcHVzaFBheWxvYWQgdG9vayB0b28gbG9uZywgZmFpbHVyZSBudW1iZXIgIyR7cn0uYCkscis9MSxjbGVhckludGVydmFsKHEpLHI+PUp0JiYoY29uc29sZS53YXJuKCJVcGxvYWRpbmcgcHVzaFBheWxvYWQgdG9vayB0b28gbG9uZywgc3RvcHBpbmcgcmVjb3JkaW5nIHRvIGF2b2lkIE9PTS4iKSxJZS5wb3N0TWVzc2FnZSh7cmVzcG9uc2U6e3R5cGU6Wi5TdG9wLHJlcXVlc3RTdGFydDpLLGFzeW5jRXZlbnRzUmVzcG9uc2U6U319KSxtKHt0eXBlOlouUHJvcGVydGllcyxwcm9wZXJ0aWVzT2JqZWN0OntzdG9wUmVhc29uOiJQdXNoIFBheWxvYWQgVGltZW91dCJ9LHByb3BlcnR5VHlwZTp7dHlwZToidHJhY2sifX0pKSl9LDEwMCk7dHJ5e3lpZWxkIFByb21pc2UuYWxsKFtrLEFdKSxyJiZwZXJmb3JtYW5jZS5ub3coKS1LPD1rdCYmKGNvbnNvbGUud2FybihgcHVzaFBheWxvYWQgc3VjY2VlZGVkIGFmdGVyICMke3J9IGZhaWx1cmVzLCByZXNldHRpbmcgc3RvcCBzd2l0Y2guYCkscj0wKX1maW5hbGx5e0s9MCxjbGVhckludGVydmFsKHEpfUllLnBvc3RNZXNzYWdlKHtyZXNwb25zZTpTfSl9KSxiPXY9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3VzZXJPYmplY3Q6RSx1c2VySWRlbnRpZmllcjp3LHNvdXJjZTpDfT12O0M9PT0ic2VnbWVudCI/eSgiU2VnbWVudCBJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6d30sRSkpKTp5KCJJZGVudGlmeSIsbWUoRCh7dXNlcklkZW50aWZpZXI6d30sRSkpKSx5aWVsZCBlLmlkZW50aWZ5U2Vzc2lvbih7c2Vzc2lvbl9zZWN1cmVfaWQ6bix1c2VyX2lkZW50aWZpZXI6dyx1c2VyX29iamVjdDpYdChFLCJ1c2VyIil9KTtjb25zdCBMPUM9PT0ic2VnbWVudCI/QzoiZGVmYXVsdCI7Yy5sb2coYElkZW50aWZ5ICgke3d9LCBzb3VyY2U6ICR7TH0pIHcvIG9iajogJHttZShFKX0gQCAke3R9YCl9KSxtPXY9PkoodGhpcyxudWxsLGZ1bmN0aW9uKigpe2NvbnN0e3Byb3BlcnRpZXNPYmplY3Q6RSxwcm9wZXJ0eVR5cGU6d309djtsZXQgQzsodz09bnVsbD92b2lkIDA6dy50eXBlKT09PSJzZXNzaW9uIj8oQz0iU2Vzc2lvbiIseWllbGQgZS5hZGRTZXNzaW9uUHJvcGVydGllcyh7c2Vzc2lvbl9zZWN1cmVfaWQ6bixwcm9wZXJ0aWVzX29iamVjdDpYdChFLCJzZXNzaW9uIil9KSk6KHc9PW51bGw/dm9pZCAwOncuc291cmNlKT09PSJzZWdtZW50Ij9DPSJTZWdtZW50IjpDPSJUcmFjayIsQyE9PSJTZXNzaW9uIiYmeShDLG1lKEUpKSxjLmxvZyhgQWRkaW5nICR7Q30gUHJvcGVydGllcyB0byBzZXNzaW9uICgke259KSB3LyBvYmo6ICR7SlNPTi5zdHJpbmdpZnkoRSl9IEAgJHt0fWApfSksTj12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmLnB1c2goLi4udi5tZXRyaWNzLm1hcChFPT4oe25hbWU6RS5uYW1lLHZhbHVlOkUudmFsdWUsc2Vzc2lvbl9zZWN1cmVfaWQ6bixjYXRlZ29yeTpFLmNhdGVnb3J5LGdyb3VwOkUuZ3JvdXAsdGltZXN0YW1wOkUudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksdGFnczpFLnRhZ3N9KSkpfSksUj12PT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtjb25zdHt0aW1lc3RhbXA6RSx2ZXJiYXRpbTp3LHVzZXJFbWFpbDpDLHVzZXJOYW1lOkx9PXY7eWllbGQgZS5hZGRTZXNzaW9uRmVlZGJhY2soe3Nlc3Npb25fc2VjdXJlX2lkOm4sdGltZXN0YW1wOkUsdmVyYmF0aW06dyx1c2VyX2VtYWlsOkMsdXNlcl9uYW1lOkx9KX0pLFA9dj0+Sih0aGlzLG51bGwsZnVuY3Rpb24qKCl7di50eXBlPT09Wi5Bc3luY0V2ZW50cz95aWVsZCBnKHYpOnYudHlwZT09PVouSWRlbnRpZnk/eWllbGQgYih2KTp2LnR5cGU9PT1aLlByb3BlcnRpZXM/eWllbGQgbSh2KTp2LnR5cGU9PT1aLk1ldHJpY3M/eWllbGQgTih2KTp2LnR5cGU9PT1aLkZlZWRiYWNrJiYoeWllbGQgUih2KSl9KSxqPSgpPT5KKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtmb3IoO2QubGVuZ3RoPjAmJnUoKTspe2NvbnN0IHY9ZC5zaGlmdCgpO3RyeXt5aWVsZCBQKHYpLGk9MH1jYXRjaChFKXtzJiZjb25zb2xlLmVycm9yKEUpLGkrPTF9fX0pO0llLm9ubWVzc2FnZT1mdW5jdGlvbih2KXtyZXR1cm4gSih0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodi5kYXRhLm1lc3NhZ2UudHlwZT09PVouSW5pdGlhbGl6ZSl7dD12LmRhdGEubWVzc2FnZS5iYWNrZW5kLG49di5kYXRhLm1lc3NhZ2Uuc2Vzc2lvblNlY3VyZUlELHM9di5kYXRhLm1lc3NhZ2UuZGVidWcsbz12LmRhdGEubWVzc2FnZS5yZWNvcmRpbmdTdGFydFRpbWUsYy5kZWJ1Zz1zLGU9bXIobmV3IFluKHQse2hlYWRlcnM6e319KSwkcigpKSx5aWVsZCBqKCk7cmV0dXJufWlmKHYuZGF0YS5tZXNzYWdlLnR5cGU9PT1aLlJlc2V0KXtkLmxlbmd0aD0wLGYubGVuZ3RoPTAsaT0wLHI9MCxuPSIiLG89MDtyZXR1cm59aWYodi5kYXRhLm1lc3NhZ2UudHlwZT09PVouR2V0U3RhdHVzKXtJZS5wb3N0TWVzc2FnZSh7cmVzcG9uc2U6e3R5cGU6Wi5HZXRTdGF0dXMscGVuZGluZ0NvdW50OmQubGVuZ3RoLGluaXRpYWxpemVkOnUoKX19KTtyZXR1cm59aWYoIXUoKSl7ZC5wdXNoKHYuZGF0YS5tZXNzYWdlKTtyZXR1cm59dHJ5e3lpZWxkIFAodi5kYXRhLm1lc3NhZ2UpLGk9MCx5aWVsZCBqKCl9Y2F0Y2goRSl7cyYmY29uc29sZS5lcnJvcihFKSxpKz0xfX0pfX19KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1oaWdobGlnaHQtY2xpZW50LXdvcmtlci1CQVJKeVZqWC5qcy5tYXAK", Qg = (e) => Uint8Array.from(atob(e), (t) => t.charCodeAt(0)), kl = typeof self < "u" && self.Blob && new Blob([Qg(uu)], { type: "text/javascript;charset=utf-8" });
|
|
13511
13511
|
function Ag(e) {
|
|
13512
13512
|
let t;
|
|
13513
13513
|
try {
|
|
@@ -13529,7 +13529,7 @@ function Ag(e) {
|
|
|
13529
13529
|
t && (self.URL || self.webkitURL).revokeObjectURL(t);
|
|
13530
13530
|
}
|
|
13531
13531
|
}
|
|
13532
|
-
var
|
|
13532
|
+
var Fe = /* @__PURE__ */ ((e) => (e[e.Initialize = 0] = "Initialize", e[e.Reset = 1] = "Reset", e[e.AsyncEvents = 2] = "AsyncEvents", e[e.Identify = 3] = "Identify", e[e.Properties = 4] = "Properties", e[e.Metrics = 5] = "Metrics", e[e.Feedback = 6] = "Feedback", e[e.CustomEvent = 7] = "CustomEvent", e[e.Stop = 8] = "Stop", e[e.GetStatus = 9] = "GetStatus", e))(Fe || {});
|
|
13533
13533
|
const _g = ({
|
|
13534
13534
|
apiKey: e
|
|
13535
13535
|
}) => {
|
|
@@ -13671,13 +13671,13 @@ class eZ {
|
|
|
13671
13671
|
var i, n, s, r, l;
|
|
13672
13672
|
this.options = t, typeof ((i = this.options) == null ? void 0 : i.debug) == "boolean" ? this.debugOptions = this.options.debug ? { clientInteractions: !0 } : {} : this.debugOptions = (s = (n = this.options) == null ? void 0 : n.debug) != null ? s : {}, this.logger = new vl(this.debugOptions.clientInteractions), this._worker = new Ag(), this._worker.onmessage = (a) => {
|
|
13673
13673
|
var c, u, h;
|
|
13674
|
-
((c = a.data.response) == null ? void 0 : c.type) ===
|
|
13674
|
+
((c = a.data.response) == null ? void 0 : c.type) === Fe.AsyncEvents ? (this._eventBytesSinceSnapshot += a.data.response.eventsSize, this.logger.log(
|
|
13675
13675
|
`Web worker sent payloadID ${a.data.response.id} size ${a.data.response.eventsSize} bytes, compression ratio ${a.data.response.eventsSize / a.data.response.compressedSize}.
|
|
13676
13676
|
Total since snapshot: ${(this._eventBytesSinceSnapshot / 1e6).toFixed(1)}MB`
|
|
13677
|
-
)) : ((u = a.data.response) == null ? void 0 : u.type) ===
|
|
13677
|
+
)) : ((u = a.data.response) == null ? void 0 : u.type) === Fe.CustomEvent ? this.addCustomEvent(
|
|
13678
13678
|
a.data.response.tag,
|
|
13679
13679
|
a.data.response.payload
|
|
13680
|
-
) : ((h = a.data.response) == null ? void 0 : h.type) ===
|
|
13680
|
+
) : ((h = a.data.response) == null ? void 0 : h.type) === Fe.Stop && (Ve(
|
|
13681
13681
|
"worker.onmessage",
|
|
13682
13682
|
"warn",
|
|
13683
13683
|
"Stopping recording due to worker failure",
|
|
@@ -13690,7 +13690,7 @@ class eZ {
|
|
|
13690
13690
|
`Tab reloaded, continuing previous session: ${this.sessionData.sessionSecureID}`
|
|
13691
13691
|
);
|
|
13692
13692
|
else {
|
|
13693
|
-
for (const a of Object.values(
|
|
13693
|
+
for (const a of Object.values(Ze))
|
|
13694
13694
|
mn(a);
|
|
13695
13695
|
this.sessionData = {
|
|
13696
13696
|
sessionSecureID: this.options.sessionSecureID,
|
|
@@ -13708,7 +13708,7 @@ class eZ {
|
|
|
13708
13708
|
}
|
|
13709
13709
|
// Start a new session
|
|
13710
13710
|
_reset(t) {
|
|
13711
|
-
return
|
|
13711
|
+
return ye(this, arguments, function* ({
|
|
13712
13712
|
forceNew: i,
|
|
13713
13713
|
sessionKey: n
|
|
13714
13714
|
}) {
|
|
@@ -13716,16 +13716,16 @@ class eZ {
|
|
|
13716
13716
|
let s, r;
|
|
13717
13717
|
if (!i)
|
|
13718
13718
|
try {
|
|
13719
|
-
s = Xe(
|
|
13719
|
+
s = Xe(Ze.USER_IDENTIFIER);
|
|
13720
13720
|
const l = Xe(
|
|
13721
|
-
|
|
13721
|
+
Ze.USER_OBJECT
|
|
13722
13722
|
);
|
|
13723
13723
|
l && (r = JSON.parse(l));
|
|
13724
13724
|
} catch {
|
|
13725
13725
|
}
|
|
13726
|
-
for (const l of Object.values(
|
|
13726
|
+
for (const l of Object.values(Ze))
|
|
13727
13727
|
mn(l);
|
|
13728
|
-
this.sessionData.sessionSecureID = n ? _t(`${this.organizationID}-${n}`) : _t(), this.sessionData.sessionKey = n, this.sessionData.sessionStartTime = Date.now(), this.options.sessionSecureID = this.sessionData.sessionSecureID, this.stop(), yield this.start(), s && r && this.identify(s, r);
|
|
13728
|
+
this.sessionData.sessionSecureID = n ? _t(`${this.organizationID}-${n}`) : _t(), this.sessionData.sessionKey = n, this.sessionData.sessionStartTime = Date.now(), this.options.sessionSecureID = this.sessionData.sessionSecureID, this.stop(), this._worker.postMessage({ message: { type: Fe.Reset } }), yield this.start(), s && r && this.identify(s, r);
|
|
13729
13729
|
});
|
|
13730
13730
|
}
|
|
13731
13731
|
_initMembers(t) {
|
|
@@ -13734,7 +13734,7 @@ class eZ {
|
|
|
13734
13734
|
canvasFactor: 0.5,
|
|
13735
13735
|
canvasMaxSnapshotDimension: 360,
|
|
13736
13736
|
canvasClearWebGLBuffer: !0,
|
|
13737
|
-
dataUrlOptions:
|
|
13737
|
+
dataUrlOptions: Od()
|
|
13738
13738
|
}, (o = t.samplingStrategy) != null ? o : {
|
|
13739
13739
|
canvas: 2
|
|
13740
13740
|
}), this._backendUrl = (a = t?.backendUrl) != null ? a : "https://pub.observability.app.launchdarkly.com", this._backendUrl[0] === "/" && (this._backendUrl = new URL(this._backendUrl, document.baseURI).href);
|
|
@@ -13743,7 +13743,7 @@ class eZ {
|
|
|
13743
13743
|
});
|
|
13744
13744
|
this.graphqlSDK = Kd(h, hh()), this.environment = (c = t.environment) != null ? c : "production", this.appVersion = t.appVersion, this.serviceName = (u = t.serviceName) != null ? u : "browser", typeof t.organizationID == "string" ? this.organizationID = t.organizationID : this.organizationID = t.organizationID.toString(), this.isRunningOnHighlight = this.organizationID === "1" || this.organizationID === "1jdkoe52", this.firstloadVersion = t.firstloadVersion || "unknown", this.sessionShortcut = t.sessionShortcut || !1, this._onToggleFeedbackFormVisibility = () => {
|
|
13745
13745
|
};
|
|
13746
|
-
const p = t, m =
|
|
13746
|
+
const p = t, m = Ct(p, ["firstloadVersion"]);
|
|
13747
13747
|
this._optionsInternal = m, this.listeners = [], this.events = [], this.hasSessionUnloaded = !1, this.hasPushedData = !1, window.Intercom && window.Intercom("onShow", () => {
|
|
13748
13748
|
window.Intercom("update", {
|
|
13749
13749
|
highlightSessionURL: this.getCurrentSessionURLWithTimestamp()
|
|
@@ -13761,11 +13761,11 @@ class eZ {
|
|
|
13761
13761
|
return;
|
|
13762
13762
|
}
|
|
13763
13763
|
this.sessionData.userIdentifier = t.toString(), this.sessionData.userObject = i, Pe(
|
|
13764
|
-
|
|
13764
|
+
Ze.USER_IDENTIFIER,
|
|
13765
13765
|
t.toString()
|
|
13766
|
-
), Pe(
|
|
13766
|
+
), Pe(Ze.USER_OBJECT, JSON.stringify(i)), this._worker.postMessage({
|
|
13767
13767
|
message: {
|
|
13768
|
-
type:
|
|
13768
|
+
type: Fe.Identify,
|
|
13769
13769
|
userIdentifier: t,
|
|
13770
13770
|
userObject: i,
|
|
13771
13771
|
source: n
|
|
@@ -13773,7 +13773,7 @@ class eZ {
|
|
|
13773
13773
|
});
|
|
13774
13774
|
}
|
|
13775
13775
|
track(t, i) {
|
|
13776
|
-
this.addProperties(
|
|
13776
|
+
this.addProperties(me(Y({}, i), { event: t }));
|
|
13777
13777
|
}
|
|
13778
13778
|
addProperties(t = {}, i) {
|
|
13779
13779
|
const n = Y({}, t);
|
|
@@ -13785,7 +13785,7 @@ class eZ {
|
|
|
13785
13785
|
}
|
|
13786
13786
|
}), this._worker.postMessage({
|
|
13787
13787
|
message: {
|
|
13788
|
-
type:
|
|
13788
|
+
type: Fe.Properties,
|
|
13789
13789
|
propertiesObject: n,
|
|
13790
13790
|
propertyType: i
|
|
13791
13791
|
}
|
|
@@ -13799,7 +13799,7 @@ class eZ {
|
|
|
13799
13799
|
this.addProperties(t, { type: "session" });
|
|
13800
13800
|
}
|
|
13801
13801
|
start(t) {
|
|
13802
|
-
return
|
|
13802
|
+
return ye(this, null, function* () {
|
|
13803
13803
|
var i, n, s, r, l, o, a, c, u, h;
|
|
13804
13804
|
if (!((i = navigator?.userAgent) != null && i.includes("Googlebot") || (n = navigator?.userAgent) != null && n.includes("AdsBot")))
|
|
13805
13805
|
try {
|
|
@@ -13808,7 +13808,7 @@ class eZ {
|
|
|
13808
13808
|
return;
|
|
13809
13809
|
}
|
|
13810
13810
|
if (t != null && t.sessionKey && t?.sessionKey !== this.sessionData.sessionKey) {
|
|
13811
|
-
yield this._reset(
|
|
13811
|
+
yield this._reset(me(Y({}, t), { forceNew: !0 }));
|
|
13812
13812
|
return;
|
|
13813
13813
|
}
|
|
13814
13814
|
this.logger.log(
|
|
@@ -13817,15 +13817,15 @@ class eZ {
|
|
|
13817
13817
|
this.sessionData,
|
|
13818
13818
|
this.options
|
|
13819
13819
|
), this.sessionData = (s = qi(this.sessionData.sessionSecureID)) != null ? s : this.sessionData, (r = this.sessionData) != null && r.sessionStartTime ? this._recordingStartTime = (l = this.sessionData) == null ? void 0 : l.sessionStartTime : (this._recordingStartTime = (/* @__PURE__ */ new Date()).getTime(), this.sessionData.sessionStartTime = this._recordingStartTime);
|
|
13820
|
-
let p = Xe(
|
|
13821
|
-
p || (p = _t(), Pe(
|
|
13820
|
+
let p = Xe(Ws.CLIENT_ID);
|
|
13821
|
+
p || (p = _t(), Pe(Ws.CLIENT_ID, p));
|
|
13822
13822
|
let m;
|
|
13823
13823
|
this.options.disableSessionRecording || this.options.disableNetworkRecording !== void 0 || typeof this.options.networkRecording == "boolean" ? m = !1 : m = ((o = this.options.networkRecording) == null ? void 0 : o.recordHeadersAndBody) || !1;
|
|
13824
13824
|
let b = [];
|
|
13825
13825
|
if (typeof this.options.networkRecording == "object" && (a = this.options.networkRecording.destinationDomains) != null && a.length && (b = this.options.networkRecording.destinationDomains), this._isCrossOriginIframe)
|
|
13826
13826
|
yield this._setupCrossOriginIframe();
|
|
13827
13827
|
else {
|
|
13828
|
-
const
|
|
13828
|
+
const C = yield this.graphqlSDK.initializeSession({
|
|
13829
13829
|
organization_verbose_id: this.organizationID,
|
|
13830
13830
|
enable_strict_privacy: this.privacySetting === "strict",
|
|
13831
13831
|
privacy_setting: this.privacySetting,
|
|
@@ -13843,10 +13843,10 @@ class eZ {
|
|
|
13843
13843
|
network_recording_domains: b,
|
|
13844
13844
|
disable_session_recording: this.options.disableSessionRecording
|
|
13845
13845
|
});
|
|
13846
|
-
if (
|
|
13847
|
-
`Unexpected secure id returned by initializeSession: ${
|
|
13848
|
-
), this.sessionData.sessionSecureID =
|
|
13849
|
-
((c =
|
|
13846
|
+
if (C.initializeSession.secure_id !== this.sessionData.sessionSecureID && this.logger.log(
|
|
13847
|
+
`Unexpected secure id returned by initializeSession: ${C.initializeSession.secure_id}, expected ${this.sessionData.sessionSecureID}`
|
|
13848
|
+
), this.sessionData.sessionSecureID = C.initializeSession.secure_id, this.sessionData.projectID = parseInt(
|
|
13849
|
+
((c = C?.initializeSession) == null ? void 0 : c.project_id) || "0"
|
|
13850
13850
|
), !this.sessionData.projectID || !this.sessionData.sessionSecureID) {
|
|
13851
13851
|
console.error(
|
|
13852
13852
|
"Failed to initialize Highlight; an error occurred on our end.",
|
|
@@ -13862,15 +13862,15 @@ Project ID: ${this.sessionData.projectID}
|
|
|
13862
13862
|
SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
13863
13863
|
), this.options.sessionSecureID = this.sessionData.sessionSecureID, this._worker.postMessage({
|
|
13864
13864
|
message: {
|
|
13865
|
-
type:
|
|
13865
|
+
type: Fe.Initialize,
|
|
13866
13866
|
sessionSecureID: this.sessionData.sessionSecureID,
|
|
13867
13867
|
backend: this._backendUrl,
|
|
13868
13868
|
debug: !!this.debugOptions.clientInteractions,
|
|
13869
13869
|
recordingStartTime: this._recordingStartTime
|
|
13870
13870
|
}
|
|
13871
13871
|
});
|
|
13872
|
-
for (const
|
|
13873
|
-
|
|
13872
|
+
for (const C of this._integrations)
|
|
13873
|
+
C.init(this.sessionData.sessionSecureID);
|
|
13874
13874
|
if (this.sessionData.userIdentifier && this.identify(
|
|
13875
13875
|
this.sessionData.userIdentifier,
|
|
13876
13876
|
this.sessionData.userObject
|
|
@@ -13882,14 +13882,16 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
13882
13882
|
), this.ready = !0, this.state = "Recording", this.manualStopped = !1;
|
|
13883
13883
|
return;
|
|
13884
13884
|
}
|
|
13885
|
-
const d = (
|
|
13886
|
-
X && this.logger.log("received isCheckout emit", { event:
|
|
13885
|
+
const d = (C, X) => {
|
|
13886
|
+
X && this.logger.log("received isCheckout emit", { event: C }), this.events.push(C);
|
|
13887
13887
|
};
|
|
13888
13888
|
d.bind(this);
|
|
13889
13889
|
const S = !!this._recordStop;
|
|
13890
13890
|
this._recordStop && (this._recordStop(), this._recordStop = void 0);
|
|
13891
13891
|
const [I, V] = yg(
|
|
13892
|
-
this.privacySetting
|
|
13892
|
+
this.privacySetting,
|
|
13893
|
+
this.options.maskAllInputs,
|
|
13894
|
+
this.options.maskInputOptions
|
|
13893
13895
|
);
|
|
13894
13896
|
this._recordStop = Be({
|
|
13895
13897
|
ignoreClass: (u = this.options.ignoreClass) != null ? u : "highlight-ignore",
|
|
@@ -13915,12 +13917,12 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
13915
13917
|
maxSnapshotDimension: this.samplingStrategy.canvasMaxSnapshotDimension
|
|
13916
13918
|
}
|
|
13917
13919
|
},
|
|
13918
|
-
keepIframeSrcFn: (
|
|
13920
|
+
keepIframeSrcFn: (C) => !this.options.recordCrossOriginIframe,
|
|
13919
13921
|
inlineImages: this.inlineImages,
|
|
13920
13922
|
inlineVideos: this.inlineVideos,
|
|
13921
13923
|
collectFonts: this.inlineImages,
|
|
13922
13924
|
inlineStylesheet: this.inlineStylesheet,
|
|
13923
|
-
plugins: [
|
|
13925
|
+
plugins: [Uh()],
|
|
13924
13926
|
logger: typeof this.options.debug == "boolean" && this.options.debug || typeof this.options.debug == "object" && this.options.debug.domRecording ? {
|
|
13925
13927
|
debug: this.logger.log,
|
|
13926
13928
|
warn: Ve.bind("RecordSDK", "warn")
|
|
@@ -13940,7 +13942,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
13940
13942
|
});
|
|
13941
13943
|
}
|
|
13942
13944
|
_visibilityHandler(t) {
|
|
13943
|
-
return
|
|
13945
|
+
return ye(this, null, function* () {
|
|
13944
13946
|
if (this.manualStopped) {
|
|
13945
13947
|
this.logger.log("Ignoring visibility event due to manual stop.");
|
|
13946
13948
|
return;
|
|
@@ -13949,7 +13951,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
13949
13951
|
});
|
|
13950
13952
|
}
|
|
13951
13953
|
_setupCrossOriginIframe() {
|
|
13952
|
-
return
|
|
13954
|
+
return ye(this, null, function* () {
|
|
13953
13955
|
this.logger.log("highlight in cross-origin iframe is waiting "), yield new Promise((t) => {
|
|
13954
13956
|
const i = (n) => {
|
|
13955
13957
|
if (n.data.highlight === Sl) {
|
|
@@ -14019,7 +14021,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14019
14021
|
)) : this.addCustomEvent("Navigate", r);
|
|
14020
14022
|
})
|
|
14021
14023
|
), this.listeners.push(
|
|
14022
|
-
|
|
14024
|
+
Ch(
|
|
14023
14025
|
(r) => {
|
|
14024
14026
|
this.addCustomEvent("Viewport", r);
|
|
14025
14027
|
}
|
|
@@ -14099,7 +14101,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14099
14101
|
return t && i ? `https://${io}/${t}/sessions/${i}` : null;
|
|
14100
14102
|
}
|
|
14101
14103
|
snapshot(t) {
|
|
14102
|
-
return
|
|
14104
|
+
return ye(this, null, function* () {
|
|
14103
14105
|
yield Be.snapshotCanvas(t);
|
|
14104
14106
|
});
|
|
14105
14107
|
}
|
|
@@ -14112,7 +14114,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14112
14114
|
var r;
|
|
14113
14115
|
this._worker.postMessage({
|
|
14114
14116
|
message: {
|
|
14115
|
-
type:
|
|
14117
|
+
type: Fe.Feedback,
|
|
14116
14118
|
verbatim: i,
|
|
14117
14119
|
timestamp: t,
|
|
14118
14120
|
userName: s || this.sessionData.userIdentifier,
|
|
@@ -14122,14 +14124,14 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14122
14124
|
}
|
|
14123
14125
|
// Reset the events array and push to a backend.
|
|
14124
14126
|
_save() {
|
|
14125
|
-
return
|
|
14127
|
+
return ye(this, null, function* () {
|
|
14126
14128
|
var t;
|
|
14127
14129
|
try {
|
|
14128
14130
|
this.state === "Recording" && this.listeners && !this.sessionData.sessionKey && this.sessionData.sessionStartTime && Date.now() - this.sessionData.sessionStartTime > Pd && (this.logger.log("Resetting session", {
|
|
14129
14131
|
start: this.sessionData.sessionStartTime
|
|
14130
14132
|
}), yield this._reset({}));
|
|
14131
14133
|
let i;
|
|
14132
|
-
((t = this.options) == null ? void 0 : t.sendMode) === "local" && (i = (n) =>
|
|
14134
|
+
((t = this.options) == null ? void 0 : t.sendMode) === "local" && (i = (n) => ye(this, null, function* () {
|
|
14133
14135
|
let s = new Blob(
|
|
14134
14136
|
[
|
|
14135
14137
|
JSON.stringify({
|
|
@@ -14151,7 +14153,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14151
14153
|
}
|
|
14152
14154
|
this.state === "Recording" && (this.pushPayloadTimerId && (clearTimeout(this.pushPayloadTimerId), this.pushPayloadTimerId = void 0), this.pushPayloadTimerId = setTimeout(() => {
|
|
14153
14155
|
this._save();
|
|
14154
|
-
},
|
|
14156
|
+
}, zd));
|
|
14155
14157
|
});
|
|
14156
14158
|
}
|
|
14157
14159
|
/**
|
|
@@ -14168,7 +14170,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14168
14170
|
} else this.state === "Recording" && (this.events.length > 0 || this.hasPushedData) && gl(t, i);
|
|
14169
14171
|
}
|
|
14170
14172
|
_sendPayload(t) {
|
|
14171
|
-
return
|
|
14173
|
+
return ye(this, arguments, function* ({
|
|
14172
14174
|
sendFn: i
|
|
14173
14175
|
}) {
|
|
14174
14176
|
const n = [...this.events], { bytes: s, time: r } = this.enableCanvasRecording ? to.canvas : to.normal;
|
|
@@ -14202,7 +14204,7 @@ SessionSecureID: ${this.sessionData.sessionSecureID}`
|
|
|
14202
14204
|
} else
|
|
14203
14205
|
this._worker.postMessage({
|
|
14204
14206
|
message: {
|
|
14205
|
-
type:
|
|
14207
|
+
type: Fe.AsyncEvents,
|
|
14206
14208
|
id: l,
|
|
14207
14209
|
events: n,
|
|
14208
14210
|
messages: [],
|
|
@@ -14303,7 +14305,7 @@ class hZ extends wh {
|
|
|
14303
14305
|
return;
|
|
14304
14306
|
}
|
|
14305
14307
|
this.configureSession(t, i);
|
|
14306
|
-
const p =
|
|
14308
|
+
const p = me(Y({}, i), {
|
|
14307
14309
|
organizationID: t,
|
|
14308
14310
|
firstloadVersion: Vh,
|
|
14309
14311
|
environment: i?.environment || "production",
|
|
@@ -14332,8 +14334,8 @@ class hZ extends wh {
|
|
|
14332
14334
|
getHooks(t) {
|
|
14333
14335
|
var i, n, s, r;
|
|
14334
14336
|
const l = Y(Y({
|
|
14335
|
-
[
|
|
14336
|
-
[
|
|
14337
|
+
[Ed]: t.sdk.name,
|
|
14338
|
+
[Hd]: t.sdk.version,
|
|
14337
14339
|
[ph]: t.clientSideId,
|
|
14338
14340
|
[mh]: "LaunchDarkly"
|
|
14339
14341
|
}, (i = t.application) != null && i.id ? { [bh]: t.application.id } : {}), (n = t.application) != null && n.version ? {
|
|
@@ -14352,7 +14354,7 @@ class hZ extends wh {
|
|
|
14352
14354
|
for (const V of (p = (h = (u = this.record) == null ? void 0 : u.getHooks) == null ? void 0 : h.call(u, t)) != null ? p : [])
|
|
14353
14355
|
(m = V.afterIdentify) == null || m.call(V, o, a, c);
|
|
14354
14356
|
if (c.status === "completed") {
|
|
14355
|
-
const V =
|
|
14357
|
+
const V = me(Y({}, gh(o.context)), {
|
|
14356
14358
|
key: (S = (d = (b = this.options) == null ? void 0 : b.contextFriendlyName) == null ? void 0 : d.call(
|
|
14357
14359
|
b,
|
|
14358
14360
|
o.context
|
|
@@ -14391,4 +14393,4 @@ export {
|
|
|
14391
14393
|
jt as t,
|
|
14392
14394
|
wl as x
|
|
14393
14395
|
};
|
|
14394
|
-
//# sourceMappingURL=index-
|
|
14396
|
+
//# sourceMappingURL=index-CTojSwVM.js.map
|