@rotki/ui-library 2.6.4 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +3 -2
- package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +2 -1
- package/dist/components/alerts/RuiAlert.vue.d.ts +4 -3
- package/dist/components/buttons/button/RuiButton.vue.d.ts +7 -5
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
- package/dist/components/calendar/RuiCalendar.vue.d.ts +4 -2
- package/dist/components/calendar/RuiCalendarGrid.vue.d.ts +4 -2
- package/dist/components/calendar/RuiCalendarHeader.vue.d.ts +4 -2
- package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +4 -2
- package/dist/components/cards/RuiCard.vue.d.ts +4 -3
- package/dist/components/cards/RuiCardHeader.vue.d.ts +3 -2
- package/dist/components/chips/RuiChip.vue.d.ts +4 -3
- package/dist/components/color-picker/RuiColorBoard.vue.d.ts +2 -1
- package/dist/components/color-picker/RuiColorDisplay.vue.d.ts +2 -1
- package/dist/components/color-picker/RuiColorHue.vue.d.ts +4 -3
- package/dist/components/color-picker/RuiColorInput.vue.d.ts +4 -3
- package/dist/components/color-picker/RuiColorPicker.vue.d.ts +2 -1
- package/dist/components/color-picker/utils.d.ts +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +10 -8
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +5 -3
- package/dist/components/divider/RuiDivider.vue.d.ts +2 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +29 -28
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +4 -3
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +7 -6
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +7 -6
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +8 -6
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +747 -10
- package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +3 -2
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +3 -2
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +3 -2
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +8 -6
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +10 -8
- package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +2 -1
- package/dist/components/icons/RuiIcon.vue.d.ts +2 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.es.js +4343 -4260
- package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +2 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +2 -1
- package/dist/components/logos/RuiLogo.vue.d.ts +2 -1
- package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -4
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +3 -2
- package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +6 -5
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +6 -3
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +6 -5
- package/dist/components/overlays/notification/RuiNotification.vue.d.ts +4 -3
- package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +4 -3
- package/dist/components/progress/RuiProgress.vue.d.ts +3 -2
- package/dist/components/steppers/RuiFooterStepper.vue.d.ts +2 -1
- package/dist/components/steppers/RuiStepper.vue.d.ts +4 -3
- package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +2 -1
- package/dist/components/steppers/RuiStepperIcon.vue.d.ts +2 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +13 -12
- package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -2
- package/dist/components/tables/RuiTableHead.vue.d.ts +7 -6
- package/dist/components/tables/RuiTablePagination.vue.d.ts +3 -2
- package/dist/components/tabs/tab/RuiTab.vue.d.ts +5 -4
- package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +4 -3
- package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +7 -6
- package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +3 -2
- package/dist/components/time-picker/RuiTimePicker.vue.d.ts +4 -2
- package/dist/composables/defaults/table.d.ts +1 -2
- package/dist/composables/dropdown-menu.d.ts +3 -2
- package/dist/composables/index-CC7A7CEh.js +737 -0
- package/dist/composables/index.es.js +1 -1
- package/dist/composables/popper.d.ts +2 -2
- package/dist/composables/sticky-header.d.ts +1 -1
- package/dist/consts/time-accuracy-BnKA5GyT.js +1 -1
- package/dist/consts/typography.d.ts +38 -4
- package/dist/icons/icons_1.d.ts +1 -1
- package/dist/icons/icons_1.es.js +896 -896
- package/dist/icons/icons_2.d.ts +1 -1
- package/dist/icons/icons_2.es.js +1002 -1002
- package/dist/icons/icons_3.d.ts +1 -1
- package/dist/icons/icons_3.es.js +982 -982
- package/dist/icons/icons_4.d.ts +1 -0
- package/dist/icons/icons_4.es.js +358 -354
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.es.js +1219 -1218
- package/dist/{index-cTPqOSmm.js → index-D7l4d7N2.js} +4 -4
- package/dist/index.es.js +1221 -1220
- package/dist/style.css +1 -1
- package/dist/theme/index.es.js +30 -23
- package/dist/utils/form-text-detail.d.ts +1 -1
- package/dist/utils/index-DJ-ueLCs.js +158 -0
- package/dist/vendor-Hqbg5uCG.js +1931 -0
- package/dist/web-types.json +59 -39
- package/package.json +41 -48
- package/README.md +0 -276
- package/dist/composables/index-D7DVd8pO.js +0 -717
- package/dist/utils/index-D-sENcA8.js +0 -158
- package/dist/vendor-X3mXJl51.js +0 -1931
package/dist/vendor-X3mXJl51.js
DELETED
|
@@ -1,1931 +0,0 @@
|
|
|
1
|
-
import { g as Vt } from "./index-cTPqOSmm.js";
|
|
2
|
-
const Le = /\d/, Fe = ["-", "_", "/", "."];
|
|
3
|
-
function Ye(t = "") {
|
|
4
|
-
if (!Le.test(t))
|
|
5
|
-
return t !== t.toLowerCase();
|
|
6
|
-
}
|
|
7
|
-
function Be(t, e) {
|
|
8
|
-
const r = Fe, n = [];
|
|
9
|
-
if (!t || typeof t != "string")
|
|
10
|
-
return n;
|
|
11
|
-
let a = "", i, f;
|
|
12
|
-
for (const s of t) {
|
|
13
|
-
const o = r.includes(s);
|
|
14
|
-
if (o === !0) {
|
|
15
|
-
n.push(a), a = "", i = void 0;
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
const h = Ye(s);
|
|
19
|
-
if (f === !1) {
|
|
20
|
-
if (i === !1 && h === !0) {
|
|
21
|
-
n.push(a), a = s, i = h;
|
|
22
|
-
continue;
|
|
23
|
-
}
|
|
24
|
-
if (i === !0 && h === !1 && a.length > 1) {
|
|
25
|
-
const u = a.at(-1);
|
|
26
|
-
n.push(a.slice(0, Math.max(0, a.length - 1))), a = u + s, i = h;
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
a += s, i = h, f = o;
|
|
31
|
-
}
|
|
32
|
-
return n.push(a), n;
|
|
33
|
-
}
|
|
34
|
-
function je(t) {
|
|
35
|
-
return t ? t[0].toUpperCase() + t.slice(1) : "";
|
|
36
|
-
}
|
|
37
|
-
function ze(t) {
|
|
38
|
-
return t ? t[0].toLowerCase() + t.slice(1) : "";
|
|
39
|
-
}
|
|
40
|
-
function Ne(t, e) {
|
|
41
|
-
return t ? (Array.isArray(t) ? t : Be(t)).map((r) => je(r)).join("") : "";
|
|
42
|
-
}
|
|
43
|
-
function kn(t, e) {
|
|
44
|
-
return ze(Ne(t || ""));
|
|
45
|
-
}
|
|
46
|
-
var Y = "top", U = "bottom", I = "right", B = "left", Zt = "auto", Rt = [Y, U, I, B], mt = "start", Dt = "end", Ue = "clippingParents", _e = "viewport", At = "popper", Ie = "reference", se = /* @__PURE__ */ Rt.reduce(function(t, e) {
|
|
47
|
-
return t.concat([e + "-" + mt, e + "-" + Dt]);
|
|
48
|
-
}, []), Se = /* @__PURE__ */ [].concat(Rt, [Zt]).reduce(function(t, e) {
|
|
49
|
-
return t.concat([e, e + "-" + mt, e + "-" + Dt]);
|
|
50
|
-
}, []), We = "beforeRead", qe = "read", Ve = "afterRead", Ze = "beforeMain", Xe = "main", Ge = "afterMain", Qe = "beforeWrite", Je = "write", Ke = "afterWrite", tr = [We, qe, Ve, Ze, Xe, Ge, Qe, Je, Ke];
|
|
51
|
-
function G(t) {
|
|
52
|
-
return t ? (t.nodeName || "").toLowerCase() : null;
|
|
53
|
-
}
|
|
54
|
-
function z(t) {
|
|
55
|
-
if (t == null)
|
|
56
|
-
return window;
|
|
57
|
-
if (t.toString() !== "[object Window]") {
|
|
58
|
-
var e = t.ownerDocument;
|
|
59
|
-
return e && e.defaultView || window;
|
|
60
|
-
}
|
|
61
|
-
return t;
|
|
62
|
-
}
|
|
63
|
-
function ut(t) {
|
|
64
|
-
var e = z(t).Element;
|
|
65
|
-
return t instanceof e || t instanceof Element;
|
|
66
|
-
}
|
|
67
|
-
function N(t) {
|
|
68
|
-
var e = z(t).HTMLElement;
|
|
69
|
-
return t instanceof e || t instanceof HTMLElement;
|
|
70
|
-
}
|
|
71
|
-
function Xt(t) {
|
|
72
|
-
if (typeof ShadowRoot > "u")
|
|
73
|
-
return !1;
|
|
74
|
-
var e = z(t).ShadowRoot;
|
|
75
|
-
return t instanceof e || t instanceof ShadowRoot;
|
|
76
|
-
}
|
|
77
|
-
function er(t) {
|
|
78
|
-
var e = t.state;
|
|
79
|
-
Object.keys(e.elements).forEach(function(r) {
|
|
80
|
-
var n = e.styles[r] || {}, a = e.attributes[r] || {}, i = e.elements[r];
|
|
81
|
-
!N(i) || !G(i) || (Object.assign(i.style, n), Object.keys(a).forEach(function(f) {
|
|
82
|
-
var s = a[f];
|
|
83
|
-
s === !1 ? i.removeAttribute(f) : i.setAttribute(f, s === !0 ? "" : s);
|
|
84
|
-
}));
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
function rr(t) {
|
|
88
|
-
var e = t.state, r = {
|
|
89
|
-
popper: {
|
|
90
|
-
position: e.options.strategy,
|
|
91
|
-
left: "0",
|
|
92
|
-
top: "0",
|
|
93
|
-
margin: "0"
|
|
94
|
-
},
|
|
95
|
-
arrow: {
|
|
96
|
-
position: "absolute"
|
|
97
|
-
},
|
|
98
|
-
reference: {}
|
|
99
|
-
};
|
|
100
|
-
return Object.assign(e.elements.popper.style, r.popper), e.styles = r, e.elements.arrow && Object.assign(e.elements.arrow.style, r.arrow), function() {
|
|
101
|
-
Object.keys(e.elements).forEach(function(n) {
|
|
102
|
-
var a = e.elements[n], i = e.attributes[n] || {}, f = Object.keys(e.styles.hasOwnProperty(n) ? e.styles[n] : r[n]), s = f.reduce(function(o, h) {
|
|
103
|
-
return o[h] = "", o;
|
|
104
|
-
}, {});
|
|
105
|
-
!N(a) || !G(a) || (Object.assign(a.style, s), Object.keys(i).forEach(function(o) {
|
|
106
|
-
a.removeAttribute(o);
|
|
107
|
-
}));
|
|
108
|
-
});
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
const nr = {
|
|
112
|
-
name: "applyStyles",
|
|
113
|
-
enabled: !0,
|
|
114
|
-
phase: "write",
|
|
115
|
-
fn: er,
|
|
116
|
-
effect: rr,
|
|
117
|
-
requires: ["computeStyles"]
|
|
118
|
-
};
|
|
119
|
-
function X(t) {
|
|
120
|
-
return t.split("-")[0];
|
|
121
|
-
}
|
|
122
|
-
var ft = Math.max, Bt = Math.min, bt = Math.round;
|
|
123
|
-
function It() {
|
|
124
|
-
var t = navigator.userAgentData;
|
|
125
|
-
return t != null && t.brands && Array.isArray(t.brands) ? t.brands.map(function(e) {
|
|
126
|
-
return e.brand + "/" + e.version;
|
|
127
|
-
}).join(" ") : navigator.userAgent;
|
|
128
|
-
}
|
|
129
|
-
function $e() {
|
|
130
|
-
return !/^((?!chrome|android).)*safari/i.test(It());
|
|
131
|
-
}
|
|
132
|
-
function yt(t, e, r) {
|
|
133
|
-
e === void 0 && (e = !1), r === void 0 && (r = !1);
|
|
134
|
-
var n = t.getBoundingClientRect(), a = 1, i = 1;
|
|
135
|
-
e && N(t) && (a = t.offsetWidth > 0 && bt(n.width) / t.offsetWidth || 1, i = t.offsetHeight > 0 && bt(n.height) / t.offsetHeight || 1);
|
|
136
|
-
var f = ut(t) ? z(t) : window, s = f.visualViewport, o = !$e() && r, h = (n.left + (o && s ? s.offsetLeft : 0)) / a, u = (n.top + (o && s ? s.offsetTop : 0)) / i, M = n.width / a, y = n.height / i;
|
|
137
|
-
return {
|
|
138
|
-
width: M,
|
|
139
|
-
height: y,
|
|
140
|
-
top: u,
|
|
141
|
-
right: h + M,
|
|
142
|
-
bottom: u + y,
|
|
143
|
-
left: h,
|
|
144
|
-
x: h,
|
|
145
|
-
y: u
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
function Gt(t) {
|
|
149
|
-
var e = yt(t), r = t.offsetWidth, n = t.offsetHeight;
|
|
150
|
-
return Math.abs(e.width - r) <= 1 && (r = e.width), Math.abs(e.height - n) <= 1 && (n = e.height), {
|
|
151
|
-
x: t.offsetLeft,
|
|
152
|
-
y: t.offsetTop,
|
|
153
|
-
width: r,
|
|
154
|
-
height: n
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
function De(t, e) {
|
|
158
|
-
var r = e.getRootNode && e.getRootNode();
|
|
159
|
-
if (t.contains(e))
|
|
160
|
-
return !0;
|
|
161
|
-
if (r && Xt(r)) {
|
|
162
|
-
var n = e;
|
|
163
|
-
do {
|
|
164
|
-
if (n && t.isSameNode(n))
|
|
165
|
-
return !0;
|
|
166
|
-
n = n.parentNode || n.host;
|
|
167
|
-
} while (n);
|
|
168
|
-
}
|
|
169
|
-
return !1;
|
|
170
|
-
}
|
|
171
|
-
function rt(t) {
|
|
172
|
-
return z(t).getComputedStyle(t);
|
|
173
|
-
}
|
|
174
|
-
function ar(t) {
|
|
175
|
-
return ["table", "td", "th"].indexOf(G(t)) >= 0;
|
|
176
|
-
}
|
|
177
|
-
function it(t) {
|
|
178
|
-
return ((ut(t) ? t.ownerDocument : (
|
|
179
|
-
// $FlowFixMe[prop-missing]
|
|
180
|
-
t.document
|
|
181
|
-
)) || window.document).documentElement;
|
|
182
|
-
}
|
|
183
|
-
function zt(t) {
|
|
184
|
-
return G(t) === "html" ? t : (
|
|
185
|
-
// this is a quicker (but less type safe) way to save quite some bytes from the bundle
|
|
186
|
-
// $FlowFixMe[incompatible-return]
|
|
187
|
-
// $FlowFixMe[prop-missing]
|
|
188
|
-
t.assignedSlot || // step into the shadow DOM of the parent of a slotted node
|
|
189
|
-
t.parentNode || // DOM Element detected
|
|
190
|
-
(Xt(t) ? t.host : null) || // ShadowRoot detected
|
|
191
|
-
// $FlowFixMe[incompatible-call]: HTMLElement is a Node
|
|
192
|
-
it(t)
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
function fe(t) {
|
|
196
|
-
return !N(t) || // https://github.com/popperjs/popper-core/issues/837
|
|
197
|
-
rt(t).position === "fixed" ? null : t.offsetParent;
|
|
198
|
-
}
|
|
199
|
-
function ir(t) {
|
|
200
|
-
var e = /firefox/i.test(It()), r = /Trident/i.test(It());
|
|
201
|
-
if (r && N(t)) {
|
|
202
|
-
var n = rt(t);
|
|
203
|
-
if (n.position === "fixed")
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
206
|
-
var a = zt(t);
|
|
207
|
-
for (Xt(a) && (a = a.host); N(a) && ["html", "body"].indexOf(G(a)) < 0; ) {
|
|
208
|
-
var i = rt(a);
|
|
209
|
-
if (i.transform !== "none" || i.perspective !== "none" || i.contain === "paint" || ["transform", "perspective"].indexOf(i.willChange) !== -1 || e && i.willChange === "filter" || e && i.filter && i.filter !== "none")
|
|
210
|
-
return a;
|
|
211
|
-
a = a.parentNode;
|
|
212
|
-
}
|
|
213
|
-
return null;
|
|
214
|
-
}
|
|
215
|
-
function Tt(t) {
|
|
216
|
-
for (var e = z(t), r = fe(t); r && ar(r) && rt(r).position === "static"; )
|
|
217
|
-
r = fe(r);
|
|
218
|
-
return r && (G(r) === "html" || G(r) === "body" && rt(r).position === "static") ? e : r || ir(t) || e;
|
|
219
|
-
}
|
|
220
|
-
function Qt(t) {
|
|
221
|
-
return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y";
|
|
222
|
-
}
|
|
223
|
-
function St(t, e, r) {
|
|
224
|
-
return ft(t, Bt(e, r));
|
|
225
|
-
}
|
|
226
|
-
function or(t, e, r) {
|
|
227
|
-
var n = St(t, e, r);
|
|
228
|
-
return n > r ? r : n;
|
|
229
|
-
}
|
|
230
|
-
function ke() {
|
|
231
|
-
return {
|
|
232
|
-
top: 0,
|
|
233
|
-
right: 0,
|
|
234
|
-
bottom: 0,
|
|
235
|
-
left: 0
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
function Re(t) {
|
|
239
|
-
return Object.assign({}, ke(), t);
|
|
240
|
-
}
|
|
241
|
-
function Te(t, e) {
|
|
242
|
-
return e.reduce(function(r, n) {
|
|
243
|
-
return r[n] = t, r;
|
|
244
|
-
}, {});
|
|
245
|
-
}
|
|
246
|
-
var sr = function(e, r) {
|
|
247
|
-
return e = typeof e == "function" ? e(Object.assign({}, r.rects, {
|
|
248
|
-
placement: r.placement
|
|
249
|
-
})) : e, Re(typeof e != "number" ? e : Te(e, Rt));
|
|
250
|
-
};
|
|
251
|
-
function fr(t) {
|
|
252
|
-
var e, r = t.state, n = t.name, a = t.options, i = r.elements.arrow, f = r.modifiersData.popperOffsets, s = X(r.placement), o = Qt(s), h = [B, I].indexOf(s) >= 0, u = h ? "height" : "width";
|
|
253
|
-
if (!(!i || !f)) {
|
|
254
|
-
var M = sr(a.padding, r), y = Gt(i), g = o === "y" ? Y : B, w = o === "y" ? U : I, l = r.rects.reference[u] + r.rects.reference[o] - f[o] - r.rects.popper[u], c = f[o] - r.rects.reference[o], p = Tt(i), v = p ? o === "y" ? p.clientHeight || 0 : p.clientWidth || 0 : 0, d = l / 2 - c / 2, m = M[g], x = v - y[u] - M[w], O = v / 2 - y[u] / 2 + d, A = St(m, O, x), S = o;
|
|
255
|
-
r.modifiersData[n] = (e = {}, e[S] = A, e.centerOffset = A - O, e);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
function ur(t) {
|
|
259
|
-
var e = t.state, r = t.options, n = r.element, a = n === void 0 ? "[data-popper-arrow]" : n;
|
|
260
|
-
a != null && (typeof a == "string" && (a = e.elements.popper.querySelector(a), !a) || De(e.elements.popper, a) && (e.elements.arrow = a));
|
|
261
|
-
}
|
|
262
|
-
const cr = {
|
|
263
|
-
name: "arrow",
|
|
264
|
-
enabled: !0,
|
|
265
|
-
phase: "main",
|
|
266
|
-
fn: fr,
|
|
267
|
-
effect: ur,
|
|
268
|
-
requires: ["popperOffsets"],
|
|
269
|
-
requiresIfExists: ["preventOverflow"]
|
|
270
|
-
};
|
|
271
|
-
function xt(t) {
|
|
272
|
-
return t.split("-")[1];
|
|
273
|
-
}
|
|
274
|
-
var lr = {
|
|
275
|
-
top: "auto",
|
|
276
|
-
right: "auto",
|
|
277
|
-
bottom: "auto",
|
|
278
|
-
left: "auto"
|
|
279
|
-
};
|
|
280
|
-
function hr(t, e) {
|
|
281
|
-
var r = t.x, n = t.y, a = e.devicePixelRatio || 1;
|
|
282
|
-
return {
|
|
283
|
-
x: bt(r * a) / a || 0,
|
|
284
|
-
y: bt(n * a) / a || 0
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
function ue(t) {
|
|
288
|
-
var e, r = t.popper, n = t.popperRect, a = t.placement, i = t.variation, f = t.offsets, s = t.position, o = t.gpuAcceleration, h = t.adaptive, u = t.roundOffsets, M = t.isFixed, y = f.x, g = y === void 0 ? 0 : y, w = f.y, l = w === void 0 ? 0 : w, c = typeof u == "function" ? u({
|
|
289
|
-
x: g,
|
|
290
|
-
y: l
|
|
291
|
-
}) : {
|
|
292
|
-
x: g,
|
|
293
|
-
y: l
|
|
294
|
-
};
|
|
295
|
-
g = c.x, l = c.y;
|
|
296
|
-
var p = f.hasOwnProperty("x"), v = f.hasOwnProperty("y"), d = B, m = Y, x = window;
|
|
297
|
-
if (h) {
|
|
298
|
-
var O = Tt(r), A = "clientHeight", S = "clientWidth";
|
|
299
|
-
if (O === z(r) && (O = it(r), rt(O).position !== "static" && s === "absolute" && (A = "scrollHeight", S = "scrollWidth")), O = O, a === Y || (a === B || a === I) && i === Dt) {
|
|
300
|
-
m = U;
|
|
301
|
-
var _ = M && O === x && x.visualViewport ? x.visualViewport.height : (
|
|
302
|
-
// $FlowFixMe[prop-missing]
|
|
303
|
-
O[A]
|
|
304
|
-
);
|
|
305
|
-
l -= _ - n.height, l *= o ? 1 : -1;
|
|
306
|
-
}
|
|
307
|
-
if (a === B || (a === Y || a === U) && i === Dt) {
|
|
308
|
-
d = I;
|
|
309
|
-
var $ = M && O === x && x.visualViewport ? x.visualViewport.width : (
|
|
310
|
-
// $FlowFixMe[prop-missing]
|
|
311
|
-
O[S]
|
|
312
|
-
);
|
|
313
|
-
g -= $ - n.width, g *= o ? 1 : -1;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
var D = Object.assign({
|
|
317
|
-
position: s
|
|
318
|
-
}, h && lr), T = u === !0 ? hr({
|
|
319
|
-
x: g,
|
|
320
|
-
y: l
|
|
321
|
-
}, z(r)) : {
|
|
322
|
-
x: g,
|
|
323
|
-
y: l
|
|
324
|
-
};
|
|
325
|
-
if (g = T.x, l = T.y, o) {
|
|
326
|
-
var k;
|
|
327
|
-
return Object.assign({}, D, (k = {}, k[m] = v ? "0" : "", k[d] = p ? "0" : "", k.transform = (x.devicePixelRatio || 1) <= 1 ? "translate(" + g + "px, " + l + "px)" : "translate3d(" + g + "px, " + l + "px, 0)", k));
|
|
328
|
-
}
|
|
329
|
-
return Object.assign({}, D, (e = {}, e[m] = v ? l + "px" : "", e[d] = p ? g + "px" : "", e.transform = "", e));
|
|
330
|
-
}
|
|
331
|
-
function pr(t) {
|
|
332
|
-
var e = t.state, r = t.options, n = r.gpuAcceleration, a = n === void 0 ? !0 : n, i = r.adaptive, f = i === void 0 ? !0 : i, s = r.roundOffsets, o = s === void 0 ? !0 : s, h = {
|
|
333
|
-
placement: X(e.placement),
|
|
334
|
-
variation: xt(e.placement),
|
|
335
|
-
popper: e.elements.popper,
|
|
336
|
-
popperRect: e.rects.popper,
|
|
337
|
-
gpuAcceleration: a,
|
|
338
|
-
isFixed: e.options.strategy === "fixed"
|
|
339
|
-
};
|
|
340
|
-
e.modifiersData.popperOffsets != null && (e.styles.popper = Object.assign({}, e.styles.popper, ue(Object.assign({}, h, {
|
|
341
|
-
offsets: e.modifiersData.popperOffsets,
|
|
342
|
-
position: e.options.strategy,
|
|
343
|
-
adaptive: f,
|
|
344
|
-
roundOffsets: o
|
|
345
|
-
})))), e.modifiersData.arrow != null && (e.styles.arrow = Object.assign({}, e.styles.arrow, ue(Object.assign({}, h, {
|
|
346
|
-
offsets: e.modifiersData.arrow,
|
|
347
|
-
position: "absolute",
|
|
348
|
-
adaptive: !1,
|
|
349
|
-
roundOffsets: o
|
|
350
|
-
})))), e.attributes.popper = Object.assign({}, e.attributes.popper, {
|
|
351
|
-
"data-popper-placement": e.placement
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
const dr = {
|
|
355
|
-
name: "computeStyles",
|
|
356
|
-
enabled: !0,
|
|
357
|
-
phase: "beforeWrite",
|
|
358
|
-
fn: pr,
|
|
359
|
-
data: {}
|
|
360
|
-
};
|
|
361
|
-
var Et = {
|
|
362
|
-
passive: !0
|
|
363
|
-
};
|
|
364
|
-
function vr(t) {
|
|
365
|
-
var e = t.state, r = t.instance, n = t.options, a = n.scroll, i = a === void 0 ? !0 : a, f = n.resize, s = f === void 0 ? !0 : f, o = z(e.elements.popper), h = [].concat(e.scrollParents.reference, e.scrollParents.popper);
|
|
366
|
-
return i && h.forEach(function(u) {
|
|
367
|
-
u.addEventListener("scroll", r.update, Et);
|
|
368
|
-
}), s && o.addEventListener("resize", r.update, Et), function() {
|
|
369
|
-
i && h.forEach(function(u) {
|
|
370
|
-
u.removeEventListener("scroll", r.update, Et);
|
|
371
|
-
}), s && o.removeEventListener("resize", r.update, Et);
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
const gr = {
|
|
375
|
-
name: "eventListeners",
|
|
376
|
-
enabled: !0,
|
|
377
|
-
phase: "write",
|
|
378
|
-
fn: function() {
|
|
379
|
-
},
|
|
380
|
-
effect: vr,
|
|
381
|
-
data: {}
|
|
382
|
-
};
|
|
383
|
-
var mr = {
|
|
384
|
-
left: "right",
|
|
385
|
-
right: "left",
|
|
386
|
-
bottom: "top",
|
|
387
|
-
top: "bottom"
|
|
388
|
-
};
|
|
389
|
-
function Pt(t) {
|
|
390
|
-
return t.replace(/left|right|bottom|top/g, function(e) {
|
|
391
|
-
return mr[e];
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
var br = {
|
|
395
|
-
start: "end",
|
|
396
|
-
end: "start"
|
|
397
|
-
};
|
|
398
|
-
function ce(t) {
|
|
399
|
-
return t.replace(/start|end/g, function(e) {
|
|
400
|
-
return br[e];
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
function Jt(t) {
|
|
404
|
-
var e = z(t), r = e.pageXOffset, n = e.pageYOffset;
|
|
405
|
-
return {
|
|
406
|
-
scrollLeft: r,
|
|
407
|
-
scrollTop: n
|
|
408
|
-
};
|
|
409
|
-
}
|
|
410
|
-
function Kt(t) {
|
|
411
|
-
return yt(it(t)).left + Jt(t).scrollLeft;
|
|
412
|
-
}
|
|
413
|
-
function yr(t, e) {
|
|
414
|
-
var r = z(t), n = it(t), a = r.visualViewport, i = n.clientWidth, f = n.clientHeight, s = 0, o = 0;
|
|
415
|
-
if (a) {
|
|
416
|
-
i = a.width, f = a.height;
|
|
417
|
-
var h = $e();
|
|
418
|
-
(h || !h && e === "fixed") && (s = a.offsetLeft, o = a.offsetTop);
|
|
419
|
-
}
|
|
420
|
-
return {
|
|
421
|
-
width: i,
|
|
422
|
-
height: f,
|
|
423
|
-
x: s + Kt(t),
|
|
424
|
-
y: o
|
|
425
|
-
};
|
|
426
|
-
}
|
|
427
|
-
function xr(t) {
|
|
428
|
-
var e, r = it(t), n = Jt(t), a = (e = t.ownerDocument) == null ? void 0 : e.body, i = ft(r.scrollWidth, r.clientWidth, a ? a.scrollWidth : 0, a ? a.clientWidth : 0), f = ft(r.scrollHeight, r.clientHeight, a ? a.scrollHeight : 0, a ? a.clientHeight : 0), s = -n.scrollLeft + Kt(t), o = -n.scrollTop;
|
|
429
|
-
return rt(a || r).direction === "rtl" && (s += ft(r.clientWidth, a ? a.clientWidth : 0) - i), {
|
|
430
|
-
width: i,
|
|
431
|
-
height: f,
|
|
432
|
-
x: s,
|
|
433
|
-
y: o
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
function te(t) {
|
|
437
|
-
var e = rt(t), r = e.overflow, n = e.overflowX, a = e.overflowY;
|
|
438
|
-
return /auto|scroll|overlay|hidden/.test(r + a + n);
|
|
439
|
-
}
|
|
440
|
-
function Ce(t) {
|
|
441
|
-
return ["html", "body", "#document"].indexOf(G(t)) >= 0 ? t.ownerDocument.body : N(t) && te(t) ? t : Ce(zt(t));
|
|
442
|
-
}
|
|
443
|
-
function $t(t, e) {
|
|
444
|
-
var r;
|
|
445
|
-
e === void 0 && (e = []);
|
|
446
|
-
var n = Ce(t), a = n === ((r = t.ownerDocument) == null ? void 0 : r.body), i = z(n), f = a ? [i].concat(i.visualViewport || [], te(n) ? n : []) : n, s = e.concat(f);
|
|
447
|
-
return a ? s : (
|
|
448
|
-
// $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
|
|
449
|
-
s.concat($t(zt(f)))
|
|
450
|
-
);
|
|
451
|
-
}
|
|
452
|
-
function Wt(t) {
|
|
453
|
-
return Object.assign({}, t, {
|
|
454
|
-
left: t.x,
|
|
455
|
-
top: t.y,
|
|
456
|
-
right: t.x + t.width,
|
|
457
|
-
bottom: t.y + t.height
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
function wr(t, e) {
|
|
461
|
-
var r = yt(t, !1, e === "fixed");
|
|
462
|
-
return r.top = r.top + t.clientTop, r.left = r.left + t.clientLeft, r.bottom = r.top + t.clientHeight, r.right = r.left + t.clientWidth, r.width = t.clientWidth, r.height = t.clientHeight, r.x = r.left, r.y = r.top, r;
|
|
463
|
-
}
|
|
464
|
-
function le(t, e, r) {
|
|
465
|
-
return e === _e ? Wt(yr(t, r)) : ut(e) ? wr(e, r) : Wt(xr(it(t)));
|
|
466
|
-
}
|
|
467
|
-
function Mr(t) {
|
|
468
|
-
var e = $t(zt(t)), r = ["absolute", "fixed"].indexOf(rt(t).position) >= 0, n = r && N(t) ? Tt(t) : t;
|
|
469
|
-
return ut(n) ? e.filter(function(a) {
|
|
470
|
-
return ut(a) && De(a, n) && G(a) !== "body";
|
|
471
|
-
}) : [];
|
|
472
|
-
}
|
|
473
|
-
function Or(t, e, r, n) {
|
|
474
|
-
var a = e === "clippingParents" ? Mr(t) : [].concat(e), i = [].concat(a, [r]), f = i[0], s = i.reduce(function(o, h) {
|
|
475
|
-
var u = le(t, h, n);
|
|
476
|
-
return o.top = ft(u.top, o.top), o.right = Bt(u.right, o.right), o.bottom = Bt(u.bottom, o.bottom), o.left = ft(u.left, o.left), o;
|
|
477
|
-
}, le(t, f, n));
|
|
478
|
-
return s.width = s.right - s.left, s.height = s.bottom - s.top, s.x = s.left, s.y = s.top, s;
|
|
479
|
-
}
|
|
480
|
-
function He(t) {
|
|
481
|
-
var e = t.reference, r = t.element, n = t.placement, a = n ? X(n) : null, i = n ? xt(n) : null, f = e.x + e.width / 2 - r.width / 2, s = e.y + e.height / 2 - r.height / 2, o;
|
|
482
|
-
switch (a) {
|
|
483
|
-
case Y:
|
|
484
|
-
o = {
|
|
485
|
-
x: f,
|
|
486
|
-
y: e.y - r.height
|
|
487
|
-
};
|
|
488
|
-
break;
|
|
489
|
-
case U:
|
|
490
|
-
o = {
|
|
491
|
-
x: f,
|
|
492
|
-
y: e.y + e.height
|
|
493
|
-
};
|
|
494
|
-
break;
|
|
495
|
-
case I:
|
|
496
|
-
o = {
|
|
497
|
-
x: e.x + e.width,
|
|
498
|
-
y: s
|
|
499
|
-
};
|
|
500
|
-
break;
|
|
501
|
-
case B:
|
|
502
|
-
o = {
|
|
503
|
-
x: e.x - r.width,
|
|
504
|
-
y: s
|
|
505
|
-
};
|
|
506
|
-
break;
|
|
507
|
-
default:
|
|
508
|
-
o = {
|
|
509
|
-
x: e.x,
|
|
510
|
-
y: e.y
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
var h = a ? Qt(a) : null;
|
|
514
|
-
if (h != null) {
|
|
515
|
-
var u = h === "y" ? "height" : "width";
|
|
516
|
-
switch (i) {
|
|
517
|
-
case mt:
|
|
518
|
-
o[h] = o[h] - (e[u] / 2 - r[u] / 2);
|
|
519
|
-
break;
|
|
520
|
-
case Dt:
|
|
521
|
-
o[h] = o[h] + (e[u] / 2 - r[u] / 2);
|
|
522
|
-
break;
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
return o;
|
|
526
|
-
}
|
|
527
|
-
function kt(t, e) {
|
|
528
|
-
e === void 0 && (e = {});
|
|
529
|
-
var r = e, n = r.placement, a = n === void 0 ? t.placement : n, i = r.strategy, f = i === void 0 ? t.strategy : i, s = r.boundary, o = s === void 0 ? Ue : s, h = r.rootBoundary, u = h === void 0 ? _e : h, M = r.elementContext, y = M === void 0 ? At : M, g = r.altBoundary, w = g === void 0 ? !1 : g, l = r.padding, c = l === void 0 ? 0 : l, p = Re(typeof c != "number" ? c : Te(c, Rt)), v = y === At ? Ie : At, d = t.rects.popper, m = t.elements[w ? v : y], x = Or(ut(m) ? m : m.contextElement || it(t.elements.popper), o, u, f), O = yt(t.elements.reference), A = He({
|
|
530
|
-
reference: O,
|
|
531
|
-
element: d,
|
|
532
|
-
placement: a
|
|
533
|
-
}), S = Wt(Object.assign({}, d, A)), _ = y === At ? S : O, $ = {
|
|
534
|
-
top: x.top - _.top + p.top,
|
|
535
|
-
bottom: _.bottom - x.bottom + p.bottom,
|
|
536
|
-
left: x.left - _.left + p.left,
|
|
537
|
-
right: _.right - x.right + p.right
|
|
538
|
-
}, D = t.modifiersData.offset;
|
|
539
|
-
if (y === At && D) {
|
|
540
|
-
var T = D[a];
|
|
541
|
-
Object.keys($).forEach(function(k) {
|
|
542
|
-
var H = [I, U].indexOf(k) >= 0 ? 1 : -1, E = [Y, U].indexOf(k) >= 0 ? "y" : "x";
|
|
543
|
-
$[k] += T[E] * H;
|
|
544
|
-
});
|
|
545
|
-
}
|
|
546
|
-
return $;
|
|
547
|
-
}
|
|
548
|
-
function Ar(t, e) {
|
|
549
|
-
e === void 0 && (e = {});
|
|
550
|
-
var r = e, n = r.placement, a = r.boundary, i = r.rootBoundary, f = r.padding, s = r.flipVariations, o = r.allowedAutoPlacements, h = o === void 0 ? Se : o, u = xt(n), M = u ? s ? se : se.filter(function(w) {
|
|
551
|
-
return xt(w) === u;
|
|
552
|
-
}) : Rt, y = M.filter(function(w) {
|
|
553
|
-
return h.indexOf(w) >= 0;
|
|
554
|
-
});
|
|
555
|
-
y.length === 0 && (y = M);
|
|
556
|
-
var g = y.reduce(function(w, l) {
|
|
557
|
-
return w[l] = kt(t, {
|
|
558
|
-
placement: l,
|
|
559
|
-
boundary: a,
|
|
560
|
-
rootBoundary: i,
|
|
561
|
-
padding: f
|
|
562
|
-
})[X(l)], w;
|
|
563
|
-
}, {});
|
|
564
|
-
return Object.keys(g).sort(function(w, l) {
|
|
565
|
-
return g[w] - g[l];
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
function _r(t) {
|
|
569
|
-
if (X(t) === Zt)
|
|
570
|
-
return [];
|
|
571
|
-
var e = Pt(t);
|
|
572
|
-
return [ce(t), e, ce(e)];
|
|
573
|
-
}
|
|
574
|
-
function Sr(t) {
|
|
575
|
-
var e = t.state, r = t.options, n = t.name;
|
|
576
|
-
if (!e.modifiersData[n]._skip) {
|
|
577
|
-
for (var a = r.mainAxis, i = a === void 0 ? !0 : a, f = r.altAxis, s = f === void 0 ? !0 : f, o = r.fallbackPlacements, h = r.padding, u = r.boundary, M = r.rootBoundary, y = r.altBoundary, g = r.flipVariations, w = g === void 0 ? !0 : g, l = r.allowedAutoPlacements, c = e.options.placement, p = X(c), v = p === c, d = o || (v || !w ? [Pt(c)] : _r(c)), m = [c].concat(d).reduce(function(nt, Z) {
|
|
578
|
-
return nt.concat(X(Z) === Zt ? Ar(e, {
|
|
579
|
-
placement: Z,
|
|
580
|
-
boundary: u,
|
|
581
|
-
rootBoundary: M,
|
|
582
|
-
padding: h,
|
|
583
|
-
flipVariations: w,
|
|
584
|
-
allowedAutoPlacements: l
|
|
585
|
-
}) : Z);
|
|
586
|
-
}, []), x = e.rects.reference, O = e.rects.popper, A = /* @__PURE__ */ new Map(), S = !0, _ = m[0], $ = 0; $ < m.length; $++) {
|
|
587
|
-
var D = m[$], T = X(D), k = xt(D) === mt, H = [Y, U].indexOf(T) >= 0, E = H ? "width" : "height", C = kt(e, {
|
|
588
|
-
placement: D,
|
|
589
|
-
boundary: u,
|
|
590
|
-
rootBoundary: M,
|
|
591
|
-
altBoundary: y,
|
|
592
|
-
padding: h
|
|
593
|
-
}), P = H ? k ? I : B : k ? U : Y;
|
|
594
|
-
x[E] > O[E] && (P = Pt(P));
|
|
595
|
-
var W = Pt(P), F = [];
|
|
596
|
-
if (i && F.push(C[T] <= 0), s && F.push(C[P] <= 0, C[W] <= 0), F.every(function(nt) {
|
|
597
|
-
return nt;
|
|
598
|
-
})) {
|
|
599
|
-
_ = D, S = !1;
|
|
600
|
-
break;
|
|
601
|
-
}
|
|
602
|
-
A.set(D, F);
|
|
603
|
-
}
|
|
604
|
-
if (S)
|
|
605
|
-
for (var Q = w ? 3 : 1, L = function(Z) {
|
|
606
|
-
var ot = m.find(function(ct) {
|
|
607
|
-
var tt = A.get(ct);
|
|
608
|
-
if (tt)
|
|
609
|
-
return tt.slice(0, Z).every(function(lt) {
|
|
610
|
-
return lt;
|
|
611
|
-
});
|
|
612
|
-
});
|
|
613
|
-
if (ot)
|
|
614
|
-
return _ = ot, "break";
|
|
615
|
-
}, J = Q; J > 0; J--) {
|
|
616
|
-
var K = L(J);
|
|
617
|
-
if (K === "break") break;
|
|
618
|
-
}
|
|
619
|
-
e.placement !== _ && (e.modifiersData[n]._skip = !0, e.placement = _, e.reset = !0);
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
const $r = {
|
|
623
|
-
name: "flip",
|
|
624
|
-
enabled: !0,
|
|
625
|
-
phase: "main",
|
|
626
|
-
fn: Sr,
|
|
627
|
-
requiresIfExists: ["offset"],
|
|
628
|
-
data: {
|
|
629
|
-
_skip: !1
|
|
630
|
-
}
|
|
631
|
-
};
|
|
632
|
-
function he(t, e, r) {
|
|
633
|
-
return r === void 0 && (r = {
|
|
634
|
-
x: 0,
|
|
635
|
-
y: 0
|
|
636
|
-
}), {
|
|
637
|
-
top: t.top - e.height - r.y,
|
|
638
|
-
right: t.right - e.width + r.x,
|
|
639
|
-
bottom: t.bottom - e.height + r.y,
|
|
640
|
-
left: t.left - e.width - r.x
|
|
641
|
-
};
|
|
642
|
-
}
|
|
643
|
-
function pe(t) {
|
|
644
|
-
return [Y, I, U, B].some(function(e) {
|
|
645
|
-
return t[e] >= 0;
|
|
646
|
-
});
|
|
647
|
-
}
|
|
648
|
-
function Dr(t) {
|
|
649
|
-
var e = t.state, r = t.name, n = e.rects.reference, a = e.rects.popper, i = e.modifiersData.preventOverflow, f = kt(e, {
|
|
650
|
-
elementContext: "reference"
|
|
651
|
-
}), s = kt(e, {
|
|
652
|
-
altBoundary: !0
|
|
653
|
-
}), o = he(f, n), h = he(s, a, i), u = pe(o), M = pe(h);
|
|
654
|
-
e.modifiersData[r] = {
|
|
655
|
-
referenceClippingOffsets: o,
|
|
656
|
-
popperEscapeOffsets: h,
|
|
657
|
-
isReferenceHidden: u,
|
|
658
|
-
hasPopperEscaped: M
|
|
659
|
-
}, e.attributes.popper = Object.assign({}, e.attributes.popper, {
|
|
660
|
-
"data-popper-reference-hidden": u,
|
|
661
|
-
"data-popper-escaped": M
|
|
662
|
-
});
|
|
663
|
-
}
|
|
664
|
-
const kr = {
|
|
665
|
-
name: "hide",
|
|
666
|
-
enabled: !0,
|
|
667
|
-
phase: "main",
|
|
668
|
-
requiresIfExists: ["preventOverflow"],
|
|
669
|
-
fn: Dr
|
|
670
|
-
};
|
|
671
|
-
function Rr(t, e, r) {
|
|
672
|
-
var n = X(t), a = [B, Y].indexOf(n) >= 0 ? -1 : 1, i = typeof r == "function" ? r(Object.assign({}, e, {
|
|
673
|
-
placement: t
|
|
674
|
-
})) : r, f = i[0], s = i[1];
|
|
675
|
-
return f = f || 0, s = (s || 0) * a, [B, I].indexOf(n) >= 0 ? {
|
|
676
|
-
x: s,
|
|
677
|
-
y: f
|
|
678
|
-
} : {
|
|
679
|
-
x: f,
|
|
680
|
-
y: s
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
function Tr(t) {
|
|
684
|
-
var e = t.state, r = t.options, n = t.name, a = r.offset, i = a === void 0 ? [0, 0] : a, f = Se.reduce(function(u, M) {
|
|
685
|
-
return u[M] = Rr(M, e.rects, i), u;
|
|
686
|
-
}, {}), s = f[e.placement], o = s.x, h = s.y;
|
|
687
|
-
e.modifiersData.popperOffsets != null && (e.modifiersData.popperOffsets.x += o, e.modifiersData.popperOffsets.y += h), e.modifiersData[n] = f;
|
|
688
|
-
}
|
|
689
|
-
const Cr = {
|
|
690
|
-
name: "offset",
|
|
691
|
-
enabled: !0,
|
|
692
|
-
phase: "main",
|
|
693
|
-
requires: ["popperOffsets"],
|
|
694
|
-
fn: Tr
|
|
695
|
-
};
|
|
696
|
-
function Hr(t) {
|
|
697
|
-
var e = t.state, r = t.name;
|
|
698
|
-
e.modifiersData[r] = He({
|
|
699
|
-
reference: e.rects.reference,
|
|
700
|
-
element: e.rects.popper,
|
|
701
|
-
placement: e.placement
|
|
702
|
-
});
|
|
703
|
-
}
|
|
704
|
-
const Er = {
|
|
705
|
-
name: "popperOffsets",
|
|
706
|
-
enabled: !0,
|
|
707
|
-
phase: "read",
|
|
708
|
-
fn: Hr,
|
|
709
|
-
data: {}
|
|
710
|
-
};
|
|
711
|
-
function Pr(t) {
|
|
712
|
-
return t === "x" ? "y" : "x";
|
|
713
|
-
}
|
|
714
|
-
function Lr(t) {
|
|
715
|
-
var e = t.state, r = t.options, n = t.name, a = r.mainAxis, i = a === void 0 ? !0 : a, f = r.altAxis, s = f === void 0 ? !1 : f, o = r.boundary, h = r.rootBoundary, u = r.altBoundary, M = r.padding, y = r.tether, g = y === void 0 ? !0 : y, w = r.tetherOffset, l = w === void 0 ? 0 : w, c = kt(e, {
|
|
716
|
-
boundary: o,
|
|
717
|
-
rootBoundary: h,
|
|
718
|
-
padding: M,
|
|
719
|
-
altBoundary: u
|
|
720
|
-
}), p = X(e.placement), v = xt(e.placement), d = !v, m = Qt(p), x = Pr(m), O = e.modifiersData.popperOffsets, A = e.rects.reference, S = e.rects.popper, _ = typeof l == "function" ? l(Object.assign({}, e.rects, {
|
|
721
|
-
placement: e.placement
|
|
722
|
-
})) : l, $ = typeof _ == "number" ? {
|
|
723
|
-
mainAxis: _,
|
|
724
|
-
altAxis: _
|
|
725
|
-
} : Object.assign({
|
|
726
|
-
mainAxis: 0,
|
|
727
|
-
altAxis: 0
|
|
728
|
-
}, _), D = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null, T = {
|
|
729
|
-
x: 0,
|
|
730
|
-
y: 0
|
|
731
|
-
};
|
|
732
|
-
if (O) {
|
|
733
|
-
if (i) {
|
|
734
|
-
var k, H = m === "y" ? Y : B, E = m === "y" ? U : I, C = m === "y" ? "height" : "width", P = O[m], W = P + c[H], F = P - c[E], Q = g ? -S[C] / 2 : 0, L = v === mt ? A[C] : S[C], J = v === mt ? -S[C] : -A[C], K = e.elements.arrow, nt = g && K ? Gt(K) : {
|
|
735
|
-
width: 0,
|
|
736
|
-
height: 0
|
|
737
|
-
}, Z = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : ke(), ot = Z[H], ct = Z[E], tt = St(0, A[C], nt[C]), lt = d ? A[C] / 2 - Q - tt - ot - $.mainAxis : L - tt - ot - $.mainAxis, Ct = d ? -A[C] / 2 + Q + tt + ct + $.mainAxis : J + tt + ct + $.mainAxis, st = e.elements.arrow && Tt(e.elements.arrow), wt = st ? m === "y" ? st.clientTop || 0 : st.clientLeft || 0 : 0, ht = (k = D?.[m]) != null ? k : 0, pt = P + lt - ht - wt, dt = P + Ct - ht, vt = St(g ? Bt(W, pt) : W, P, g ? ft(F, dt) : F);
|
|
738
|
-
O[m] = vt, T[m] = vt - P;
|
|
739
|
-
}
|
|
740
|
-
if (s) {
|
|
741
|
-
var gt, Mt = m === "x" ? Y : B, Ot = m === "x" ? U : I, at = O[x], Ht = x === "y" ? "height" : "width", ee = at + c[Mt], re = at - c[Ot], Ut = [Y, B].indexOf(p) !== -1, ne = (gt = D?.[x]) != null ? gt : 0, ae = Ut ? ee : at - A[Ht] - S[Ht] - ne + $.altAxis, ie = Ut ? at + A[Ht] + S[Ht] - ne - $.altAxis : re, oe = g && Ut ? or(ae, at, ie) : St(g ? ae : ee, at, g ? ie : re);
|
|
742
|
-
O[x] = oe, T[x] = oe - at;
|
|
743
|
-
}
|
|
744
|
-
e.modifiersData[n] = T;
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
const Fr = {
|
|
748
|
-
name: "preventOverflow",
|
|
749
|
-
enabled: !0,
|
|
750
|
-
phase: "main",
|
|
751
|
-
fn: Lr,
|
|
752
|
-
requiresIfExists: ["offset"]
|
|
753
|
-
};
|
|
754
|
-
function Yr(t) {
|
|
755
|
-
return {
|
|
756
|
-
scrollLeft: t.scrollLeft,
|
|
757
|
-
scrollTop: t.scrollTop
|
|
758
|
-
};
|
|
759
|
-
}
|
|
760
|
-
function Br(t) {
|
|
761
|
-
return t === z(t) || !N(t) ? Jt(t) : Yr(t);
|
|
762
|
-
}
|
|
763
|
-
function jr(t) {
|
|
764
|
-
var e = t.getBoundingClientRect(), r = bt(e.width) / t.offsetWidth || 1, n = bt(e.height) / t.offsetHeight || 1;
|
|
765
|
-
return r !== 1 || n !== 1;
|
|
766
|
-
}
|
|
767
|
-
function zr(t, e, r) {
|
|
768
|
-
r === void 0 && (r = !1);
|
|
769
|
-
var n = N(e), a = N(e) && jr(e), i = it(e), f = yt(t, a, r), s = {
|
|
770
|
-
scrollLeft: 0,
|
|
771
|
-
scrollTop: 0
|
|
772
|
-
}, o = {
|
|
773
|
-
x: 0,
|
|
774
|
-
y: 0
|
|
775
|
-
};
|
|
776
|
-
return (n || !n && !r) && ((G(e) !== "body" || // https://github.com/popperjs/popper-core/issues/1078
|
|
777
|
-
te(i)) && (s = Br(e)), N(e) ? (o = yt(e, !0), o.x += e.clientLeft, o.y += e.clientTop) : i && (o.x = Kt(i))), {
|
|
778
|
-
x: f.left + s.scrollLeft - o.x,
|
|
779
|
-
y: f.top + s.scrollTop - o.y,
|
|
780
|
-
width: f.width,
|
|
781
|
-
height: f.height
|
|
782
|
-
};
|
|
783
|
-
}
|
|
784
|
-
function Nr(t) {
|
|
785
|
-
var e = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), n = [];
|
|
786
|
-
t.forEach(function(i) {
|
|
787
|
-
e.set(i.name, i);
|
|
788
|
-
});
|
|
789
|
-
function a(i) {
|
|
790
|
-
r.add(i.name);
|
|
791
|
-
var f = [].concat(i.requires || [], i.requiresIfExists || []);
|
|
792
|
-
f.forEach(function(s) {
|
|
793
|
-
if (!r.has(s)) {
|
|
794
|
-
var o = e.get(s);
|
|
795
|
-
o && a(o);
|
|
796
|
-
}
|
|
797
|
-
}), n.push(i);
|
|
798
|
-
}
|
|
799
|
-
return t.forEach(function(i) {
|
|
800
|
-
r.has(i.name) || a(i);
|
|
801
|
-
}), n;
|
|
802
|
-
}
|
|
803
|
-
function Ur(t) {
|
|
804
|
-
var e = Nr(t);
|
|
805
|
-
return tr.reduce(function(r, n) {
|
|
806
|
-
return r.concat(e.filter(function(a) {
|
|
807
|
-
return a.phase === n;
|
|
808
|
-
}));
|
|
809
|
-
}, []);
|
|
810
|
-
}
|
|
811
|
-
function Ir(t) {
|
|
812
|
-
var e;
|
|
813
|
-
return function() {
|
|
814
|
-
return e || (e = new Promise(function(r) {
|
|
815
|
-
Promise.resolve().then(function() {
|
|
816
|
-
e = void 0, r(t());
|
|
817
|
-
});
|
|
818
|
-
})), e;
|
|
819
|
-
};
|
|
820
|
-
}
|
|
821
|
-
function Wr(t) {
|
|
822
|
-
var e = t.reduce(function(r, n) {
|
|
823
|
-
var a = r[n.name];
|
|
824
|
-
return r[n.name] = a ? Object.assign({}, a, n, {
|
|
825
|
-
options: Object.assign({}, a.options, n.options),
|
|
826
|
-
data: Object.assign({}, a.data, n.data)
|
|
827
|
-
}) : n, r;
|
|
828
|
-
}, {});
|
|
829
|
-
return Object.keys(e).map(function(r) {
|
|
830
|
-
return e[r];
|
|
831
|
-
});
|
|
832
|
-
}
|
|
833
|
-
var de = {
|
|
834
|
-
placement: "bottom",
|
|
835
|
-
modifiers: [],
|
|
836
|
-
strategy: "absolute"
|
|
837
|
-
};
|
|
838
|
-
function ve() {
|
|
839
|
-
for (var t = arguments.length, e = new Array(t), r = 0; r < t; r++)
|
|
840
|
-
e[r] = arguments[r];
|
|
841
|
-
return !e.some(function(n) {
|
|
842
|
-
return !(n && typeof n.getBoundingClientRect == "function");
|
|
843
|
-
});
|
|
844
|
-
}
|
|
845
|
-
function qr(t) {
|
|
846
|
-
t === void 0 && (t = {});
|
|
847
|
-
var e = t, r = e.defaultModifiers, n = r === void 0 ? [] : r, a = e.defaultOptions, i = a === void 0 ? de : a;
|
|
848
|
-
return function(s, o, h) {
|
|
849
|
-
h === void 0 && (h = i);
|
|
850
|
-
var u = {
|
|
851
|
-
placement: "bottom",
|
|
852
|
-
orderedModifiers: [],
|
|
853
|
-
options: Object.assign({}, de, i),
|
|
854
|
-
modifiersData: {},
|
|
855
|
-
elements: {
|
|
856
|
-
reference: s,
|
|
857
|
-
popper: o
|
|
858
|
-
},
|
|
859
|
-
attributes: {},
|
|
860
|
-
styles: {}
|
|
861
|
-
}, M = [], y = !1, g = {
|
|
862
|
-
state: u,
|
|
863
|
-
setOptions: function(p) {
|
|
864
|
-
var v = typeof p == "function" ? p(u.options) : p;
|
|
865
|
-
l(), u.options = Object.assign({}, i, u.options, v), u.scrollParents = {
|
|
866
|
-
reference: ut(s) ? $t(s) : s.contextElement ? $t(s.contextElement) : [],
|
|
867
|
-
popper: $t(o)
|
|
868
|
-
};
|
|
869
|
-
var d = Ur(Wr([].concat(n, u.options.modifiers)));
|
|
870
|
-
return u.orderedModifiers = d.filter(function(m) {
|
|
871
|
-
return m.enabled;
|
|
872
|
-
}), w(), g.update();
|
|
873
|
-
},
|
|
874
|
-
// Sync update – it will always be executed, even if not necessary. This
|
|
875
|
-
// is useful for low frequency updates where sync behavior simplifies the
|
|
876
|
-
// logic.
|
|
877
|
-
// For high frequency updates (e.g. `resize` and `scroll` events), always
|
|
878
|
-
// prefer the async Popper#update method
|
|
879
|
-
forceUpdate: function() {
|
|
880
|
-
if (!y) {
|
|
881
|
-
var p = u.elements, v = p.reference, d = p.popper;
|
|
882
|
-
if (ve(v, d)) {
|
|
883
|
-
u.rects = {
|
|
884
|
-
reference: zr(v, Tt(d), u.options.strategy === "fixed"),
|
|
885
|
-
popper: Gt(d)
|
|
886
|
-
}, u.reset = !1, u.placement = u.options.placement, u.orderedModifiers.forEach(function($) {
|
|
887
|
-
return u.modifiersData[$.name] = Object.assign({}, $.data);
|
|
888
|
-
});
|
|
889
|
-
for (var m = 0; m < u.orderedModifiers.length; m++) {
|
|
890
|
-
if (u.reset === !0) {
|
|
891
|
-
u.reset = !1, m = -1;
|
|
892
|
-
continue;
|
|
893
|
-
}
|
|
894
|
-
var x = u.orderedModifiers[m], O = x.fn, A = x.options, S = A === void 0 ? {} : A, _ = x.name;
|
|
895
|
-
typeof O == "function" && (u = O({
|
|
896
|
-
state: u,
|
|
897
|
-
options: S,
|
|
898
|
-
name: _,
|
|
899
|
-
instance: g
|
|
900
|
-
}) || u);
|
|
901
|
-
}
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
},
|
|
905
|
-
// Async and optimistically optimized update – it will not be executed if
|
|
906
|
-
// not necessary (debounced to run at most once-per-tick)
|
|
907
|
-
update: Ir(function() {
|
|
908
|
-
return new Promise(function(c) {
|
|
909
|
-
g.forceUpdate(), c(u);
|
|
910
|
-
});
|
|
911
|
-
}),
|
|
912
|
-
destroy: function() {
|
|
913
|
-
l(), y = !0;
|
|
914
|
-
}
|
|
915
|
-
};
|
|
916
|
-
if (!ve(s, o))
|
|
917
|
-
return g;
|
|
918
|
-
g.setOptions(h).then(function(c) {
|
|
919
|
-
!y && h.onFirstUpdate && h.onFirstUpdate(c);
|
|
920
|
-
});
|
|
921
|
-
function w() {
|
|
922
|
-
u.orderedModifiers.forEach(function(c) {
|
|
923
|
-
var p = c.name, v = c.options, d = v === void 0 ? {} : v, m = c.effect;
|
|
924
|
-
if (typeof m == "function") {
|
|
925
|
-
var x = m({
|
|
926
|
-
state: u,
|
|
927
|
-
name: p,
|
|
928
|
-
instance: g,
|
|
929
|
-
options: d
|
|
930
|
-
}), O = function() {
|
|
931
|
-
};
|
|
932
|
-
M.push(x || O);
|
|
933
|
-
}
|
|
934
|
-
});
|
|
935
|
-
}
|
|
936
|
-
function l() {
|
|
937
|
-
M.forEach(function(c) {
|
|
938
|
-
return c();
|
|
939
|
-
}), M = [];
|
|
940
|
-
}
|
|
941
|
-
return g;
|
|
942
|
-
};
|
|
943
|
-
}
|
|
944
|
-
var Vr = [gr, Er, dr, nr, Cr, $r, Fr, cr, kr], Rn = /* @__PURE__ */ qr({
|
|
945
|
-
defaultModifiers: Vr
|
|
946
|
-
});
|
|
947
|
-
function jt(t) {
|
|
948
|
-
"@babel/helpers - typeof";
|
|
949
|
-
return jt = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
|
|
950
|
-
return typeof e;
|
|
951
|
-
} : function(e) {
|
|
952
|
-
return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
953
|
-
}, jt(t);
|
|
954
|
-
}
|
|
955
|
-
var Zr = /^\s+/, Xr = /\s+$/;
|
|
956
|
-
function b(t, e) {
|
|
957
|
-
if (t = t || "", e = e || {}, t instanceof b)
|
|
958
|
-
return t;
|
|
959
|
-
if (!(this instanceof b))
|
|
960
|
-
return new b(t, e);
|
|
961
|
-
var r = Gr(t);
|
|
962
|
-
this._originalInput = t, this._r = r.r, this._g = r.g, this._b = r.b, this._a = r.a, this._roundA = Math.round(100 * this._a) / 100, this._format = e.format || r.format, this._gradientType = e.gradientType, this._r < 1 && (this._r = Math.round(this._r)), this._g < 1 && (this._g = Math.round(this._g)), this._b < 1 && (this._b = Math.round(this._b)), this._ok = r.ok;
|
|
963
|
-
}
|
|
964
|
-
b.prototype = {
|
|
965
|
-
isDark: function() {
|
|
966
|
-
return this.getBrightness() < 128;
|
|
967
|
-
},
|
|
968
|
-
isLight: function() {
|
|
969
|
-
return !this.isDark();
|
|
970
|
-
},
|
|
971
|
-
isValid: function() {
|
|
972
|
-
return this._ok;
|
|
973
|
-
},
|
|
974
|
-
getOriginalInput: function() {
|
|
975
|
-
return this._originalInput;
|
|
976
|
-
},
|
|
977
|
-
getFormat: function() {
|
|
978
|
-
return this._format;
|
|
979
|
-
},
|
|
980
|
-
getAlpha: function() {
|
|
981
|
-
return this._a;
|
|
982
|
-
},
|
|
983
|
-
getBrightness: function() {
|
|
984
|
-
var e = this.toRgb();
|
|
985
|
-
return (e.r * 299 + e.g * 587 + e.b * 114) / 1e3;
|
|
986
|
-
},
|
|
987
|
-
getLuminance: function() {
|
|
988
|
-
var e = this.toRgb(), r, n, a, i, f, s;
|
|
989
|
-
return r = e.r / 255, n = e.g / 255, a = e.b / 255, r <= 0.03928 ? i = r / 12.92 : i = Math.pow((r + 0.055) / 1.055, 2.4), n <= 0.03928 ? f = n / 12.92 : f = Math.pow((n + 0.055) / 1.055, 2.4), a <= 0.03928 ? s = a / 12.92 : s = Math.pow((a + 0.055) / 1.055, 2.4), 0.2126 * i + 0.7152 * f + 0.0722 * s;
|
|
990
|
-
},
|
|
991
|
-
setAlpha: function(e) {
|
|
992
|
-
return this._a = Ee(e), this._roundA = Math.round(100 * this._a) / 100, this;
|
|
993
|
-
},
|
|
994
|
-
toHsv: function() {
|
|
995
|
-
var e = me(this._r, this._g, this._b);
|
|
996
|
-
return {
|
|
997
|
-
h: e.h * 360,
|
|
998
|
-
s: e.s,
|
|
999
|
-
v: e.v,
|
|
1000
|
-
a: this._a
|
|
1001
|
-
};
|
|
1002
|
-
},
|
|
1003
|
-
toHsvString: function() {
|
|
1004
|
-
var e = me(this._r, this._g, this._b), r = Math.round(e.h * 360), n = Math.round(e.s * 100), a = Math.round(e.v * 100);
|
|
1005
|
-
return this._a == 1 ? "hsv(" + r + ", " + n + "%, " + a + "%)" : "hsva(" + r + ", " + n + "%, " + a + "%, " + this._roundA + ")";
|
|
1006
|
-
},
|
|
1007
|
-
toHsl: function() {
|
|
1008
|
-
var e = ge(this._r, this._g, this._b);
|
|
1009
|
-
return {
|
|
1010
|
-
h: e.h * 360,
|
|
1011
|
-
s: e.s,
|
|
1012
|
-
l: e.l,
|
|
1013
|
-
a: this._a
|
|
1014
|
-
};
|
|
1015
|
-
},
|
|
1016
|
-
toHslString: function() {
|
|
1017
|
-
var e = ge(this._r, this._g, this._b), r = Math.round(e.h * 360), n = Math.round(e.s * 100), a = Math.round(e.l * 100);
|
|
1018
|
-
return this._a == 1 ? "hsl(" + r + ", " + n + "%, " + a + "%)" : "hsla(" + r + ", " + n + "%, " + a + "%, " + this._roundA + ")";
|
|
1019
|
-
},
|
|
1020
|
-
toHex: function(e) {
|
|
1021
|
-
return be(this._r, this._g, this._b, e);
|
|
1022
|
-
},
|
|
1023
|
-
toHexString: function(e) {
|
|
1024
|
-
return "#" + this.toHex(e);
|
|
1025
|
-
},
|
|
1026
|
-
toHex8: function(e) {
|
|
1027
|
-
return tn(this._r, this._g, this._b, this._a, e);
|
|
1028
|
-
},
|
|
1029
|
-
toHex8String: function(e) {
|
|
1030
|
-
return "#" + this.toHex8(e);
|
|
1031
|
-
},
|
|
1032
|
-
toRgb: function() {
|
|
1033
|
-
return {
|
|
1034
|
-
r: Math.round(this._r),
|
|
1035
|
-
g: Math.round(this._g),
|
|
1036
|
-
b: Math.round(this._b),
|
|
1037
|
-
a: this._a
|
|
1038
|
-
};
|
|
1039
|
-
},
|
|
1040
|
-
toRgbString: function() {
|
|
1041
|
-
return this._a == 1 ? "rgb(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ")" : "rgba(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ", " + this._roundA + ")";
|
|
1042
|
-
},
|
|
1043
|
-
toPercentageRgb: function() {
|
|
1044
|
-
return {
|
|
1045
|
-
r: Math.round(R(this._r, 255) * 100) + "%",
|
|
1046
|
-
g: Math.round(R(this._g, 255) * 100) + "%",
|
|
1047
|
-
b: Math.round(R(this._b, 255) * 100) + "%",
|
|
1048
|
-
a: this._a
|
|
1049
|
-
};
|
|
1050
|
-
},
|
|
1051
|
-
toPercentageRgbString: function() {
|
|
1052
|
-
return this._a == 1 ? "rgb(" + Math.round(R(this._r, 255) * 100) + "%, " + Math.round(R(this._g, 255) * 100) + "%, " + Math.round(R(this._b, 255) * 100) + "%)" : "rgba(" + Math.round(R(this._r, 255) * 100) + "%, " + Math.round(R(this._g, 255) * 100) + "%, " + Math.round(R(this._b, 255) * 100) + "%, " + this._roundA + ")";
|
|
1053
|
-
},
|
|
1054
|
-
toName: function() {
|
|
1055
|
-
return this._a === 0 ? "transparent" : this._a < 1 ? !1 : pn[be(this._r, this._g, this._b, !0)] || !1;
|
|
1056
|
-
},
|
|
1057
|
-
toFilter: function(e) {
|
|
1058
|
-
var r = "#" + ye(this._r, this._g, this._b, this._a), n = r, a = this._gradientType ? "GradientType = 1, " : "";
|
|
1059
|
-
if (e) {
|
|
1060
|
-
var i = b(e);
|
|
1061
|
-
n = "#" + ye(i._r, i._g, i._b, i._a);
|
|
1062
|
-
}
|
|
1063
|
-
return "progid:DXImageTransform.Microsoft.gradient(" + a + "startColorstr=" + r + ",endColorstr=" + n + ")";
|
|
1064
|
-
},
|
|
1065
|
-
toString: function(e) {
|
|
1066
|
-
var r = !!e;
|
|
1067
|
-
e = e || this._format;
|
|
1068
|
-
var n = !1, a = this._a < 1 && this._a >= 0, i = !r && a && (e === "hex" || e === "hex6" || e === "hex3" || e === "hex4" || e === "hex8" || e === "name");
|
|
1069
|
-
return i ? e === "name" && this._a === 0 ? this.toName() : this.toRgbString() : (e === "rgb" && (n = this.toRgbString()), e === "prgb" && (n = this.toPercentageRgbString()), (e === "hex" || e === "hex6") && (n = this.toHexString()), e === "hex3" && (n = this.toHexString(!0)), e === "hex4" && (n = this.toHex8String(!0)), e === "hex8" && (n = this.toHex8String()), e === "name" && (n = this.toName()), e === "hsl" && (n = this.toHslString()), e === "hsv" && (n = this.toHsvString()), n || this.toHexString());
|
|
1070
|
-
},
|
|
1071
|
-
clone: function() {
|
|
1072
|
-
return b(this.toString());
|
|
1073
|
-
},
|
|
1074
|
-
_applyModification: function(e, r) {
|
|
1075
|
-
var n = e.apply(null, [this].concat([].slice.call(r)));
|
|
1076
|
-
return this._r = n._r, this._g = n._g, this._b = n._b, this.setAlpha(n._a), this;
|
|
1077
|
-
},
|
|
1078
|
-
lighten: function() {
|
|
1079
|
-
return this._applyModification(an, arguments);
|
|
1080
|
-
},
|
|
1081
|
-
brighten: function() {
|
|
1082
|
-
return this._applyModification(on, arguments);
|
|
1083
|
-
},
|
|
1084
|
-
darken: function() {
|
|
1085
|
-
return this._applyModification(sn, arguments);
|
|
1086
|
-
},
|
|
1087
|
-
desaturate: function() {
|
|
1088
|
-
return this._applyModification(en, arguments);
|
|
1089
|
-
},
|
|
1090
|
-
saturate: function() {
|
|
1091
|
-
return this._applyModification(rn, arguments);
|
|
1092
|
-
},
|
|
1093
|
-
greyscale: function() {
|
|
1094
|
-
return this._applyModification(nn, arguments);
|
|
1095
|
-
},
|
|
1096
|
-
spin: function() {
|
|
1097
|
-
return this._applyModification(fn, arguments);
|
|
1098
|
-
},
|
|
1099
|
-
_applyCombination: function(e, r) {
|
|
1100
|
-
return e.apply(null, [this].concat([].slice.call(r)));
|
|
1101
|
-
},
|
|
1102
|
-
analogous: function() {
|
|
1103
|
-
return this._applyCombination(ln, arguments);
|
|
1104
|
-
},
|
|
1105
|
-
complement: function() {
|
|
1106
|
-
return this._applyCombination(un, arguments);
|
|
1107
|
-
},
|
|
1108
|
-
monochromatic: function() {
|
|
1109
|
-
return this._applyCombination(hn, arguments);
|
|
1110
|
-
},
|
|
1111
|
-
splitcomplement: function() {
|
|
1112
|
-
return this._applyCombination(cn, arguments);
|
|
1113
|
-
},
|
|
1114
|
-
// Disabled until https://github.com/bgrins/TinyColor/issues/254
|
|
1115
|
-
// polyad: function (number) {
|
|
1116
|
-
// return this._applyCombination(polyad, [number]);
|
|
1117
|
-
// },
|
|
1118
|
-
triad: function() {
|
|
1119
|
-
return this._applyCombination(xe, [3]);
|
|
1120
|
-
},
|
|
1121
|
-
tetrad: function() {
|
|
1122
|
-
return this._applyCombination(xe, [4]);
|
|
1123
|
-
}
|
|
1124
|
-
};
|
|
1125
|
-
b.fromRatio = function(t, e) {
|
|
1126
|
-
if (jt(t) == "object") {
|
|
1127
|
-
var r = {};
|
|
1128
|
-
for (var n in t)
|
|
1129
|
-
t.hasOwnProperty(n) && (n === "a" ? r[n] = t[n] : r[n] = _t(t[n]));
|
|
1130
|
-
t = r;
|
|
1131
|
-
}
|
|
1132
|
-
return b(t, e);
|
|
1133
|
-
};
|
|
1134
|
-
function Gr(t) {
|
|
1135
|
-
var e = {
|
|
1136
|
-
r: 0,
|
|
1137
|
-
g: 0,
|
|
1138
|
-
b: 0
|
|
1139
|
-
}, r = 1, n = null, a = null, i = null, f = !1, s = !1;
|
|
1140
|
-
return typeof t == "string" && (t = mn(t)), jt(t) == "object" && (et(t.r) && et(t.g) && et(t.b) ? (e = Qr(t.r, t.g, t.b), f = !0, s = String(t.r).substr(-1) === "%" ? "prgb" : "rgb") : et(t.h) && et(t.s) && et(t.v) ? (n = _t(t.s), a = _t(t.v), e = Kr(t.h, n, a), f = !0, s = "hsv") : et(t.h) && et(t.s) && et(t.l) && (n = _t(t.s), i = _t(t.l), e = Jr(t.h, n, i), f = !0, s = "hsl"), t.hasOwnProperty("a") && (r = t.a)), r = Ee(r), {
|
|
1141
|
-
ok: f,
|
|
1142
|
-
format: t.format || s,
|
|
1143
|
-
r: Math.min(255, Math.max(e.r, 0)),
|
|
1144
|
-
g: Math.min(255, Math.max(e.g, 0)),
|
|
1145
|
-
b: Math.min(255, Math.max(e.b, 0)),
|
|
1146
|
-
a: r
|
|
1147
|
-
};
|
|
1148
|
-
}
|
|
1149
|
-
function Qr(t, e, r) {
|
|
1150
|
-
return {
|
|
1151
|
-
r: R(t, 255) * 255,
|
|
1152
|
-
g: R(e, 255) * 255,
|
|
1153
|
-
b: R(r, 255) * 255
|
|
1154
|
-
};
|
|
1155
|
-
}
|
|
1156
|
-
function ge(t, e, r) {
|
|
1157
|
-
t = R(t, 255), e = R(e, 255), r = R(r, 255);
|
|
1158
|
-
var n = Math.max(t, e, r), a = Math.min(t, e, r), i, f, s = (n + a) / 2;
|
|
1159
|
-
if (n == a)
|
|
1160
|
-
i = f = 0;
|
|
1161
|
-
else {
|
|
1162
|
-
var o = n - a;
|
|
1163
|
-
switch (f = s > 0.5 ? o / (2 - n - a) : o / (n + a), n) {
|
|
1164
|
-
case t:
|
|
1165
|
-
i = (e - r) / o + (e < r ? 6 : 0);
|
|
1166
|
-
break;
|
|
1167
|
-
case e:
|
|
1168
|
-
i = (r - t) / o + 2;
|
|
1169
|
-
break;
|
|
1170
|
-
case r:
|
|
1171
|
-
i = (t - e) / o + 4;
|
|
1172
|
-
break;
|
|
1173
|
-
}
|
|
1174
|
-
i /= 6;
|
|
1175
|
-
}
|
|
1176
|
-
return {
|
|
1177
|
-
h: i,
|
|
1178
|
-
s: f,
|
|
1179
|
-
l: s
|
|
1180
|
-
};
|
|
1181
|
-
}
|
|
1182
|
-
function Jr(t, e, r) {
|
|
1183
|
-
var n, a, i;
|
|
1184
|
-
t = R(t, 360), e = R(e, 100), r = R(r, 100);
|
|
1185
|
-
function f(h, u, M) {
|
|
1186
|
-
return M < 0 && (M += 1), M > 1 && (M -= 1), M < 1 / 6 ? h + (u - h) * 6 * M : M < 1 / 2 ? u : M < 2 / 3 ? h + (u - h) * (2 / 3 - M) * 6 : h;
|
|
1187
|
-
}
|
|
1188
|
-
if (e === 0)
|
|
1189
|
-
n = a = i = r;
|
|
1190
|
-
else {
|
|
1191
|
-
var s = r < 0.5 ? r * (1 + e) : r + e - r * e, o = 2 * r - s;
|
|
1192
|
-
n = f(o, s, t + 1 / 3), a = f(o, s, t), i = f(o, s, t - 1 / 3);
|
|
1193
|
-
}
|
|
1194
|
-
return {
|
|
1195
|
-
r: n * 255,
|
|
1196
|
-
g: a * 255,
|
|
1197
|
-
b: i * 255
|
|
1198
|
-
};
|
|
1199
|
-
}
|
|
1200
|
-
function me(t, e, r) {
|
|
1201
|
-
t = R(t, 255), e = R(e, 255), r = R(r, 255);
|
|
1202
|
-
var n = Math.max(t, e, r), a = Math.min(t, e, r), i, f, s = n, o = n - a;
|
|
1203
|
-
if (f = n === 0 ? 0 : o / n, n == a)
|
|
1204
|
-
i = 0;
|
|
1205
|
-
else {
|
|
1206
|
-
switch (n) {
|
|
1207
|
-
case t:
|
|
1208
|
-
i = (e - r) / o + (e < r ? 6 : 0);
|
|
1209
|
-
break;
|
|
1210
|
-
case e:
|
|
1211
|
-
i = (r - t) / o + 2;
|
|
1212
|
-
break;
|
|
1213
|
-
case r:
|
|
1214
|
-
i = (t - e) / o + 4;
|
|
1215
|
-
break;
|
|
1216
|
-
}
|
|
1217
|
-
i /= 6;
|
|
1218
|
-
}
|
|
1219
|
-
return {
|
|
1220
|
-
h: i,
|
|
1221
|
-
s: f,
|
|
1222
|
-
v: s
|
|
1223
|
-
};
|
|
1224
|
-
}
|
|
1225
|
-
function Kr(t, e, r) {
|
|
1226
|
-
t = R(t, 360) * 6, e = R(e, 100), r = R(r, 100);
|
|
1227
|
-
var n = Math.floor(t), a = t - n, i = r * (1 - e), f = r * (1 - a * e), s = r * (1 - (1 - a) * e), o = n % 6, h = [r, f, i, i, s, r][o], u = [s, r, r, f, i, i][o], M = [i, i, s, r, r, f][o];
|
|
1228
|
-
return {
|
|
1229
|
-
r: h * 255,
|
|
1230
|
-
g: u * 255,
|
|
1231
|
-
b: M * 255
|
|
1232
|
-
};
|
|
1233
|
-
}
|
|
1234
|
-
function be(t, e, r, n) {
|
|
1235
|
-
var a = [V(Math.round(t).toString(16)), V(Math.round(e).toString(16)), V(Math.round(r).toString(16))];
|
|
1236
|
-
return n && a[0].charAt(0) == a[0].charAt(1) && a[1].charAt(0) == a[1].charAt(1) && a[2].charAt(0) == a[2].charAt(1) ? a[0].charAt(0) + a[1].charAt(0) + a[2].charAt(0) : a.join("");
|
|
1237
|
-
}
|
|
1238
|
-
function tn(t, e, r, n, a) {
|
|
1239
|
-
var i = [V(Math.round(t).toString(16)), V(Math.round(e).toString(16)), V(Math.round(r).toString(16)), V(Pe(n))];
|
|
1240
|
-
return a && i[0].charAt(0) == i[0].charAt(1) && i[1].charAt(0) == i[1].charAt(1) && i[2].charAt(0) == i[2].charAt(1) && i[3].charAt(0) == i[3].charAt(1) ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0) + i[3].charAt(0) : i.join("");
|
|
1241
|
-
}
|
|
1242
|
-
function ye(t, e, r, n) {
|
|
1243
|
-
var a = [V(Pe(n)), V(Math.round(t).toString(16)), V(Math.round(e).toString(16)), V(Math.round(r).toString(16))];
|
|
1244
|
-
return a.join("");
|
|
1245
|
-
}
|
|
1246
|
-
b.equals = function(t, e) {
|
|
1247
|
-
return !t || !e ? !1 : b(t).toRgbString() == b(e).toRgbString();
|
|
1248
|
-
};
|
|
1249
|
-
b.random = function() {
|
|
1250
|
-
return b.fromRatio({
|
|
1251
|
-
r: Math.random(),
|
|
1252
|
-
g: Math.random(),
|
|
1253
|
-
b: Math.random()
|
|
1254
|
-
});
|
|
1255
|
-
};
|
|
1256
|
-
function en(t, e) {
|
|
1257
|
-
e = e === 0 ? 0 : e || 10;
|
|
1258
|
-
var r = b(t).toHsl();
|
|
1259
|
-
return r.s -= e / 100, r.s = Nt(r.s), b(r);
|
|
1260
|
-
}
|
|
1261
|
-
function rn(t, e) {
|
|
1262
|
-
e = e === 0 ? 0 : e || 10;
|
|
1263
|
-
var r = b(t).toHsl();
|
|
1264
|
-
return r.s += e / 100, r.s = Nt(r.s), b(r);
|
|
1265
|
-
}
|
|
1266
|
-
function nn(t) {
|
|
1267
|
-
return b(t).desaturate(100);
|
|
1268
|
-
}
|
|
1269
|
-
function an(t, e) {
|
|
1270
|
-
e = e === 0 ? 0 : e || 10;
|
|
1271
|
-
var r = b(t).toHsl();
|
|
1272
|
-
return r.l += e / 100, r.l = Nt(r.l), b(r);
|
|
1273
|
-
}
|
|
1274
|
-
function on(t, e) {
|
|
1275
|
-
e = e === 0 ? 0 : e || 10;
|
|
1276
|
-
var r = b(t).toRgb();
|
|
1277
|
-
return r.r = Math.max(0, Math.min(255, r.r - Math.round(255 * -(e / 100)))), r.g = Math.max(0, Math.min(255, r.g - Math.round(255 * -(e / 100)))), r.b = Math.max(0, Math.min(255, r.b - Math.round(255 * -(e / 100)))), b(r);
|
|
1278
|
-
}
|
|
1279
|
-
function sn(t, e) {
|
|
1280
|
-
e = e === 0 ? 0 : e || 10;
|
|
1281
|
-
var r = b(t).toHsl();
|
|
1282
|
-
return r.l -= e / 100, r.l = Nt(r.l), b(r);
|
|
1283
|
-
}
|
|
1284
|
-
function fn(t, e) {
|
|
1285
|
-
var r = b(t).toHsl(), n = (r.h + e) % 360;
|
|
1286
|
-
return r.h = n < 0 ? 360 + n : n, b(r);
|
|
1287
|
-
}
|
|
1288
|
-
function un(t) {
|
|
1289
|
-
var e = b(t).toHsl();
|
|
1290
|
-
return e.h = (e.h + 180) % 360, b(e);
|
|
1291
|
-
}
|
|
1292
|
-
function xe(t, e) {
|
|
1293
|
-
if (isNaN(e) || e <= 0)
|
|
1294
|
-
throw new Error("Argument to polyad must be a positive number");
|
|
1295
|
-
for (var r = b(t).toHsl(), n = [b(t)], a = 360 / e, i = 1; i < e; i++)
|
|
1296
|
-
n.push(b({
|
|
1297
|
-
h: (r.h + i * a) % 360,
|
|
1298
|
-
s: r.s,
|
|
1299
|
-
l: r.l
|
|
1300
|
-
}));
|
|
1301
|
-
return n;
|
|
1302
|
-
}
|
|
1303
|
-
function cn(t) {
|
|
1304
|
-
var e = b(t).toHsl(), r = e.h;
|
|
1305
|
-
return [b(t), b({
|
|
1306
|
-
h: (r + 72) % 360,
|
|
1307
|
-
s: e.s,
|
|
1308
|
-
l: e.l
|
|
1309
|
-
}), b({
|
|
1310
|
-
h: (r + 216) % 360,
|
|
1311
|
-
s: e.s,
|
|
1312
|
-
l: e.l
|
|
1313
|
-
})];
|
|
1314
|
-
}
|
|
1315
|
-
function ln(t, e, r) {
|
|
1316
|
-
e = e || 6, r = r || 30;
|
|
1317
|
-
var n = b(t).toHsl(), a = 360 / r, i = [b(t)];
|
|
1318
|
-
for (n.h = (n.h - (a * e >> 1) + 720) % 360; --e; )
|
|
1319
|
-
n.h = (n.h + a) % 360, i.push(b(n));
|
|
1320
|
-
return i;
|
|
1321
|
-
}
|
|
1322
|
-
function hn(t, e) {
|
|
1323
|
-
e = e || 6;
|
|
1324
|
-
for (var r = b(t).toHsv(), n = r.h, a = r.s, i = r.v, f = [], s = 1 / e; e--; )
|
|
1325
|
-
f.push(b({
|
|
1326
|
-
h: n,
|
|
1327
|
-
s: a,
|
|
1328
|
-
v: i
|
|
1329
|
-
})), i = (i + s) % 1;
|
|
1330
|
-
return f;
|
|
1331
|
-
}
|
|
1332
|
-
b.mix = function(t, e, r) {
|
|
1333
|
-
r = r === 0 ? 0 : r || 50;
|
|
1334
|
-
var n = b(t).toRgb(), a = b(e).toRgb(), i = r / 100, f = {
|
|
1335
|
-
r: (a.r - n.r) * i + n.r,
|
|
1336
|
-
g: (a.g - n.g) * i + n.g,
|
|
1337
|
-
b: (a.b - n.b) * i + n.b,
|
|
1338
|
-
a: (a.a - n.a) * i + n.a
|
|
1339
|
-
};
|
|
1340
|
-
return b(f);
|
|
1341
|
-
};
|
|
1342
|
-
b.readability = function(t, e) {
|
|
1343
|
-
var r = b(t), n = b(e);
|
|
1344
|
-
return (Math.max(r.getLuminance(), n.getLuminance()) + 0.05) / (Math.min(r.getLuminance(), n.getLuminance()) + 0.05);
|
|
1345
|
-
};
|
|
1346
|
-
b.isReadable = function(t, e, r) {
|
|
1347
|
-
var n = b.readability(t, e), a, i;
|
|
1348
|
-
switch (i = !1, a = bn(r), a.level + a.size) {
|
|
1349
|
-
case "AAsmall":
|
|
1350
|
-
case "AAAlarge":
|
|
1351
|
-
i = n >= 4.5;
|
|
1352
|
-
break;
|
|
1353
|
-
case "AAlarge":
|
|
1354
|
-
i = n >= 3;
|
|
1355
|
-
break;
|
|
1356
|
-
case "AAAsmall":
|
|
1357
|
-
i = n >= 7;
|
|
1358
|
-
break;
|
|
1359
|
-
}
|
|
1360
|
-
return i;
|
|
1361
|
-
};
|
|
1362
|
-
b.mostReadable = function(t, e, r) {
|
|
1363
|
-
var n = null, a = 0, i, f, s, o;
|
|
1364
|
-
r = r || {}, f = r.includeFallbackColors, s = r.level, o = r.size;
|
|
1365
|
-
for (var h = 0; h < e.length; h++)
|
|
1366
|
-
i = b.readability(t, e[h]), i > a && (a = i, n = b(e[h]));
|
|
1367
|
-
return b.isReadable(t, n, {
|
|
1368
|
-
level: s,
|
|
1369
|
-
size: o
|
|
1370
|
-
}) || !f ? n : (r.includeFallbackColors = !1, b.mostReadable(t, ["#fff", "#000"], r));
|
|
1371
|
-
};
|
|
1372
|
-
var qt = b.names = {
|
|
1373
|
-
aliceblue: "f0f8ff",
|
|
1374
|
-
antiquewhite: "faebd7",
|
|
1375
|
-
aqua: "0ff",
|
|
1376
|
-
aquamarine: "7fffd4",
|
|
1377
|
-
azure: "f0ffff",
|
|
1378
|
-
beige: "f5f5dc",
|
|
1379
|
-
bisque: "ffe4c4",
|
|
1380
|
-
black: "000",
|
|
1381
|
-
blanchedalmond: "ffebcd",
|
|
1382
|
-
blue: "00f",
|
|
1383
|
-
blueviolet: "8a2be2",
|
|
1384
|
-
brown: "a52a2a",
|
|
1385
|
-
burlywood: "deb887",
|
|
1386
|
-
burntsienna: "ea7e5d",
|
|
1387
|
-
cadetblue: "5f9ea0",
|
|
1388
|
-
chartreuse: "7fff00",
|
|
1389
|
-
chocolate: "d2691e",
|
|
1390
|
-
coral: "ff7f50",
|
|
1391
|
-
cornflowerblue: "6495ed",
|
|
1392
|
-
cornsilk: "fff8dc",
|
|
1393
|
-
crimson: "dc143c",
|
|
1394
|
-
cyan: "0ff",
|
|
1395
|
-
darkblue: "00008b",
|
|
1396
|
-
darkcyan: "008b8b",
|
|
1397
|
-
darkgoldenrod: "b8860b",
|
|
1398
|
-
darkgray: "a9a9a9",
|
|
1399
|
-
darkgreen: "006400",
|
|
1400
|
-
darkgrey: "a9a9a9",
|
|
1401
|
-
darkkhaki: "bdb76b",
|
|
1402
|
-
darkmagenta: "8b008b",
|
|
1403
|
-
darkolivegreen: "556b2f",
|
|
1404
|
-
darkorange: "ff8c00",
|
|
1405
|
-
darkorchid: "9932cc",
|
|
1406
|
-
darkred: "8b0000",
|
|
1407
|
-
darksalmon: "e9967a",
|
|
1408
|
-
darkseagreen: "8fbc8f",
|
|
1409
|
-
darkslateblue: "483d8b",
|
|
1410
|
-
darkslategray: "2f4f4f",
|
|
1411
|
-
darkslategrey: "2f4f4f",
|
|
1412
|
-
darkturquoise: "00ced1",
|
|
1413
|
-
darkviolet: "9400d3",
|
|
1414
|
-
deeppink: "ff1493",
|
|
1415
|
-
deepskyblue: "00bfff",
|
|
1416
|
-
dimgray: "696969",
|
|
1417
|
-
dimgrey: "696969",
|
|
1418
|
-
dodgerblue: "1e90ff",
|
|
1419
|
-
firebrick: "b22222",
|
|
1420
|
-
floralwhite: "fffaf0",
|
|
1421
|
-
forestgreen: "228b22",
|
|
1422
|
-
fuchsia: "f0f",
|
|
1423
|
-
gainsboro: "dcdcdc",
|
|
1424
|
-
ghostwhite: "f8f8ff",
|
|
1425
|
-
gold: "ffd700",
|
|
1426
|
-
goldenrod: "daa520",
|
|
1427
|
-
gray: "808080",
|
|
1428
|
-
green: "008000",
|
|
1429
|
-
greenyellow: "adff2f",
|
|
1430
|
-
grey: "808080",
|
|
1431
|
-
honeydew: "f0fff0",
|
|
1432
|
-
hotpink: "ff69b4",
|
|
1433
|
-
indianred: "cd5c5c",
|
|
1434
|
-
indigo: "4b0082",
|
|
1435
|
-
ivory: "fffff0",
|
|
1436
|
-
khaki: "f0e68c",
|
|
1437
|
-
lavender: "e6e6fa",
|
|
1438
|
-
lavenderblush: "fff0f5",
|
|
1439
|
-
lawngreen: "7cfc00",
|
|
1440
|
-
lemonchiffon: "fffacd",
|
|
1441
|
-
lightblue: "add8e6",
|
|
1442
|
-
lightcoral: "f08080",
|
|
1443
|
-
lightcyan: "e0ffff",
|
|
1444
|
-
lightgoldenrodyellow: "fafad2",
|
|
1445
|
-
lightgray: "d3d3d3",
|
|
1446
|
-
lightgreen: "90ee90",
|
|
1447
|
-
lightgrey: "d3d3d3",
|
|
1448
|
-
lightpink: "ffb6c1",
|
|
1449
|
-
lightsalmon: "ffa07a",
|
|
1450
|
-
lightseagreen: "20b2aa",
|
|
1451
|
-
lightskyblue: "87cefa",
|
|
1452
|
-
lightslategray: "789",
|
|
1453
|
-
lightslategrey: "789",
|
|
1454
|
-
lightsteelblue: "b0c4de",
|
|
1455
|
-
lightyellow: "ffffe0",
|
|
1456
|
-
lime: "0f0",
|
|
1457
|
-
limegreen: "32cd32",
|
|
1458
|
-
linen: "faf0e6",
|
|
1459
|
-
magenta: "f0f",
|
|
1460
|
-
maroon: "800000",
|
|
1461
|
-
mediumaquamarine: "66cdaa",
|
|
1462
|
-
mediumblue: "0000cd",
|
|
1463
|
-
mediumorchid: "ba55d3",
|
|
1464
|
-
mediumpurple: "9370db",
|
|
1465
|
-
mediumseagreen: "3cb371",
|
|
1466
|
-
mediumslateblue: "7b68ee",
|
|
1467
|
-
mediumspringgreen: "00fa9a",
|
|
1468
|
-
mediumturquoise: "48d1cc",
|
|
1469
|
-
mediumvioletred: "c71585",
|
|
1470
|
-
midnightblue: "191970",
|
|
1471
|
-
mintcream: "f5fffa",
|
|
1472
|
-
mistyrose: "ffe4e1",
|
|
1473
|
-
moccasin: "ffe4b5",
|
|
1474
|
-
navajowhite: "ffdead",
|
|
1475
|
-
navy: "000080",
|
|
1476
|
-
oldlace: "fdf5e6",
|
|
1477
|
-
olive: "808000",
|
|
1478
|
-
olivedrab: "6b8e23",
|
|
1479
|
-
orange: "ffa500",
|
|
1480
|
-
orangered: "ff4500",
|
|
1481
|
-
orchid: "da70d6",
|
|
1482
|
-
palegoldenrod: "eee8aa",
|
|
1483
|
-
palegreen: "98fb98",
|
|
1484
|
-
paleturquoise: "afeeee",
|
|
1485
|
-
palevioletred: "db7093",
|
|
1486
|
-
papayawhip: "ffefd5",
|
|
1487
|
-
peachpuff: "ffdab9",
|
|
1488
|
-
peru: "cd853f",
|
|
1489
|
-
pink: "ffc0cb",
|
|
1490
|
-
plum: "dda0dd",
|
|
1491
|
-
powderblue: "b0e0e6",
|
|
1492
|
-
purple: "800080",
|
|
1493
|
-
rebeccapurple: "663399",
|
|
1494
|
-
red: "f00",
|
|
1495
|
-
rosybrown: "bc8f8f",
|
|
1496
|
-
royalblue: "4169e1",
|
|
1497
|
-
saddlebrown: "8b4513",
|
|
1498
|
-
salmon: "fa8072",
|
|
1499
|
-
sandybrown: "f4a460",
|
|
1500
|
-
seagreen: "2e8b57",
|
|
1501
|
-
seashell: "fff5ee",
|
|
1502
|
-
sienna: "a0522d",
|
|
1503
|
-
silver: "c0c0c0",
|
|
1504
|
-
skyblue: "87ceeb",
|
|
1505
|
-
slateblue: "6a5acd",
|
|
1506
|
-
slategray: "708090",
|
|
1507
|
-
slategrey: "708090",
|
|
1508
|
-
snow: "fffafa",
|
|
1509
|
-
springgreen: "00ff7f",
|
|
1510
|
-
steelblue: "4682b4",
|
|
1511
|
-
tan: "d2b48c",
|
|
1512
|
-
teal: "008080",
|
|
1513
|
-
thistle: "d8bfd8",
|
|
1514
|
-
tomato: "ff6347",
|
|
1515
|
-
turquoise: "40e0d0",
|
|
1516
|
-
violet: "ee82ee",
|
|
1517
|
-
wheat: "f5deb3",
|
|
1518
|
-
white: "fff",
|
|
1519
|
-
whitesmoke: "f5f5f5",
|
|
1520
|
-
yellow: "ff0",
|
|
1521
|
-
yellowgreen: "9acd32"
|
|
1522
|
-
}, pn = b.hexNames = dn(qt);
|
|
1523
|
-
function dn(t) {
|
|
1524
|
-
var e = {};
|
|
1525
|
-
for (var r in t)
|
|
1526
|
-
t.hasOwnProperty(r) && (e[t[r]] = r);
|
|
1527
|
-
return e;
|
|
1528
|
-
}
|
|
1529
|
-
function Ee(t) {
|
|
1530
|
-
return t = parseFloat(t), (isNaN(t) || t < 0 || t > 1) && (t = 1), t;
|
|
1531
|
-
}
|
|
1532
|
-
function R(t, e) {
|
|
1533
|
-
vn(t) && (t = "100%");
|
|
1534
|
-
var r = gn(t);
|
|
1535
|
-
return t = Math.min(e, Math.max(0, parseFloat(t))), r && (t = parseInt(t * e, 10) / 100), Math.abs(t - e) < 1e-6 ? 1 : t % e / parseFloat(e);
|
|
1536
|
-
}
|
|
1537
|
-
function Nt(t) {
|
|
1538
|
-
return Math.min(1, Math.max(0, t));
|
|
1539
|
-
}
|
|
1540
|
-
function j(t) {
|
|
1541
|
-
return parseInt(t, 16);
|
|
1542
|
-
}
|
|
1543
|
-
function vn(t) {
|
|
1544
|
-
return typeof t == "string" && t.indexOf(".") != -1 && parseFloat(t) === 1;
|
|
1545
|
-
}
|
|
1546
|
-
function gn(t) {
|
|
1547
|
-
return typeof t == "string" && t.indexOf("%") != -1;
|
|
1548
|
-
}
|
|
1549
|
-
function V(t) {
|
|
1550
|
-
return t.length == 1 ? "0" + t : "" + t;
|
|
1551
|
-
}
|
|
1552
|
-
function _t(t) {
|
|
1553
|
-
return t <= 1 && (t = t * 100 + "%"), t;
|
|
1554
|
-
}
|
|
1555
|
-
function Pe(t) {
|
|
1556
|
-
return Math.round(parseFloat(t) * 255).toString(16);
|
|
1557
|
-
}
|
|
1558
|
-
function we(t) {
|
|
1559
|
-
return j(t) / 255;
|
|
1560
|
-
}
|
|
1561
|
-
var q = function() {
|
|
1562
|
-
var t = "[-\\+]?\\d+%?", e = "[-\\+]?\\d*\\.\\d+%?", r = "(?:" + e + ")|(?:" + t + ")", n = "[\\s|\\(]+(" + r + ")[,|\\s]+(" + r + ")[,|\\s]+(" + r + ")\\s*\\)?", a = "[\\s|\\(]+(" + r + ")[,|\\s]+(" + r + ")[,|\\s]+(" + r + ")[,|\\s]+(" + r + ")\\s*\\)?";
|
|
1563
|
-
return {
|
|
1564
|
-
CSS_UNIT: new RegExp(r),
|
|
1565
|
-
rgb: new RegExp("rgb" + n),
|
|
1566
|
-
rgba: new RegExp("rgba" + a),
|
|
1567
|
-
hsl: new RegExp("hsl" + n),
|
|
1568
|
-
hsla: new RegExp("hsla" + a),
|
|
1569
|
-
hsv: new RegExp("hsv" + n),
|
|
1570
|
-
hsva: new RegExp("hsva" + a),
|
|
1571
|
-
hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
|
1572
|
-
hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
|
|
1573
|
-
hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
|
1574
|
-
hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
|
|
1575
|
-
};
|
|
1576
|
-
}();
|
|
1577
|
-
function et(t) {
|
|
1578
|
-
return !!q.CSS_UNIT.exec(t);
|
|
1579
|
-
}
|
|
1580
|
-
function mn(t) {
|
|
1581
|
-
t = t.replace(Zr, "").replace(Xr, "").toLowerCase();
|
|
1582
|
-
var e = !1;
|
|
1583
|
-
if (qt[t])
|
|
1584
|
-
t = qt[t], e = !0;
|
|
1585
|
-
else if (t == "transparent")
|
|
1586
|
-
return {
|
|
1587
|
-
r: 0,
|
|
1588
|
-
g: 0,
|
|
1589
|
-
b: 0,
|
|
1590
|
-
a: 0,
|
|
1591
|
-
format: "name"
|
|
1592
|
-
};
|
|
1593
|
-
var r;
|
|
1594
|
-
return (r = q.rgb.exec(t)) ? {
|
|
1595
|
-
r: r[1],
|
|
1596
|
-
g: r[2],
|
|
1597
|
-
b: r[3]
|
|
1598
|
-
} : (r = q.rgba.exec(t)) ? {
|
|
1599
|
-
r: r[1],
|
|
1600
|
-
g: r[2],
|
|
1601
|
-
b: r[3],
|
|
1602
|
-
a: r[4]
|
|
1603
|
-
} : (r = q.hsl.exec(t)) ? {
|
|
1604
|
-
h: r[1],
|
|
1605
|
-
s: r[2],
|
|
1606
|
-
l: r[3]
|
|
1607
|
-
} : (r = q.hsla.exec(t)) ? {
|
|
1608
|
-
h: r[1],
|
|
1609
|
-
s: r[2],
|
|
1610
|
-
l: r[3],
|
|
1611
|
-
a: r[4]
|
|
1612
|
-
} : (r = q.hsv.exec(t)) ? {
|
|
1613
|
-
h: r[1],
|
|
1614
|
-
s: r[2],
|
|
1615
|
-
v: r[3]
|
|
1616
|
-
} : (r = q.hsva.exec(t)) ? {
|
|
1617
|
-
h: r[1],
|
|
1618
|
-
s: r[2],
|
|
1619
|
-
v: r[3],
|
|
1620
|
-
a: r[4]
|
|
1621
|
-
} : (r = q.hex8.exec(t)) ? {
|
|
1622
|
-
r: j(r[1]),
|
|
1623
|
-
g: j(r[2]),
|
|
1624
|
-
b: j(r[3]),
|
|
1625
|
-
a: we(r[4]),
|
|
1626
|
-
format: e ? "name" : "hex8"
|
|
1627
|
-
} : (r = q.hex6.exec(t)) ? {
|
|
1628
|
-
r: j(r[1]),
|
|
1629
|
-
g: j(r[2]),
|
|
1630
|
-
b: j(r[3]),
|
|
1631
|
-
format: e ? "name" : "hex"
|
|
1632
|
-
} : (r = q.hex4.exec(t)) ? {
|
|
1633
|
-
r: j(r[1] + "" + r[1]),
|
|
1634
|
-
g: j(r[2] + "" + r[2]),
|
|
1635
|
-
b: j(r[3] + "" + r[3]),
|
|
1636
|
-
a: we(r[4] + "" + r[4]),
|
|
1637
|
-
format: e ? "name" : "hex8"
|
|
1638
|
-
} : (r = q.hex3.exec(t)) ? {
|
|
1639
|
-
r: j(r[1] + "" + r[1]),
|
|
1640
|
-
g: j(r[2] + "" + r[2]),
|
|
1641
|
-
b: j(r[3] + "" + r[3]),
|
|
1642
|
-
format: e ? "name" : "hex"
|
|
1643
|
-
} : !1;
|
|
1644
|
-
}
|
|
1645
|
-
function bn(t) {
|
|
1646
|
-
var e, r;
|
|
1647
|
-
return t = t || {
|
|
1648
|
-
level: "AA",
|
|
1649
|
-
size: "small"
|
|
1650
|
-
}, e = (t.level || "AA").toUpperCase(), r = (t.size || "small").toLowerCase(), e !== "AA" && e !== "AAA" && (e = "AA"), r !== "small" && r !== "large" && (r = "small"), {
|
|
1651
|
-
level: e,
|
|
1652
|
-
size: r
|
|
1653
|
-
};
|
|
1654
|
-
}
|
|
1655
|
-
var Lt = { exports: {} }, yn = Lt.exports, Me;
|
|
1656
|
-
function xn() {
|
|
1657
|
-
return Me || (Me = 1, function(t, e) {
|
|
1658
|
-
(function(r, n) {
|
|
1659
|
-
t.exports = n();
|
|
1660
|
-
})(yn, function() {
|
|
1661
|
-
var r = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, n = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, a = /\d/, i = /\d\d/, f = /\d\d?/, s = /\d*[^-_:/,()\s\d]+/, o = {}, h = function(c) {
|
|
1662
|
-
return (c = +c) + (c > 68 ? 1900 : 2e3);
|
|
1663
|
-
}, u = function(c) {
|
|
1664
|
-
return function(p) {
|
|
1665
|
-
this[c] = +p;
|
|
1666
|
-
};
|
|
1667
|
-
}, M = [/[+-]\d\d:?(\d\d)?|Z/, function(c) {
|
|
1668
|
-
(this.zone || (this.zone = {})).offset = function(p) {
|
|
1669
|
-
if (!p || p === "Z") return 0;
|
|
1670
|
-
var v = p.match(/([+-]|\d\d)/g), d = 60 * v[1] + (+v[2] || 0);
|
|
1671
|
-
return d === 0 ? 0 : v[0] === "+" ? -d : d;
|
|
1672
|
-
}(c);
|
|
1673
|
-
}], y = function(c) {
|
|
1674
|
-
var p = o[c];
|
|
1675
|
-
return p && (p.indexOf ? p : p.s.concat(p.f));
|
|
1676
|
-
}, g = function(c, p) {
|
|
1677
|
-
var v, d = o.meridiem;
|
|
1678
|
-
if (d) {
|
|
1679
|
-
for (var m = 1; m <= 24; m += 1) if (c.indexOf(d(m, 0, p)) > -1) {
|
|
1680
|
-
v = m > 12;
|
|
1681
|
-
break;
|
|
1682
|
-
}
|
|
1683
|
-
} else v = c === (p ? "pm" : "PM");
|
|
1684
|
-
return v;
|
|
1685
|
-
}, w = { A: [s, function(c) {
|
|
1686
|
-
this.afternoon = g(c, !1);
|
|
1687
|
-
}], a: [s, function(c) {
|
|
1688
|
-
this.afternoon = g(c, !0);
|
|
1689
|
-
}], Q: [a, function(c) {
|
|
1690
|
-
this.month = 3 * (c - 1) + 1;
|
|
1691
|
-
}], S: [a, function(c) {
|
|
1692
|
-
this.milliseconds = 100 * +c;
|
|
1693
|
-
}], SS: [i, function(c) {
|
|
1694
|
-
this.milliseconds = 10 * +c;
|
|
1695
|
-
}], SSS: [/\d{3}/, function(c) {
|
|
1696
|
-
this.milliseconds = +c;
|
|
1697
|
-
}], s: [f, u("seconds")], ss: [f, u("seconds")], m: [f, u("minutes")], mm: [f, u("minutes")], H: [f, u("hours")], h: [f, u("hours")], HH: [f, u("hours")], hh: [f, u("hours")], D: [f, u("day")], DD: [i, u("day")], Do: [s, function(c) {
|
|
1698
|
-
var p = o.ordinal, v = c.match(/\d+/);
|
|
1699
|
-
if (this.day = v[0], p) for (var d = 1; d <= 31; d += 1) p(d).replace(/\[|\]/g, "") === c && (this.day = d);
|
|
1700
|
-
}], w: [f, u("week")], ww: [i, u("week")], M: [f, u("month")], MM: [i, u("month")], MMM: [s, function(c) {
|
|
1701
|
-
var p = y("months"), v = (y("monthsShort") || p.map(function(d) {
|
|
1702
|
-
return d.slice(0, 3);
|
|
1703
|
-
})).indexOf(c) + 1;
|
|
1704
|
-
if (v < 1) throw new Error();
|
|
1705
|
-
this.month = v % 12 || v;
|
|
1706
|
-
}], MMMM: [s, function(c) {
|
|
1707
|
-
var p = y("months").indexOf(c) + 1;
|
|
1708
|
-
if (p < 1) throw new Error();
|
|
1709
|
-
this.month = p % 12 || p;
|
|
1710
|
-
}], Y: [/[+-]?\d+/, u("year")], YY: [i, function(c) {
|
|
1711
|
-
this.year = h(c);
|
|
1712
|
-
}], YYYY: [/\d{4}/, u("year")], Z: M, ZZ: M };
|
|
1713
|
-
function l(c) {
|
|
1714
|
-
var p, v;
|
|
1715
|
-
p = c, v = o && o.formats;
|
|
1716
|
-
for (var d = (c = p.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function($, D, T) {
|
|
1717
|
-
var k = T && T.toUpperCase();
|
|
1718
|
-
return D || v[T] || r[T] || v[k].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function(H, E, C) {
|
|
1719
|
-
return E || C.slice(1);
|
|
1720
|
-
});
|
|
1721
|
-
})).match(n), m = d.length, x = 0; x < m; x += 1) {
|
|
1722
|
-
var O = d[x], A = w[O], S = A && A[0], _ = A && A[1];
|
|
1723
|
-
d[x] = _ ? { regex: S, parser: _ } : O.replace(/^\[|\]$/g, "");
|
|
1724
|
-
}
|
|
1725
|
-
return function($) {
|
|
1726
|
-
for (var D = {}, T = 0, k = 0; T < m; T += 1) {
|
|
1727
|
-
var H = d[T];
|
|
1728
|
-
if (typeof H == "string") k += H.length;
|
|
1729
|
-
else {
|
|
1730
|
-
var E = H.regex, C = H.parser, P = $.slice(k), W = E.exec(P)[0];
|
|
1731
|
-
C.call(D, W), $ = $.replace(W, "");
|
|
1732
|
-
}
|
|
1733
|
-
}
|
|
1734
|
-
return function(F) {
|
|
1735
|
-
var Q = F.afternoon;
|
|
1736
|
-
if (Q !== void 0) {
|
|
1737
|
-
var L = F.hours;
|
|
1738
|
-
Q ? L < 12 && (F.hours += 12) : L === 12 && (F.hours = 0), delete F.afternoon;
|
|
1739
|
-
}
|
|
1740
|
-
}(D), D;
|
|
1741
|
-
};
|
|
1742
|
-
}
|
|
1743
|
-
return function(c, p, v) {
|
|
1744
|
-
v.p.customParseFormat = !0, c && c.parseTwoDigitYear && (h = c.parseTwoDigitYear);
|
|
1745
|
-
var d = p.prototype, m = d.parse;
|
|
1746
|
-
d.parse = function(x) {
|
|
1747
|
-
var O = x.date, A = x.utc, S = x.args;
|
|
1748
|
-
this.$u = A;
|
|
1749
|
-
var _ = S[1];
|
|
1750
|
-
if (typeof _ == "string") {
|
|
1751
|
-
var $ = S[2] === !0, D = S[3] === !0, T = $ || D, k = S[2];
|
|
1752
|
-
D && (k = S[2]), o = this.$locale(), !$ && k && (o = v.Ls[k]), this.$d = function(P, W, F, Q) {
|
|
1753
|
-
try {
|
|
1754
|
-
if (["x", "X"].indexOf(W) > -1) return new Date((W === "X" ? 1e3 : 1) * P);
|
|
1755
|
-
var L = l(W)(P), J = L.year, K = L.month, nt = L.day, Z = L.hours, ot = L.minutes, ct = L.seconds, tt = L.milliseconds, lt = L.zone, Ct = L.week, st = /* @__PURE__ */ new Date(), wt = nt || (J || K ? 1 : st.getDate()), ht = J || st.getFullYear(), pt = 0;
|
|
1756
|
-
J && !K || (pt = K > 0 ? K - 1 : st.getMonth());
|
|
1757
|
-
var dt, vt = Z || 0, gt = ot || 0, Mt = ct || 0, Ot = tt || 0;
|
|
1758
|
-
return lt ? new Date(Date.UTC(ht, pt, wt, vt, gt, Mt, Ot + 60 * lt.offset * 1e3)) : F ? new Date(Date.UTC(ht, pt, wt, vt, gt, Mt, Ot)) : (dt = new Date(ht, pt, wt, vt, gt, Mt, Ot), Ct && (dt = Q(dt).week(Ct).toDate()), dt);
|
|
1759
|
-
} catch {
|
|
1760
|
-
return /* @__PURE__ */ new Date("");
|
|
1761
|
-
}
|
|
1762
|
-
}(O, _, A, v), this.init(), k && k !== !0 && (this.$L = this.locale(k).$L), T && O != this.format(_) && (this.$d = /* @__PURE__ */ new Date("")), o = {};
|
|
1763
|
-
} else if (_ instanceof Array) for (var H = _.length, E = 1; E <= H; E += 1) {
|
|
1764
|
-
S[1] = _[E - 1];
|
|
1765
|
-
var C = v.apply(this, S);
|
|
1766
|
-
if (C.isValid()) {
|
|
1767
|
-
this.$d = C.$d, this.$L = C.$L, this.init();
|
|
1768
|
-
break;
|
|
1769
|
-
}
|
|
1770
|
-
E === H && (this.$d = /* @__PURE__ */ new Date(""));
|
|
1771
|
-
}
|
|
1772
|
-
else m.call(this, x);
|
|
1773
|
-
};
|
|
1774
|
-
};
|
|
1775
|
-
});
|
|
1776
|
-
}(Lt)), Lt.exports;
|
|
1777
|
-
}
|
|
1778
|
-
var wn = xn();
|
|
1779
|
-
const Tn = /* @__PURE__ */ Vt(wn);
|
|
1780
|
-
var Ft = { exports: {} }, Mn = Ft.exports, Oe;
|
|
1781
|
-
function On() {
|
|
1782
|
-
return Oe || (Oe = 1, function(t, e) {
|
|
1783
|
-
(function(r, n) {
|
|
1784
|
-
t.exports = n();
|
|
1785
|
-
})(Mn, function() {
|
|
1786
|
-
var r = { year: 0, month: 1, day: 2, hour: 3, minute: 4, second: 5 }, n = {};
|
|
1787
|
-
return function(a, i, f) {
|
|
1788
|
-
var s, o = function(y, g, w) {
|
|
1789
|
-
w === void 0 && (w = {});
|
|
1790
|
-
var l = new Date(y), c = function(p, v) {
|
|
1791
|
-
v === void 0 && (v = {});
|
|
1792
|
-
var d = v.timeZoneName || "short", m = p + "|" + d, x = n[m];
|
|
1793
|
-
return x || (x = new Intl.DateTimeFormat("en-US", { hour12: !1, timeZone: p, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit", timeZoneName: d }), n[m] = x), x;
|
|
1794
|
-
}(g, w);
|
|
1795
|
-
return c.formatToParts(l);
|
|
1796
|
-
}, h = function(y, g) {
|
|
1797
|
-
for (var w = o(y, g), l = [], c = 0; c < w.length; c += 1) {
|
|
1798
|
-
var p = w[c], v = p.type, d = p.value, m = r[v];
|
|
1799
|
-
m >= 0 && (l[m] = parseInt(d, 10));
|
|
1800
|
-
}
|
|
1801
|
-
var x = l[3], O = x === 24 ? 0 : x, A = l[0] + "-" + l[1] + "-" + l[2] + " " + O + ":" + l[4] + ":" + l[5] + ":000", S = +y;
|
|
1802
|
-
return (f.utc(A).valueOf() - (S -= S % 1e3)) / 6e4;
|
|
1803
|
-
}, u = i.prototype;
|
|
1804
|
-
u.tz = function(y, g) {
|
|
1805
|
-
y === void 0 && (y = s);
|
|
1806
|
-
var w, l = this.utcOffset(), c = this.toDate(), p = c.toLocaleString("en-US", { timeZone: y }), v = Math.round((c - new Date(p)) / 1e3 / 60), d = 15 * -Math.round(c.getTimezoneOffset() / 15) - v;
|
|
1807
|
-
if (!Number(d)) w = this.utcOffset(0, g);
|
|
1808
|
-
else if (w = f(p, { locale: this.$L }).$set("millisecond", this.$ms).utcOffset(d, !0), g) {
|
|
1809
|
-
var m = w.utcOffset();
|
|
1810
|
-
w = w.add(l - m, "minute");
|
|
1811
|
-
}
|
|
1812
|
-
return w.$x.$timezone = y, w;
|
|
1813
|
-
}, u.offsetName = function(y) {
|
|
1814
|
-
var g = this.$x.$timezone || f.tz.guess(), w = o(this.valueOf(), g, { timeZoneName: y }).find(function(l) {
|
|
1815
|
-
return l.type.toLowerCase() === "timezonename";
|
|
1816
|
-
});
|
|
1817
|
-
return w && w.value;
|
|
1818
|
-
};
|
|
1819
|
-
var M = u.startOf;
|
|
1820
|
-
u.startOf = function(y, g) {
|
|
1821
|
-
if (!this.$x || !this.$x.$timezone) return M.call(this, y, g);
|
|
1822
|
-
var w = f(this.format("YYYY-MM-DD HH:mm:ss:SSS"), { locale: this.$L });
|
|
1823
|
-
return M.call(w, y, g).tz(this.$x.$timezone, !0);
|
|
1824
|
-
}, f.tz = function(y, g, w) {
|
|
1825
|
-
var l = w && g, c = w || g || s, p = h(+f(), c);
|
|
1826
|
-
if (typeof y != "string") return f(y).tz(c);
|
|
1827
|
-
var v = function(O, A, S) {
|
|
1828
|
-
var _ = O - 60 * A * 1e3, $ = h(_, S);
|
|
1829
|
-
if (A === $) return [_, A];
|
|
1830
|
-
var D = h(_ -= 60 * ($ - A) * 1e3, S);
|
|
1831
|
-
return $ === D ? [_, $] : [O - 60 * Math.min($, D) * 1e3, Math.max($, D)];
|
|
1832
|
-
}(f.utc(y, l).valueOf(), p, c), d = v[0], m = v[1], x = f(d).utcOffset(m);
|
|
1833
|
-
return x.$x.$timezone = c, x;
|
|
1834
|
-
}, f.tz.guess = function() {
|
|
1835
|
-
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
1836
|
-
}, f.tz.setDefault = function(y) {
|
|
1837
|
-
s = y;
|
|
1838
|
-
};
|
|
1839
|
-
};
|
|
1840
|
-
});
|
|
1841
|
-
}(Ft)), Ft.exports;
|
|
1842
|
-
}
|
|
1843
|
-
var An = On();
|
|
1844
|
-
const Cn = /* @__PURE__ */ Vt(An);
|
|
1845
|
-
var Yt = { exports: {} }, _n = Yt.exports, Ae;
|
|
1846
|
-
function Sn() {
|
|
1847
|
-
return Ae || (Ae = 1, function(t, e) {
|
|
1848
|
-
(function(r, n) {
|
|
1849
|
-
t.exports = n();
|
|
1850
|
-
})(_n, function() {
|
|
1851
|
-
var r = "minute", n = /[+-]\d\d(?::?\d\d)?/g, a = /([+-]|\d\d)/g;
|
|
1852
|
-
return function(i, f, s) {
|
|
1853
|
-
var o = f.prototype;
|
|
1854
|
-
s.utc = function(l) {
|
|
1855
|
-
var c = { date: l, utc: !0, args: arguments };
|
|
1856
|
-
return new f(c);
|
|
1857
|
-
}, o.utc = function(l) {
|
|
1858
|
-
var c = s(this.toDate(), { locale: this.$L, utc: !0 });
|
|
1859
|
-
return l ? c.add(this.utcOffset(), r) : c;
|
|
1860
|
-
}, o.local = function() {
|
|
1861
|
-
return s(this.toDate(), { locale: this.$L, utc: !1 });
|
|
1862
|
-
};
|
|
1863
|
-
var h = o.parse;
|
|
1864
|
-
o.parse = function(l) {
|
|
1865
|
-
l.utc && (this.$u = !0), this.$utils().u(l.$offset) || (this.$offset = l.$offset), h.call(this, l);
|
|
1866
|
-
};
|
|
1867
|
-
var u = o.init;
|
|
1868
|
-
o.init = function() {
|
|
1869
|
-
if (this.$u) {
|
|
1870
|
-
var l = this.$d;
|
|
1871
|
-
this.$y = l.getUTCFullYear(), this.$M = l.getUTCMonth(), this.$D = l.getUTCDate(), this.$W = l.getUTCDay(), this.$H = l.getUTCHours(), this.$m = l.getUTCMinutes(), this.$s = l.getUTCSeconds(), this.$ms = l.getUTCMilliseconds();
|
|
1872
|
-
} else u.call(this);
|
|
1873
|
-
};
|
|
1874
|
-
var M = o.utcOffset;
|
|
1875
|
-
o.utcOffset = function(l, c) {
|
|
1876
|
-
var p = this.$utils().u;
|
|
1877
|
-
if (p(l)) return this.$u ? 0 : p(this.$offset) ? M.call(this) : this.$offset;
|
|
1878
|
-
if (typeof l == "string" && (l = function(x) {
|
|
1879
|
-
x === void 0 && (x = "");
|
|
1880
|
-
var O = x.match(n);
|
|
1881
|
-
if (!O) return null;
|
|
1882
|
-
var A = ("" + O[0]).match(a) || ["-", 0, 0], S = A[0], _ = 60 * +A[1] + +A[2];
|
|
1883
|
-
return _ === 0 ? 0 : S === "+" ? _ : -_;
|
|
1884
|
-
}(l), l === null)) return this;
|
|
1885
|
-
var v = Math.abs(l) <= 16 ? 60 * l : l, d = this;
|
|
1886
|
-
if (c) return d.$offset = v, d.$u = l === 0, d;
|
|
1887
|
-
if (l !== 0) {
|
|
1888
|
-
var m = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset();
|
|
1889
|
-
(d = this.local().add(v + m, r)).$offset = v, d.$x.$localOffset = m;
|
|
1890
|
-
} else d = this.utc();
|
|
1891
|
-
return d;
|
|
1892
|
-
};
|
|
1893
|
-
var y = o.format;
|
|
1894
|
-
o.format = function(l) {
|
|
1895
|
-
var c = l || (this.$u ? "YYYY-MM-DDTHH:mm:ss[Z]" : "");
|
|
1896
|
-
return y.call(this, c);
|
|
1897
|
-
}, o.valueOf = function() {
|
|
1898
|
-
var l = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset());
|
|
1899
|
-
return this.$d.valueOf() - 6e4 * l;
|
|
1900
|
-
}, o.isUTC = function() {
|
|
1901
|
-
return !!this.$u;
|
|
1902
|
-
}, o.toISOString = function() {
|
|
1903
|
-
return this.toDate().toISOString();
|
|
1904
|
-
}, o.toString = function() {
|
|
1905
|
-
return this.toDate().toUTCString();
|
|
1906
|
-
};
|
|
1907
|
-
var g = o.toDate;
|
|
1908
|
-
o.toDate = function(l) {
|
|
1909
|
-
return l === "s" && this.$offset ? s(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate() : g.call(this);
|
|
1910
|
-
};
|
|
1911
|
-
var w = o.diff;
|
|
1912
|
-
o.diff = function(l, c, p) {
|
|
1913
|
-
if (l && this.$u === l.$u) return w.call(this, l, c, p);
|
|
1914
|
-
var v = this.local(), d = s(l).local();
|
|
1915
|
-
return w.call(v, d, c, p);
|
|
1916
|
-
};
|
|
1917
|
-
};
|
|
1918
|
-
});
|
|
1919
|
-
}(Yt)), Yt.exports;
|
|
1920
|
-
}
|
|
1921
|
-
var $n = Sn();
|
|
1922
|
-
const Hn = /* @__PURE__ */ Vt($n);
|
|
1923
|
-
export {
|
|
1924
|
-
Rn as a,
|
|
1925
|
-
Cn as b,
|
|
1926
|
-
kn as c,
|
|
1927
|
-
Tn as d,
|
|
1928
|
-
b as t,
|
|
1929
|
-
Hn as u
|
|
1930
|
-
};
|
|
1931
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLVgzbVhKbDUxLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2N1bGVAMS4zLjAvbm9kZV9tb2R1bGVzL3NjdWxlL2Rpc3QvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Rpbnljb2xvcjJAMS42LjAvbm9kZV9tb2R1bGVzL3Rpbnljb2xvcjIvZXNtL3Rpbnljb2xvci5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXlqc0AxLjExLjEzL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xMy9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTMvbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi91dGMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTlVNQkVSX0NIQVJfUkUgPSAvXFxkLztcbmNvbnN0IFNUUl9TUExJVFRFUlMgPSBbXCItXCIsIFwiX1wiLCBcIi9cIiwgXCIuXCJdO1xuZnVuY3Rpb24gaXNVcHBlcmNhc2UoY2hhciA9IFwiXCIpIHtcbiAgaWYgKE5VTUJFUl9DSEFSX1JFLnRlc3QoY2hhcikpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiBjaGFyICE9PSBjaGFyLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiBzcGxpdEJ5Q2FzZShzdHIsIHNlcGFyYXRvcnMpIHtcbiAgY29uc3Qgc3BsaXR0ZXJzID0gc2VwYXJhdG9ycyA/PyBTVFJfU1BMSVRURVJTO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhcnRzO1xuICB9XG4gIGxldCBidWZmID0gXCJcIjtcbiAgbGV0IHByZXZpb3VzVXBwZXI7XG4gIGxldCBwcmV2aW91c1NwbGl0dGVyO1xuICBmb3IgKGNvbnN0IGNoYXIgb2Ygc3RyKSB7XG4gICAgY29uc3QgaXNTcGxpdHRlciA9IHNwbGl0dGVycy5pbmNsdWRlcyhjaGFyKTtcbiAgICBpZiAoaXNTcGxpdHRlciA9PT0gdHJ1ZSkge1xuICAgICAgcGFydHMucHVzaChidWZmKTtcbiAgICAgIGJ1ZmYgPSBcIlwiO1xuICAgICAgcHJldmlvdXNVcHBlciA9IHZvaWQgMDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc1VwcGVyID0gaXNVcHBlcmNhc2UoY2hhcik7XG4gICAgaWYgKHByZXZpb3VzU3BsaXR0ZXIgPT09IGZhbHNlKSB7XG4gICAgICBpZiAocHJldmlvdXNVcHBlciA9PT0gZmFsc2UgJiYgaXNVcHBlciA9PT0gdHJ1ZSkge1xuICAgICAgICBwYXJ0cy5wdXNoKGJ1ZmYpO1xuICAgICAgICBidWZmID0gY2hhcjtcbiAgICAgICAgcHJldmlvdXNVcHBlciA9IGlzVXBwZXI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZpb3VzVXBwZXIgPT09IHRydWUgJiYgaXNVcHBlciA9PT0gZmFsc2UgJiYgYnVmZi5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDaGFyID0gYnVmZi5hdCgtMSk7XG4gICAgICAgIHBhcnRzLnB1c2goYnVmZi5zbGljZSgwLCBNYXRoLm1heCgwLCBidWZmLmxlbmd0aCAtIDEpKSk7XG4gICAgICAgIGJ1ZmYgPSBsYXN0Q2hhciArIGNoYXI7XG4gICAgICAgIHByZXZpb3VzVXBwZXIgPSBpc1VwcGVyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmZiArPSBjaGFyO1xuICAgIHByZXZpb3VzVXBwZXIgPSBpc1VwcGVyO1xuICAgIHByZXZpb3VzU3BsaXR0ZXIgPSBpc1NwbGl0dGVyO1xuICB9XG4gIHBhcnRzLnB1c2goYnVmZik7XG4gIHJldHVybiBwYXJ0cztcbn1cbmZ1bmN0aW9uIHVwcGVyRmlyc3Qoc3RyKSB7XG4gIHJldHVybiBzdHIgPyBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSA6IFwiXCI7XG59XG5mdW5jdGlvbiBsb3dlckZpcnN0KHN0cikge1xuICByZXR1cm4gc3RyID8gc3RyWzBdLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkgOiBcIlwiO1xufVxuZnVuY3Rpb24gcGFzY2FsQ2FzZShzdHIsIG9wdHMpIHtcbiAgcmV0dXJuIHN0ciA/IChBcnJheS5pc0FycmF5KHN0cikgPyBzdHIgOiBzcGxpdEJ5Q2FzZShzdHIpKS5tYXAoKHApID0+IHVwcGVyRmlyc3Qob3B0cz8ubm9ybWFsaXplID8gcC50b0xvd2VyQ2FzZSgpIDogcCkpLmpvaW4oXCJcIikgOiBcIlwiO1xufVxuZnVuY3Rpb24gY2FtZWxDYXNlKHN0ciwgb3B0cykge1xuICByZXR1cm4gbG93ZXJGaXJzdChwYXNjYWxDYXNlKHN0ciB8fCBcIlwiLCBvcHRzKSk7XG59XG5mdW5jdGlvbiBrZWJhYkNhc2Uoc3RyLCBqb2luZXIpIHtcbiAgcmV0dXJuIHN0ciA/IChBcnJheS5pc0FycmF5KHN0cikgPyBzdHIgOiBzcGxpdEJ5Q2FzZShzdHIpKS5tYXAoKHApID0+IHAudG9Mb3dlckNhc2UoKSkuam9pbihqb2luZXIgPz8gXCItXCIpIDogXCJcIjtcbn1cbmZ1bmN0aW9uIHNuYWtlQ2FzZShzdHIpIHtcbiAgcmV0dXJuIGtlYmFiQ2FzZShzdHIgfHwgXCJcIiwgXCJfXCIpO1xufVxuZnVuY3Rpb24gZmxhdENhc2Uoc3RyKSB7XG4gIHJldHVybiBrZWJhYkNhc2Uoc3RyIHx8IFwiXCIsIFwiXCIpO1xufVxuZnVuY3Rpb24gdHJhaW5DYXNlKHN0ciwgb3B0cykge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ciA6IHNwbGl0QnlDYXNlKHN0cikpLmZpbHRlcihCb29sZWFuKS5tYXAoKHApID0+IHVwcGVyRmlyc3Qob3B0cz8ubm9ybWFsaXplID8gcC50b0xvd2VyQ2FzZSgpIDogcCkpLmpvaW4oXCItXCIpO1xufVxuY29uc3QgdGl0bGVDYXNlRXhjZXB0aW9ucyA9IC9eKGF8YW58YW5kfGFzfGF0fGJ1dHxieXxmb3J8aWZ8aW58aXN8bm9yfG9mfG9ufG9yfHRoZXx0b3x3aXRoKSQvaTtcbmZ1bmN0aW9uIHRpdGxlQ2FzZShzdHIsIG9wdHMpIHtcbiAgcmV0dXJuIChBcnJheS5pc0FycmF5KHN0cikgPyBzdHIgOiBzcGxpdEJ5Q2FzZShzdHIpKS5maWx0ZXIoQm9vbGVhbikubWFwKFxuICAgIChwKSA9PiB0aXRsZUNhc2VFeGNlcHRpb25zLnRlc3QocCkgPyBwLnRvTG93ZXJDYXNlKCkgOiB1cHBlckZpcnN0KG9wdHM/Lm5vcm1hbGl6ZSA/IHAudG9Mb3dlckNhc2UoKSA6IHApXG4gICkuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCB7IGNhbWVsQ2FzZSwgZmxhdENhc2UsIGlzVXBwZXJjYXNlLCBrZWJhYkNhc2UsIGxvd2VyRmlyc3QsIHBhc2NhbENhc2UsIHNuYWtlQ2FzZSwgc3BsaXRCeUNhc2UsIHRpdGxlQ2FzZSwgdHJhaW5DYXNlLCB1cHBlckZpcnN0IH07XG4iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiLy8gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQuIEl0J3MgdXNlZCB0byBwdWJsaXNoIEVTTSB0byBucG0uXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmdyaW5zL1RpbnlDb2xvclxuLy8gQnJpYW4gR3JpbnN0ZWFkLCBNSVQgTGljZW5zZVxuXG52YXIgdHJpbUxlZnQgPSAvXlxccysvO1xudmFyIHRyaW1SaWdodCA9IC9cXHMrJC87XG5mdW5jdGlvbiB0aW55Y29sb3IoY29sb3IsIG9wdHMpIHtcbiAgY29sb3IgPSBjb2xvciA/IGNvbG9yIDogXCJcIjtcbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgLy8gSWYgaW5wdXQgaXMgYWxyZWFkeSBhIHRpbnljb2xvciwgcmV0dXJuIGl0c2VsZlxuICBpZiAoY29sb3IgaW5zdGFuY2VvZiB0aW55Y29sb3IpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgLy8gSWYgd2UgYXJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBjYWxsIHVzaW5nIG5ldyBpbnN0ZWFkXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiB0aW55Y29sb3IpKSB7XG4gICAgcmV0dXJuIG5ldyB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xuICB9XG4gIHZhciByZ2IgPSBpbnB1dFRvUkdCKGNvbG9yKTtcbiAgdGhpcy5fb3JpZ2luYWxJbnB1dCA9IGNvbG9yLCB0aGlzLl9yID0gcmdiLnIsIHRoaXMuX2cgPSByZ2IuZywgdGhpcy5fYiA9IHJnYi5iLCB0aGlzLl9hID0gcmdiLmEsIHRoaXMuX3JvdW5kQSA9IE1hdGgucm91bmQoMTAwICogdGhpcy5fYSkgLyAxMDAsIHRoaXMuX2Zvcm1hdCA9IG9wdHMuZm9ybWF0IHx8IHJnYi5mb3JtYXQ7XG4gIHRoaXMuX2dyYWRpZW50VHlwZSA9IG9wdHMuZ3JhZGllbnRUeXBlO1xuXG4gIC8vIERvbid0IGxldCB0aGUgcmFuZ2Ugb2YgWzAsMjU1XSBjb21lIGJhY2sgaW4gWzAsMV0uXG4gIC8vIFBvdGVudGlhbGx5IGxvc2UgYSBsaXR0bGUgYml0IG9mIHByZWNpc2lvbiBoZXJlLCBidXQgd2lsbCBmaXggaXNzdWVzIHdoZXJlXG4gIC8vIC41IGdldHMgaW50ZXJwcmV0ZWQgYXMgaGFsZiBvZiB0aGUgdG90YWwsIGluc3RlYWQgb2YgaGFsZiBvZiAxXG4gIC8vIElmIGl0IHdhcyBzdXBwb3NlZCB0byBiZSAxMjgsIHRoaXMgd2FzIGFscmVhZHkgdGFrZW4gY2FyZSBvZiBieSBgaW5wdXRUb1JnYmBcbiAgaWYgKHRoaXMuX3IgPCAxKSB0aGlzLl9yID0gTWF0aC5yb3VuZCh0aGlzLl9yKTtcbiAgaWYgKHRoaXMuX2cgPCAxKSB0aGlzLl9nID0gTWF0aC5yb3VuZCh0aGlzLl9nKTtcbiAgaWYgKHRoaXMuX2IgPCAxKSB0aGlzLl9iID0gTWF0aC5yb3VuZCh0aGlzLl9iKTtcbiAgdGhpcy5fb2sgPSByZ2Iub2s7XG59XG50aW55Y29sb3IucHJvdG90eXBlID0ge1xuICBpc0Rhcms6IGZ1bmN0aW9uIGlzRGFyaygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCkgPCAxMjg7XG4gIH0sXG4gIGlzTGlnaHQ6IGZ1bmN0aW9uIGlzTGlnaHQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGFyaygpO1xuICB9LFxuICBpc1ZhbGlkOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLl9vaztcbiAgfSxcbiAgZ2V0T3JpZ2luYWxJbnB1dDogZnVuY3Rpb24gZ2V0T3JpZ2luYWxJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dDtcbiAgfSxcbiAgZ2V0Rm9ybWF0OiBmdW5jdGlvbiBnZXRGb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgfSxcbiAgZ2V0QWxwaGE6IGZ1bmN0aW9uIGdldEFscGhhKCkge1xuICAgIHJldHVybiB0aGlzLl9hO1xuICB9LFxuICBnZXRCcmlnaHRuZXNzOiBmdW5jdGlvbiBnZXRCcmlnaHRuZXNzKCkge1xuICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdFxuICAgIHZhciByZ2IgPSB0aGlzLnRvUmdiKCk7XG4gICAgcmV0dXJuIChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMDtcbiAgfSxcbiAgZ2V0THVtaW5hbmNlOiBmdW5jdGlvbiBnZXRMdW1pbmFuY2UoKSB7XG4gICAgLy9odHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgdmFyIHJnYiA9IHRoaXMudG9SZ2IoKTtcbiAgICB2YXIgUnNSR0IsIEdzUkdCLCBCc1JHQiwgUiwgRywgQjtcbiAgICBSc1JHQiA9IHJnYi5yIC8gMjU1O1xuICAgIEdzUkdCID0gcmdiLmcgLyAyNTU7XG4gICAgQnNSR0IgPSByZ2IuYiAvIDI1NTtcbiAgICBpZiAoUnNSR0IgPD0gMC4wMzkyOCkgUiA9IFJzUkdCIC8gMTIuOTI7ZWxzZSBSID0gTWF0aC5wb3coKFJzUkdCICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgaWYgKEdzUkdCIDw9IDAuMDM5MjgpIEcgPSBHc1JHQiAvIDEyLjkyO2Vsc2UgRyA9IE1hdGgucG93KChHc1JHQiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGlmIChCc1JHQiA8PSAwLjAzOTI4KSBCID0gQnNSR0IgLyAxMi45MjtlbHNlIEIgPSBNYXRoLnBvdygoQnNSR0IgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICByZXR1cm4gMC4yMTI2ICogUiArIDAuNzE1MiAqIEcgKyAwLjA3MjIgKiBCO1xuICB9LFxuICBzZXRBbHBoYTogZnVuY3Rpb24gc2V0QWxwaGEodmFsdWUpIHtcbiAgICB0aGlzLl9hID0gYm91bmRBbHBoYSh2YWx1ZSk7XG4gICAgdGhpcy5fcm91bmRBID0gTWF0aC5yb3VuZCgxMDAgKiB0aGlzLl9hKSAvIDEwMDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgdG9Ic3Y6IGZ1bmN0aW9uIHRvSHN2KCkge1xuICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICByZXR1cm4ge1xuICAgICAgaDogaHN2LmggKiAzNjAsXG4gICAgICBzOiBoc3YucyxcbiAgICAgIHY6IGhzdi52LFxuICAgICAgYTogdGhpcy5fYVxuICAgIH07XG4gIH0sXG4gIHRvSHN2U3RyaW5nOiBmdW5jdGlvbiB0b0hzdlN0cmluZygpIHtcbiAgICB2YXIgaHN2ID0gcmdiVG9Ic3YodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgdmFyIGggPSBNYXRoLnJvdW5kKGhzdi5oICogMzYwKSxcbiAgICAgIHMgPSBNYXRoLnJvdW5kKGhzdi5zICogMTAwKSxcbiAgICAgIHYgPSBNYXRoLnJvdW5kKGhzdi52ICogMTAwKTtcbiAgICByZXR1cm4gdGhpcy5fYSA9PSAxID8gXCJoc3YoXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyB2ICsgXCIlKVwiIDogXCJoc3ZhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgfSxcbiAgdG9Ic2w6IGZ1bmN0aW9uIHRvSHNsKCkge1xuICAgIHZhciBoc2wgPSByZ2JUb0hzbCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICByZXR1cm4ge1xuICAgICAgaDogaHNsLmggKiAzNjAsXG4gICAgICBzOiBoc2wucyxcbiAgICAgIGw6IGhzbC5sLFxuICAgICAgYTogdGhpcy5fYVxuICAgIH07XG4gIH0sXG4gIHRvSHNsU3RyaW5nOiBmdW5jdGlvbiB0b0hzbFN0cmluZygpIHtcbiAgICB2YXIgaHNsID0gcmdiVG9Ic2wodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgdmFyIGggPSBNYXRoLnJvdW5kKGhzbC5oICogMzYwKSxcbiAgICAgIHMgPSBNYXRoLnJvdW5kKGhzbC5zICogMTAwKSxcbiAgICAgIGwgPSBNYXRoLnJvdW5kKGhzbC5sICogMTAwKTtcbiAgICByZXR1cm4gdGhpcy5fYSA9PSAxID8gXCJoc2woXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlKVwiIDogXCJoc2xhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgbCArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgfSxcbiAgdG9IZXg6IGZ1bmN0aW9uIHRvSGV4KGFsbG93M0NoYXIpIHtcbiAgICByZXR1cm4gcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgYWxsb3czQ2hhcik7XG4gIH0sXG4gIHRvSGV4U3RyaW5nOiBmdW5jdGlvbiB0b0hleFN0cmluZyhhbGxvdzNDaGFyKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy50b0hleChhbGxvdzNDaGFyKTtcbiAgfSxcbiAgdG9IZXg4OiBmdW5jdGlvbiB0b0hleDgoYWxsb3c0Q2hhcikge1xuICAgIHJldHVybiByZ2JhVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdGhpcy5fYSwgYWxsb3c0Q2hhcik7XG4gIH0sXG4gIHRvSGV4OFN0cmluZzogZnVuY3Rpb24gdG9IZXg4U3RyaW5nKGFsbG93NENoYXIpIHtcbiAgICByZXR1cm4gXCIjXCIgKyB0aGlzLnRvSGV4OChhbGxvdzRDaGFyKTtcbiAgfSxcbiAgdG9SZ2I6IGZ1bmN0aW9uIHRvUmdiKCkge1xuICAgIHJldHVybiB7XG4gICAgICByOiBNYXRoLnJvdW5kKHRoaXMuX3IpLFxuICAgICAgZzogTWF0aC5yb3VuZCh0aGlzLl9nKSxcbiAgICAgIGI6IE1hdGgucm91bmQodGhpcy5fYiksXG4gICAgICBhOiB0aGlzLl9hXG4gICAgfTtcbiAgfSxcbiAgdG9SZ2JTdHJpbmc6IGZ1bmN0aW9uIHRvUmdiU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9hID09IDEgPyBcInJnYihcIiArIE1hdGgucm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBNYXRoLnJvdW5kKHRoaXMuX2cpICsgXCIsIFwiICsgTWF0aC5yb3VuZCh0aGlzLl9iKSArIFwiKVwiIDogXCJyZ2JhKFwiICsgTWF0aC5yb3VuZCh0aGlzLl9yKSArIFwiLCBcIiArIE1hdGgucm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBNYXRoLnJvdW5kKHRoaXMuX2IpICsgXCIsIFwiICsgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gIH0sXG4gIHRvUGVyY2VudGFnZVJnYjogZnVuY3Rpb24gdG9QZXJjZW50YWdlUmdiKCkge1xuICAgIHJldHVybiB7XG4gICAgICByOiBNYXRoLnJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiVcIixcbiAgICAgIGc6IE1hdGgucm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJVwiLFxuICAgICAgYjogTWF0aC5yb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlXCIsXG4gICAgICBhOiB0aGlzLl9hXG4gICAgfTtcbiAgfSxcbiAgdG9QZXJjZW50YWdlUmdiU3RyaW5nOiBmdW5jdGlvbiB0b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2EgPT0gMSA/IFwicmdiKFwiICsgTWF0aC5yb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIE1hdGgucm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBNYXRoLnJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiUpXCIgOiBcInJnYmEoXCIgKyBNYXRoLnJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgTWF0aC5yb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIE1hdGgucm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgfSxcbiAgdG9OYW1lOiBmdW5jdGlvbiB0b05hbWUoKSB7XG4gICAgaWYgKHRoaXMuX2EgPT09IDApIHtcbiAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgfVxuICAgIGlmICh0aGlzLl9hIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4TmFtZXNbcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdHJ1ZSldIHx8IGZhbHNlO1xuICB9LFxuICB0b0ZpbHRlcjogZnVuY3Rpb24gdG9GaWx0ZXIoc2Vjb25kQ29sb3IpIHtcbiAgICB2YXIgaGV4OFN0cmluZyA9IFwiI1wiICsgcmdiYVRvQXJnYkhleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0aGlzLl9hKTtcbiAgICB2YXIgc2Vjb25kSGV4OFN0cmluZyA9IGhleDhTdHJpbmc7XG4gICAgdmFyIGdyYWRpZW50VHlwZSA9IHRoaXMuX2dyYWRpZW50VHlwZSA/IFwiR3JhZGllbnRUeXBlID0gMSwgXCIgOiBcIlwiO1xuICAgIGlmIChzZWNvbmRDb2xvcikge1xuICAgICAgdmFyIHMgPSB0aW55Y29sb3Ioc2Vjb25kQ29sb3IpO1xuICAgICAgc2Vjb25kSGV4OFN0cmluZyA9IFwiI1wiICsgcmdiYVRvQXJnYkhleChzLl9yLCBzLl9nLCBzLl9iLCBzLl9hKTtcbiAgICB9XG4gICAgcmV0dXJuIFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiICsgZ3JhZGllbnRUeXBlICsgXCJzdGFydENvbG9yc3RyPVwiICsgaGV4OFN0cmluZyArIFwiLGVuZENvbG9yc3RyPVwiICsgc2Vjb25kSGV4OFN0cmluZyArIFwiKVwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoZm9ybWF0KSB7XG4gICAgdmFyIGZvcm1hdFNldCA9ICEhZm9ybWF0O1xuICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9mb3JtYXQ7XG4gICAgdmFyIGZvcm1hdHRlZFN0cmluZyA9IGZhbHNlO1xuICAgIHZhciBoYXNBbHBoYSA9IHRoaXMuX2EgPCAxICYmIHRoaXMuX2EgPj0gMDtcbiAgICB2YXIgbmVlZHNBbHBoYUZvcm1hdCA9ICFmb3JtYXRTZXQgJiYgaGFzQWxwaGEgJiYgKGZvcm1hdCA9PT0gXCJoZXhcIiB8fCBmb3JtYXQgPT09IFwiaGV4NlwiIHx8IGZvcm1hdCA9PT0gXCJoZXgzXCIgfHwgZm9ybWF0ID09PSBcImhleDRcIiB8fCBmb3JtYXQgPT09IFwiaGV4OFwiIHx8IGZvcm1hdCA9PT0gXCJuYW1lXCIpO1xuICAgIGlmIChuZWVkc0FscGhhRm9ybWF0KSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIFwidHJhbnNwYXJlbnRcIiwgYWxsIG90aGVyIG5vbi1hbHBoYSBmb3JtYXRzXG4gICAgICAvLyB3aWxsIHJldHVybiByZ2JhIHdoZW4gdGhlcmUgaXMgdHJhbnNwYXJlbmN5LlxuICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIgJiYgdGhpcy5fYSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b05hbWUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRvUmdiU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IFwicmdiXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJwcmdiXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IFwiaGV4XCIgfHwgZm9ybWF0ID09PSBcImhleDZcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSBcImhleDNcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZyh0cnVlKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg0XCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKHRydWUpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSBcImhleDhcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleDhTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9OYW1lKCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IFwiaHNsXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic2xTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJoc3ZcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hzdlN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVkU3RyaW5nIHx8IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgfSxcbiAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgIHJldHVybiB0aW55Y29sb3IodGhpcy50b1N0cmluZygpKTtcbiAgfSxcbiAgX2FwcGx5TW9kaWZpY2F0aW9uOiBmdW5jdGlvbiBfYXBwbHlNb2RpZmljYXRpb24oZm4sIGFyZ3MpIHtcbiAgICB2YXIgY29sb3IgPSBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgICB0aGlzLl9yID0gY29sb3IuX3I7XG4gICAgdGhpcy5fZyA9IGNvbG9yLl9nO1xuICAgIHRoaXMuX2IgPSBjb2xvci5fYjtcbiAgICB0aGlzLnNldEFscGhhKGNvbG9yLl9hKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbGlnaHRlbjogZnVuY3Rpb24gbGlnaHRlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2xpZ2h0ZW4sIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGJyaWdodGVuOiBmdW5jdGlvbiBicmlnaHRlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2JyaWdodGVuLCBhcmd1bWVudHMpO1xuICB9LFxuICBkYXJrZW46IGZ1bmN0aW9uIGRhcmtlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2RhcmtlbiwgYXJndW1lbnRzKTtcbiAgfSxcbiAgZGVzYXR1cmF0ZTogZnVuY3Rpb24gZGVzYXR1cmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2Rlc2F0dXJhdGUsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIHNhdHVyYXRlOiBmdW5jdGlvbiBzYXR1cmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX3NhdHVyYXRlLCBhcmd1bWVudHMpO1xuICB9LFxuICBncmV5c2NhbGU6IGZ1bmN0aW9uIGdyZXlzY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2dyZXlzY2FsZSwgYXJndW1lbnRzKTtcbiAgfSxcbiAgc3BpbjogZnVuY3Rpb24gc3BpbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX3NwaW4sIGFyZ3VtZW50cyk7XG4gIH0sXG4gIF9hcHBseUNvbWJpbmF0aW9uOiBmdW5jdGlvbiBfYXBwbHlDb21iaW5hdGlvbihmbiwgYXJncykge1xuICAgIHJldHVybiBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgfSxcbiAgYW5hbG9nb3VzOiBmdW5jdGlvbiBhbmFsb2dvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oX2FuYWxvZ291cywgYXJndW1lbnRzKTtcbiAgfSxcbiAgY29tcGxlbWVudDogZnVuY3Rpb24gY29tcGxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfY29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgbW9ub2Nocm9tYXRpYzogZnVuY3Rpb24gbW9ub2Nocm9tYXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfbW9ub2Nocm9tYXRpYywgYXJndW1lbnRzKTtcbiAgfSxcbiAgc3BsaXRjb21wbGVtZW50OiBmdW5jdGlvbiBzcGxpdGNvbXBsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oX3NwbGl0Y29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgLy8gRGlzYWJsZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2Jncmlucy9UaW55Q29sb3IvaXNzdWVzLzI1NFxuICAvLyBwb2x5YWQ6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihwb2x5YWQsIFtudW1iZXJdKTtcbiAgLy8gfSxcbiAgdHJpYWQ6IGZ1bmN0aW9uIHRyaWFkKCkge1xuICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHBvbHlhZCwgWzNdKTtcbiAgfSxcbiAgdGV0cmFkOiBmdW5jdGlvbiB0ZXRyYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24ocG9seWFkLCBbNF0pO1xuICB9XG59O1xuXG4vLyBJZiBpbnB1dCBpcyBhbiBvYmplY3QsIGZvcmNlIDEgaW50byBcIjEuMFwiIHRvIGhhbmRsZSByYXRpb3MgcHJvcGVybHlcbi8vIFN0cmluZyBpbnB1dCByZXF1aXJlcyBcIjEuMFwiIGFzIGlucHV0LCBzbyAxIHdpbGwgYmUgdHJlYXRlZCBhcyAxXG50aW55Y29sb3IuZnJvbVJhdGlvID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRzKSB7XG4gIGlmIChfdHlwZW9mKGNvbG9yKSA9PSBcIm9iamVjdFwiKSB7XG4gICAgdmFyIG5ld0NvbG9yID0ge307XG4gICAgZm9yICh2YXIgaSBpbiBjb2xvcikge1xuICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIGlmIChpID09PSBcImFcIikge1xuICAgICAgICAgIG5ld0NvbG9yW2ldID0gY29sb3JbaV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb2xvciA9IG5ld0NvbG9yO1xuICB9XG4gIHJldHVybiB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xufTtcblxuLy8gR2l2ZW4gYSBzdHJpbmcgb3Igb2JqZWN0LCBjb252ZXJ0IHRoYXQgaW5wdXQgdG8gUkdCXG4vLyBQb3NzaWJsZSBzdHJpbmcgaW5wdXRzOlxuLy9cbi8vICAgICBcInJlZFwiXG4vLyAgICAgXCIjZjAwXCIgb3IgXCJmMDBcIlxuLy8gICAgIFwiI2ZmMDAwMFwiIG9yIFwiZmYwMDAwXCJcbi8vICAgICBcIiNmZjAwMDAwMFwiIG9yIFwiZmYwMDAwMDBcIlxuLy8gICAgIFwicmdiIDI1NSAwIDBcIiBvciBcInJnYiAoMjU1LCAwLCAwKVwiXG4vLyAgICAgXCJyZ2IgMS4wIDAgMFwiIG9yIFwicmdiICgxLCAwLCAwKVwiXG4vLyAgICAgXCJyZ2JhICgyNTUsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDI1NSwgMCwgMCwgMVwiXG4vLyAgICAgXCJyZ2JhICgxLjAsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDEuMCwgMCwgMCwgMVwiXG4vLyAgICAgXCJoc2woMCwgMTAwJSwgNTAlKVwiIG9yIFwiaHNsIDAgMTAwJSA1MCVcIlxuLy8gICAgIFwiaHNsYSgwLCAxMDAlLCA1MCUsIDEpXCIgb3IgXCJoc2xhIDAgMTAwJSA1MCUsIDFcIlxuLy8gICAgIFwiaHN2KDAsIDEwMCUsIDEwMCUpXCIgb3IgXCJoc3YgMCAxMDAlIDEwMCVcIlxuLy9cbmZ1bmN0aW9uIGlucHV0VG9SR0IoY29sb3IpIHtcbiAgdmFyIHJnYiA9IHtcbiAgICByOiAwLFxuICAgIGc6IDAsXG4gICAgYjogMFxuICB9O1xuICB2YXIgYSA9IDE7XG4gIHZhciBzID0gbnVsbDtcbiAgdmFyIHYgPSBudWxsO1xuICB2YXIgbCA9IG51bGw7XG4gIHZhciBvayA9IGZhbHNlO1xuICB2YXIgZm9ybWF0ID0gZmFsc2U7XG4gIGlmICh0eXBlb2YgY29sb3IgPT0gXCJzdHJpbmdcIikge1xuICAgIGNvbG9yID0gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcik7XG4gIH1cbiAgaWYgKF90eXBlb2YoY29sb3IpID09IFwib2JqZWN0XCIpIHtcbiAgICBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IucikgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuZykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuYikpIHtcbiAgICAgIHJnYiA9IHJnYlRvUmdiKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgb2sgPSB0cnVlO1xuICAgICAgZm9ybWF0ID0gU3RyaW5nKGNvbG9yLnIpLnN1YnN0cigtMSkgPT09IFwiJVwiID8gXCJwcmdiXCIgOiBcInJnYlwiO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IudikpIHtcbiAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgdiA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iudik7XG4gICAgICByZ2IgPSBoc3ZUb1JnYihjb2xvci5oLCBzLCB2KTtcbiAgICAgIG9rID0gdHJ1ZTtcbiAgICAgIGZvcm1hdCA9IFwiaHN2XCI7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5oKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5zKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5sKSkge1xuICAgICAgcyA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iucyk7XG4gICAgICBsID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5sKTtcbiAgICAgIHJnYiA9IGhzbFRvUmdiKGNvbG9yLmgsIHMsIGwpO1xuICAgICAgb2sgPSB0cnVlO1xuICAgICAgZm9ybWF0ID0gXCJoc2xcIjtcbiAgICB9XG4gICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KFwiYVwiKSkge1xuICAgICAgYSA9IGNvbG9yLmE7XG4gICAgfVxuICB9XG4gIGEgPSBib3VuZEFscGhhKGEpO1xuICByZXR1cm4ge1xuICAgIG9rOiBvayxcbiAgICBmb3JtYXQ6IGNvbG9yLmZvcm1hdCB8fCBmb3JtYXQsXG4gICAgcjogTWF0aC5taW4oMjU1LCBNYXRoLm1heChyZ2IuciwgMCkpLFxuICAgIGc6IE1hdGgubWluKDI1NSwgTWF0aC5tYXgocmdiLmcsIDApKSxcbiAgICBiOiBNYXRoLm1pbigyNTUsIE1hdGgubWF4KHJnYi5iLCAwKSksXG4gICAgYTogYVxuICB9O1xufVxuXG4vLyBDb252ZXJzaW9uIEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gYHJnYlRvSHNsYCwgYHJnYlRvSHN2YCwgYGhzbFRvUmdiYCwgYGhzdlRvUmdiYCBtb2RpZmllZCBmcm9tOlxuLy8gPGh0dHA6Ly9tamlqYWNrc29uLmNvbS8yMDA4LzAyL3JnYi10by1oc2wtYW5kLXJnYi10by1oc3YtY29sb3ItbW9kZWwtY29udmVyc2lvbi1hbGdvcml0aG1zLWluLWphdmFzY3JpcHQ+XG5cbi8vIGByZ2JUb1JnYmBcbi8vIEhhbmRsZSBib3VuZHMgLyBwZXJjZW50YWdlIGNoZWNraW5nIHRvIGNvbmZvcm0gdG8gQ1NTIGNvbG9yIHNwZWNcbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLz5cbi8vICpBc3N1bWVzOiogciwgZywgYiBpbiBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gWzAsIDI1NV1cbmZ1bmN0aW9uIHJnYlRvUmdiKHIsIGcsIGIpIHtcbiAgcmV0dXJuIHtcbiAgICByOiBib3VuZDAxKHIsIDI1NSkgKiAyNTUsXG4gICAgZzogYm91bmQwMShnLCAyNTUpICogMjU1LFxuICAgIGI6IGJvdW5kMDEoYiwgMjU1KSAqIDI1NVxuICB9O1xufVxuXG4vLyBgcmdiVG9Ic2xgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNMLlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIGwgfSBpbiBbMCwxXVxuZnVuY3Rpb24gcmdiVG9Ic2wociwgZywgYikge1xuICByID0gYm91bmQwMShyLCAyNTUpO1xuICBnID0gYm91bmQwMShnLCAyNTUpO1xuICBiID0gYm91bmQwMShiLCAyNTUpO1xuICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gIHZhciBoLFxuICAgIHMsXG4gICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKG1heCA9PSBtaW4pIHtcbiAgICBoID0gcyA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgfSBlbHNlIHtcbiAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgc3dpdGNoIChtYXgpIHtcbiAgICAgIGNhc2UgcjpcbiAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZzpcbiAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGI6XG4gICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBoIC89IDY7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBoOiBoLFxuICAgIHM6IHMsXG4gICAgbDogbFxuICB9O1xufVxuXG4vLyBgaHNsVG9SZ2JgXG4vLyBDb252ZXJ0cyBhbiBIU0wgY29sb3IgdmFsdWUgdG8gUkdCLlxuLy8gKkFzc3VtZXM6KiBoIGlzIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDM2MF0gYW5kIHMgYW5kIGwgYXJlIGNvbnRhaW5lZCBbMCwgMV0gb3IgWzAsIDEwMF1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XVxuZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICB2YXIgciwgZywgYjtcbiAgaCA9IGJvdW5kMDEoaCwgMzYwKTtcbiAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgbCA9IGJvdW5kMDEobCwgMTAwKTtcbiAgZnVuY3Rpb24gaHVlMnJnYihwLCBxLCB0KSB7XG4gICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgIHJldHVybiBwO1xuICB9XG4gIGlmIChzID09PSAwKSB7XG4gICAgciA9IGcgPSBiID0gbDsgLy8gYWNocm9tYXRpY1xuICB9IGVsc2Uge1xuICAgIHZhciBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICB2YXIgcCA9IDIgKiBsIC0gcTtcbiAgICByID0gaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpO1xuICAgIGcgPSBodWUycmdiKHAsIHEsIGgpO1xuICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxIC8gMyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByOiByICogMjU1LFxuICAgIGc6IGcgKiAyNTUsXG4gICAgYjogYiAqIDI1NVxuICB9O1xufVxuXG4vLyBgcmdiVG9Ic3ZgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNWXG4vLyAqQXNzdW1lczoqIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyBoLCBzLCB2IH0gaW4gWzAsMV1cbmZ1bmN0aW9uIHJnYlRvSHN2KHIsIGcsIGIpIHtcbiAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgZyA9IGJvdW5kMDEoZywgMjU1KTtcbiAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcbiAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICB2YXIgaCxcbiAgICBzLFxuICAgIHYgPSBtYXg7XG4gIHZhciBkID0gbWF4IC0gbWluO1xuICBzID0gbWF4ID09PSAwID8gMCA6IGQgLyBtYXg7XG4gIGlmIChtYXggPT0gbWluKSB7XG4gICAgaCA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKG1heCkge1xuICAgICAgY2FzZSByOlxuICAgICAgICBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBnOlxuICAgICAgICBoID0gKGIgLSByKSAvIGQgKyAyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgYjpcbiAgICAgICAgaCA9IChyIC0gZykgLyBkICsgNDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGggLz0gNjtcbiAgfVxuICByZXR1cm4ge1xuICAgIGg6IGgsXG4gICAgczogcyxcbiAgICB2OiB2XG4gIH07XG59XG5cbi8vIGBoc3ZUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG5mdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG4gIGggPSBib3VuZDAxKGgsIDM2MCkgKiA2O1xuICBzID0gYm91bmQwMShzLCAxMDApO1xuICB2ID0gYm91bmQwMSh2LCAxMDApO1xuICB2YXIgaSA9IE1hdGguZmxvb3IoaCksXG4gICAgZiA9IGggLSBpLFxuICAgIHAgPSB2ICogKDEgLSBzKSxcbiAgICBxID0gdiAqICgxIC0gZiAqIHMpLFxuICAgIHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyksXG4gICAgbW9kID0gaSAlIDYsXG4gICAgciA9IFt2LCBxLCBwLCBwLCB0LCB2XVttb2RdLFxuICAgIGcgPSBbdCwgdiwgdiwgcSwgcCwgcF1bbW9kXSxcbiAgICBiID0gW3AsIHAsIHQsIHYsIHYsIHFdW21vZF07XG4gIHJldHVybiB7XG4gICAgcjogciAqIDI1NSxcbiAgICBnOiBnICogMjU1LFxuICAgIGI6IGIgKiAyNTVcbiAgfTtcbn1cblxuLy8gYHJnYlRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHRvIGhleFxuLy8gQXNzdW1lcyByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV1cbi8vIFJldHVybnMgYSAzIG9yIDYgY2hhcmFjdGVyIGhleFxuZnVuY3Rpb24gcmdiVG9IZXgociwgZywgYiwgYWxsb3czQ2hhcikge1xuICB2YXIgaGV4ID0gW3BhZDIoTWF0aC5yb3VuZChyKS50b1N0cmluZygxNikpLCBwYWQyKE1hdGgucm91bmQoZykudG9TdHJpbmcoMTYpKSwgcGFkMihNYXRoLnJvdW5kKGIpLnRvU3RyaW5nKDE2KSldO1xuXG4gIC8vIFJldHVybiBhIDMgY2hhcmFjdGVyIGhleCBpZiBwb3NzaWJsZVxuICBpZiAoYWxsb3czQ2hhciAmJiBoZXhbMF0uY2hhckF0KDApID09IGhleFswXS5jaGFyQXQoMSkgJiYgaGV4WzFdLmNoYXJBdCgwKSA9PSBoZXhbMV0uY2hhckF0KDEpICYmIGhleFsyXS5jaGFyQXQoMCkgPT0gaGV4WzJdLmNoYXJBdCgxKSkge1xuICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCk7XG4gIH1cbiAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgcmdiYVRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCQSBjb2xvciBwbHVzIGFscGhhIHRyYW5zcGFyZW5jeSB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kXG4vLyBhIGluIFswLCAxXS4gUmV0dXJucyBhIDQgb3IgOCBjaGFyYWN0ZXIgcmdiYSBoZXhcbmZ1bmN0aW9uIHJnYmFUb0hleChyLCBnLCBiLCBhLCBhbGxvdzRDaGFyKSB7XG4gIHZhciBoZXggPSBbcGFkMihNYXRoLnJvdW5kKHIpLnRvU3RyaW5nKDE2KSksIHBhZDIoTWF0aC5yb3VuZChnKS50b1N0cmluZygxNikpLCBwYWQyKE1hdGgucm91bmQoYikudG9TdHJpbmcoMTYpKSwgcGFkMihjb252ZXJ0RGVjaW1hbFRvSGV4KGEpKV07XG5cbiAgLy8gUmV0dXJuIGEgNCBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gIGlmIChhbGxvdzRDaGFyICYmIGhleFswXS5jaGFyQXQoMCkgPT0gaGV4WzBdLmNoYXJBdCgxKSAmJiBoZXhbMV0uY2hhckF0KDApID09IGhleFsxXS5jaGFyQXQoMSkgJiYgaGV4WzJdLmNoYXJBdCgwKSA9PSBoZXhbMl0uY2hhckF0KDEpICYmIGhleFszXS5jaGFyQXQoMCkgPT0gaGV4WzNdLmNoYXJBdCgxKSkge1xuICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCkgKyBoZXhbM10uY2hhckF0KDApO1xuICB9XG4gIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYHJnYmFUb0FyZ2JIZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHRvIGFuIEFSR0IgSGV4OCBzdHJpbmdcbi8vIFJhcmVseSB1c2VkLCBidXQgcmVxdWlyZWQgZm9yIFwidG9GaWx0ZXIoKVwiXG5mdW5jdGlvbiByZ2JhVG9BcmdiSGV4KHIsIGcsIGIsIGEpIHtcbiAgdmFyIGhleCA9IFtwYWQyKGNvbnZlcnREZWNpbWFsVG9IZXgoYSkpLCBwYWQyKE1hdGgucm91bmQocikudG9TdHJpbmcoMTYpKSwgcGFkMihNYXRoLnJvdW5kKGcpLnRvU3RyaW5nKDE2KSksIHBhZDIoTWF0aC5yb3VuZChiKS50b1N0cmluZygxNikpXTtcbiAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgZXF1YWxzYFxuLy8gQ2FuIGJlIGNhbGxlZCB3aXRoIGFueSB0aW55Y29sb3IgaW5wdXRcbnRpbnljb2xvci5lcXVhbHMgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgaWYgKCFjb2xvcjEgfHwgIWNvbG9yMikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2JTdHJpbmcoKSA9PSB0aW55Y29sb3IoY29sb3IyKS50b1JnYlN0cmluZygpO1xufTtcbnRpbnljb2xvci5yYW5kb20gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aW55Y29sb3IuZnJvbVJhdGlvKHtcbiAgICByOiBNYXRoLnJhbmRvbSgpLFxuICAgIGc6IE1hdGgucmFuZG9tKCksXG4gICAgYjogTWF0aC5yYW5kb20oKVxuICB9KTtcbn07XG5cbi8vIE1vZGlmaWNhdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBsZXNzLmpzIGZvciBzb21lIG9mIHRoZSBiYXNpY3MgaGVyZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGhlYWQvbGVzcy5qcy9ibG9iL21hc3Rlci9saWIvbGVzcy9mdW5jdGlvbnMuanM+XG5cbmZ1bmN0aW9uIF9kZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgYW1vdW50ID0gYW1vdW50ID09PSAwID8gMCA6IGFtb3VudCB8fCAxMDtcbiAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgaHNsLnMgLT0gYW1vdW50IC8gMTAwO1xuICBoc2wucyA9IGNsYW1wMDEoaHNsLnMpO1xuICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5mdW5jdGlvbiBfc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICBhbW91bnQgPSBhbW91bnQgPT09IDAgPyAwIDogYW1vdW50IHx8IDEwO1xuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICBoc2wucyArPSBhbW91bnQgLyAxMDA7XG4gIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cbmZ1bmN0aW9uIF9ncmV5c2NhbGUoY29sb3IpIHtcbiAgcmV0dXJuIHRpbnljb2xvcihjb2xvcikuZGVzYXR1cmF0ZSgxMDApO1xufVxuZnVuY3Rpb24gX2xpZ2h0ZW4oY29sb3IsIGFtb3VudCkge1xuICBhbW91bnQgPSBhbW91bnQgPT09IDAgPyAwIDogYW1vdW50IHx8IDEwO1xuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICBoc2wubCArPSBhbW91bnQgLyAxMDA7XG4gIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cbmZ1bmN0aW9uIF9icmlnaHRlbihjb2xvciwgYW1vdW50KSB7XG4gIGFtb3VudCA9IGFtb3VudCA9PT0gMCA/IDAgOiBhbW91bnQgfHwgMTA7XG4gIHZhciByZ2IgPSB0aW55Y29sb3IoY29sb3IpLnRvUmdiKCk7XG4gIHJnYi5yID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCByZ2IuciAtIE1hdGgucm91bmQoMjU1ICogLShhbW91bnQgLyAxMDApKSkpO1xuICByZ2IuZyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgcmdiLmcgLSBNYXRoLnJvdW5kKDI1NSAqIC0oYW1vdW50IC8gMTAwKSkpKTtcbiAgcmdiLmIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHJnYi5iIC0gTWF0aC5yb3VuZCgyNTUgKiAtKGFtb3VudCAvIDEwMCkpKSk7XG4gIHJldHVybiB0aW55Y29sb3IocmdiKTtcbn1cbmZ1bmN0aW9uIF9kYXJrZW4oY29sb3IsIGFtb3VudCkge1xuICBhbW91bnQgPSBhbW91bnQgPT09IDAgPyAwIDogYW1vdW50IHx8IDEwO1xuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICBoc2wubCAtPSBhbW91bnQgLyAxMDA7XG4gIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuLy8gU3BpbiB0YWtlcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGFtb3VudCB3aXRoaW4gWy0zNjAsIDM2MF0gaW5kaWNhdGluZyB0aGUgY2hhbmdlIG9mIGh1ZS5cbi8vIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSB3cmFwcGVkIGludG8gdGhpcyByYW5nZS5cbmZ1bmN0aW9uIF9zcGluKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgdmFyIGh1ZSA9IChoc2wuaCArIGFtb3VudCkgJSAzNjA7XG4gIGhzbC5oID0gaHVlIDwgMCA/IDM2MCArIGh1ZSA6IGh1ZTtcbiAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBDb21iaW5hdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhhbmtzIHRvIGpRdWVyeSB4Q29sb3IgZm9yIHNvbWUgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGVzZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9pbmZ1c2lvbi9qUXVlcnkteGNvbG9yL2Jsb2IvbWFzdGVyL2pxdWVyeS54Y29sb3IuanM+XG5cbmZ1bmN0aW9uIF9jb21wbGVtZW50KGNvbG9yKSB7XG4gIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gIGhzbC5oID0gKGhzbC5oICsgMTgwKSAlIDM2MDtcbiAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuZnVuY3Rpb24gcG9seWFkKGNvbG9yLCBudW1iZXIpIHtcbiAgaWYgKGlzTmFOKG51bWJlcikgfHwgbnVtYmVyIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCB0byBwb2x5YWQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgfVxuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICB2YXIgcmVzdWx0ID0gW3Rpbnljb2xvcihjb2xvcildO1xuICB2YXIgc3RlcCA9IDM2MCAvIG51bWJlcjtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBudW1iZXI7IGkrKykge1xuICAgIHJlc3VsdC5wdXNoKHRpbnljb2xvcih7XG4gICAgICBoOiAoaHNsLmggKyBpICogc3RlcCkgJSAzNjAsXG4gICAgICBzOiBoc2wucyxcbiAgICAgIGw6IGhzbC5sXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBfc3BsaXRjb21wbGVtZW50KGNvbG9yKSB7XG4gIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gIHZhciBoID0gaHNsLmg7XG4gIHJldHVybiBbdGlueWNvbG9yKGNvbG9yKSwgdGlueWNvbG9yKHtcbiAgICBoOiAoaCArIDcyKSAlIDM2MCxcbiAgICBzOiBoc2wucyxcbiAgICBsOiBoc2wubFxuICB9KSwgdGlueWNvbG9yKHtcbiAgICBoOiAoaCArIDIxNikgJSAzNjAsXG4gICAgczogaHNsLnMsXG4gICAgbDogaHNsLmxcbiAgfSldO1xufVxuZnVuY3Rpb24gX2FuYWxvZ291cyhjb2xvciwgcmVzdWx0cywgc2xpY2VzKSB7XG4gIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gIHNsaWNlcyA9IHNsaWNlcyB8fCAzMDtcbiAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgdmFyIHBhcnQgPSAzNjAgLyBzbGljZXM7XG4gIHZhciByZXQgPSBbdGlueWNvbG9yKGNvbG9yKV07XG4gIGZvciAoaHNsLmggPSAoaHNsLmggLSAocGFydCAqIHJlc3VsdHMgPj4gMSkgKyA3MjApICUgMzYwOyAtLXJlc3VsdHM7KSB7XG4gICAgaHNsLmggPSAoaHNsLmggKyBwYXJ0KSAlIDM2MDtcbiAgICByZXQucHVzaCh0aW55Y29sb3IoaHNsKSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIF9tb25vY2hyb21hdGljKGNvbG9yLCByZXN1bHRzKSB7XG4gIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gIHZhciBoc3YgPSB0aW55Y29sb3IoY29sb3IpLnRvSHN2KCk7XG4gIHZhciBoID0gaHN2LmgsXG4gICAgcyA9IGhzdi5zLFxuICAgIHYgPSBoc3YudjtcbiAgdmFyIHJldCA9IFtdO1xuICB2YXIgbW9kaWZpY2F0aW9uID0gMSAvIHJlc3VsdHM7XG4gIHdoaWxlIChyZXN1bHRzLS0pIHtcbiAgICByZXQucHVzaCh0aW55Y29sb3Ioe1xuICAgICAgaDogaCxcbiAgICAgIHM6IHMsXG4gICAgICB2OiB2XG4gICAgfSkpO1xuICAgIHYgPSAodiArIG1vZGlmaWNhdGlvbikgJSAxO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIFV0aWxpdHkgRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGlueWNvbG9yLm1peCA9IGZ1bmN0aW9uIChjb2xvcjEsIGNvbG9yMiwgYW1vdW50KSB7XG4gIGFtb3VudCA9IGFtb3VudCA9PT0gMCA/IDAgOiBhbW91bnQgfHwgNTA7XG4gIHZhciByZ2IxID0gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2IoKTtcbiAgdmFyIHJnYjIgPSB0aW55Y29sb3IoY29sb3IyKS50b1JnYigpO1xuICB2YXIgcCA9IGFtb3VudCAvIDEwMDtcbiAgdmFyIHJnYmEgPSB7XG4gICAgcjogKHJnYjIuciAtIHJnYjEucikgKiBwICsgcmdiMS5yLFxuICAgIGc6IChyZ2IyLmcgLSByZ2IxLmcpICogcCArIHJnYjEuZyxcbiAgICBiOiAocmdiMi5iIC0gcmdiMS5iKSAqIHAgKyByZ2IxLmIsXG4gICAgYTogKHJnYjIuYSAtIHJnYjEuYSkgKiBwICsgcmdiMS5hXG4gIH07XG4gIHJldHVybiB0aW55Y29sb3IocmdiYSk7XG59O1xuXG4vLyBSZWFkYWJpbGl0eSBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWYgKFdDQUcgVmVyc2lvbiAyKVxuXG4vLyBgY29udHJhc3RgXG4vLyBBbmFseXplIHRoZSAyIGNvbG9ycyBhbmQgcmV0dXJucyB0aGUgY29sb3IgY29udHJhc3QgZGVmaW5lZCBieSAoV0NBRyBWZXJzaW9uIDIpXG50aW55Y29sb3IucmVhZGFiaWxpdHkgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgdmFyIGMxID0gdGlueWNvbG9yKGNvbG9yMSk7XG4gIHZhciBjMiA9IHRpbnljb2xvcihjb2xvcjIpO1xuICByZXR1cm4gKE1hdGgubWF4KGMxLmdldEx1bWluYW5jZSgpLCBjMi5nZXRMdW1pbmFuY2UoKSkgKyAwLjA1KSAvIChNYXRoLm1pbihjMS5nZXRMdW1pbmFuY2UoKSwgYzIuZ2V0THVtaW5hbmNlKCkpICsgMC4wNSk7XG59O1xuXG4vLyBgaXNSZWFkYWJsZWBcbi8vIEVuc3VyZSB0aGF0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3IgY29tYmluYXRpb25zIG1lZXQgV0NBRzIgZ3VpZGVsaW5lcy5cbi8vIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBPYmplY3QuXG4vLyAgICAgIHRoZSAnbGV2ZWwnIHByb3BlcnR5IHN0YXRlcyAnQUEnIG9yICdBQUEnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnQUEnO1xuLy8gICAgICB0aGUgJ3NpemUnIHByb3BlcnR5IHN0YXRlcyAnbGFyZ2UnIG9yICdzbWFsbCcgLSBpZiBtaXNzaW5nIG9yIGludmFsaWQsIGl0IGRlZmF1bHRzIHRvICdzbWFsbCcuXG4vLyBJZiB0aGUgZW50aXJlIG9iamVjdCBpcyBhYnNlbnQsIGlzUmVhZGFibGUgZGVmYXVsdHMgdG8ge2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0uXG5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiKSA9PiBmYWxzZVxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiLHtsZXZlbDpcIkFBXCIsc2l6ZTpcImxhcmdlXCJ9KSA9PiBmYWxzZVxudGlueWNvbG9yLmlzUmVhZGFibGUgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIsIHdjYWcyKSB7XG4gIHZhciByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShjb2xvcjEsIGNvbG9yMik7XG4gIHZhciB3Y2FnMlBhcm1zLCBvdXQ7XG4gIG91dCA9IGZhbHNlO1xuICB3Y2FnMlBhcm1zID0gdmFsaWRhdGVXQ0FHMlBhcm1zKHdjYWcyKTtcbiAgc3dpdGNoICh3Y2FnMlBhcm1zLmxldmVsICsgd2NhZzJQYXJtcy5zaXplKSB7XG4gICAgY2FzZSBcIkFBc21hbGxcIjpcbiAgICBjYXNlIFwiQUFBbGFyZ2VcIjpcbiAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDQuNTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJBQWxhcmdlXCI6XG4gICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIkFBQXNtYWxsXCI6XG4gICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSA3O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8vIGBtb3N0UmVhZGFibGVgXG4vLyBHaXZlbiBhIGJhc2UgY29sb3IgYW5kIGEgbGlzdCBvZiBwb3NzaWJsZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmRcbi8vIGNvbG9ycyBmb3IgdGhhdCBiYXNlLCByZXR1cm5zIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yLlxuLy8gT3B0aW9uYWxseSByZXR1cm5zIEJsYWNrIG9yIFdoaXRlIGlmIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yIGlzIHVucmVhZGFibGUuXG4vLyAqRXhhbXBsZSpcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczpmYWxzZX0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiIzExMjI1NVwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjMTIzXCIsIFtcIiMxMjRcIiwgXCIjMTI1XCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZX0pLnRvSGV4U3RyaW5nKCk7ICAvLyBcIiNmZmZmZmZcIlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiNhODAxNWFcIiwgW1wiI2ZhZjNmM1wiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOnRydWUsbGV2ZWw6XCJBQUFcIixzaXplOlwibGFyZ2VcIn0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiI2ZhZjNmM1wiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJzbWFsbFwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmZmZmZmXCJcbnRpbnljb2xvci5tb3N0UmVhZGFibGUgPSBmdW5jdGlvbiAoYmFzZUNvbG9yLCBjb2xvckxpc3QsIGFyZ3MpIHtcbiAgdmFyIGJlc3RDb2xvciA9IG51bGw7XG4gIHZhciBiZXN0U2NvcmUgPSAwO1xuICB2YXIgcmVhZGFiaWxpdHk7XG4gIHZhciBpbmNsdWRlRmFsbGJhY2tDb2xvcnMsIGxldmVsLCBzaXplO1xuICBhcmdzID0gYXJncyB8fCB7fTtcbiAgaW5jbHVkZUZhbGxiYWNrQ29sb3JzID0gYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnM7XG4gIGxldmVsID0gYXJncy5sZXZlbDtcbiAgc2l6ZSA9IGFyZ3Muc2l6ZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvckxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShiYXNlQ29sb3IsIGNvbG9yTGlzdFtpXSk7XG4gICAgaWYgKHJlYWRhYmlsaXR5ID4gYmVzdFNjb3JlKSB7XG4gICAgICBiZXN0U2NvcmUgPSByZWFkYWJpbGl0eTtcbiAgICAgIGJlc3RDb2xvciA9IHRpbnljb2xvcihjb2xvckxpc3RbaV0pO1xuICAgIH1cbiAgfVxuICBpZiAodGlueWNvbG9yLmlzUmVhZGFibGUoYmFzZUNvbG9yLCBiZXN0Q29sb3IsIHtcbiAgICBsZXZlbDogbGV2ZWwsXG4gICAgc2l6ZTogc2l6ZVxuICB9KSB8fCAhaW5jbHVkZUZhbGxiYWNrQ29sb3JzKSB7XG4gICAgcmV0dXJuIGJlc3RDb2xvcjtcbiAgfSBlbHNlIHtcbiAgICBhcmdzLmluY2x1ZGVGYWxsYmFja0NvbG9ycyA9IGZhbHNlO1xuICAgIHJldHVybiB0aW55Y29sb3IubW9zdFJlYWRhYmxlKGJhc2VDb2xvciwgW1wiI2ZmZlwiLCBcIiMwMDBcIl0sIGFyZ3MpO1xuICB9XG59O1xuXG4vLyBCaWcgTGlzdCBvZiBDb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8jbmFtZWQtY29sb3JzPlxudmFyIG5hbWVzID0gdGlueWNvbG9yLm5hbWVzID0ge1xuICBhbGljZWJsdWU6IFwiZjBmOGZmXCIsXG4gIGFudGlxdWV3aGl0ZTogXCJmYWViZDdcIixcbiAgYXF1YTogXCIwZmZcIixcbiAgYXF1YW1hcmluZTogXCI3ZmZmZDRcIixcbiAgYXp1cmU6IFwiZjBmZmZmXCIsXG4gIGJlaWdlOiBcImY1ZjVkY1wiLFxuICBiaXNxdWU6IFwiZmZlNGM0XCIsXG4gIGJsYWNrOiBcIjAwMFwiLFxuICBibGFuY2hlZGFsbW9uZDogXCJmZmViY2RcIixcbiAgYmx1ZTogXCIwMGZcIixcbiAgYmx1ZXZpb2xldDogXCI4YTJiZTJcIixcbiAgYnJvd246IFwiYTUyYTJhXCIsXG4gIGJ1cmx5d29vZDogXCJkZWI4ODdcIixcbiAgYnVybnRzaWVubmE6IFwiZWE3ZTVkXCIsXG4gIGNhZGV0Ymx1ZTogXCI1ZjllYTBcIixcbiAgY2hhcnRyZXVzZTogXCI3ZmZmMDBcIixcbiAgY2hvY29sYXRlOiBcImQyNjkxZVwiLFxuICBjb3JhbDogXCJmZjdmNTBcIixcbiAgY29ybmZsb3dlcmJsdWU6IFwiNjQ5NWVkXCIsXG4gIGNvcm5zaWxrOiBcImZmZjhkY1wiLFxuICBjcmltc29uOiBcImRjMTQzY1wiLFxuICBjeWFuOiBcIjBmZlwiLFxuICBkYXJrYmx1ZTogXCIwMDAwOGJcIixcbiAgZGFya2N5YW46IFwiMDA4YjhiXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiYjg4NjBiXCIsXG4gIGRhcmtncmF5OiBcImE5YTlhOVwiLFxuICBkYXJrZ3JlZW46IFwiMDA2NDAwXCIsXG4gIGRhcmtncmV5OiBcImE5YTlhOVwiLFxuICBkYXJra2hha2k6IFwiYmRiNzZiXCIsXG4gIGRhcmttYWdlbnRhOiBcIjhiMDA4YlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCI1NTZiMmZcIixcbiAgZGFya29yYW5nZTogXCJmZjhjMDBcIixcbiAgZGFya29yY2hpZDogXCI5OTMyY2NcIixcbiAgZGFya3JlZDogXCI4YjAwMDBcIixcbiAgZGFya3NhbG1vbjogXCJlOTk2N2FcIixcbiAgZGFya3NlYWdyZWVuOiBcIjhmYmM4ZlwiLFxuICBkYXJrc2xhdGVibHVlOiBcIjQ4M2Q4YlwiLFxuICBkYXJrc2xhdGVncmF5OiBcIjJmNGY0ZlwiLFxuICBkYXJrc2xhdGVncmV5OiBcIjJmNGY0ZlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIjAwY2VkMVwiLFxuICBkYXJrdmlvbGV0OiBcIjk0MDBkM1wiLFxuICBkZWVwcGluazogXCJmZjE0OTNcIixcbiAgZGVlcHNreWJsdWU6IFwiMDBiZmZmXCIsXG4gIGRpbWdyYXk6IFwiNjk2OTY5XCIsXG4gIGRpbWdyZXk6IFwiNjk2OTY5XCIsXG4gIGRvZGdlcmJsdWU6IFwiMWU5MGZmXCIsXG4gIGZpcmVicmljazogXCJiMjIyMjJcIixcbiAgZmxvcmFsd2hpdGU6IFwiZmZmYWYwXCIsXG4gIGZvcmVzdGdyZWVuOiBcIjIyOGIyMlwiLFxuICBmdWNoc2lhOiBcImYwZlwiLFxuICBnYWluc2Jvcm86IFwiZGNkY2RjXCIsXG4gIGdob3N0d2hpdGU6IFwiZjhmOGZmXCIsXG4gIGdvbGQ6IFwiZmZkNzAwXCIsXG4gIGdvbGRlbnJvZDogXCJkYWE1MjBcIixcbiAgZ3JheTogXCI4MDgwODBcIixcbiAgZ3JlZW46IFwiMDA4MDAwXCIsXG4gIGdyZWVueWVsbG93OiBcImFkZmYyZlwiLFxuICBncmV5OiBcIjgwODA4MFwiLFxuICBob25leWRldzogXCJmMGZmZjBcIixcbiAgaG90cGluazogXCJmZjY5YjRcIixcbiAgaW5kaWFucmVkOiBcImNkNWM1Y1wiLFxuICBpbmRpZ286IFwiNGIwMDgyXCIsXG4gIGl2b3J5OiBcImZmZmZmMFwiLFxuICBraGFraTogXCJmMGU2OGNcIixcbiAgbGF2ZW5kZXI6IFwiZTZlNmZhXCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiZmZmMGY1XCIsXG4gIGxhd25ncmVlbjogXCI3Y2ZjMDBcIixcbiAgbGVtb25jaGlmZm9uOiBcImZmZmFjZFwiLFxuICBsaWdodGJsdWU6IFwiYWRkOGU2XCIsXG4gIGxpZ2h0Y29yYWw6IFwiZjA4MDgwXCIsXG4gIGxpZ2h0Y3lhbjogXCJlMGZmZmZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiZmFmYWQyXCIsXG4gIGxpZ2h0Z3JheTogXCJkM2QzZDNcIixcbiAgbGlnaHRncmVlbjogXCI5MGVlOTBcIixcbiAgbGlnaHRncmV5OiBcImQzZDNkM1wiLFxuICBsaWdodHBpbms6IFwiZmZiNmMxXCIsXG4gIGxpZ2h0c2FsbW9uOiBcImZmYTA3YVwiLFxuICBsaWdodHNlYWdyZWVuOiBcIjIwYjJhYVwiLFxuICBsaWdodHNreWJsdWU6IFwiODdjZWZhXCIsXG4gIGxpZ2h0c2xhdGVncmF5OiBcIjc4OVwiLFxuICBsaWdodHNsYXRlZ3JleTogXCI3ODlcIixcbiAgbGlnaHRzdGVlbGJsdWU6IFwiYjBjNGRlXCIsXG4gIGxpZ2h0eWVsbG93OiBcImZmZmZlMFwiLFxuICBsaW1lOiBcIjBmMFwiLFxuICBsaW1lZ3JlZW46IFwiMzJjZDMyXCIsXG4gIGxpbmVuOiBcImZhZjBlNlwiLFxuICBtYWdlbnRhOiBcImYwZlwiLFxuICBtYXJvb246IFwiODAwMDAwXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiNjZjZGFhXCIsXG4gIG1lZGl1bWJsdWU6IFwiMDAwMGNkXCIsXG4gIG1lZGl1bW9yY2hpZDogXCJiYTU1ZDNcIixcbiAgbWVkaXVtcHVycGxlOiBcIjkzNzBkYlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIzY2IzNzFcIixcbiAgbWVkaXVtc2xhdGVibHVlOiBcIjdiNjhlZVwiLFxuICBtZWRpdW1zcHJpbmdncmVlbjogXCIwMGZhOWFcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIjQ4ZDFjY1wiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiYzcxNTg1XCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIxOTE5NzBcIixcbiAgbWludGNyZWFtOiBcImY1ZmZmYVwiLFxuICBtaXN0eXJvc2U6IFwiZmZlNGUxXCIsXG4gIG1vY2Nhc2luOiBcImZmZTRiNVwiLFxuICBuYXZham93aGl0ZTogXCJmZmRlYWRcIixcbiAgbmF2eTogXCIwMDAwODBcIixcbiAgb2xkbGFjZTogXCJmZGY1ZTZcIixcbiAgb2xpdmU6IFwiODA4MDAwXCIsXG4gIG9saXZlZHJhYjogXCI2YjhlMjNcIixcbiAgb3JhbmdlOiBcImZmYTUwMFwiLFxuICBvcmFuZ2VyZWQ6IFwiZmY0NTAwXCIsXG4gIG9yY2hpZDogXCJkYTcwZDZcIixcbiAgcGFsZWdvbGRlbnJvZDogXCJlZWU4YWFcIixcbiAgcGFsZWdyZWVuOiBcIjk4ZmI5OFwiLFxuICBwYWxldHVycXVvaXNlOiBcImFmZWVlZVwiLFxuICBwYWxldmlvbGV0cmVkOiBcImRiNzA5M1wiLFxuICBwYXBheWF3aGlwOiBcImZmZWZkNVwiLFxuICBwZWFjaHB1ZmY6IFwiZmZkYWI5XCIsXG4gIHBlcnU6IFwiY2Q4NTNmXCIsXG4gIHBpbms6IFwiZmZjMGNiXCIsXG4gIHBsdW06IFwiZGRhMGRkXCIsXG4gIHBvd2RlcmJsdWU6IFwiYjBlMGU2XCIsXG4gIHB1cnBsZTogXCI4MDAwODBcIixcbiAgcmViZWNjYXB1cnBsZTogXCI2NjMzOTlcIixcbiAgcmVkOiBcImYwMFwiLFxuICByb3N5YnJvd246IFwiYmM4ZjhmXCIsXG4gIHJveWFsYmx1ZTogXCI0MTY5ZTFcIixcbiAgc2FkZGxlYnJvd246IFwiOGI0NTEzXCIsXG4gIHNhbG1vbjogXCJmYTgwNzJcIixcbiAgc2FuZHlicm93bjogXCJmNGE0NjBcIixcbiAgc2VhZ3JlZW46IFwiMmU4YjU3XCIsXG4gIHNlYXNoZWxsOiBcImZmZjVlZVwiLFxuICBzaWVubmE6IFwiYTA1MjJkXCIsXG4gIHNpbHZlcjogXCJjMGMwYzBcIixcbiAgc2t5Ymx1ZTogXCI4N2NlZWJcIixcbiAgc2xhdGVibHVlOiBcIjZhNWFjZFwiLFxuICBzbGF0ZWdyYXk6IFwiNzA4MDkwXCIsXG4gIHNsYXRlZ3JleTogXCI3MDgwOTBcIixcbiAgc25vdzogXCJmZmZhZmFcIixcbiAgc3ByaW5nZ3JlZW46IFwiMDBmZjdmXCIsXG4gIHN0ZWVsYmx1ZTogXCI0NjgyYjRcIixcbiAgdGFuOiBcImQyYjQ4Y1wiLFxuICB0ZWFsOiBcIjAwODA4MFwiLFxuICB0aGlzdGxlOiBcImQ4YmZkOFwiLFxuICB0b21hdG86IFwiZmY2MzQ3XCIsXG4gIHR1cnF1b2lzZTogXCI0MGUwZDBcIixcbiAgdmlvbGV0OiBcImVlODJlZVwiLFxuICB3aGVhdDogXCJmNWRlYjNcIixcbiAgd2hpdGU6IFwiZmZmXCIsXG4gIHdoaXRlc21va2U6IFwiZjVmNWY1XCIsXG4gIHllbGxvdzogXCJmZjBcIixcbiAgeWVsbG93Z3JlZW46IFwiOWFjZDMyXCJcbn07XG5cbi8vIE1ha2UgaXQgZWFzeSB0byBhY2Nlc3MgY29sb3JzIHZpYSBgaGV4TmFtZXNbaGV4XWBcbnZhciBoZXhOYW1lcyA9IHRpbnljb2xvci5oZXhOYW1lcyA9IGZsaXAobmFtZXMpO1xuXG4vLyBVdGlsaXRpZXNcbi8vIC0tLS0tLS0tLVxuXG4vLyBgeyAnbmFtZTEnOiAndmFsMScgfWAgYmVjb21lcyBgeyAndmFsMSc6ICduYW1lMScgfWBcbmZ1bmN0aW9uIGZsaXAobykge1xuICB2YXIgZmxpcHBlZCA9IHt9O1xuICBmb3IgKHZhciBpIGluIG8pIHtcbiAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgZmxpcHBlZFtvW2ldXSA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmbGlwcGVkO1xufVxuXG4vLyBSZXR1cm4gYSB2YWxpZCBhbHBoYSB2YWx1ZSBbMCwxXSB3aXRoIGFsbCBpbnZhbGlkIHZhbHVlcyBiZWluZyBzZXQgdG8gMVxuZnVuY3Rpb24gYm91bmRBbHBoYShhKSB7XG4gIGEgPSBwYXJzZUZsb2F0KGEpO1xuICBpZiAoaXNOYU4oYSkgfHwgYSA8IDAgfHwgYSA+IDEpIHtcbiAgICBhID0gMTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy8gVGFrZSBpbnB1dCBmcm9tIFswLCBuXSBhbmQgcmV0dXJuIGl0IGFzIFswLCAxXVxuZnVuY3Rpb24gYm91bmQwMShuLCBtYXgpIHtcbiAgaWYgKGlzT25lUG9pbnRaZXJvKG4pKSBuID0gXCIxMDAlXCI7XG4gIHZhciBwcm9jZXNzUGVyY2VudCA9IGlzUGVyY2VudGFnZShuKTtcbiAgbiA9IE1hdGgubWluKG1heCwgTWF0aC5tYXgoMCwgcGFyc2VGbG9hdChuKSkpO1xuXG4gIC8vIEF1dG9tYXRpY2FsbHkgY29udmVydCBwZXJjZW50YWdlIGludG8gbnVtYmVyXG4gIGlmIChwcm9jZXNzUGVyY2VudCkge1xuICAgIG4gPSBwYXJzZUludChuICogbWF4LCAxMCkgLyAxMDA7XG4gIH1cblxuICAvLyBIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzXG4gIGlmIChNYXRoLmFicyhuIC0gbWF4KSA8IDAuMDAwMDAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBDb252ZXJ0IGludG8gWzAsIDFdIHJhbmdlIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgcmV0dXJuIG4gJSBtYXggLyBwYXJzZUZsb2F0KG1heCk7XG59XG5cbi8vIEZvcmNlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMVxuZnVuY3Rpb24gY2xhbXAwMSh2YWwpIHtcbiAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbCkpO1xufVxuXG4vLyBQYXJzZSBhIGJhc2UtMTYgaGV4IHZhbHVlIGludG8gYSBiYXNlLTEwIGludGVnZXJcbmZ1bmN0aW9uIHBhcnNlSW50RnJvbUhleCh2YWwpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHZhbCwgMTYpO1xufVxuXG4vLyBOZWVkIHRvIGhhbmRsZSAxLjAgYXMgMTAwJSwgc2luY2Ugb25jZSBpdCBpcyBhIG51bWJlciwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGl0IGFuZCAxXG4vLyA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NDIyMDcyL2phdmFzY3JpcHQtaG93LXRvLWRldGVjdC1udW1iZXItYXMtYS1kZWNpbWFsLWluY2x1ZGluZy0xLTA+XG5mdW5jdGlvbiBpc09uZVBvaW50WmVybyhuKSB7XG4gIHJldHVybiB0eXBlb2YgbiA9PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZihcIi5cIikgIT0gLTEgJiYgcGFyc2VGbG9hdChuKSA9PT0gMTtcbn1cblxuLy8gQ2hlY2sgdG8gc2VlIGlmIHN0cmluZyBwYXNzZWQgaW4gaXMgYSBwZXJjZW50YWdlXG5mdW5jdGlvbiBpc1BlcmNlbnRhZ2Uobikge1xuICByZXR1cm4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgbi5pbmRleE9mKFwiJVwiKSAhPSAtMTtcbn1cblxuLy8gRm9yY2UgYSBoZXggdmFsdWUgdG8gaGF2ZSAyIGNoYXJhY3RlcnNcbmZ1bmN0aW9uIHBhZDIoYykge1xuICByZXR1cm4gYy5sZW5ndGggPT0gMSA/IFwiMFwiICsgYyA6IFwiXCIgKyBjO1xufVxuXG4vLyBSZXBsYWNlIGEgZGVjaW1hbCB3aXRoIGl0J3MgcGVyY2VudGFnZSB2YWx1ZVxuZnVuY3Rpb24gY29udmVydFRvUGVyY2VudGFnZShuKSB7XG4gIGlmIChuIDw9IDEpIHtcbiAgICBuID0gbiAqIDEwMCArIFwiJVwiO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBDb252ZXJ0cyBhIGRlY2ltYWwgdG8gYSBoZXggdmFsdWVcbmZ1bmN0aW9uIGNvbnZlcnREZWNpbWFsVG9IZXgoZCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGQpICogMjU1KS50b1N0cmluZygxNik7XG59XG4vLyBDb252ZXJ0cyBhIGhleCB2YWx1ZSB0byBhIGRlY2ltYWxcbmZ1bmN0aW9uIGNvbnZlcnRIZXhUb0RlY2ltYWwoaCkge1xuICByZXR1cm4gcGFyc2VJbnRGcm9tSGV4KGgpIC8gMjU1O1xufVxudmFyIG1hdGNoZXJzID0gZnVuY3Rpb24gKCkge1xuICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI2ludGVnZXJzPlxuICB2YXIgQ1NTX0lOVEVHRVIgPSBcIlstXFxcXCtdP1xcXFxkKyU/XCI7XG5cbiAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNudW1iZXItdmFsdWU+XG4gIHZhciBDU1NfTlVNQkVSID0gXCJbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/XCI7XG5cbiAgLy8gQWxsb3cgcG9zaXRpdmUvbmVnYXRpdmUgaW50ZWdlci9udW1iZXIuICBEb24ndCBjYXB0dXJlIHRoZSBlaXRoZXIvb3IsIGp1c3QgdGhlIGVudGlyZSBvdXRjb21lLlxuICB2YXIgQ1NTX1VOSVQgPSBcIig/OlwiICsgQ1NTX05VTUJFUiArIFwiKXwoPzpcIiArIENTU19JTlRFR0VSICsgXCIpXCI7XG5cbiAgLy8gQWN0dWFsIG1hdGNoaW5nLlxuICAvLyBQYXJlbnRoZXNlcyBhbmQgY29tbWFzIGFyZSBvcHRpb25hbCwgYnV0IG5vdCByZXF1aXJlZC5cbiAgLy8gV2hpdGVzcGFjZSBjYW4gdGFrZSB0aGUgcGxhY2Ugb2YgY29tbWFzIG9yIG9wZW5pbmcgcGFyZW5cbiAgdmFyIFBFUk1JU1NJVkVfTUFUQ0gzID0gXCJbXFxcXHN8XFxcXChdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpXFxcXHMqXFxcXCk/XCI7XG4gIHZhciBQRVJNSVNTSVZFX01BVENINCA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuICByZXR1cm4ge1xuICAgIENTU19VTklUOiBuZXcgUmVnRXhwKENTU19VTklUKSxcbiAgICByZ2I6IG5ldyBSZWdFeHAoXCJyZ2JcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICByZ2JhOiBuZXcgUmVnRXhwKFwicmdiYVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgIGhzbDogbmV3IFJlZ0V4cChcImhzbFwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgIGhzbGE6IG5ldyBSZWdFeHAoXCJoc2xhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgaHN2OiBuZXcgUmVnRXhwKFwiaHN2XCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgaHN2YTogbmV3IFJlZ0V4cChcImhzdmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICBoZXgzOiAvXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgaGV4NjogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLFxuICAgIGhleDQ6IC9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgaGV4ODogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL1xuICB9O1xufSgpO1xuXG4vLyBgaXNWYWxpZENTU1VuaXRgXG4vLyBUYWtlIGluIGEgc2luZ2xlIHN0cmluZyAvIG51bWJlciBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IGxvb2tzIGxpa2UgYSBDU1MgdW5pdFxuLy8gKHNlZSBgbWF0Y2hlcnNgIGFib3ZlIGZvciBkZWZpbml0aW9uKS5cbmZ1bmN0aW9uIGlzVmFsaWRDU1NVbml0KGNvbG9yKSB7XG4gIHJldHVybiAhIW1hdGNoZXJzLkNTU19VTklULmV4ZWMoY29sb3IpO1xufVxuXG4vLyBgc3RyaW5nSW5wdXRUb09iamVjdGBcbi8vIFBlcm1pc3NpdmUgc3RyaW5nIHBhcnNpbmcuICBUYWtlIGluIGEgbnVtYmVyIG9mIGZvcm1hdHMsIGFuZCBvdXRwdXQgYW4gb2JqZWN0XG4vLyBiYXNlZCBvbiBkZXRlY3RlZCBmb3JtYXQuICBSZXR1cm5zIGB7IHIsIGcsIGIgfWAgb3IgYHsgaCwgcywgbCB9YCBvciBgeyBoLCBzLCB2fWBcbmZ1bmN0aW9uIHN0cmluZ0lucHV0VG9PYmplY3QoY29sb3IpIHtcbiAgY29sb3IgPSBjb2xvci5yZXBsYWNlKHRyaW1MZWZ0LCBcIlwiKS5yZXBsYWNlKHRyaW1SaWdodCwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG5hbWVkID0gZmFsc2U7XG4gIGlmIChuYW1lc1tjb2xvcl0pIHtcbiAgICBjb2xvciA9IG5hbWVzW2NvbG9yXTtcbiAgICBuYW1lZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY29sb3IgPT0gXCJ0cmFuc3BhcmVudFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IDAsXG4gICAgICBnOiAwLFxuICAgICAgYjogMCxcbiAgICAgIGE6IDAsXG4gICAgICBmb3JtYXQ6IFwibmFtZVwiXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRyeSB0byBtYXRjaCBzdHJpbmcgaW5wdXQgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucy5cbiAgLy8gS2VlcCBtb3N0IG9mIHRoZSBudW1iZXIgYm91bmRpbmcgb3V0IG9mIHRoaXMgZnVuY3Rpb24gLSBkb24ndCB3b3JyeSBhYm91dCBbMCwxXSBvciBbMCwxMDBdIG9yIFswLDM2MF1cbiAgLy8gSnVzdCByZXR1cm4gYW4gb2JqZWN0IGFuZCBsZXQgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGhhbmRsZSB0aGF0LlxuICAvLyBUaGlzIHdheSB0aGUgcmVzdWx0IHdpbGwgYmUgdGhlIHNhbWUgd2hldGhlciB0aGUgdGlueWNvbG9yIGlzIGluaXRpYWxpemVkIHdpdGggc3RyaW5nIG9yIG9iamVjdC5cbiAgdmFyIG1hdGNoO1xuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5yZ2IuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcjogbWF0Y2hbMV0sXG4gICAgICBnOiBtYXRjaFsyXSxcbiAgICAgIGI6IG1hdGNoWzNdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5yZ2JhLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IG1hdGNoWzFdLFxuICAgICAgZzogbWF0Y2hbMl0sXG4gICAgICBiOiBtYXRjaFszXSxcbiAgICAgIGE6IG1hdGNoWzRdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc2wuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaDogbWF0Y2hbMV0sXG4gICAgICBzOiBtYXRjaFsyXSxcbiAgICAgIGw6IG1hdGNoWzNdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc2xhLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGg6IG1hdGNoWzFdLFxuICAgICAgczogbWF0Y2hbMl0sXG4gICAgICBsOiBtYXRjaFszXSxcbiAgICAgIGE6IG1hdGNoWzRdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc3YuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaDogbWF0Y2hbMV0sXG4gICAgICBzOiBtYXRjaFsyXSxcbiAgICAgIHY6IG1hdGNoWzNdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc3ZhLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGg6IG1hdGNoWzFdLFxuICAgICAgczogbWF0Y2hbMl0sXG4gICAgICB2OiBtYXRjaFszXSxcbiAgICAgIGE6IG1hdGNoWzRdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oZXg4LmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgIGE6IGNvbnZlcnRIZXhUb0RlY2ltYWwobWF0Y2hbNF0pLFxuICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXg4XCJcbiAgICB9O1xuICB9XG4gIGlmIChtYXRjaCA9IG1hdGNoZXJzLmhleDYuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdKSxcbiAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSksXG4gICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10pLFxuICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXhcIlxuICAgIH07XG4gIH1cbiAgaWYgKG1hdGNoID0gbWF0Y2hlcnMuaGV4NC5leGVjKGNvbG9yKSkge1xuICAgIHJldHVybiB7XG4gICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyBcIlwiICsgbWF0Y2hbMV0pLFxuICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdICsgXCJcIiArIG1hdGNoWzJdKSxcbiAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSArIFwiXCIgKyBtYXRjaFszXSksXG4gICAgICBhOiBjb252ZXJ0SGV4VG9EZWNpbWFsKG1hdGNoWzRdICsgXCJcIiArIG1hdGNoWzRdKSxcbiAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4OFwiXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oZXgzLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSArIFwiXCIgKyBtYXRjaFsxXSksXG4gICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0gKyBcIlwiICsgbWF0Y2hbMl0pLFxuICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgXCJcIiArIG1hdGNoWzNdKSxcbiAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICB9O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlV0NBRzJQYXJtcyhwYXJtcykge1xuICAvLyByZXR1cm4gdmFsaWQgV0NBRzIgcGFybXMgZm9yIGlzUmVhZGFibGUuXG4gIC8vIElmIGlucHV0IHBhcm1zIGFyZSBpbnZhbGlkLCByZXR1cm4ge1wibGV2ZWxcIjpcIkFBXCIsIFwic2l6ZVwiOlwic21hbGxcIn1cbiAgdmFyIGxldmVsLCBzaXplO1xuICBwYXJtcyA9IHBhcm1zIHx8IHtcbiAgICBsZXZlbDogXCJBQVwiLFxuICAgIHNpemU6IFwic21hbGxcIlxuICB9O1xuICBsZXZlbCA9IChwYXJtcy5sZXZlbCB8fCBcIkFBXCIpLnRvVXBwZXJDYXNlKCk7XG4gIHNpemUgPSAocGFybXMuc2l6ZSB8fCBcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsZXZlbCAhPT0gXCJBQVwiICYmIGxldmVsICE9PSBcIkFBQVwiKSB7XG4gICAgbGV2ZWwgPSBcIkFBXCI7XG4gIH1cbiAgaWYgKHNpemUgIT09IFwic21hbGxcIiAmJiBzaXplICE9PSBcImxhcmdlXCIpIHtcbiAgICBzaXplID0gXCJzbWFsbFwiO1xuICB9XG4gIHJldHVybiB7XG4gICAgbGV2ZWw6IGxldmVsLFxuICAgIHNpemU6IHNpemVcbiAgfTtcbn1cblxuZXhwb3J0IHsgdGlueWNvbG9yIGFzIGRlZmF1bHQgfTtcbiIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2N1c3RvbVBhcnNlRm9ybWF0PXQoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17TFRTOlwiaDptbTpzcyBBXCIsTFQ6XCJoOm1tIEFcIixMOlwiTU0vREQvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBXCJ9LHQ9LyhcXFtbXltdKlxcXSl8KFstXzovLiwoKVxcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2csbj0vXFxkLyxyPS9cXGRcXGQvLGk9L1xcZFxcZD8vLG89L1xcZCpbXi1fOi8sKClcXHNcXGRdKy8scz17fSxhPWZ1bmN0aW9uKGUpe3JldHVybihlPStlKSsoZT42OD8xOTAwOjJlMyl9O3ZhciBmPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzW2VdPSt0fX0saD1bL1srLV1cXGRcXGQ6PyhcXGRcXGQpP3xaLyxmdW5jdGlvbihlKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiAwO2lmKFwiWlwiPT09ZSlyZXR1cm4gMDt2YXIgdD1lLm1hdGNoKC8oWystXXxcXGRcXGQpL2cpLG49NjAqdFsxXSsoK3RbMl18fDApO3JldHVybiAwPT09bj8wOlwiK1wiPT09dFswXT8tbjpufShlKX1dLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9c1tlXTtyZXR1cm4gdCYmKHQuaW5kZXhPZj90OnQucy5jb25jYXQodC5mKSl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXMubWVyaWRpZW07aWYocil7Zm9yKHZhciBpPTE7aTw9MjQ7aSs9MSlpZihlLmluZGV4T2YocihpLDAsdCkpPi0xKXtuPWk+MTI7YnJlYWt9fWVsc2Ugbj1lPT09KHQ/XCJwbVwiOlwiUE1cIik7cmV0dXJuIG59LGM9e0E6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCExKX1dLGE6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCEwKX1dLFE6W24sZnVuY3Rpb24oZSl7dGhpcy5tb250aD0zKihlLTEpKzF9XSxTOltuLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZX1dLFNTOltyLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitlfV0sU1NTOlsvXFxkezN9LyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0rZX1dLHM6W2ksZihcInNlY29uZHNcIildLHNzOltpLGYoXCJzZWNvbmRzXCIpXSxtOltpLGYoXCJtaW51dGVzXCIpXSxtbTpbaSxmKFwibWludXRlc1wiKV0sSDpbaSxmKFwiaG91cnNcIildLGg6W2ksZihcImhvdXJzXCIpXSxISDpbaSxmKFwiaG91cnNcIildLGhoOltpLGYoXCJob3Vyc1wiKV0sRDpbaSxmKFwiZGF5XCIpXSxERDpbcixmKFwiZGF5XCIpXSxEbzpbbyxmdW5jdGlvbihlKXt2YXIgdD1zLm9yZGluYWwsbj1lLm1hdGNoKC9cXGQrLyk7aWYodGhpcy5kYXk9blswXSx0KWZvcih2YXIgcj0xO3I8PTMxO3IrPTEpdChyKS5yZXBsYWNlKC9cXFt8XFxdL2csXCJcIik9PT1lJiYodGhpcy5kYXk9cil9XSx3OltpLGYoXCJ3ZWVrXCIpXSx3dzpbcixmKFwid2Vla1wiKV0sTTpbaSxmKFwibW9udGhcIildLE1NOltyLGYoXCJtb250aFwiKV0sTU1NOltvLGZ1bmN0aW9uKGUpe3ZhciB0PXUoXCJtb250aHNcIiksbj0odShcIm1vbnRoc1Nob3J0XCIpfHx0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoMCwzKX0pKSkuaW5kZXhPZihlKSsxO2lmKG48MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1uJTEyfHxufV0sTU1NTTpbbyxmdW5jdGlvbihlKXt2YXIgdD11KFwibW9udGhzXCIpLmluZGV4T2YoZSkrMTtpZih0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9dCUxMnx8dH1dLFk6Wy9bKy1dP1xcZCsvLGYoXCJ5ZWFyXCIpXSxZWTpbcixmdW5jdGlvbihlKXt0aGlzLnllYXI9YShlKX1dLFlZWVk6Wy9cXGR7NH0vLGYoXCJ5ZWFyXCIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbChuKXt2YXIgcixpO3I9bixpPXMmJnMuZm9ybWF0cztmb3IodmFyIG89KG49ci5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csKGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1yJiZyLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG58fGlbcl18fGVbcl18fGlbb10ucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHR8fG4uc2xpY2UoMSl9KSl9KSkpLm1hdGNoKHQpLGE9by5sZW5ndGgsZj0wO2Y8YTtmKz0xKXt2YXIgaD1vW2ZdLHU9Y1toXSxkPXUmJnVbMF0sbD11JiZ1WzFdO29bZl09bD97cmVnZXg6ZCxwYXJzZXI6bH06aC5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX1yZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LG49MCxyPTA7bjxhO24rPTEpe3ZhciBpPW9bbl07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpcis9aS5sZW5ndGg7ZWxzZXt2YXIgcz1pLnJlZ2V4LGY9aS5wYXJzZXIsaD1lLnNsaWNlKHIpLHU9cy5leGVjKGgpWzBdO2YuY2FsbCh0LHUpLGU9ZS5yZXBsYWNlKHUsXCJcIil9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmFmdGVybm9vbjtpZih2b2lkIDAhPT10KXt2YXIgbj1lLmhvdXJzO3Q/bjwxMiYmKGUuaG91cnMrPTEyKToxMj09PW4mJihlLmhvdXJzPTApLGRlbGV0ZSBlLmFmdGVybm9vbn19KHQpLHR9fXJldHVybiBmdW5jdGlvbihlLHQsbil7bi5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLGUmJmUucGFyc2VUd29EaWdpdFllYXImJihhPWUucGFyc2VUd29EaWdpdFllYXIpO3ZhciByPXQucHJvdG90eXBlLGk9ci5wYXJzZTtyLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0ZSxyPWUudXRjLG89ZS5hcmdzO3RoaXMuJHU9cjt2YXIgYT1vWzFdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj0hMD09PW9bMl0saD0hMD09PW9bM10sdT1mfHxoLGQ9b1syXTtoJiYoZD1vWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFmJiZkJiYocz1uLkxzW2RdKSx0aGlzLiRkPWZ1bmN0aW9uKGUsdCxuLHIpe3RyeXtpZihbXCJ4XCIsXCJYXCJdLmluZGV4T2YodCk+LTEpcmV0dXJuIG5ldyBEYXRlKChcIlhcIj09PXQ/MWUzOjEpKmUpO3ZhciBpPWwodCkoZSksbz1pLnllYXIscz1pLm1vbnRoLGE9aS5kYXksZj1pLmhvdXJzLGg9aS5taW51dGVzLHU9aS5zZWNvbmRzLGQ9aS5taWxsaXNlY29uZHMsYz1pLnpvbmUsbT1pLndlZWssTT1uZXcgRGF0ZSxZPWF8fChvfHxzPzE6TS5nZXREYXRlKCkpLHA9b3x8TS5nZXRGdWxsWWVhcigpLHY9MDtvJiYhc3x8KHY9cz4wP3MtMTpNLmdldE1vbnRoKCkpO3ZhciBELHc9Znx8MCxnPWh8fDAseT11fHwwLEw9ZHx8MDtyZXR1cm4gYz9uZXcgRGF0ZShEYXRlLlVUQyhwLHYsWSx3LGcseSxMKzYwKmMub2Zmc2V0KjFlMykpOm4/bmV3IERhdGUoRGF0ZS5VVEMocCx2LFksdyxnLHksTCkpOihEPW5ldyBEYXRlKHAsdixZLHcsZyx5LEwpLG0mJihEPXIoRCkud2VlayhtKS50b0RhdGUoKSksRCl9Y2F0Y2goZSl7cmV0dXJuIG5ldyBEYXRlKFwiXCIpfX0odCxhLHIsbiksdGhpcy5pbml0KCksZCYmITAhPT1kJiYodGhpcy4kTD10aGlzLmxvY2FsZShkKS4kTCksdSYmdCE9dGhpcy5mb3JtYXQoYSkmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKSxzPXt9fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgYz1hLmxlbmd0aCxtPTE7bTw9YzttKz0xKXtvWzFdPWFbbS0xXTt2YXIgTT1uLmFwcGx5KHRoaXMsbyk7aWYoTS5pc1ZhbGlkKCkpe3RoaXMuJGQ9TS4kZCx0aGlzLiRMPU0uJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWMmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKX1lbHNlIGkuY2FsbCh0aGlzLGUpfX19KSk7IiwiIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fdGltZXpvbmU9ZSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXt5ZWFyOjAsbW9udGg6MSxkYXk6Mixob3VyOjMsbWludXRlOjQsc2Vjb25kOjV9LGU9e307cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgcixhPWZ1bmN0aW9uKHQsbixpKXt2b2lkIDA9PT1pJiYoaT17fSk7dmFyIG89bmV3IERhdGUodCkscj1mdW5jdGlvbih0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnRpbWVab25lTmFtZXx8XCJzaG9ydFwiLG89dCtcInxcIitpLHI9ZVtvXTtyZXR1cm4gcnx8KHI9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLHtob3VyMTI6ITEsdGltZVpvbmU6dCx5ZWFyOlwibnVtZXJpY1wiLG1vbnRoOlwiMi1kaWdpdFwiLGRheTpcIjItZGlnaXRcIixob3VyOlwiMi1kaWdpdFwiLG1pbnV0ZTpcIjItZGlnaXRcIixzZWNvbmQ6XCIyLWRpZ2l0XCIsdGltZVpvbmVOYW1lOml9KSxlW29dPXIpLHJ9KG4saSk7cmV0dXJuIHIuZm9ybWF0VG9QYXJ0cyhvKX0sdT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1hKGUsbikscj1bXSx1PTA7dTxpLmxlbmd0aDt1Kz0xKXt2YXIgZj1pW3VdLHM9Zi50eXBlLG09Zi52YWx1ZSxjPXRbc107Yz49MCYmKHJbY109cGFyc2VJbnQobSwxMCkpfXZhciBkPXJbM10sbD0yND09PWQ/MDpkLGg9clswXStcIi1cIityWzFdK1wiLVwiK3JbMl0rXCIgXCIrbCtcIjpcIityWzRdK1wiOlwiK3JbNV0rXCI6MDAwXCIsdj0rZTtyZXR1cm4oby51dGMoaCkudmFsdWVPZigpLSh2LT12JTFlMykpLzZlNH0sZj1pLnByb3RvdHlwZTtmLnR6PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9cik7dmFyIG4saT10aGlzLnV0Y09mZnNldCgpLGE9dGhpcy50b0RhdGUoKSx1PWEudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTp0fSksZj1NYXRoLnJvdW5kKChhLW5ldyBEYXRlKHUpKS8xZTMvNjApLHM9MTUqLU1hdGgucm91bmQoYS5nZXRUaW1lem9uZU9mZnNldCgpLzE1KS1mO2lmKCFOdW1iZXIocykpbj10aGlzLnV0Y09mZnNldCgwLGUpO2Vsc2UgaWYobj1vKHUse2xvY2FsZTp0aGlzLiRMfSkuJHNldChcIm1pbGxpc2Vjb25kXCIsdGhpcy4kbXMpLnV0Y09mZnNldChzLCEwKSxlKXt2YXIgbT1uLnV0Y09mZnNldCgpO249bi5hZGQoaS1tLFwibWludXRlXCIpfXJldHVybiBuLiR4LiR0aW1lem9uZT10LG59LGYub2Zmc2V0TmFtZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLiR4LiR0aW1lem9uZXx8by50ei5ndWVzcygpLG49YSh0aGlzLnZhbHVlT2YoKSxlLHt0aW1lWm9uZU5hbWU6dH0pLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVyblwidGltZXpvbmVuYW1lXCI9PT10LnR5cGUudG9Mb3dlckNhc2UoKX0pKTtyZXR1cm4gbiYmbi52YWx1ZX07dmFyIHM9Zi5zdGFydE9mO2Yuc3RhcnRPZj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLiR4fHwhdGhpcy4keC4kdGltZXpvbmUpcmV0dXJuIHMuY2FsbCh0aGlzLHQsZSk7dmFyIG49byh0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpLHtsb2NhbGU6dGhpcy4kTH0pO3JldHVybiBzLmNhbGwobix0LGUpLnR6KHRoaXMuJHguJHRpbWV6b25lLCEwKX0sby50ej1mdW5jdGlvbih0LGUsbil7dmFyIGk9biYmZSxhPW58fGV8fHIsZj11KCtvKCksYSk7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIG8odCkudHooYSk7dmFyIHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQtNjAqZSoxZTMsbz11KGksbik7aWYoZT09PW8pcmV0dXJuW2ksZV07dmFyIHI9dShpLT02MCooby1lKSoxZTMsbik7cmV0dXJuIG89PT1yP1tpLG9dOlt0LTYwKk1hdGgubWluKG8scikqMWUzLE1hdGgubWF4KG8scildfShvLnV0Yyh0LGkpLnZhbHVlT2YoKSxmLGEpLG09c1swXSxjPXNbMV0sZD1vKG0pLnV0Y09mZnNldChjKTtyZXR1cm4gZC4keC4kdGltZXpvbmU9YSxkfSxvLnR6Lmd1ZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZX0sby50ei5zZXREZWZhdWx0PWZ1bmN0aW9uKHQpe3I9dH19fSkpOyIsIiFmdW5jdGlvbih0LGkpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWkoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGkpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX3V0Yz1pKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9XCJtaW51dGVcIixpPS9bKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9nLGU9LyhbKy1dfFxcZFxcZCkvZztyZXR1cm4gZnVuY3Rpb24ocyxmLG4pe3ZhciB1PWYucHJvdG90eXBlO24udXRjPWZ1bmN0aW9uKHQpe3ZhciBpPXtkYXRlOnQsdXRjOiEwLGFyZ3M6YXJndW1lbnRzfTtyZXR1cm4gbmV3IGYoaSl9LHUudXRjPWZ1bmN0aW9uKGkpe3ZhciBlPW4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiEwfSk7cmV0dXJuIGk/ZS5hZGQodGhpcy51dGNPZmZzZXQoKSx0KTplfSx1LmxvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiExfSl9O3ZhciBvPXUucGFyc2U7dS5wYXJzZT1mdW5jdGlvbih0KXt0LnV0YyYmKHRoaXMuJHU9ITApLHRoaXMuJHV0aWxzKCkudSh0LiRvZmZzZXQpfHwodGhpcy4kb2Zmc2V0PXQuJG9mZnNldCksby5jYWxsKHRoaXMsdCl9O3ZhciByPXUuaW5pdDt1LmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiR1KXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRVVENGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRVVENNb250aCgpLHRoaXMuJEQ9dC5nZXRVVENEYXRlKCksdGhpcy4kVz10LmdldFVUQ0RheSgpLHRoaXMuJEg9dC5nZXRVVENIb3VycygpLHRoaXMuJG09dC5nZXRVVENNaW51dGVzKCksdGhpcy4kcz10LmdldFVUQ1NlY29uZHMoKSx0aGlzLiRtcz10LmdldFVUQ01pbGxpc2Vjb25kcygpfWVsc2Ugci5jYWxsKHRoaXMpfTt2YXIgYT11LnV0Y09mZnNldDt1LnV0Y09mZnNldD1mdW5jdGlvbihzLGYpe3ZhciBuPXRoaXMuJHV0aWxzKCkudTtpZihuKHMpKXJldHVybiB0aGlzLiR1PzA6bih0aGlzLiRvZmZzZXQpP2EuY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHMmJihzPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiXCIpO3ZhciBzPXQubWF0Y2goaSk7aWYoIXMpcmV0dXJuIG51bGw7dmFyIGY9KFwiXCIrc1swXSkubWF0Y2goZSl8fFtcIi1cIiwwLDBdLG49ZlswXSx1PTYwKitmWzFdKyArZlsyXTtyZXR1cm4gMD09PXU/MDpcIitcIj09PW4/dTotdX0ocyksbnVsbD09PXMpKXJldHVybiB0aGlzO3ZhciB1PU1hdGguYWJzKHMpPD0xNj82MCpzOnMsbz10aGlzO2lmKGYpcmV0dXJuIG8uJG9mZnNldD11LG8uJHU9MD09PXMsbztpZigwIT09cyl7dmFyIHI9dGhpcy4kdT90aGlzLnRvRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk6LTEqdGhpcy51dGNPZmZzZXQoKTsobz10aGlzLmxvY2FsKCkuYWRkKHUrcix0KSkuJG9mZnNldD11LG8uJHguJGxvY2FsT2Zmc2V0PXJ9ZWxzZSBvPXRoaXMudXRjKCk7cmV0dXJuIG99O3ZhciBoPXUuZm9ybWF0O3UuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBpPXR8fCh0aGlzLiR1P1wiWVlZWS1NTS1ERFRISDptbTpzc1taXVwiOlwiXCIpO3JldHVybiBoLmNhbGwodGhpcyxpKX0sdS52YWx1ZU9mPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kdXRpbHMoKS51KHRoaXMuJG9mZnNldCk/MDp0aGlzLiRvZmZzZXQrKHRoaXMuJHguJGxvY2FsT2Zmc2V0fHx0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiB0aGlzLiRkLnZhbHVlT2YoKS02ZTQqdH0sdS5pc1VUQz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy4kdX0sdS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LHUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b1VUQ1N0cmluZygpfTt2YXIgbD11LnRvRGF0ZTt1LnRvRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cInNcIj09PXQmJnRoaXMuJG9mZnNldD9uKHRoaXMuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzczpTU1NcIikpLnRvRGF0ZSgpOmwuY2FsbCh0aGlzKX07dmFyIGM9dS5kaWZmO3UuZGlmZj1mdW5jdGlvbih0LGksZSl7aWYodCYmdGhpcy4kdT09PXQuJHUpcmV0dXJuIGMuY2FsbCh0aGlzLHQsaSxlKTt2YXIgcz10aGlzLmxvY2FsKCksZj1uKHQpLmxvY2FsKCk7cmV0dXJuIGMuY2FsbChzLGYsaSxlKX19fSkpOyJdLCJuYW1lcyI6WyJOVU1CRVJfQ0hBUl9SRSIsIlNUUl9TUExJVFRFUlMiLCJpc1VwcGVyY2FzZSIsImNoYXIiLCJzcGxpdEJ5Q2FzZSIsInN0ciIsInNlcGFyYXRvcnMiLCJzcGxpdHRlcnMiLCJwYXJ0cyIsImJ1ZmYiLCJwcmV2aW91c1VwcGVyIiwicHJldmlvdXNTcGxpdHRlciIsImlzU3BsaXR0ZXIiLCJpc1VwcGVyIiwibGFzdENoYXIiLCJ1cHBlckZpcnN0IiwibG93ZXJGaXJzdCIsInBhc2NhbENhc2UiLCJvcHRzIiwicCIsImNhbWVsQ2FzZSIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwibGVmdCIsImF1dG8iLCJiYXNlUGxhY2VtZW50cyIsInN0YXJ0IiwiZW5kIiwiY2xpcHBpbmdQYXJlbnRzIiwidmlld3BvcnQiLCJwb3BwZXIiLCJyZWZlcmVuY2UiLCJ2YXJpYXRpb25QbGFjZW1lbnRzIiwiYWNjIiwicGxhY2VtZW50IiwicGxhY2VtZW50cyIsImJlZm9yZVJlYWQiLCJyZWFkIiwiYWZ0ZXJSZWFkIiwiYmVmb3JlTWFpbiIsIm1haW4iLCJhZnRlck1haW4iLCJiZWZvcmVXcml0ZSIsIndyaXRlIiwiYWZ0ZXJXcml0ZSIsIm1vZGlmaWVyUGhhc2VzIiwiZ2V0Tm9kZU5hbWUiLCJlbGVtZW50IiwiZ2V0V2luZG93Iiwibm9kZSIsIm93bmVyRG9jdW1lbnQiLCJpc0VsZW1lbnQiLCJPd25FbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImFwcGx5U3R5bGVzIiwiX3JlZiIsInN0YXRlIiwibmFtZSIsInN0eWxlIiwiYXR0cmlidXRlcyIsInZhbHVlIiwiZWZmZWN0IiwiX3JlZjIiLCJpbml0aWFsU3R5bGVzIiwic3R5bGVQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJhdHRyaWJ1dGUiLCJhcHBseVN0eWxlcyQxIiwiZ2V0QmFzZVBsYWNlbWVudCIsIm1heCIsIm1pbiIsInJvdW5kIiwiZ2V0VUFTdHJpbmciLCJ1YURhdGEiLCJpdGVtIiwiaXNMYXlvdXRWaWV3cG9ydCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImluY2x1ZGVTY2FsZSIsImlzRml4ZWRTdHJhdGVneSIsImNsaWVudFJlY3QiLCJzY2FsZVgiLCJzY2FsZVkiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwiZ2V0TGF5b3V0UmVjdCIsImNvbnRhaW5zIiwicGFyZW50IiwiY2hpbGQiLCJyb290Tm9kZSIsIm5leHQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaXNUYWJsZUVsZW1lbnQiLCJnZXREb2N1bWVudEVsZW1lbnQiLCJnZXRQYXJlbnROb2RlIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsImdldENvbnRhaW5pbmdCbG9jayIsImlzRmlyZWZveCIsImlzSUUiLCJlbGVtZW50Q3NzIiwiY3VycmVudE5vZGUiLCJjc3MiLCJnZXRPZmZzZXRQYXJlbnQiLCJ3aW5kb3ciLCJvZmZzZXRQYXJlbnQiLCJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCJ3aXRoaW4iLCJtYXRoTWF4IiwibWF0aE1pbiIsIndpdGhpbk1heENsYW1wIiwidiIsImdldEZyZXNoU2lkZU9iamVjdCIsIm1lcmdlUGFkZGluZ09iamVjdCIsInBhZGRpbmdPYmplY3QiLCJleHBhbmRUb0hhc2hNYXAiLCJrZXlzIiwiaGFzaE1hcCIsImtleSIsInRvUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJhcnJvdyIsIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsIm9wdGlvbnMiLCJhcnJvd0VsZW1lbnQiLCJwb3BwZXJPZmZzZXRzIiwiYmFzZVBsYWNlbWVudCIsImF4aXMiLCJpc1ZlcnRpY2FsIiwibGVuIiwiYXJyb3dSZWN0IiwibWluUHJvcCIsIm1heFByb3AiLCJlbmREaWZmIiwic3RhcnREaWZmIiwiYXJyb3dPZmZzZXRQYXJlbnQiLCJjbGllbnRTaXplIiwiY2VudGVyVG9SZWZlcmVuY2UiLCJjZW50ZXIiLCJvZmZzZXQiLCJheGlzUHJvcCIsIl9vcHRpb25zJGVsZW1lbnQiLCJhcnJvdyQxIiwiZ2V0VmFyaWF0aW9uIiwidW5zZXRTaWRlcyIsInJvdW5kT2Zmc2V0c0J5RFBSIiwid2luIiwiZHByIiwibWFwVG9TdHlsZXMiLCJfT2JqZWN0JGFzc2lnbjIiLCJwb3BwZXJSZWN0IiwidmFyaWF0aW9uIiwib2Zmc2V0cyIsInBvc2l0aW9uIiwiZ3B1QWNjZWxlcmF0aW9uIiwiYWRhcHRpdmUiLCJyb3VuZE9mZnNldHMiLCJpc0ZpeGVkIiwiX29mZnNldHMkeCIsIl9vZmZzZXRzJHkiLCJfcmVmMyIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJvZmZzZXRZIiwib2Zmc2V0WCIsImNvbW1vblN0eWxlcyIsIl9yZWY0IiwiX09iamVjdCRhc3NpZ24iLCJjb21wdXRlU3R5bGVzIiwiX3JlZjUiLCJfb3B0aW9ucyRncHVBY2NlbGVyYXQiLCJfb3B0aW9ucyRhZGFwdGl2ZSIsIl9vcHRpb25zJHJvdW5kT2Zmc2V0cyIsImNvbXB1dGVTdHlsZXMkMSIsInBhc3NpdmUiLCJpbnN0YW5jZSIsIl9vcHRpb25zJHNjcm9sbCIsInNjcm9sbCIsIl9vcHRpb25zJHJlc2l6ZSIsInJlc2l6ZSIsInNjcm9sbFBhcmVudHMiLCJzY3JvbGxQYXJlbnQiLCJldmVudExpc3RlbmVycyIsImhhc2giLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsIm1hdGNoZWQiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsImdldFdpbmRvd1Njcm9sbCIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwiZ2V0Vmlld3BvcnRSZWN0Iiwic3RyYXRlZ3kiLCJodG1sIiwibGF5b3V0Vmlld3BvcnQiLCJnZXREb2N1bWVudFJlY3QiLCJfZWxlbWVudCRvd25lckRvY3VtZW4iLCJ3aW5TY3JvbGwiLCJib2R5IiwiaXNTY3JvbGxQYXJlbnQiLCJfZ2V0Q29tcHV0ZWRTdHlsZSIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZ2V0U2Nyb2xsUGFyZW50IiwibGlzdFNjcm9sbFBhcmVudHMiLCJsaXN0IiwiaXNCb2R5IiwidGFyZ2V0IiwidXBkYXRlZExpc3QiLCJyZWN0VG9DbGllbnRSZWN0IiwicmVjdCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUiLCJjbGlwcGluZ1BhcmVudCIsImdldENsaXBwaW5nUGFyZW50cyIsImNhbkVzY2FwZUNsaXBwaW5nIiwiY2xpcHBlckVsZW1lbnQiLCJnZXRDbGlwcGluZ1JlY3QiLCJib3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsIm1haW5DbGlwcGluZ1BhcmVudHMiLCJmaXJzdENsaXBwaW5nUGFyZW50IiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImNvbXB1dGVPZmZzZXRzIiwiY29tbW9uWCIsImNvbW1vblkiLCJtYWluQXhpcyIsImRldGVjdE92ZXJmbG93IiwiX29wdGlvbnMiLCJfb3B0aW9ucyRwbGFjZW1lbnQiLCJfb3B0aW9ucyRzdHJhdGVneSIsIl9vcHRpb25zJGJvdW5kYXJ5IiwiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwiX29wdGlvbnMkZWxlbWVudENvbnRlIiwiZWxlbWVudENvbnRleHQiLCJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsImFsdEJvdW5kYXJ5IiwiX29wdGlvbnMkcGFkZGluZyIsImFsdENvbnRleHQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJyZWZlcmVuY2VDbGllbnRSZWN0IiwicG9wcGVyQ2xpZW50UmVjdCIsImVsZW1lbnRDbGllbnRSZWN0Iiwib3ZlcmZsb3dPZmZzZXRzIiwib2Zmc2V0RGF0YSIsIm11bHRpcGx5IiwiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCJmbGlwVmFyaWF0aW9ucyIsIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsImFsbG93ZWRBdXRvUGxhY2VtZW50cyIsImFsbFBsYWNlbWVudHMiLCJhbGxvd2VkUGxhY2VtZW50cyIsIm92ZXJmbG93cyIsImEiLCJiIiwiZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImZsaXAiLCJfb3B0aW9ucyRtYWluQXhpcyIsImNoZWNrTWFpbkF4aXMiLCJfb3B0aW9ucyRhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwicHJlZmVycmVkUGxhY2VtZW50IiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwicmVmZXJlbmNlUmVjdCIsImNoZWNrc01hcCIsIm1ha2VGYWxsYmFja0NoZWNrcyIsImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsImkiLCJfYmFzZVBsYWNlbWVudCIsImlzU3RhcnRWYXJpYXRpb24iLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJjaGVjayIsIm51bWJlck9mQ2hlY2tzIiwiX2xvb3AiLCJfaSIsImZpdHRpbmdQbGFjZW1lbnQiLCJfcmV0IiwiZmxpcCQyIiwiZ2V0U2lkZU9mZnNldHMiLCJwcmV2ZW50ZWRPZmZzZXRzIiwiaXNBbnlTaWRlRnVsbHlDbGlwcGVkIiwic2lkZSIsImhpZGUiLCJyZWZlcmVuY2VPdmVyZmxvdyIsInBvcHBlckFsdE92ZXJmbG93IiwicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwicG9wcGVyRXNjYXBlT2Zmc2V0cyIsImlzUmVmZXJlbmNlSGlkZGVuIiwiaGFzUG9wcGVyRXNjYXBlZCIsImhpZGUkMSIsImRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZIiwicmVjdHMiLCJpbnZlcnREaXN0YW5jZSIsInNraWRkaW5nIiwiZGlzdGFuY2UiLCJfb3B0aW9ucyRvZmZzZXQiLCJkYXRhIiwiX2RhdGEkc3RhdGUkcGxhY2VtZW50Iiwib2Zmc2V0JDEiLCJwb3BwZXJPZmZzZXRzJDEiLCJnZXRBbHRBeGlzIiwicHJldmVudE92ZXJmbG93IiwiX29wdGlvbnMkdGV0aGVyIiwidGV0aGVyIiwiX29wdGlvbnMkdGV0aGVyT2Zmc2V0IiwidGV0aGVyT2Zmc2V0IiwiYWx0QXhpcyIsInRldGhlck9mZnNldFZhbHVlIiwibm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlIiwib2Zmc2V0TW9kaWZpZXJTdGF0ZSIsIl9vZmZzZXRNb2RpZmllclN0YXRlJCIsIm1haW5TaWRlIiwiYWx0U2lkZSIsImFkZGl0aXZlIiwibWluTGVuIiwibWF4TGVuIiwiYXJyb3dQYWRkaW5nT2JqZWN0IiwiYXJyb3dQYWRkaW5nTWluIiwiYXJyb3dQYWRkaW5nTWF4IiwiYXJyb3dMZW4iLCJtaW5PZmZzZXQiLCJtYXhPZmZzZXQiLCJjbGllbnRPZmZzZXQiLCJvZmZzZXRNb2RpZmllclZhbHVlIiwidGV0aGVyTWluIiwidGV0aGVyTWF4IiwicHJldmVudGVkT2Zmc2V0IiwiX29mZnNldE1vZGlmaWVyU3RhdGUkMiIsIl9tYWluU2lkZSIsIl9hbHRTaWRlIiwiX29mZnNldCIsIl9sZW4iLCJfbWluIiwiX21heCIsImlzT3JpZ2luU2lkZSIsIl9vZmZzZXRNb2RpZmllclZhbHVlIiwiX3RldGhlck1pbiIsIl90ZXRoZXJNYXgiLCJfcHJldmVudGVkT2Zmc2V0IiwicHJldmVudE92ZXJmbG93JDEiLCJnZXRIVE1MRWxlbWVudFNjcm9sbCIsImdldE5vZGVTY3JvbGwiLCJpc0VsZW1lbnRTY2FsZWQiLCJnZXRDb21wb3NpdGVSZWN0IiwiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFBhcmVudElzU2NhbGVkIiwiZG9jdW1lbnRFbGVtZW50Iiwib3JkZXIiLCJtb2RpZmllcnMiLCJtYXAiLCJ2aXNpdGVkIiwicmVzdWx0IiwibW9kaWZpZXIiLCJzb3J0IiwicmVxdWlyZXMiLCJkZXAiLCJkZXBNb2RpZmllciIsIm9yZGVyTW9kaWZpZXJzIiwib3JkZXJlZE1vZGlmaWVycyIsInBoYXNlIiwiZGVib3VuY2UiLCJmbiIsInBlbmRpbmciLCJyZXNvbHZlIiwibWVyZ2VCeU5hbWUiLCJtZXJnZWQiLCJjdXJyZW50IiwiZXhpc3RpbmciLCJERUZBVUxUX09QVElPTlMiLCJhcmVWYWxpZEVsZW1lbnRzIiwiYXJncyIsIl9rZXkiLCJwb3BwZXJHZW5lcmF0b3IiLCJnZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYiLCJkZWZhdWx0TW9kaWZpZXJzIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmMiIsImRlZmF1bHRPcHRpb25zIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwic2V0T3B0aW9uc0FjdGlvbiIsImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCJydW5Nb2RpZmllckVmZmVjdHMiLCJfc3RhdGUkZWxlbWVudHMiLCJpbmRleCIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZSIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIiLCJfcmVmJG9wdGlvbnMiLCJjbGVhbnVwRm4iLCJub29wRm4iLCJjcmVhdGVQb3BwZXIiLCJfdHlwZW9mIiwib2JqIiwidHJpbUxlZnQiLCJ0cmltUmlnaHQiLCJ0aW55Y29sb3IiLCJjb2xvciIsInJnYiIsImlucHV0VG9SR0IiLCJSc1JHQiIsIkdzUkdCIiwiQnNSR0IiLCJSIiwiRyIsIkIiLCJib3VuZEFscGhhIiwiaHN2IiwicmdiVG9Ic3YiLCJoIiwicyIsImhzbCIsInJnYlRvSHNsIiwibCIsImFsbG93M0NoYXIiLCJyZ2JUb0hleCIsImFsbG93NENoYXIiLCJyZ2JhVG9IZXgiLCJib3VuZDAxIiwiaGV4TmFtZXMiLCJzZWNvbmRDb2xvciIsImhleDhTdHJpbmciLCJyZ2JhVG9BcmdiSGV4Iiwic2Vjb25kSGV4OFN0cmluZyIsImdyYWRpZW50VHlwZSIsImZvcm1hdCIsImZvcm1hdFNldCIsImZvcm1hdHRlZFN0cmluZyIsImhhc0FscGhhIiwibmVlZHNBbHBoYUZvcm1hdCIsIl9saWdodGVuIiwiX2JyaWdodGVuIiwiX2RhcmtlbiIsIl9kZXNhdHVyYXRlIiwiX3NhdHVyYXRlIiwiX2dyZXlzY2FsZSIsIl9zcGluIiwiX2FuYWxvZ291cyIsIl9jb21wbGVtZW50IiwiX21vbm9jaHJvbWF0aWMiLCJfc3BsaXRjb21wbGVtZW50IiwicG9seWFkIiwibmV3Q29sb3IiLCJjb252ZXJ0VG9QZXJjZW50YWdlIiwib2siLCJzdHJpbmdJbnB1dFRvT2JqZWN0IiwiaXNWYWxpZENTU1VuaXQiLCJyZ2JUb1JnYiIsImhzdlRvUmdiIiwiaHNsVG9SZ2IiLCJyIiwiZyIsImQiLCJodWUycmdiIiwicSIsInQiLCJmIiwibW9kIiwiaGV4IiwicGFkMiIsImNvbnZlcnREZWNpbWFsVG9IZXgiLCJjb2xvcjEiLCJjb2xvcjIiLCJhbW91bnQiLCJjbGFtcDAxIiwiaHVlIiwibnVtYmVyIiwic3RlcCIsInJlc3VsdHMiLCJzbGljZXMiLCJwYXJ0IiwicmV0IiwibW9kaWZpY2F0aW9uIiwicmdiMSIsInJnYjIiLCJyZ2JhIiwiYzEiLCJjMiIsIndjYWcyIiwicmVhZGFiaWxpdHkiLCJ3Y2FnMlBhcm1zIiwib3V0IiwidmFsaWRhdGVXQ0FHMlBhcm1zIiwiYmFzZUNvbG9yIiwiY29sb3JMaXN0IiwiYmVzdENvbG9yIiwiYmVzdFNjb3JlIiwiaW5jbHVkZUZhbGxiYWNrQ29sb3JzIiwibGV2ZWwiLCJzaXplIiwibmFtZXMiLCJvIiwiZmxpcHBlZCIsIm4iLCJpc09uZVBvaW50WmVybyIsInByb2Nlc3NQZXJjZW50IiwiaXNQZXJjZW50YWdlIiwidmFsIiwicGFyc2VJbnRGcm9tSGV4IiwiYyIsImNvbnZlcnRIZXhUb0RlY2ltYWwiLCJtYXRjaGVycyIsIkNTU19JTlRFR0VSIiwiQ1NTX05VTUJFUiIsIkNTU19VTklUIiwiUEVSTUlTU0lWRV9NQVRDSDMiLCJQRVJNSVNTSVZFX01BVENINCIsIm5hbWVkIiwibWF0Y2giLCJwYXJtcyIsImUiLCJtb2R1bGUiLCJ0aGlzIiwidSIsIm0iLCJNIiwiWSIsIkQiLCJ3IiwiTCJdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU1BLEtBQWlCLE1BQ2pCQyxLQUFnQixDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFDekMsU0FBU0MsR0FBWUMsSUFBTyxJQUFJO0FBQzlCLE1BQUksQ0FBQUgsR0FBZSxLQUFLRyxDQUFJO0FBRzVCLFdBQU9BLE1BQVNBLEVBQUssWUFBVztBQUNsQztBQUNBLFNBQVNDLEdBQVlDLEdBQUtDLEdBQVk7QUFDcEMsUUFBTUMsSUFBMEJOLElBQzFCTyxJQUFRLENBQUE7QUFDZCxNQUFJLENBQUNILEtBQU8sT0FBT0EsS0FBUTtBQUN6QixXQUFPRztBQUVULE1BQUlDLElBQU8sSUFDUEMsR0FDQUM7QUFDSixhQUFXUixLQUFRRSxHQUFLO0FBQ3RCLFVBQU1PLElBQWFMLEVBQVUsU0FBU0osQ0FBSTtBQUMxQyxRQUFJUyxNQUFlLElBQU07QUFDdkIsTUFBQUosRUFBTSxLQUFLQyxDQUFJLEdBQ2ZBLElBQU8sSUFDUEMsSUFBZ0I7QUFDaEI7QUFBQSxJQUNGO0FBQ0EsVUFBTUcsSUFBVVgsR0FBWUMsQ0FBSTtB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RUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxnQkFBZ0I7QUFBQSxFQUNoQixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixnQkFBZ0I7QUFBQSxFQUNoQixZQUFZO0FBQUEsRUFDWixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxzQkFBc0I7QUFBQSxFQUN0QixXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixrQkFBa0I7QUFBQSxFQUNsQixZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixLQUFLO0FBQUEsRUFDTCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxXQUFX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QUFBSyxRQUFBQSxFQUFFLE9BQUssU0FBUzFELEdBQUUvTCxHQUFFc1AsR0FBRTtBQUFDLGNBQUd2RCxLQUFHLEtBQUssT0FBS0EsRUFBRSxHQUFHLFFBQU80QyxFQUFFLEtBQUssTUFBSzVDLEdBQUUvTCxHQUFFc1AsQ0FBQztBQUFFLGNBQUlwRyxJQUFFLEtBQUssTUFBSyxHQUFHOEMsSUFBRXFDLEVBQUV0QyxDQUFDLEVBQUU7QUFBUSxpQkFBTzRDLEVBQUUsS0FBS3pGLEdBQUU4QyxHQUFFaE0sR0FBRXNQLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFBLElBQUMsQ0FBQztBQUFBOzs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4XX0=
|