@adstore/templates 1.0.0 → 2.0.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/CHANGELOG.md +18 -2
- package/dist/style.css +1613 -0
- package/dist/templates.es.js +2707 -0
- package/dist/templates.umd.js +2710 -0
- package/package.json +10 -24
- package/dist/adstore/apps/templates/src/cacheDriver.d.ts +0 -7
- package/dist/adstore/apps/templates/src/constants/animations.d.ts +0 -5
- package/dist/adstore/apps/templates/src/constants/breakpoints.d.ts +0 -6
- package/dist/adstore/apps/templates/src/plugins/classNamesPlugin.d.ts +0 -22
- package/dist/adstore/apps/templates/src/plugins/giftOpenPlugin.d.ts +0 -10
- package/dist/adstore/apps/templates/src/plugins/googleFontsPlugin.d.ts +0 -3
- package/dist/adstore/apps/templates/src/plugins/highlightPlugin.d.ts +0 -11
- package/dist/adstore/apps/templates/src/plugins/index.d.ts +0 -12
- package/dist/adstore/apps/templates/src/plugins/injectNodePlugin.d.ts +0 -23
- package/dist/adstore/apps/templates/src/plugins/legalInfoPlugin.d.ts +0 -17
- package/dist/adstore/apps/templates/src/plugins/patchStylesPlugin.d.ts +0 -12
- package/dist/adstore/apps/templates/src/plugins/statePlugin.d.ts +0 -9
- package/dist/adstore/apps/templates/src/promos/BonusCard/index.d.ts +0 -2
- package/dist/adstore/apps/templates/src/promos/BonusCard/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/ComplexGift/chunks/cardChunk/index.d.ts +0 -4
- package/dist/adstore/apps/templates/src/promos/ComplexGift/chunks/cardChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/ComplexGift/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/ComplexGift/script.d.ts +0 -9
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/chunks/popupCardChunk/index.d.ts +0 -4
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/chunks/popupCardChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/script.d.ts +0 -2
- package/dist/adstore/apps/templates/src/promos/ExpressPopup/chunks/matchChunk/index.d.ts +0 -4
- package/dist/adstore/apps/templates/src/promos/ExpressPopup/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/ExpressPopup/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/SimplePopup/chunks/textChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/SimplePopup/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/SimplePopup/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesOneTwoSlideChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesOneTwoSlideChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesSlideChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesSlideChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/textSlideChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/textSlideChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/index.d.ts +0 -8
- package/dist/adstore/apps/templates/src/promos/WideCard/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/index.d.ts +0 -7
- package/dist/adstore/apps/templates/src/renderDriver.d.ts +0 -48
- package/dist/adstore/apps/templates/src/utils/htmlToElement.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/injectLink.d.ts +0 -6
- package/dist/adstore/apps/templates/src/utils/injectStyle.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/injectStyleRules.d.ts +0 -2
- package/dist/adstore/apps/templates/src/utils/isRenderDriver.d.ts +0 -2
- package/dist/adstore/apps/templates/src/utils/isTemplate.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/switchTextAlignToFlex.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/toggleClassName.d.ts +0 -1
- package/dist/my-lib.d.ts +0 -1
- package/dist/my-lib.es.js +0 -2463
- package/dist/my-lib.umd.js +0 -247
@@ -0,0 +1,2710 @@
|
|
1
|
+
(function(global2, factory) {
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("preact")) : typeof define === "function" && define.amd ? define(["exports", "preact"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2["@adstore/templates"] = {}, global2.preact));
|
3
|
+
})(this, function(exports2, preact) {
|
4
|
+
"use strict";
|
5
|
+
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
6
|
+
var classnamesExports = {};
|
7
|
+
var classnames = {
|
8
|
+
get exports() {
|
9
|
+
return classnamesExports;
|
10
|
+
},
|
11
|
+
set exports(v2) {
|
12
|
+
classnamesExports = v2;
|
13
|
+
}
|
14
|
+
};
|
15
|
+
/*!
|
16
|
+
Copyright (c) 2018 Jed Watson.
|
17
|
+
Licensed under the MIT License (MIT), see
|
18
|
+
http://jedwatson.github.io/classnames
|
19
|
+
*/
|
20
|
+
(function(module2) {
|
21
|
+
(function() {
|
22
|
+
var hasOwn = {}.hasOwnProperty;
|
23
|
+
function classNames2() {
|
24
|
+
var classes = [];
|
25
|
+
for (var i2 = 0; i2 < arguments.length; i2++) {
|
26
|
+
var arg = arguments[i2];
|
27
|
+
if (!arg)
|
28
|
+
continue;
|
29
|
+
var argType = typeof arg;
|
30
|
+
if (argType === "string" || argType === "number") {
|
31
|
+
classes.push(arg);
|
32
|
+
} else if (Array.isArray(arg)) {
|
33
|
+
if (arg.length) {
|
34
|
+
var inner2 = classNames2.apply(null, arg);
|
35
|
+
if (inner2) {
|
36
|
+
classes.push(inner2);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
} else if (argType === "object") {
|
40
|
+
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
|
41
|
+
classes.push(arg.toString());
|
42
|
+
continue;
|
43
|
+
}
|
44
|
+
for (var key in arg) {
|
45
|
+
if (hasOwn.call(arg, key) && arg[key]) {
|
46
|
+
classes.push(key);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
return classes.join(" ");
|
52
|
+
}
|
53
|
+
if (module2.exports) {
|
54
|
+
classNames2.default = classNames2;
|
55
|
+
module2.exports = classNames2;
|
56
|
+
} else {
|
57
|
+
window.classNames = classNames2;
|
58
|
+
}
|
59
|
+
})();
|
60
|
+
})(classnames);
|
61
|
+
const classNames = classnamesExports;
|
62
|
+
var t, r, u, i, o$1 = 0, f = [], c = [], e = preact.options.__b, a = preact.options.__r, v = preact.options.diffed, l = preact.options.__c, m = preact.options.unmount;
|
63
|
+
function d(t2, u2) {
|
64
|
+
preact.options.__h && preact.options.__h(r, t2, o$1 || u2), o$1 = 0;
|
65
|
+
var i2 = r.__H || (r.__H = { __: [], __h: [] });
|
66
|
+
return t2 >= i2.__.length && i2.__.push({ __V: c }), i2.__[t2];
|
67
|
+
}
|
68
|
+
function h(n) {
|
69
|
+
return o$1 = 1, s(B$1, n);
|
70
|
+
}
|
71
|
+
function s(n, u2, i2) {
|
72
|
+
var o2 = d(t++, 2);
|
73
|
+
if (o2.t = n, !o2.__c && (o2.__ = [i2 ? i2(u2) : B$1(void 0, u2), function(n2) {
|
74
|
+
var t2 = o2.__N ? o2.__N[0] : o2.__[0], r2 = o2.t(t2, n2);
|
75
|
+
t2 !== r2 && (o2.__N = [r2, o2.__[1]], o2.__c.setState({}));
|
76
|
+
}], o2.__c = r, !r.u)) {
|
77
|
+
var f2 = function(n2, t2, r2) {
|
78
|
+
if (!o2.__c.__H)
|
79
|
+
return true;
|
80
|
+
var u3 = o2.__c.__H.__.filter(function(n3) {
|
81
|
+
return n3.__c;
|
82
|
+
});
|
83
|
+
if (u3.every(function(n3) {
|
84
|
+
return !n3.__N;
|
85
|
+
}))
|
86
|
+
return !c2 || c2.call(this, n2, t2, r2);
|
87
|
+
var i3 = false;
|
88
|
+
return u3.forEach(function(n3) {
|
89
|
+
if (n3.__N) {
|
90
|
+
var t3 = n3.__[0];
|
91
|
+
n3.__ = n3.__N, n3.__N = void 0, t3 !== n3.__[0] && (i3 = true);
|
92
|
+
}
|
93
|
+
}), !(!i3 && o2.__c.props === n2) && (!c2 || c2.call(this, n2, t2, r2));
|
94
|
+
};
|
95
|
+
r.u = true;
|
96
|
+
var c2 = r.shouldComponentUpdate, e2 = r.componentWillUpdate;
|
97
|
+
r.componentWillUpdate = function(n2, t2, r2) {
|
98
|
+
if (this.__e) {
|
99
|
+
var u3 = c2;
|
100
|
+
c2 = void 0, f2(n2, t2, r2), c2 = u3;
|
101
|
+
}
|
102
|
+
e2 && e2.call(this, n2, t2, r2);
|
103
|
+
}, r.shouldComponentUpdate = f2;
|
104
|
+
}
|
105
|
+
return o2.__N || o2.__;
|
106
|
+
}
|
107
|
+
function p(u2, i2) {
|
108
|
+
var o2 = d(t++, 3);
|
109
|
+
!preact.options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__H.__h.push(o2));
|
110
|
+
}
|
111
|
+
function y(u2, i2) {
|
112
|
+
var o2 = d(t++, 4);
|
113
|
+
!preact.options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__h.push(o2));
|
114
|
+
}
|
115
|
+
function _$1(n) {
|
116
|
+
return o$1 = 5, F$1(function() {
|
117
|
+
return { current: n };
|
118
|
+
}, []);
|
119
|
+
}
|
120
|
+
function F$1(n, r2) {
|
121
|
+
var u2 = d(t++, 7);
|
122
|
+
return z(u2.__H, r2) ? (u2.__V = n(), u2.i = r2, u2.__h = n, u2.__V) : u2.__;
|
123
|
+
}
|
124
|
+
function q$1(n) {
|
125
|
+
var u2 = r.context[n.__c], i2 = d(t++, 9);
|
126
|
+
return i2.c = n, u2 ? (null == i2.__ && (i2.__ = true, u2.sub(r)), u2.props.value) : n.__;
|
127
|
+
}
|
128
|
+
function b() {
|
129
|
+
for (var t2; t2 = f.shift(); )
|
130
|
+
if (t2.__P && t2.__H)
|
131
|
+
try {
|
132
|
+
t2.__H.__h.forEach(k), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
|
133
|
+
} catch (r2) {
|
134
|
+
t2.__H.__h = [], preact.options.__e(r2, t2.__v);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
preact.options.__b = function(n) {
|
138
|
+
r = null, e && e(n);
|
139
|
+
}, preact.options.__r = function(n) {
|
140
|
+
a && a(n), t = 0;
|
141
|
+
var i2 = (r = n.__c).__H;
|
142
|
+
i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n2) {
|
143
|
+
n2.__N && (n2.__ = n2.__N), n2.__V = c, n2.__N = n2.i = void 0;
|
144
|
+
})) : (i2.__h.forEach(k), i2.__h.forEach(w$1), i2.__h = [])), u = r;
|
145
|
+
}, preact.options.diffed = function(t2) {
|
146
|
+
v && v(t2);
|
147
|
+
var o2 = t2.__c;
|
148
|
+
o2 && o2.__H && (o2.__H.__h.length && (1 !== f.push(o2) && i === preact.options.requestAnimationFrame || ((i = preact.options.requestAnimationFrame) || j)(b)), o2.__H.__.forEach(function(n) {
|
149
|
+
n.i && (n.__H = n.i), n.__V !== c && (n.__ = n.__V), n.i = void 0, n.__V = c;
|
150
|
+
})), u = r = null;
|
151
|
+
}, preact.options.__c = function(t2, r2) {
|
152
|
+
r2.some(function(t3) {
|
153
|
+
try {
|
154
|
+
t3.__h.forEach(k), t3.__h = t3.__h.filter(function(n) {
|
155
|
+
return !n.__ || w$1(n);
|
156
|
+
});
|
157
|
+
} catch (u2) {
|
158
|
+
r2.some(function(n) {
|
159
|
+
n.__h && (n.__h = []);
|
160
|
+
}), r2 = [], preact.options.__e(u2, t3.__v);
|
161
|
+
}
|
162
|
+
}), l && l(t2, r2);
|
163
|
+
}, preact.options.unmount = function(t2) {
|
164
|
+
m && m(t2);
|
165
|
+
var r2, u2 = t2.__c;
|
166
|
+
u2 && u2.__H && (u2.__H.__.forEach(function(n) {
|
167
|
+
try {
|
168
|
+
k(n);
|
169
|
+
} catch (n2) {
|
170
|
+
r2 = n2;
|
171
|
+
}
|
172
|
+
}), u2.__H = void 0, r2 && preact.options.__e(r2, u2.__v));
|
173
|
+
};
|
174
|
+
var g$1 = "function" == typeof requestAnimationFrame;
|
175
|
+
function j(n) {
|
176
|
+
var t2, r2 = function() {
|
177
|
+
clearTimeout(u2), g$1 && cancelAnimationFrame(t2), setTimeout(n);
|
178
|
+
}, u2 = setTimeout(r2, 100);
|
179
|
+
g$1 && (t2 = requestAnimationFrame(r2));
|
180
|
+
}
|
181
|
+
function k(n) {
|
182
|
+
var t2 = r, u2 = n.__c;
|
183
|
+
"function" == typeof u2 && (n.__c = void 0, u2()), r = t2;
|
184
|
+
}
|
185
|
+
function w$1(n) {
|
186
|
+
var t2 = r;
|
187
|
+
n.__c = n.__(), r = t2;
|
188
|
+
}
|
189
|
+
function z(n, t2) {
|
190
|
+
return !n || n.length !== t2.length || t2.some(function(t3, r2) {
|
191
|
+
return t3 !== n[r2];
|
192
|
+
});
|
193
|
+
}
|
194
|
+
function B$1(n, t2) {
|
195
|
+
return "function" == typeof t2 ? t2(n) : t2;
|
196
|
+
}
|
197
|
+
function g(n, t2) {
|
198
|
+
for (var e2 in t2)
|
199
|
+
n[e2] = t2[e2];
|
200
|
+
return n;
|
201
|
+
}
|
202
|
+
function C(n, t2) {
|
203
|
+
for (var e2 in n)
|
204
|
+
if ("__source" !== e2 && !(e2 in t2))
|
205
|
+
return true;
|
206
|
+
for (var r2 in t2)
|
207
|
+
if ("__source" !== r2 && n[r2] !== t2[r2])
|
208
|
+
return true;
|
209
|
+
return false;
|
210
|
+
}
|
211
|
+
function w(n) {
|
212
|
+
this.props = n;
|
213
|
+
}
|
214
|
+
(w.prototype = new preact.Component()).isPureReactComponent = true, w.prototype.shouldComponentUpdate = function(n, t2) {
|
215
|
+
return C(this.props, n) || C(this.state, t2);
|
216
|
+
};
|
217
|
+
var R = preact.options.__b;
|
218
|
+
preact.options.__b = function(n) {
|
219
|
+
n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), R && R(n);
|
220
|
+
};
|
221
|
+
var T = preact.options.__e;
|
222
|
+
preact.options.__e = function(n, t2, e2, r2) {
|
223
|
+
if (n.then) {
|
224
|
+
for (var u2, o2 = t2; o2 = o2.__; )
|
225
|
+
if ((u2 = o2.__c) && u2.__c)
|
226
|
+
return null == t2.__e && (t2.__e = e2.__e, t2.__k = e2.__k), u2.__c(n, t2);
|
227
|
+
}
|
228
|
+
T(n, t2, e2, r2);
|
229
|
+
};
|
230
|
+
var I = preact.options.unmount;
|
231
|
+
function L(n, t2, e2) {
|
232
|
+
return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) {
|
233
|
+
"function" == typeof n2.__c && n2.__c();
|
234
|
+
}), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e2 && (n.__c.__P = t2), n.__c = null), n.__k = n.__k && n.__k.map(function(n2) {
|
235
|
+
return L(n2, t2, e2);
|
236
|
+
})), n;
|
237
|
+
}
|
238
|
+
function U(n, t2, e2) {
|
239
|
+
return n && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) {
|
240
|
+
return U(n2, t2, e2);
|
241
|
+
}), n.__c && n.__c.__P === t2 && (n.__e && e2.insertBefore(n.__e, n.__d), n.__c.__e = true, n.__c.__P = e2)), n;
|
242
|
+
}
|
243
|
+
function D() {
|
244
|
+
this.__u = 0, this.t = null, this.__b = null;
|
245
|
+
}
|
246
|
+
function F(n) {
|
247
|
+
var t2 = n.__.__c;
|
248
|
+
return t2 && t2.__a && t2.__a(n);
|
249
|
+
}
|
250
|
+
function V() {
|
251
|
+
this.u = null, this.o = null;
|
252
|
+
}
|
253
|
+
preact.options.unmount = function(n) {
|
254
|
+
var t2 = n.__c;
|
255
|
+
t2 && t2.__R && t2.__R(), t2 && true === n.__h && (n.type = null), I && I(n);
|
256
|
+
}, (D.prototype = new preact.Component()).__c = function(n, t2) {
|
257
|
+
var e2 = t2.__c, r2 = this;
|
258
|
+
null == r2.t && (r2.t = []), r2.t.push(e2);
|
259
|
+
var u2 = F(r2.__v), o2 = false, i2 = function() {
|
260
|
+
o2 || (o2 = true, e2.__R = null, u2 ? u2(l2) : l2());
|
261
|
+
};
|
262
|
+
e2.__R = i2;
|
263
|
+
var l2 = function() {
|
264
|
+
if (!--r2.__u) {
|
265
|
+
if (r2.state.__a) {
|
266
|
+
var n2 = r2.state.__a;
|
267
|
+
r2.__v.__k[0] = U(n2, n2.__c.__P, n2.__c.__O);
|
268
|
+
}
|
269
|
+
var t3;
|
270
|
+
for (r2.setState({ __a: r2.__b = null }); t3 = r2.t.pop(); )
|
271
|
+
t3.forceUpdate();
|
272
|
+
}
|
273
|
+
}, c2 = true === t2.__h;
|
274
|
+
r2.__u++ || c2 || r2.setState({ __a: r2.__b = r2.__v.__k[0] }), n.then(i2, i2);
|
275
|
+
}, D.prototype.componentWillUnmount = function() {
|
276
|
+
this.t = [];
|
277
|
+
}, D.prototype.render = function(n, e2) {
|
278
|
+
if (this.__b) {
|
279
|
+
if (this.__v.__k) {
|
280
|
+
var r2 = document.createElement("div"), o2 = this.__v.__k[0].__c;
|
281
|
+
this.__v.__k[0] = L(this.__b, r2, o2.__O = o2.__P);
|
282
|
+
}
|
283
|
+
this.__b = null;
|
284
|
+
}
|
285
|
+
var i2 = e2.__a && preact.createElement(preact.Fragment, null, n.fallback);
|
286
|
+
return i2 && (i2.__h = null), [preact.createElement(preact.Fragment, null, e2.__a ? null : n.children), i2];
|
287
|
+
};
|
288
|
+
var W = function(n, t2, e2) {
|
289
|
+
if (++e2[1] === e2[0] && n.o.delete(t2), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.o.size))
|
290
|
+
for (e2 = n.u; e2; ) {
|
291
|
+
for (; e2.length > 3; )
|
292
|
+
e2.pop()();
|
293
|
+
if (e2[1] < e2[0])
|
294
|
+
break;
|
295
|
+
n.u = e2 = e2[2];
|
296
|
+
}
|
297
|
+
};
|
298
|
+
(V.prototype = new preact.Component()).__a = function(n) {
|
299
|
+
var t2 = this, e2 = F(t2.__v), r2 = t2.o.get(n);
|
300
|
+
return r2[0]++, function(u2) {
|
301
|
+
var o2 = function() {
|
302
|
+
t2.props.revealOrder ? (r2.push(u2), W(t2, n, r2)) : u2();
|
303
|
+
};
|
304
|
+
e2 ? e2(o2) : o2();
|
305
|
+
};
|
306
|
+
}, V.prototype.render = function(n) {
|
307
|
+
this.u = null, this.o = /* @__PURE__ */ new Map();
|
308
|
+
var t2 = preact.toChildArray(n.children);
|
309
|
+
n.revealOrder && "b" === n.revealOrder[0] && t2.reverse();
|
310
|
+
for (var e2 = t2.length; e2--; )
|
311
|
+
this.o.set(t2[e2], this.u = [1, 0, this.u]);
|
312
|
+
return n.children;
|
313
|
+
}, V.prototype.componentDidUpdate = V.prototype.componentDidMount = function() {
|
314
|
+
var n = this;
|
315
|
+
this.o.forEach(function(t2, e2) {
|
316
|
+
W(n, e2, t2);
|
317
|
+
});
|
318
|
+
};
|
319
|
+
var B = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, H = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, Z = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, Y = /[A-Z0-9]/g, $ = "undefined" != typeof document, q = function(n) {
|
320
|
+
return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
|
321
|
+
};
|
322
|
+
preact.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t2) {
|
323
|
+
Object.defineProperty(preact.Component.prototype, t2, { configurable: true, get: function() {
|
324
|
+
return this["UNSAFE_" + t2];
|
325
|
+
}, set: function(n) {
|
326
|
+
Object.defineProperty(this, t2, { configurable: true, writable: true, value: n });
|
327
|
+
} });
|
328
|
+
});
|
329
|
+
var K = preact.options.event;
|
330
|
+
function Q() {
|
331
|
+
}
|
332
|
+
function X() {
|
333
|
+
return this.cancelBubble;
|
334
|
+
}
|
335
|
+
function nn() {
|
336
|
+
return this.defaultPrevented;
|
337
|
+
}
|
338
|
+
preact.options.event = function(n) {
|
339
|
+
return K && (n = K(n)), n.persist = Q, n.isPropagationStopped = X, n.isDefaultPrevented = nn, n.nativeEvent = n;
|
340
|
+
};
|
341
|
+
var en = { enumerable: false, configurable: true, get: function() {
|
342
|
+
return this.class;
|
343
|
+
} }, rn = preact.options.vnode;
|
344
|
+
preact.options.vnode = function(n) {
|
345
|
+
"string" == typeof n.type && function(n2) {
|
346
|
+
var t2 = n2.props, e2 = n2.type, u2 = {};
|
347
|
+
for (var o2 in t2) {
|
348
|
+
var i2 = t2[o2];
|
349
|
+
if (!("value" === o2 && "defaultValue" in t2 && null == i2 || $ && "children" === o2 && "noscript" === e2 || "class" === o2 || "className" === o2)) {
|
350
|
+
var l2 = o2.toLowerCase();
|
351
|
+
"defaultValue" === o2 && "value" in t2 && null == t2.value ? o2 = "value" : "download" === o2 && true === i2 ? i2 = "" : "ondoubleclick" === l2 ? o2 = "ondblclick" : "onchange" !== l2 || "input" !== e2 && "textarea" !== e2 || q(t2.type) ? "onfocus" === l2 ? o2 = "onfocusin" : "onblur" === l2 ? o2 = "onfocusout" : Z.test(o2) ? o2 = l2 : -1 === e2.indexOf("-") && H.test(o2) ? o2 = o2.replace(Y, "-$&").toLowerCase() : null === i2 && (i2 = void 0) : l2 = o2 = "oninput", "oninput" === l2 && u2[o2 = l2] && (o2 = "oninputCapture"), u2[o2] = i2;
|
352
|
+
}
|
353
|
+
}
|
354
|
+
"select" == e2 && u2.multiple && Array.isArray(u2.value) && (u2.value = preact.toChildArray(t2.children).forEach(function(n3) {
|
355
|
+
n3.props.selected = -1 != u2.value.indexOf(n3.props.value);
|
356
|
+
})), "select" == e2 && null != u2.defaultValue && (u2.value = preact.toChildArray(t2.children).forEach(function(n3) {
|
357
|
+
n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value;
|
358
|
+
})), t2.class && !t2.className ? (u2.class = t2.class, Object.defineProperty(u2, "className", en)) : (t2.className && !t2.class || t2.class && t2.className) && (u2.class = u2.className = t2.className), n2.props = u2;
|
359
|
+
}(n), n.$$typeof = B, rn && rn(n);
|
360
|
+
};
|
361
|
+
var un = preact.options.__r;
|
362
|
+
preact.options.__r = function(n) {
|
363
|
+
un && un(n), n.__c;
|
364
|
+
};
|
365
|
+
var on = preact.options.diffed;
|
366
|
+
preact.options.diffed = function(n) {
|
367
|
+
on && on(n);
|
368
|
+
var t2 = n.props, e2 = n.__e;
|
369
|
+
null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
|
370
|
+
};
|
371
|
+
const reset = "";
|
372
|
+
const root$i = "_root_1w7t1_1";
|
373
|
+
const icon$1 = "_icon_1w7t1_5";
|
374
|
+
const iconTarget$1 = "_iconTarget_1w7t1_17";
|
375
|
+
const body$6 = "_body_1w7t1_22";
|
376
|
+
const bodyOpen$1 = "_bodyOpen_1w7t1_30";
|
377
|
+
const simpleGift_in = "_simpleGift_in_1w7t1_1";
|
378
|
+
const close$1 = "_close_1w7t1_43";
|
379
|
+
const arrow$1 = "_arrow_1w7t1_57";
|
380
|
+
const container$2 = "_container_1w7t1_67";
|
381
|
+
const inner$1 = "_inner_1w7t1_73";
|
382
|
+
const logo$6 = "_logo_1w7t1_80";
|
383
|
+
const text$4 = "_text_1w7t1_86";
|
384
|
+
const button$6 = "_button_1w7t1_99";
|
385
|
+
const legal$5 = "_legal_1w7t1_108";
|
386
|
+
const legalOpen$1 = "_legalOpen_1w7t1_125";
|
387
|
+
const legalText$1 = "_legalText_1w7t1_133";
|
388
|
+
const legalButton$1 = "_legalButton_1w7t1_148";
|
389
|
+
const fadein$1 = "_fadein_1w7t1_1";
|
390
|
+
const pulse$1 = "_pulse_1w7t1_1";
|
391
|
+
const gradient$1 = "_gradient_1w7t1_1";
|
392
|
+
const wiggle$1 = "_wiggle_1w7t1_1";
|
393
|
+
const styles$d = {
|
394
|
+
root: root$i,
|
395
|
+
icon: icon$1,
|
396
|
+
iconTarget: iconTarget$1,
|
397
|
+
body: body$6,
|
398
|
+
bodyOpen: bodyOpen$1,
|
399
|
+
simpleGift_in,
|
400
|
+
close: close$1,
|
401
|
+
arrow: arrow$1,
|
402
|
+
container: container$2,
|
403
|
+
inner: inner$1,
|
404
|
+
logo: logo$6,
|
405
|
+
text: text$4,
|
406
|
+
button: button$6,
|
407
|
+
legal: legal$5,
|
408
|
+
legalOpen: legalOpen$1,
|
409
|
+
legalText: legalText$1,
|
410
|
+
legalButton: legalButton$1,
|
411
|
+
fadein: fadein$1,
|
412
|
+
pulse: pulse$1,
|
413
|
+
gradient: gradient$1,
|
414
|
+
wiggle: wiggle$1
|
415
|
+
};
|
416
|
+
const useGiftOpen = (delay = 1e3) => {
|
417
|
+
const [isOpen, setIsOpen] = h(false);
|
418
|
+
const timerRef = _$1(null);
|
419
|
+
const onToggle = () => {
|
420
|
+
clearTimeout(timerRef.current);
|
421
|
+
setIsOpen((prev) => !prev);
|
422
|
+
};
|
423
|
+
p(() => {
|
424
|
+
timerRef.current = setTimeout(() => {
|
425
|
+
setIsOpen(true);
|
426
|
+
}, delay);
|
427
|
+
return () => clearTimeout(timerRef.current);
|
428
|
+
}, [delay]);
|
429
|
+
return {
|
430
|
+
isOpen,
|
431
|
+
onToggle
|
432
|
+
};
|
433
|
+
};
|
434
|
+
var _ = 0;
|
435
|
+
function o(o2, e2, n, t2, f2, l2) {
|
436
|
+
var s2, u2, a2 = {};
|
437
|
+
for (u2 in e2)
|
438
|
+
"ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
|
439
|
+
var i2 = { type: o2, props: a2, key: n, ref: s2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: --_, __source: f2, __self: l2 };
|
440
|
+
if ("function" == typeof o2 && (s2 = o2.defaultProps))
|
441
|
+
for (u2 in s2)
|
442
|
+
void 0 === a2[u2] && (a2[u2] = s2[u2]);
|
443
|
+
return preact.options.vnode && preact.options.vnode(i2), i2;
|
444
|
+
}
|
445
|
+
const State = preact.createContext();
|
446
|
+
const StateContext = ({
|
447
|
+
children,
|
448
|
+
value
|
449
|
+
}) => {
|
450
|
+
return o(State.Provider, {
|
451
|
+
value,
|
452
|
+
children
|
453
|
+
});
|
454
|
+
};
|
455
|
+
const render = (vNode) => (target, state) => preact.render(o(StateContext, {
|
456
|
+
value: state,
|
457
|
+
children: vNode
|
458
|
+
}), target);
|
459
|
+
const useCurrentState = () => q$1(State);
|
460
|
+
function listCacheClear$1() {
|
461
|
+
this.__data__ = [];
|
462
|
+
this.size = 0;
|
463
|
+
}
|
464
|
+
var _listCacheClear = listCacheClear$1;
|
465
|
+
function eq$4(value, other) {
|
466
|
+
return value === other || value !== value && other !== other;
|
467
|
+
}
|
468
|
+
var eq_1 = eq$4;
|
469
|
+
var eq$3 = eq_1;
|
470
|
+
function assocIndexOf$4(array, key) {
|
471
|
+
var length = array.length;
|
472
|
+
while (length--) {
|
473
|
+
if (eq$3(array[length][0], key)) {
|
474
|
+
return length;
|
475
|
+
}
|
476
|
+
}
|
477
|
+
return -1;
|
478
|
+
}
|
479
|
+
var _assocIndexOf = assocIndexOf$4;
|
480
|
+
var assocIndexOf$3 = _assocIndexOf;
|
481
|
+
var arrayProto = Array.prototype;
|
482
|
+
var splice = arrayProto.splice;
|
483
|
+
function listCacheDelete$1(key) {
|
484
|
+
var data = this.__data__, index2 = assocIndexOf$3(data, key);
|
485
|
+
if (index2 < 0) {
|
486
|
+
return false;
|
487
|
+
}
|
488
|
+
var lastIndex = data.length - 1;
|
489
|
+
if (index2 == lastIndex) {
|
490
|
+
data.pop();
|
491
|
+
} else {
|
492
|
+
splice.call(data, index2, 1);
|
493
|
+
}
|
494
|
+
--this.size;
|
495
|
+
return true;
|
496
|
+
}
|
497
|
+
var _listCacheDelete = listCacheDelete$1;
|
498
|
+
var assocIndexOf$2 = _assocIndexOf;
|
499
|
+
function listCacheGet$1(key) {
|
500
|
+
var data = this.__data__, index2 = assocIndexOf$2(data, key);
|
501
|
+
return index2 < 0 ? void 0 : data[index2][1];
|
502
|
+
}
|
503
|
+
var _listCacheGet = listCacheGet$1;
|
504
|
+
var assocIndexOf$1 = _assocIndexOf;
|
505
|
+
function listCacheHas$1(key) {
|
506
|
+
return assocIndexOf$1(this.__data__, key) > -1;
|
507
|
+
}
|
508
|
+
var _listCacheHas = listCacheHas$1;
|
509
|
+
var assocIndexOf = _assocIndexOf;
|
510
|
+
function listCacheSet$1(key, value) {
|
511
|
+
var data = this.__data__, index2 = assocIndexOf(data, key);
|
512
|
+
if (index2 < 0) {
|
513
|
+
++this.size;
|
514
|
+
data.push([key, value]);
|
515
|
+
} else {
|
516
|
+
data[index2][1] = value;
|
517
|
+
}
|
518
|
+
return this;
|
519
|
+
}
|
520
|
+
var _listCacheSet = listCacheSet$1;
|
521
|
+
var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;
|
522
|
+
function ListCache$4(entries) {
|
523
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
524
|
+
this.clear();
|
525
|
+
while (++index2 < length) {
|
526
|
+
var entry = entries[index2];
|
527
|
+
this.set(entry[0], entry[1]);
|
528
|
+
}
|
529
|
+
}
|
530
|
+
ListCache$4.prototype.clear = listCacheClear;
|
531
|
+
ListCache$4.prototype["delete"] = listCacheDelete;
|
532
|
+
ListCache$4.prototype.get = listCacheGet;
|
533
|
+
ListCache$4.prototype.has = listCacheHas;
|
534
|
+
ListCache$4.prototype.set = listCacheSet;
|
535
|
+
var _ListCache = ListCache$4;
|
536
|
+
var ListCache$3 = _ListCache;
|
537
|
+
function stackClear$1() {
|
538
|
+
this.__data__ = new ListCache$3();
|
539
|
+
this.size = 0;
|
540
|
+
}
|
541
|
+
var _stackClear = stackClear$1;
|
542
|
+
function stackDelete$1(key) {
|
543
|
+
var data = this.__data__, result = data["delete"](key);
|
544
|
+
this.size = data.size;
|
545
|
+
return result;
|
546
|
+
}
|
547
|
+
var _stackDelete = stackDelete$1;
|
548
|
+
function stackGet$1(key) {
|
549
|
+
return this.__data__.get(key);
|
550
|
+
}
|
551
|
+
var _stackGet = stackGet$1;
|
552
|
+
function stackHas$1(key) {
|
553
|
+
return this.__data__.has(key);
|
554
|
+
}
|
555
|
+
var _stackHas = stackHas$1;
|
556
|
+
var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
|
557
|
+
var _freeGlobal = freeGlobal$1;
|
558
|
+
var freeGlobal = _freeGlobal;
|
559
|
+
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
560
|
+
var root$h = freeGlobal || freeSelf || Function("return this")();
|
561
|
+
var _root = root$h;
|
562
|
+
var root$g = _root;
|
563
|
+
var Symbol$3 = root$g.Symbol;
|
564
|
+
var _Symbol = Symbol$3;
|
565
|
+
var Symbol$2 = _Symbol;
|
566
|
+
var objectProto$a = Object.prototype;
|
567
|
+
var hasOwnProperty$8 = objectProto$a.hasOwnProperty;
|
568
|
+
var nativeObjectToString$1 = objectProto$a.toString;
|
569
|
+
var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;
|
570
|
+
function getRawTag$1(value) {
|
571
|
+
var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];
|
572
|
+
try {
|
573
|
+
value[symToStringTag$1] = void 0;
|
574
|
+
var unmasked = true;
|
575
|
+
} catch (e2) {
|
576
|
+
}
|
577
|
+
var result = nativeObjectToString$1.call(value);
|
578
|
+
if (unmasked) {
|
579
|
+
if (isOwn) {
|
580
|
+
value[symToStringTag$1] = tag;
|
581
|
+
} else {
|
582
|
+
delete value[symToStringTag$1];
|
583
|
+
}
|
584
|
+
}
|
585
|
+
return result;
|
586
|
+
}
|
587
|
+
var _getRawTag = getRawTag$1;
|
588
|
+
var objectProto$9 = Object.prototype;
|
589
|
+
var nativeObjectToString = objectProto$9.toString;
|
590
|
+
function objectToString$1(value) {
|
591
|
+
return nativeObjectToString.call(value);
|
592
|
+
}
|
593
|
+
var _objectToString = objectToString$1;
|
594
|
+
var Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;
|
595
|
+
var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
|
596
|
+
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
|
597
|
+
function baseGetTag$4(value) {
|
598
|
+
if (value == null) {
|
599
|
+
return value === void 0 ? undefinedTag : nullTag;
|
600
|
+
}
|
601
|
+
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
|
602
|
+
}
|
603
|
+
var _baseGetTag = baseGetTag$4;
|
604
|
+
function isObject$7(value) {
|
605
|
+
var type = typeof value;
|
606
|
+
return value != null && (type == "object" || type == "function");
|
607
|
+
}
|
608
|
+
var isObject_1 = isObject$7;
|
609
|
+
var baseGetTag$3 = _baseGetTag, isObject$6 = isObject_1;
|
610
|
+
var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
|
611
|
+
function isFunction$3(value) {
|
612
|
+
if (!isObject$6(value)) {
|
613
|
+
return false;
|
614
|
+
}
|
615
|
+
var tag = baseGetTag$3(value);
|
616
|
+
return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
|
617
|
+
}
|
618
|
+
var isFunction_1 = isFunction$3;
|
619
|
+
var root$f = _root;
|
620
|
+
var coreJsData$1 = root$f["__core-js_shared__"];
|
621
|
+
var _coreJsData = coreJsData$1;
|
622
|
+
var coreJsData = _coreJsData;
|
623
|
+
var maskSrcKey = function() {
|
624
|
+
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
|
625
|
+
return uid ? "Symbol(src)_1." + uid : "";
|
626
|
+
}();
|
627
|
+
function isMasked$1(func) {
|
628
|
+
return !!maskSrcKey && maskSrcKey in func;
|
629
|
+
}
|
630
|
+
var _isMasked = isMasked$1;
|
631
|
+
var funcProto$2 = Function.prototype;
|
632
|
+
var funcToString$2 = funcProto$2.toString;
|
633
|
+
function toSource$1(func) {
|
634
|
+
if (func != null) {
|
635
|
+
try {
|
636
|
+
return funcToString$2.call(func);
|
637
|
+
} catch (e2) {
|
638
|
+
}
|
639
|
+
try {
|
640
|
+
return func + "";
|
641
|
+
} catch (e2) {
|
642
|
+
}
|
643
|
+
}
|
644
|
+
return "";
|
645
|
+
}
|
646
|
+
var _toSource = toSource$1;
|
647
|
+
var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$5 = isObject_1, toSource = _toSource;
|
648
|
+
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
649
|
+
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
650
|
+
var funcProto$1 = Function.prototype, objectProto$8 = Object.prototype;
|
651
|
+
var funcToString$1 = funcProto$1.toString;
|
652
|
+
var hasOwnProperty$7 = objectProto$8.hasOwnProperty;
|
653
|
+
var reIsNative = RegExp(
|
654
|
+
"^" + funcToString$1.call(hasOwnProperty$7).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
|
655
|
+
);
|
656
|
+
function baseIsNative$1(value) {
|
657
|
+
if (!isObject$5(value) || isMasked(value)) {
|
658
|
+
return false;
|
659
|
+
}
|
660
|
+
var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
|
661
|
+
return pattern.test(toSource(value));
|
662
|
+
}
|
663
|
+
var _baseIsNative = baseIsNative$1;
|
664
|
+
function getValue$1(object, key) {
|
665
|
+
return object == null ? void 0 : object[key];
|
666
|
+
}
|
667
|
+
var _getValue = getValue$1;
|
668
|
+
var baseIsNative = _baseIsNative, getValue = _getValue;
|
669
|
+
function getNative$3(object, key) {
|
670
|
+
var value = getValue(object, key);
|
671
|
+
return baseIsNative(value) ? value : void 0;
|
672
|
+
}
|
673
|
+
var _getNative = getNative$3;
|
674
|
+
var getNative$2 = _getNative, root$e = _root;
|
675
|
+
var Map$3 = getNative$2(root$e, "Map");
|
676
|
+
var _Map = Map$3;
|
677
|
+
var getNative$1 = _getNative;
|
678
|
+
var nativeCreate$4 = getNative$1(Object, "create");
|
679
|
+
var _nativeCreate = nativeCreate$4;
|
680
|
+
var nativeCreate$3 = _nativeCreate;
|
681
|
+
function hashClear$1() {
|
682
|
+
this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};
|
683
|
+
this.size = 0;
|
684
|
+
}
|
685
|
+
var _hashClear = hashClear$1;
|
686
|
+
function hashDelete$1(key) {
|
687
|
+
var result = this.has(key) && delete this.__data__[key];
|
688
|
+
this.size -= result ? 1 : 0;
|
689
|
+
return result;
|
690
|
+
}
|
691
|
+
var _hashDelete = hashDelete$1;
|
692
|
+
var nativeCreate$2 = _nativeCreate;
|
693
|
+
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
|
694
|
+
var objectProto$7 = Object.prototype;
|
695
|
+
var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
|
696
|
+
function hashGet$1(key) {
|
697
|
+
var data = this.__data__;
|
698
|
+
if (nativeCreate$2) {
|
699
|
+
var result = data[key];
|
700
|
+
return result === HASH_UNDEFINED$1 ? void 0 : result;
|
701
|
+
}
|
702
|
+
return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
|
703
|
+
}
|
704
|
+
var _hashGet = hashGet$1;
|
705
|
+
var nativeCreate$1 = _nativeCreate;
|
706
|
+
var objectProto$6 = Object.prototype;
|
707
|
+
var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
|
708
|
+
function hashHas$1(key) {
|
709
|
+
var data = this.__data__;
|
710
|
+
return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
|
711
|
+
}
|
712
|
+
var _hashHas = hashHas$1;
|
713
|
+
var nativeCreate = _nativeCreate;
|
714
|
+
var HASH_UNDEFINED = "__lodash_hash_undefined__";
|
715
|
+
function hashSet$1(key, value) {
|
716
|
+
var data = this.__data__;
|
717
|
+
this.size += this.has(key) ? 0 : 1;
|
718
|
+
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
|
719
|
+
return this;
|
720
|
+
}
|
721
|
+
var _hashSet = hashSet$1;
|
722
|
+
var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;
|
723
|
+
function Hash$1(entries) {
|
724
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
725
|
+
this.clear();
|
726
|
+
while (++index2 < length) {
|
727
|
+
var entry = entries[index2];
|
728
|
+
this.set(entry[0], entry[1]);
|
729
|
+
}
|
730
|
+
}
|
731
|
+
Hash$1.prototype.clear = hashClear;
|
732
|
+
Hash$1.prototype["delete"] = hashDelete;
|
733
|
+
Hash$1.prototype.get = hashGet;
|
734
|
+
Hash$1.prototype.has = hashHas;
|
735
|
+
Hash$1.prototype.set = hashSet;
|
736
|
+
var _Hash = Hash$1;
|
737
|
+
var Hash = _Hash, ListCache$2 = _ListCache, Map$2 = _Map;
|
738
|
+
function mapCacheClear$1() {
|
739
|
+
this.size = 0;
|
740
|
+
this.__data__ = {
|
741
|
+
"hash": new Hash(),
|
742
|
+
"map": new (Map$2 || ListCache$2)(),
|
743
|
+
"string": new Hash()
|
744
|
+
};
|
745
|
+
}
|
746
|
+
var _mapCacheClear = mapCacheClear$1;
|
747
|
+
function isKeyable$1(value) {
|
748
|
+
var type = typeof value;
|
749
|
+
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
|
750
|
+
}
|
751
|
+
var _isKeyable = isKeyable$1;
|
752
|
+
var isKeyable = _isKeyable;
|
753
|
+
function getMapData$4(map, key) {
|
754
|
+
var data = map.__data__;
|
755
|
+
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
|
756
|
+
}
|
757
|
+
var _getMapData = getMapData$4;
|
758
|
+
var getMapData$3 = _getMapData;
|
759
|
+
function mapCacheDelete$1(key) {
|
760
|
+
var result = getMapData$3(this, key)["delete"](key);
|
761
|
+
this.size -= result ? 1 : 0;
|
762
|
+
return result;
|
763
|
+
}
|
764
|
+
var _mapCacheDelete = mapCacheDelete$1;
|
765
|
+
var getMapData$2 = _getMapData;
|
766
|
+
function mapCacheGet$1(key) {
|
767
|
+
return getMapData$2(this, key).get(key);
|
768
|
+
}
|
769
|
+
var _mapCacheGet = mapCacheGet$1;
|
770
|
+
var getMapData$1 = _getMapData;
|
771
|
+
function mapCacheHas$1(key) {
|
772
|
+
return getMapData$1(this, key).has(key);
|
773
|
+
}
|
774
|
+
var _mapCacheHas = mapCacheHas$1;
|
775
|
+
var getMapData = _getMapData;
|
776
|
+
function mapCacheSet$1(key, value) {
|
777
|
+
var data = getMapData(this, key), size = data.size;
|
778
|
+
data.set(key, value);
|
779
|
+
this.size += data.size == size ? 0 : 1;
|
780
|
+
return this;
|
781
|
+
}
|
782
|
+
var _mapCacheSet = mapCacheSet$1;
|
783
|
+
var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;
|
784
|
+
function MapCache$1(entries) {
|
785
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
786
|
+
this.clear();
|
787
|
+
while (++index2 < length) {
|
788
|
+
var entry = entries[index2];
|
789
|
+
this.set(entry[0], entry[1]);
|
790
|
+
}
|
791
|
+
}
|
792
|
+
MapCache$1.prototype.clear = mapCacheClear;
|
793
|
+
MapCache$1.prototype["delete"] = mapCacheDelete;
|
794
|
+
MapCache$1.prototype.get = mapCacheGet;
|
795
|
+
MapCache$1.prototype.has = mapCacheHas;
|
796
|
+
MapCache$1.prototype.set = mapCacheSet;
|
797
|
+
var _MapCache = MapCache$1;
|
798
|
+
var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache;
|
799
|
+
var LARGE_ARRAY_SIZE = 200;
|
800
|
+
function stackSet$1(key, value) {
|
801
|
+
var data = this.__data__;
|
802
|
+
if (data instanceof ListCache$1) {
|
803
|
+
var pairs = data.__data__;
|
804
|
+
if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
|
805
|
+
pairs.push([key, value]);
|
806
|
+
this.size = ++data.size;
|
807
|
+
return this;
|
808
|
+
}
|
809
|
+
data = this.__data__ = new MapCache(pairs);
|
810
|
+
}
|
811
|
+
data.set(key, value);
|
812
|
+
this.size = data.size;
|
813
|
+
return this;
|
814
|
+
}
|
815
|
+
var _stackSet = stackSet$1;
|
816
|
+
var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
|
817
|
+
function Stack$1(entries) {
|
818
|
+
var data = this.__data__ = new ListCache(entries);
|
819
|
+
this.size = data.size;
|
820
|
+
}
|
821
|
+
Stack$1.prototype.clear = stackClear;
|
822
|
+
Stack$1.prototype["delete"] = stackDelete;
|
823
|
+
Stack$1.prototype.get = stackGet;
|
824
|
+
Stack$1.prototype.has = stackHas;
|
825
|
+
Stack$1.prototype.set = stackSet;
|
826
|
+
var _Stack = Stack$1;
|
827
|
+
var getNative = _getNative;
|
828
|
+
var defineProperty$2 = function() {
|
829
|
+
try {
|
830
|
+
var func = getNative(Object, "defineProperty");
|
831
|
+
func({}, "", {});
|
832
|
+
return func;
|
833
|
+
} catch (e2) {
|
834
|
+
}
|
835
|
+
}();
|
836
|
+
var _defineProperty = defineProperty$2;
|
837
|
+
var defineProperty$1 = _defineProperty;
|
838
|
+
function baseAssignValue$3(object, key, value) {
|
839
|
+
if (key == "__proto__" && defineProperty$1) {
|
840
|
+
defineProperty$1(object, key, {
|
841
|
+
"configurable": true,
|
842
|
+
"enumerable": true,
|
843
|
+
"value": value,
|
844
|
+
"writable": true
|
845
|
+
});
|
846
|
+
} else {
|
847
|
+
object[key] = value;
|
848
|
+
}
|
849
|
+
}
|
850
|
+
var _baseAssignValue = baseAssignValue$3;
|
851
|
+
var baseAssignValue$2 = _baseAssignValue, eq$2 = eq_1;
|
852
|
+
function assignMergeValue$2(object, key, value) {
|
853
|
+
if (value !== void 0 && !eq$2(object[key], value) || value === void 0 && !(key in object)) {
|
854
|
+
baseAssignValue$2(object, key, value);
|
855
|
+
}
|
856
|
+
}
|
857
|
+
var _assignMergeValue = assignMergeValue$2;
|
858
|
+
function createBaseFor$1(fromRight) {
|
859
|
+
return function(object, iteratee, keysFunc) {
|
860
|
+
var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
|
861
|
+
while (length--) {
|
862
|
+
var key = props[fromRight ? length : ++index2];
|
863
|
+
if (iteratee(iterable[key], key, iterable) === false) {
|
864
|
+
break;
|
865
|
+
}
|
866
|
+
}
|
867
|
+
return object;
|
868
|
+
};
|
869
|
+
}
|
870
|
+
var _createBaseFor = createBaseFor$1;
|
871
|
+
var createBaseFor = _createBaseFor;
|
872
|
+
var baseFor$1 = createBaseFor();
|
873
|
+
var _baseFor = baseFor$1;
|
874
|
+
var _cloneBufferExports = {};
|
875
|
+
var _cloneBuffer = {
|
876
|
+
get exports() {
|
877
|
+
return _cloneBufferExports;
|
878
|
+
},
|
879
|
+
set exports(v2) {
|
880
|
+
_cloneBufferExports = v2;
|
881
|
+
}
|
882
|
+
};
|
883
|
+
(function(module2, exports3) {
|
884
|
+
var root2 = _root;
|
885
|
+
var freeExports = exports3 && !exports3.nodeType && exports3;
|
886
|
+
var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
|
887
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
888
|
+
var Buffer = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;
|
889
|
+
function cloneBuffer2(buffer, isDeep) {
|
890
|
+
if (isDeep) {
|
891
|
+
return buffer.slice();
|
892
|
+
}
|
893
|
+
var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
|
894
|
+
buffer.copy(result);
|
895
|
+
return result;
|
896
|
+
}
|
897
|
+
module2.exports = cloneBuffer2;
|
898
|
+
})(_cloneBuffer, _cloneBufferExports);
|
899
|
+
var root$d = _root;
|
900
|
+
var Uint8Array$1 = root$d.Uint8Array;
|
901
|
+
var _Uint8Array = Uint8Array$1;
|
902
|
+
var Uint8Array = _Uint8Array;
|
903
|
+
function cloneArrayBuffer$1(arrayBuffer) {
|
904
|
+
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
|
905
|
+
new Uint8Array(result).set(new Uint8Array(arrayBuffer));
|
906
|
+
return result;
|
907
|
+
}
|
908
|
+
var _cloneArrayBuffer = cloneArrayBuffer$1;
|
909
|
+
var cloneArrayBuffer = _cloneArrayBuffer;
|
910
|
+
function cloneTypedArray$1(typedArray, isDeep) {
|
911
|
+
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
|
912
|
+
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
|
913
|
+
}
|
914
|
+
var _cloneTypedArray = cloneTypedArray$1;
|
915
|
+
function copyArray$1(source, array) {
|
916
|
+
var index2 = -1, length = source.length;
|
917
|
+
array || (array = Array(length));
|
918
|
+
while (++index2 < length) {
|
919
|
+
array[index2] = source[index2];
|
920
|
+
}
|
921
|
+
return array;
|
922
|
+
}
|
923
|
+
var _copyArray = copyArray$1;
|
924
|
+
var isObject$4 = isObject_1;
|
925
|
+
var objectCreate = Object.create;
|
926
|
+
var baseCreate$1 = function() {
|
927
|
+
function object() {
|
928
|
+
}
|
929
|
+
return function(proto) {
|
930
|
+
if (!isObject$4(proto)) {
|
931
|
+
return {};
|
932
|
+
}
|
933
|
+
if (objectCreate) {
|
934
|
+
return objectCreate(proto);
|
935
|
+
}
|
936
|
+
object.prototype = proto;
|
937
|
+
var result = new object();
|
938
|
+
object.prototype = void 0;
|
939
|
+
return result;
|
940
|
+
};
|
941
|
+
}();
|
942
|
+
var _baseCreate = baseCreate$1;
|
943
|
+
function overArg$1(func, transform) {
|
944
|
+
return function(arg) {
|
945
|
+
return func(transform(arg));
|
946
|
+
};
|
947
|
+
}
|
948
|
+
var _overArg = overArg$1;
|
949
|
+
var overArg = _overArg;
|
950
|
+
var getPrototype$2 = overArg(Object.getPrototypeOf, Object);
|
951
|
+
var _getPrototype = getPrototype$2;
|
952
|
+
var objectProto$5 = Object.prototype;
|
953
|
+
function isPrototype$2(value) {
|
954
|
+
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$5;
|
955
|
+
return value === proto;
|
956
|
+
}
|
957
|
+
var _isPrototype = isPrototype$2;
|
958
|
+
var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype$1 = _isPrototype;
|
959
|
+
function initCloneObject$1(object) {
|
960
|
+
return typeof object.constructor == "function" && !isPrototype$1(object) ? baseCreate(getPrototype$1(object)) : {};
|
961
|
+
}
|
962
|
+
var _initCloneObject = initCloneObject$1;
|
963
|
+
function isObjectLike$5(value) {
|
964
|
+
return value != null && typeof value == "object";
|
965
|
+
}
|
966
|
+
var isObjectLike_1 = isObjectLike$5;
|
967
|
+
var baseGetTag$2 = _baseGetTag, isObjectLike$4 = isObjectLike_1;
|
968
|
+
var argsTag$1 = "[object Arguments]";
|
969
|
+
function baseIsArguments$1(value) {
|
970
|
+
return isObjectLike$4(value) && baseGetTag$2(value) == argsTag$1;
|
971
|
+
}
|
972
|
+
var _baseIsArguments = baseIsArguments$1;
|
973
|
+
var baseIsArguments = _baseIsArguments, isObjectLike$3 = isObjectLike_1;
|
974
|
+
var objectProto$4 = Object.prototype;
|
975
|
+
var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
|
976
|
+
var propertyIsEnumerable = objectProto$4.propertyIsEnumerable;
|
977
|
+
var isArguments$2 = baseIsArguments(function() {
|
978
|
+
return arguments;
|
979
|
+
}()) ? baseIsArguments : function(value) {
|
980
|
+
return isObjectLike$3(value) && hasOwnProperty$4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
|
981
|
+
};
|
982
|
+
var isArguments_1 = isArguments$2;
|
983
|
+
var isArray$2 = Array.isArray;
|
984
|
+
var isArray_1 = isArray$2;
|
985
|
+
var MAX_SAFE_INTEGER$1 = 9007199254740991;
|
986
|
+
function isLength$2(value) {
|
987
|
+
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
|
988
|
+
}
|
989
|
+
var isLength_1 = isLength$2;
|
990
|
+
var isFunction$1 = isFunction_1, isLength$1 = isLength_1;
|
991
|
+
function isArrayLike$3(value) {
|
992
|
+
return value != null && isLength$1(value.length) && !isFunction$1(value);
|
993
|
+
}
|
994
|
+
var isArrayLike_1 = isArrayLike$3;
|
995
|
+
var isArrayLike$2 = isArrayLike_1, isObjectLike$2 = isObjectLike_1;
|
996
|
+
function isArrayLikeObject$1(value) {
|
997
|
+
return isObjectLike$2(value) && isArrayLike$2(value);
|
998
|
+
}
|
999
|
+
var isArrayLikeObject_1 = isArrayLikeObject$1;
|
1000
|
+
var isBufferExports = {};
|
1001
|
+
var isBuffer$2 = {
|
1002
|
+
get exports() {
|
1003
|
+
return isBufferExports;
|
1004
|
+
},
|
1005
|
+
set exports(v2) {
|
1006
|
+
isBufferExports = v2;
|
1007
|
+
}
|
1008
|
+
};
|
1009
|
+
function stubFalse() {
|
1010
|
+
return false;
|
1011
|
+
}
|
1012
|
+
var stubFalse_1 = stubFalse;
|
1013
|
+
(function(module2, exports3) {
|
1014
|
+
var root2 = _root, stubFalse2 = stubFalse_1;
|
1015
|
+
var freeExports = exports3 && !exports3.nodeType && exports3;
|
1016
|
+
var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
|
1017
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
1018
|
+
var Buffer = moduleExports ? root2.Buffer : void 0;
|
1019
|
+
var nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;
|
1020
|
+
var isBuffer2 = nativeIsBuffer || stubFalse2;
|
1021
|
+
module2.exports = isBuffer2;
|
1022
|
+
})(isBuffer$2, isBufferExports);
|
1023
|
+
var baseGetTag$1 = _baseGetTag, getPrototype = _getPrototype, isObjectLike$1 = isObjectLike_1;
|
1024
|
+
var objectTag$1 = "[object Object]";
|
1025
|
+
var funcProto = Function.prototype, objectProto$3 = Object.prototype;
|
1026
|
+
var funcToString = funcProto.toString;
|
1027
|
+
var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
|
1028
|
+
var objectCtorString = funcToString.call(Object);
|
1029
|
+
function isPlainObject$1(value) {
|
1030
|
+
if (!isObjectLike$1(value) || baseGetTag$1(value) != objectTag$1) {
|
1031
|
+
return false;
|
1032
|
+
}
|
1033
|
+
var proto = getPrototype(value);
|
1034
|
+
if (proto === null) {
|
1035
|
+
return true;
|
1036
|
+
}
|
1037
|
+
var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor;
|
1038
|
+
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
|
1039
|
+
}
|
1040
|
+
var isPlainObject_1 = isPlainObject$1;
|
1041
|
+
var baseGetTag = _baseGetTag, isLength = isLength_1, isObjectLike = isObjectLike_1;
|
1042
|
+
var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", weakMapTag = "[object WeakMap]";
|
1043
|
+
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
|
1044
|
+
var typedArrayTags = {};
|
1045
|
+
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
|
1046
|
+
typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
|
1047
|
+
function baseIsTypedArray$1(value) {
|
1048
|
+
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
|
1049
|
+
}
|
1050
|
+
var _baseIsTypedArray = baseIsTypedArray$1;
|
1051
|
+
function baseUnary$1(func) {
|
1052
|
+
return function(value) {
|
1053
|
+
return func(value);
|
1054
|
+
};
|
1055
|
+
}
|
1056
|
+
var _baseUnary = baseUnary$1;
|
1057
|
+
var _nodeUtilExports = {};
|
1058
|
+
var _nodeUtil = {
|
1059
|
+
get exports() {
|
1060
|
+
return _nodeUtilExports;
|
1061
|
+
},
|
1062
|
+
set exports(v2) {
|
1063
|
+
_nodeUtilExports = v2;
|
1064
|
+
}
|
1065
|
+
};
|
1066
|
+
(function(module2, exports3) {
|
1067
|
+
var freeGlobal2 = _freeGlobal;
|
1068
|
+
var freeExports = exports3 && !exports3.nodeType && exports3;
|
1069
|
+
var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
|
1070
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
1071
|
+
var freeProcess = moduleExports && freeGlobal2.process;
|
1072
|
+
var nodeUtil2 = function() {
|
1073
|
+
try {
|
1074
|
+
var types = freeModule && freeModule.require && freeModule.require("util").types;
|
1075
|
+
if (types) {
|
1076
|
+
return types;
|
1077
|
+
}
|
1078
|
+
return freeProcess && freeProcess.binding && freeProcess.binding("util");
|
1079
|
+
} catch (e2) {
|
1080
|
+
}
|
1081
|
+
}();
|
1082
|
+
module2.exports = nodeUtil2;
|
1083
|
+
})(_nodeUtil, _nodeUtilExports);
|
1084
|
+
var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports;
|
1085
|
+
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
1086
|
+
var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
|
1087
|
+
var isTypedArray_1 = isTypedArray$2;
|
1088
|
+
function safeGet$2(object, key) {
|
1089
|
+
if (key === "constructor" && typeof object[key] === "function") {
|
1090
|
+
return;
|
1091
|
+
}
|
1092
|
+
if (key == "__proto__") {
|
1093
|
+
return;
|
1094
|
+
}
|
1095
|
+
return object[key];
|
1096
|
+
}
|
1097
|
+
var _safeGet = safeGet$2;
|
1098
|
+
var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1;
|
1099
|
+
var objectProto$2 = Object.prototype;
|
1100
|
+
var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
|
1101
|
+
function assignValue$1(object, key, value) {
|
1102
|
+
var objValue = object[key];
|
1103
|
+
if (!(hasOwnProperty$2.call(object, key) && eq$1(objValue, value)) || value === void 0 && !(key in object)) {
|
1104
|
+
baseAssignValue$1(object, key, value);
|
1105
|
+
}
|
1106
|
+
}
|
1107
|
+
var _assignValue = assignValue$1;
|
1108
|
+
var assignValue = _assignValue, baseAssignValue = _baseAssignValue;
|
1109
|
+
function copyObject$1(source, props, object, customizer) {
|
1110
|
+
var isNew = !object;
|
1111
|
+
object || (object = {});
|
1112
|
+
var index2 = -1, length = props.length;
|
1113
|
+
while (++index2 < length) {
|
1114
|
+
var key = props[index2];
|
1115
|
+
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
|
1116
|
+
if (newValue === void 0) {
|
1117
|
+
newValue = source[key];
|
1118
|
+
}
|
1119
|
+
if (isNew) {
|
1120
|
+
baseAssignValue(object, key, newValue);
|
1121
|
+
} else {
|
1122
|
+
assignValue(object, key, newValue);
|
1123
|
+
}
|
1124
|
+
}
|
1125
|
+
return object;
|
1126
|
+
}
|
1127
|
+
var _copyObject = copyObject$1;
|
1128
|
+
function baseTimes$1(n, iteratee) {
|
1129
|
+
var index2 = -1, result = Array(n);
|
1130
|
+
while (++index2 < n) {
|
1131
|
+
result[index2] = iteratee(index2);
|
1132
|
+
}
|
1133
|
+
return result;
|
1134
|
+
}
|
1135
|
+
var _baseTimes = baseTimes$1;
|
1136
|
+
var MAX_SAFE_INTEGER = 9007199254740991;
|
1137
|
+
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
1138
|
+
function isIndex$2(value, length) {
|
1139
|
+
var type = typeof value;
|
1140
|
+
length = length == null ? MAX_SAFE_INTEGER : length;
|
1141
|
+
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
|
1142
|
+
}
|
1143
|
+
var _isIndex = isIndex$2;
|
1144
|
+
var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1;
|
1145
|
+
var objectProto$1 = Object.prototype;
|
1146
|
+
var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
|
1147
|
+
function arrayLikeKeys$1(value, inherited) {
|
1148
|
+
var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
|
1149
|
+
for (var key in value) {
|
1150
|
+
if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
|
1151
|
+
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
|
1152
|
+
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
|
1153
|
+
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
|
1154
|
+
isIndex$1(key, length)))) {
|
1155
|
+
result.push(key);
|
1156
|
+
}
|
1157
|
+
}
|
1158
|
+
return result;
|
1159
|
+
}
|
1160
|
+
var _arrayLikeKeys = arrayLikeKeys$1;
|
1161
|
+
function nativeKeysIn$1(object) {
|
1162
|
+
var result = [];
|
1163
|
+
if (object != null) {
|
1164
|
+
for (var key in Object(object)) {
|
1165
|
+
result.push(key);
|
1166
|
+
}
|
1167
|
+
}
|
1168
|
+
return result;
|
1169
|
+
}
|
1170
|
+
var _nativeKeysIn = nativeKeysIn$1;
|
1171
|
+
var isObject$3 = isObject_1, isPrototype = _isPrototype, nativeKeysIn = _nativeKeysIn;
|
1172
|
+
var objectProto = Object.prototype;
|
1173
|
+
var hasOwnProperty = objectProto.hasOwnProperty;
|
1174
|
+
function baseKeysIn$1(object) {
|
1175
|
+
if (!isObject$3(object)) {
|
1176
|
+
return nativeKeysIn(object);
|
1177
|
+
}
|
1178
|
+
var isProto = isPrototype(object), result = [];
|
1179
|
+
for (var key in object) {
|
1180
|
+
if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
|
1181
|
+
result.push(key);
|
1182
|
+
}
|
1183
|
+
}
|
1184
|
+
return result;
|
1185
|
+
}
|
1186
|
+
var _baseKeysIn = baseKeysIn$1;
|
1187
|
+
var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$1 = isArrayLike_1;
|
1188
|
+
function keysIn$2(object) {
|
1189
|
+
return isArrayLike$1(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
|
1190
|
+
}
|
1191
|
+
var keysIn_1 = keysIn$2;
|
1192
|
+
var copyObject = _copyObject, keysIn$1 = keysIn_1;
|
1193
|
+
function toPlainObject$1(value) {
|
1194
|
+
return copyObject(value, keysIn$1(value));
|
1195
|
+
}
|
1196
|
+
var toPlainObject_1 = toPlainObject$1;
|
1197
|
+
var assignMergeValue$1 = _assignMergeValue, cloneBuffer = _cloneBufferExports, cloneTypedArray = _cloneTypedArray, copyArray = _copyArray, initCloneObject = _initCloneObject, isArguments = isArguments_1, isArray = isArray_1, isArrayLikeObject = isArrayLikeObject_1, isBuffer = isBufferExports, isFunction = isFunction_1, isObject$2 = isObject_1, isPlainObject = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1;
|
1198
|
+
function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {
|
1199
|
+
var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);
|
1200
|
+
if (stacked) {
|
1201
|
+
assignMergeValue$1(object, key, stacked);
|
1202
|
+
return;
|
1203
|
+
}
|
1204
|
+
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
|
1205
|
+
var isCommon = newValue === void 0;
|
1206
|
+
if (isCommon) {
|
1207
|
+
var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
|
1208
|
+
newValue = srcValue;
|
1209
|
+
if (isArr || isBuff || isTyped) {
|
1210
|
+
if (isArray(objValue)) {
|
1211
|
+
newValue = objValue;
|
1212
|
+
} else if (isArrayLikeObject(objValue)) {
|
1213
|
+
newValue = copyArray(objValue);
|
1214
|
+
} else if (isBuff) {
|
1215
|
+
isCommon = false;
|
1216
|
+
newValue = cloneBuffer(srcValue, true);
|
1217
|
+
} else if (isTyped) {
|
1218
|
+
isCommon = false;
|
1219
|
+
newValue = cloneTypedArray(srcValue, true);
|
1220
|
+
} else {
|
1221
|
+
newValue = [];
|
1222
|
+
}
|
1223
|
+
} else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
1224
|
+
newValue = objValue;
|
1225
|
+
if (isArguments(objValue)) {
|
1226
|
+
newValue = toPlainObject(objValue);
|
1227
|
+
} else if (!isObject$2(objValue) || isFunction(objValue)) {
|
1228
|
+
newValue = initCloneObject(srcValue);
|
1229
|
+
}
|
1230
|
+
} else {
|
1231
|
+
isCommon = false;
|
1232
|
+
}
|
1233
|
+
}
|
1234
|
+
if (isCommon) {
|
1235
|
+
stack.set(srcValue, newValue);
|
1236
|
+
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
|
1237
|
+
stack["delete"](srcValue);
|
1238
|
+
}
|
1239
|
+
assignMergeValue$1(object, key, newValue);
|
1240
|
+
}
|
1241
|
+
var _baseMergeDeep = baseMergeDeep$1;
|
1242
|
+
var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet;
|
1243
|
+
function baseMerge$1(object, source, srcIndex, customizer, stack) {
|
1244
|
+
if (object === source) {
|
1245
|
+
return;
|
1246
|
+
}
|
1247
|
+
baseFor(source, function(srcValue, key) {
|
1248
|
+
stack || (stack = new Stack());
|
1249
|
+
if (isObject$1(srcValue)) {
|
1250
|
+
baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack);
|
1251
|
+
} else {
|
1252
|
+
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
|
1253
|
+
if (newValue === void 0) {
|
1254
|
+
newValue = srcValue;
|
1255
|
+
}
|
1256
|
+
assignMergeValue(object, key, newValue);
|
1257
|
+
}
|
1258
|
+
}, keysIn);
|
1259
|
+
}
|
1260
|
+
var _baseMerge = baseMerge$1;
|
1261
|
+
function identity$2(value) {
|
1262
|
+
return value;
|
1263
|
+
}
|
1264
|
+
var identity_1 = identity$2;
|
1265
|
+
function apply$1(func, thisArg, args) {
|
1266
|
+
switch (args.length) {
|
1267
|
+
case 0:
|
1268
|
+
return func.call(thisArg);
|
1269
|
+
case 1:
|
1270
|
+
return func.call(thisArg, args[0]);
|
1271
|
+
case 2:
|
1272
|
+
return func.call(thisArg, args[0], args[1]);
|
1273
|
+
case 3:
|
1274
|
+
return func.call(thisArg, args[0], args[1], args[2]);
|
1275
|
+
}
|
1276
|
+
return func.apply(thisArg, args);
|
1277
|
+
}
|
1278
|
+
var _apply = apply$1;
|
1279
|
+
var apply = _apply;
|
1280
|
+
var nativeMax = Math.max;
|
1281
|
+
function overRest$1(func, start, transform) {
|
1282
|
+
start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
|
1283
|
+
return function() {
|
1284
|
+
var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);
|
1285
|
+
while (++index2 < length) {
|
1286
|
+
array[index2] = args[start + index2];
|
1287
|
+
}
|
1288
|
+
index2 = -1;
|
1289
|
+
var otherArgs = Array(start + 1);
|
1290
|
+
while (++index2 < start) {
|
1291
|
+
otherArgs[index2] = args[index2];
|
1292
|
+
}
|
1293
|
+
otherArgs[start] = transform(array);
|
1294
|
+
return apply(func, this, otherArgs);
|
1295
|
+
};
|
1296
|
+
}
|
1297
|
+
var _overRest = overRest$1;
|
1298
|
+
function constant$1(value) {
|
1299
|
+
return function() {
|
1300
|
+
return value;
|
1301
|
+
};
|
1302
|
+
}
|
1303
|
+
var constant_1 = constant$1;
|
1304
|
+
var constant = constant_1, defineProperty = _defineProperty, identity$1 = identity_1;
|
1305
|
+
var baseSetToString$1 = !defineProperty ? identity$1 : function(func, string) {
|
1306
|
+
return defineProperty(func, "toString", {
|
1307
|
+
"configurable": true,
|
1308
|
+
"enumerable": false,
|
1309
|
+
"value": constant(string),
|
1310
|
+
"writable": true
|
1311
|
+
});
|
1312
|
+
};
|
1313
|
+
var _baseSetToString = baseSetToString$1;
|
1314
|
+
var HOT_COUNT = 800, HOT_SPAN = 16;
|
1315
|
+
var nativeNow = Date.now;
|
1316
|
+
function shortOut$1(func) {
|
1317
|
+
var count = 0, lastCalled = 0;
|
1318
|
+
return function() {
|
1319
|
+
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
|
1320
|
+
lastCalled = stamp;
|
1321
|
+
if (remaining > 0) {
|
1322
|
+
if (++count >= HOT_COUNT) {
|
1323
|
+
return arguments[0];
|
1324
|
+
}
|
1325
|
+
} else {
|
1326
|
+
count = 0;
|
1327
|
+
}
|
1328
|
+
return func.apply(void 0, arguments);
|
1329
|
+
};
|
1330
|
+
}
|
1331
|
+
var _shortOut = shortOut$1;
|
1332
|
+
var baseSetToString = _baseSetToString, shortOut = _shortOut;
|
1333
|
+
var setToString$1 = shortOut(baseSetToString);
|
1334
|
+
var _setToString = setToString$1;
|
1335
|
+
var identity = identity_1, overRest = _overRest, setToString = _setToString;
|
1336
|
+
function baseRest$1(func, start) {
|
1337
|
+
return setToString(overRest(func, start, identity), func + "");
|
1338
|
+
}
|
1339
|
+
var _baseRest = baseRest$1;
|
1340
|
+
var eq = eq_1, isArrayLike = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1;
|
1341
|
+
function isIterateeCall$1(value, index2, object) {
|
1342
|
+
if (!isObject(object)) {
|
1343
|
+
return false;
|
1344
|
+
}
|
1345
|
+
var type = typeof index2;
|
1346
|
+
if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
|
1347
|
+
return eq(object[index2], value);
|
1348
|
+
}
|
1349
|
+
return false;
|
1350
|
+
}
|
1351
|
+
var _isIterateeCall = isIterateeCall$1;
|
1352
|
+
var baseRest = _baseRest, isIterateeCall = _isIterateeCall;
|
1353
|
+
function createAssigner$1(assigner) {
|
1354
|
+
return baseRest(function(object, sources) {
|
1355
|
+
var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
|
1356
|
+
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
|
1357
|
+
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
1358
|
+
customizer = length < 3 ? void 0 : customizer;
|
1359
|
+
length = 1;
|
1360
|
+
}
|
1361
|
+
object = Object(object);
|
1362
|
+
while (++index2 < length) {
|
1363
|
+
var source = sources[index2];
|
1364
|
+
if (source) {
|
1365
|
+
assigner(object, source, index2, customizer);
|
1366
|
+
}
|
1367
|
+
}
|
1368
|
+
return object;
|
1369
|
+
});
|
1370
|
+
}
|
1371
|
+
var _createAssigner = createAssigner$1;
|
1372
|
+
var baseMerge = _baseMerge, createAssigner = _createAssigner;
|
1373
|
+
createAssigner(function(object, source, srcIndex) {
|
1374
|
+
baseMerge(object, source, srcIndex);
|
1375
|
+
});
|
1376
|
+
const iterator = (input, visitor) => {
|
1377
|
+
if (Array.isArray(input)) {
|
1378
|
+
return input.map((el, index2) => iterator(visitor(index2, el), visitor));
|
1379
|
+
}
|
1380
|
+
if (typeof input === "object" && input) {
|
1381
|
+
return Object.entries(input).reduce((acc, [key, value]) => {
|
1382
|
+
acc[key] = iterator(visitor(key, value), visitor);
|
1383
|
+
return acc;
|
1384
|
+
}, {});
|
1385
|
+
}
|
1386
|
+
return input;
|
1387
|
+
};
|
1388
|
+
const isEmptyValue = (value) => !value && (value === null || value === void 0);
|
1389
|
+
const isValue = (value) => !isEmptyValue(value);
|
1390
|
+
const pick = (obj, ...props) => {
|
1391
|
+
return props.reduce((result, prop) => {
|
1392
|
+
result[prop] = obj[prop];
|
1393
|
+
return result;
|
1394
|
+
}, {});
|
1395
|
+
};
|
1396
|
+
function omit(obj, ...props) {
|
1397
|
+
const result = {
|
1398
|
+
...obj
|
1399
|
+
};
|
1400
|
+
props.forEach((prop) => {
|
1401
|
+
delete result[prop];
|
1402
|
+
});
|
1403
|
+
return result;
|
1404
|
+
}
|
1405
|
+
const set = (obj, path, value) => {
|
1406
|
+
const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
|
1407
|
+
return pathArray.reduce((acc, key, i2) => {
|
1408
|
+
if (acc[key] === void 0)
|
1409
|
+
acc[key] = {};
|
1410
|
+
if (i2 === pathArray.length - 1)
|
1411
|
+
acc[key] = value;
|
1412
|
+
return acc[key];
|
1413
|
+
}, obj);
|
1414
|
+
};
|
1415
|
+
const hexToRgb = (hex) => {
|
1416
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
1417
|
+
return result ? {
|
1418
|
+
r: parseInt(result[1], 16),
|
1419
|
+
g: parseInt(result[2], 16),
|
1420
|
+
b: parseInt(result[3], 16)
|
1421
|
+
} : void 0;
|
1422
|
+
};
|
1423
|
+
const rgbToRgba = (rgb, alpha = 1) => rgb.replace(")", `, ${alpha})`).replace("rgb", "rgba");
|
1424
|
+
const devices = ["desktop", "laptop", "tablet", "mobile"];
|
1425
|
+
const BREAKPOINTS = {
|
1426
|
+
mobile: 320,
|
1427
|
+
tablet: 768,
|
1428
|
+
laptop: 1024,
|
1429
|
+
desktop: 1920
|
1430
|
+
};
|
1431
|
+
const isValidDeviceState = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
|
1432
|
+
const getDeviceState = (state, device = "desktop") => {
|
1433
|
+
if (!state)
|
1434
|
+
return {};
|
1435
|
+
return iterator(state, (_key, value) => {
|
1436
|
+
if (isValidDeviceState(value)) {
|
1437
|
+
return value[device];
|
1438
|
+
}
|
1439
|
+
return value;
|
1440
|
+
});
|
1441
|
+
};
|
1442
|
+
const useDeviceState = (state, device) => getDeviceState(state, device);
|
1443
|
+
const useContainerDevice = ({
|
1444
|
+
watchRef,
|
1445
|
+
breakpoints = BREAKPOINTS
|
1446
|
+
}) => {
|
1447
|
+
const [device, setDevice] = h("desktop");
|
1448
|
+
const checkDevice = (parent) => {
|
1449
|
+
var _a;
|
1450
|
+
const parentWidth = parent.getBoundingClientRect().width || 0;
|
1451
|
+
const findDevice = (_a = Object.entries(breakpoints).find(([, value]) => value >= parentWidth)) == null ? void 0 : _a[0];
|
1452
|
+
setDevice(findDevice);
|
1453
|
+
};
|
1454
|
+
y(() => {
|
1455
|
+
const parentElement = watchRef.current.parentElement;
|
1456
|
+
if (parentElement) {
|
1457
|
+
const resizeObserver = new ResizeObserver(() => checkDevice(parentElement));
|
1458
|
+
resizeObserver.observe(parentElement);
|
1459
|
+
checkDevice(parentElement);
|
1460
|
+
}
|
1461
|
+
}, []);
|
1462
|
+
return device;
|
1463
|
+
};
|
1464
|
+
const wrapTo = (value, until) => `${value}${until}`;
|
1465
|
+
const toPx = (key) => key.startsWith("px_");
|
1466
|
+
const toPercent = (key) => key.startsWith("percent_");
|
1467
|
+
const formatRule = (key, value) => {
|
1468
|
+
let newKey = key;
|
1469
|
+
let newValue = value;
|
1470
|
+
if (toPx(newKey)) {
|
1471
|
+
newKey = newKey.replace("px_", "");
|
1472
|
+
newValue = wrapTo(value, "px");
|
1473
|
+
}
|
1474
|
+
if (toPercent(newKey)) {
|
1475
|
+
newKey = newKey.replace("percent_", "");
|
1476
|
+
newValue = wrapTo(value, "%");
|
1477
|
+
}
|
1478
|
+
return {
|
1479
|
+
key: newKey,
|
1480
|
+
value: newValue
|
1481
|
+
};
|
1482
|
+
};
|
1483
|
+
const DEFAULT_TO_PX = ["borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth", "minHeight", "minWidth", "maxWidth", "maxHeight", "fontSize", "height", "width", "letterSpacing", "fontSize", "left", "right", "top", "bottom"];
|
1484
|
+
const parseRules = (rules, layer) => {
|
1485
|
+
const keys = Object.keys(rules);
|
1486
|
+
if (keys.includes("innerHTML") || keys.includes("innerText")) {
|
1487
|
+
console.warn(`Warning! InnerHTML and innerText is deprecated. Use "children" property.`, layer);
|
1488
|
+
}
|
1489
|
+
if (typeof rules !== "object") {
|
1490
|
+
return rules;
|
1491
|
+
}
|
1492
|
+
if ("typography" in rules && "accentTypography" in rules) {
|
1493
|
+
const typography = rules.typography;
|
1494
|
+
const accentTypography = rules.accentTypography;
|
1495
|
+
rules = {
|
1496
|
+
...rules,
|
1497
|
+
...typography,
|
1498
|
+
"--accent-color": accentTypography.color,
|
1499
|
+
"px_--accent-size": accentTypography.fontSize
|
1500
|
+
};
|
1501
|
+
}
|
1502
|
+
return Object.entries(rules).reduce((acc, [propKey, propValue]) => {
|
1503
|
+
if (DEFAULT_TO_PX.includes(propKey)) {
|
1504
|
+
propValue = wrapTo(propValue, "px");
|
1505
|
+
}
|
1506
|
+
const {
|
1507
|
+
key,
|
1508
|
+
value
|
1509
|
+
} = formatRule(propKey, propValue);
|
1510
|
+
acc[key] = value;
|
1511
|
+
if (key === "innerHTML") {
|
1512
|
+
acc.innerHTML = isValue(value) ? `${value}` : "";
|
1513
|
+
}
|
1514
|
+
if (key === "innerText") {
|
1515
|
+
acc.innerText = isValue(value) ? `${value}` : "";
|
1516
|
+
}
|
1517
|
+
if (key === "children") {
|
1518
|
+
acc.children = typeof value === "string" ? isValue(value) ? `${value}` : "" : value;
|
1519
|
+
}
|
1520
|
+
if (key === "innerHTML" || key === "innerText" || key === "children" && typeof value === "string") {
|
1521
|
+
if (propValue.length === 0) {
|
1522
|
+
acc.display = "none";
|
1523
|
+
}
|
1524
|
+
}
|
1525
|
+
if (key.includes("borderWidth")) {
|
1526
|
+
acc.borderStyle = "solid";
|
1527
|
+
}
|
1528
|
+
if (key === "corner") {
|
1529
|
+
acc.borderRadius = wrapTo(value, "px");
|
1530
|
+
}
|
1531
|
+
if (key === "backgroundFit") {
|
1532
|
+
acc.backgroundSize = value;
|
1533
|
+
}
|
1534
|
+
if (key === "backgroundImage") {
|
1535
|
+
acc.backgroundImage = `url(${value})`;
|
1536
|
+
acc.backgroundRepeat = "no-repeat";
|
1537
|
+
}
|
1538
|
+
if (key === "backgroundColorOpacity" && isValue(acc.backgroundColorOpacity) && isValue(acc.backgroundColor)) {
|
1539
|
+
const rgb = hexToRgb(acc.backgroundColor);
|
1540
|
+
if (rgb) {
|
1541
|
+
acc.backgroundColor = rgbToRgba(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`, +acc.backgroundColorOpacity / 100);
|
1542
|
+
}
|
1543
|
+
}
|
1544
|
+
if (key === "isBold") {
|
1545
|
+
acc.fontWeight = value ? "bold" : "initial";
|
1546
|
+
}
|
1547
|
+
if (key === "isItalic") {
|
1548
|
+
acc.fontStyle = value ? "italic" : "initial";
|
1549
|
+
}
|
1550
|
+
if (key === "isThrough") {
|
1551
|
+
acc.textDecoration = value ? "line-through" : "initial";
|
1552
|
+
}
|
1553
|
+
return acc;
|
1554
|
+
}, rules);
|
1555
|
+
};
|
1556
|
+
const isValidRule = (rule) => typeof rule === "object" && !Array.isArray(rule) && "parent" in rule;
|
1557
|
+
const useParseRules = (state) => Object.entries(state).reduce((acc, [layer, rule]) => {
|
1558
|
+
acc[layer] = isValidRule(rule) ? parseRules({
|
1559
|
+
...state[layer]
|
1560
|
+
}, layer) : rule;
|
1561
|
+
return acc;
|
1562
|
+
}, {});
|
1563
|
+
const DisplayText = ({
|
1564
|
+
children,
|
1565
|
+
...rest
|
1566
|
+
}) => {
|
1567
|
+
var _a;
|
1568
|
+
const formatValue = (_a = children == null ? void 0 : children.replace("script", "")) == null ? void 0 : _a.replace(/{{(.*?)}}/g, `<span>$1</span>`);
|
1569
|
+
return o("div", {
|
1570
|
+
...rest,
|
1571
|
+
dangerouslySetInnerHTML: {
|
1572
|
+
__html: formatValue
|
1573
|
+
}
|
1574
|
+
});
|
1575
|
+
};
|
1576
|
+
const useToggle = () => {
|
1577
|
+
const [isOpen, setIsOpen] = h(false);
|
1578
|
+
return [isOpen, () => setIsOpen((prev) => !prev)];
|
1579
|
+
};
|
1580
|
+
const CloseIcon = () => o("svg", {
|
1581
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1582
|
+
width: "20",
|
1583
|
+
height: "20",
|
1584
|
+
viewBox: "0 0 24 24",
|
1585
|
+
children: o("path", {
|
1586
|
+
d: "M17.659 4.929a1 1 0 1 1 1.414 1.414L13.416 12l5.657 5.657a1 1 0 0 1-1.415 1.414l-5.656-5.657-5.657 5.657a1 1 0 0 1-1.414-1.414L10.587 12 4.931 6.343A1 1 0 1 1 6.345 4.93l5.657 5.657 5.656-5.657Z",
|
1587
|
+
fill: "currentColor"
|
1588
|
+
})
|
1589
|
+
});
|
1590
|
+
const GiftIcon = () => o("svg", {
|
1591
|
+
viewBox: "0 0 16 16",
|
1592
|
+
children: o("path", {
|
1593
|
+
fill: "currentColor",
|
1594
|
+
fillRule: "evenodd",
|
1595
|
+
d: "M2.13 8H7v7.31H3.22a1.09 1.09 0 01-1.09-1.09zM9 15.34h3.81a1.09 1.09 0 001.09-1.09V8H9zm5.8-9.94v1.19a.48.48 0 01-.48.48H1.71a.48.48 0 01-.48-.48V5.4c0-.596.484-1.08 1.08-1.08H5a2.48 2.48 0 01-1.47-1.65 1.62 1.62 0 01.26-1.4 1.57 1.57 0 011-.58c.11-.01.22-.01.33 0a2.5 2.5 0 012 1A9 9 0 018 3.22a10.38 10.38 0 01.91-1.54 2.49 2.49 0 011.93-1h.36c.369.065.702.26.94.55.31.407.414.936.28 1.43a2.48 2.48 0 01-1.45 1.64h2.77a1.08 1.08 0 011.03 1.1zM8.66 4a9.81 9.81 0 001.9-.55 1.52 1.52 0 00.88-1 .68.68 0 00-.1-.59.6.6 0 00-.34-.22.58.58 0 00-.18 0 1.52 1.52 0 00-1.17.63A9.06 9.06 0 008.66 4zm-3.32-.58A9.62 9.62 0 007.25 4a8.59 8.59 0 00-1-1.72 1.51 1.51 0 00-1.18-.63h-.13a.66.66 0 00-.39.22.66.66 0 00-.09.57c.13.443.453.804.88.98z"
|
1596
|
+
})
|
1597
|
+
});
|
1598
|
+
const SimpleGift = () => {
|
1599
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
1600
|
+
const rootRef = _$1(null);
|
1601
|
+
const [legalIsOpen, toggleLegalIsOpen] = useToggle();
|
1602
|
+
const {
|
1603
|
+
isOpen,
|
1604
|
+
onToggle
|
1605
|
+
} = useGiftOpen();
|
1606
|
+
const state = useCurrentState();
|
1607
|
+
const device = useContainerDevice({
|
1608
|
+
watchRef: rootRef
|
1609
|
+
});
|
1610
|
+
const deviceState = useDeviceState(state, device);
|
1611
|
+
const rules = useParseRules(deviceState);
|
1612
|
+
const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
|
1613
|
+
const arrowRules = {
|
1614
|
+
left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
|
1615
|
+
backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
|
1616
|
+
borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
|
1617
|
+
borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
|
1618
|
+
borderTopStyle: "solid",
|
1619
|
+
borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
|
1620
|
+
borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
|
1621
|
+
borderLeftStyle: "solid"
|
1622
|
+
};
|
1623
|
+
const bodyRules = {
|
1624
|
+
left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
|
1625
|
+
};
|
1626
|
+
return o("div", {
|
1627
|
+
className: styles$d.root,
|
1628
|
+
ref: rootRef,
|
1629
|
+
children: [o("div", {
|
1630
|
+
className: styles$d.icon,
|
1631
|
+
style: rules.icon,
|
1632
|
+
onClick: onToggle,
|
1633
|
+
children: hasIcon && o("div", {
|
1634
|
+
className: styles$d.iconTarget,
|
1635
|
+
children: o(GiftIcon, {})
|
1636
|
+
})
|
1637
|
+
}), o("div", {
|
1638
|
+
className: classNames(styles$d.body, {
|
1639
|
+
[styles$d.bodyOpen]: isOpen
|
1640
|
+
}),
|
1641
|
+
style: bodyRules,
|
1642
|
+
children: [o("div", {
|
1643
|
+
className: styles$d.arrow,
|
1644
|
+
style: arrowRules
|
1645
|
+
}), o("div", {
|
1646
|
+
className: styles$d.close,
|
1647
|
+
style: rules.close,
|
1648
|
+
onClick: onToggle,
|
1649
|
+
children: o(CloseIcon, {})
|
1650
|
+
}), o("div", {
|
1651
|
+
className: styles$d.container,
|
1652
|
+
style: rules.container,
|
1653
|
+
children: [o("a", {
|
1654
|
+
href: (_i = rules.root) == null ? void 0 : _i.offer,
|
1655
|
+
target: "_blank",
|
1656
|
+
rel: "nofollow noopener noreferrer",
|
1657
|
+
className: "simpleGift-body__offer",
|
1658
|
+
"data-layer": "offer",
|
1659
|
+
children: [o("div", {
|
1660
|
+
className: styles$d.inner,
|
1661
|
+
children: [o("div", {
|
1662
|
+
className: styles$d.logo,
|
1663
|
+
style: rules.logo
|
1664
|
+
}), o(DisplayText, {
|
1665
|
+
className: styles$d.text,
|
1666
|
+
style: rules.text,
|
1667
|
+
children: (_j = rules == null ? void 0 : rules.text) == null ? void 0 : _j.children
|
1668
|
+
})]
|
1669
|
+
}), o("div", {
|
1670
|
+
className: styles$d.button,
|
1671
|
+
style: rules.button,
|
1672
|
+
children: (_k = rules.button) == null ? void 0 : _k.children
|
1673
|
+
})]
|
1674
|
+
}), o("div", {
|
1675
|
+
className: classNames(styles$d.legal, {
|
1676
|
+
[styles$d.legalOpen]: legalIsOpen
|
1677
|
+
}),
|
1678
|
+
style: rules.legal,
|
1679
|
+
children: o("span", {
|
1680
|
+
className: styles$d.legalText,
|
1681
|
+
children: [o("span", {
|
1682
|
+
children: (_l = rules == null ? void 0 : rules.legal) == null ? void 0 : _l.children
|
1683
|
+
}), o("span", {
|
1684
|
+
className: styles$d.legalButton,
|
1685
|
+
onClick: toggleLegalIsOpen,
|
1686
|
+
children: legalIsOpen ? (_m = rules == null ? void 0 : rules.legal) == null ? void 0 : _m.buttonOpenText : (_n = rules == null ? void 0 : rules.legal) == null ? void 0 : _n.buttonHideText
|
1687
|
+
})]
|
1688
|
+
})
|
1689
|
+
})]
|
1690
|
+
})]
|
1691
|
+
})]
|
1692
|
+
});
|
1693
|
+
};
|
1694
|
+
const index$6 = render(o(SimpleGift, {}));
|
1695
|
+
const root$c = "_root_qnzzi_1";
|
1696
|
+
const icon = "_icon_qnzzi_5";
|
1697
|
+
const iconTarget = "_iconTarget_qnzzi_17";
|
1698
|
+
const body$5 = "_body_qnzzi_22";
|
1699
|
+
const bodyOpen = "_bodyOpen_qnzzi_30";
|
1700
|
+
const complexGift_in = "_complexGift_in_qnzzi_1";
|
1701
|
+
const arrow = "_arrow_qnzzi_43";
|
1702
|
+
const container$1 = "_container_qnzzi_53";
|
1703
|
+
const promotion$1 = "_promotion_qnzzi_58";
|
1704
|
+
const close = "_close_qnzzi_66";
|
1705
|
+
const head$1 = "_head_qnzzi_80";
|
1706
|
+
const headIcon = "_headIcon_qnzzi_87";
|
1707
|
+
const headTitle = "_headTitle_qnzzi_93";
|
1708
|
+
const inner = "_inner_qnzzi_100";
|
1709
|
+
const fadein = "_fadein_qnzzi_1";
|
1710
|
+
const pulse = "_pulse_qnzzi_1";
|
1711
|
+
const gradient = "_gradient_qnzzi_1";
|
1712
|
+
const wiggle = "_wiggle_qnzzi_1";
|
1713
|
+
const styles$c = {
|
1714
|
+
root: root$c,
|
1715
|
+
icon,
|
1716
|
+
iconTarget,
|
1717
|
+
body: body$5,
|
1718
|
+
bodyOpen,
|
1719
|
+
complexGift_in,
|
1720
|
+
arrow,
|
1721
|
+
container: container$1,
|
1722
|
+
promotion: promotion$1,
|
1723
|
+
close,
|
1724
|
+
head: head$1,
|
1725
|
+
headIcon,
|
1726
|
+
headTitle,
|
1727
|
+
inner,
|
1728
|
+
fadein,
|
1729
|
+
pulse,
|
1730
|
+
gradient,
|
1731
|
+
wiggle
|
1732
|
+
};
|
1733
|
+
const root$b = "_root_rwvas_1";
|
1734
|
+
const body$4 = "_body_rwvas_30";
|
1735
|
+
const line = "_line_rwvas_37";
|
1736
|
+
const text$3 = "_text_rwvas_47";
|
1737
|
+
const button$5 = "_button_rwvas_61";
|
1738
|
+
const logo$5 = "_logo_rwvas_73";
|
1739
|
+
const variant2$1 = "_variant2_rwvas_79";
|
1740
|
+
const buttonText = "_buttonText_rwvas_83";
|
1741
|
+
const legal$4 = "_legal_rwvas_99";
|
1742
|
+
const styles$b = {
|
1743
|
+
root: root$b,
|
1744
|
+
body: body$4,
|
1745
|
+
line,
|
1746
|
+
text: text$3,
|
1747
|
+
button: button$5,
|
1748
|
+
logo: logo$5,
|
1749
|
+
variant2: variant2$1,
|
1750
|
+
buttonText,
|
1751
|
+
legal: legal$4
|
1752
|
+
};
|
1753
|
+
const BonusCard$1 = () => {
|
1754
|
+
var _a, _b, _c, _d, _e;
|
1755
|
+
const state = useCurrentState();
|
1756
|
+
const rules = useParseRules(state);
|
1757
|
+
return o("a", {
|
1758
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
1759
|
+
target: "_blank",
|
1760
|
+
rel: "nofollow noopener noreferrer",
|
1761
|
+
className: classNames(styles$b.root, {
|
1762
|
+
[styles$b.variant2]: ((_b = rules.root) == null ? void 0 : _b.variant) === "variant2"
|
1763
|
+
}),
|
1764
|
+
style: rules.root,
|
1765
|
+
children: [o("div", {
|
1766
|
+
className: styles$b.body,
|
1767
|
+
children: [o("div", {
|
1768
|
+
className: styles$b.logo,
|
1769
|
+
style: rules.logo
|
1770
|
+
}), o("div", {
|
1771
|
+
className: styles$b.line,
|
1772
|
+
style: rules.line
|
1773
|
+
}), o("div", {
|
1774
|
+
className: styles$b.text,
|
1775
|
+
style: rules.text,
|
1776
|
+
children: o(DisplayText, {
|
1777
|
+
children: (_c = rules.text) == null ? void 0 : _c.children
|
1778
|
+
})
|
1779
|
+
}), o("div", {
|
1780
|
+
className: styles$b.button,
|
1781
|
+
style: rules.button,
|
1782
|
+
children: [o("div", {
|
1783
|
+
className: styles$b.logo,
|
1784
|
+
style: rules.logo
|
1785
|
+
}), o("div", {
|
1786
|
+
className: styles$b.buttonText,
|
1787
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
1788
|
+
})]
|
1789
|
+
})]
|
1790
|
+
}), o("div", {
|
1791
|
+
className: styles$b.legal,
|
1792
|
+
style: rules.legal,
|
1793
|
+
children: (_e = rules.legal) == null ? void 0 : _e.children
|
1794
|
+
})]
|
1795
|
+
});
|
1796
|
+
};
|
1797
|
+
const ComplexGift = () => {
|
1798
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
1799
|
+
const rootRef = _$1(null);
|
1800
|
+
const {
|
1801
|
+
isOpen,
|
1802
|
+
onToggle
|
1803
|
+
} = useGiftOpen();
|
1804
|
+
const state = useCurrentState();
|
1805
|
+
const device = useContainerDevice({
|
1806
|
+
watchRef: rootRef
|
1807
|
+
});
|
1808
|
+
const deviceState = useDeviceState(state, device);
|
1809
|
+
const rules = useParseRules(deviceState);
|
1810
|
+
const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
|
1811
|
+
const arrowRules = {
|
1812
|
+
left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
|
1813
|
+
backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
|
1814
|
+
borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
|
1815
|
+
borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
|
1816
|
+
borderTopStyle: "solid",
|
1817
|
+
borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
|
1818
|
+
borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
|
1819
|
+
borderLeftStyle: "solid"
|
1820
|
+
};
|
1821
|
+
const bodyRules = {
|
1822
|
+
left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
|
1823
|
+
};
|
1824
|
+
return o("div", {
|
1825
|
+
ref: rootRef,
|
1826
|
+
className: styles$c.root,
|
1827
|
+
children: [o("div", {
|
1828
|
+
className: styles$c.icon,
|
1829
|
+
style: rules.icon,
|
1830
|
+
onClick: onToggle,
|
1831
|
+
children: hasIcon && o("div", {
|
1832
|
+
className: styles$c.iconTarget,
|
1833
|
+
children: o(GiftIcon, {})
|
1834
|
+
})
|
1835
|
+
}), o("div", {
|
1836
|
+
className: classNames(styles$c.body, {
|
1837
|
+
[styles$c.bodyOpen]: isOpen
|
1838
|
+
}),
|
1839
|
+
style: bodyRules,
|
1840
|
+
children: [o("div", {
|
1841
|
+
className: styles$c.arrow,
|
1842
|
+
style: arrowRules
|
1843
|
+
}), o("div", {
|
1844
|
+
className: styles$c.container,
|
1845
|
+
style: rules.container,
|
1846
|
+
children: [o("div", {
|
1847
|
+
className: styles$c.close,
|
1848
|
+
style: rules.close,
|
1849
|
+
onClick: onToggle,
|
1850
|
+
children: o(CloseIcon, {})
|
1851
|
+
}), o("div", {
|
1852
|
+
className: styles$c.promotion,
|
1853
|
+
style: rules.promotion,
|
1854
|
+
children: (_i = rules.promotion) == null ? void 0 : _i.children
|
1855
|
+
}), o("div", {
|
1856
|
+
className: styles$c.head,
|
1857
|
+
children: [o("div", {
|
1858
|
+
className: styles$c.headIcon,
|
1859
|
+
children: o(GiftIcon, {})
|
1860
|
+
}), o("div", {
|
1861
|
+
className: styles$c.headTitle,
|
1862
|
+
style: rules.title,
|
1863
|
+
children: (_j = rules.title) == null ? void 0 : _j.children
|
1864
|
+
})]
|
1865
|
+
}), o("div", {
|
1866
|
+
className: styles$c.inner,
|
1867
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
1868
|
+
value: child,
|
1869
|
+
children: o(BonusCard$1, {})
|
1870
|
+
}))
|
1871
|
+
})]
|
1872
|
+
})]
|
1873
|
+
})]
|
1874
|
+
});
|
1875
|
+
};
|
1876
|
+
const index$5 = render(o(ComplexGift, {}));
|
1877
|
+
const root$a = "_root_15ve9_1";
|
1878
|
+
const laptop$3 = "_laptop_15ve9_10";
|
1879
|
+
const tablet$2 = "_tablet_15ve9_10";
|
1880
|
+
const desktop$7 = "_desktop_15ve9_15";
|
1881
|
+
const body$3 = "_body_15ve9_20";
|
1882
|
+
const logo$4 = "_logo_15ve9_32";
|
1883
|
+
const text$2 = "_text_15ve9_38";
|
1884
|
+
const button$4 = "_button_15ve9_42";
|
1885
|
+
const legal$3 = "_legal_15ve9_58";
|
1886
|
+
const styles$a = {
|
1887
|
+
root: root$a,
|
1888
|
+
laptop: laptop$3,
|
1889
|
+
tablet: tablet$2,
|
1890
|
+
desktop: desktop$7,
|
1891
|
+
body: body$3,
|
1892
|
+
logo: logo$4,
|
1893
|
+
text: text$2,
|
1894
|
+
button: button$4,
|
1895
|
+
legal: legal$3
|
1896
|
+
};
|
1897
|
+
const switchTextAlignToFlex = (textAlign) => textAlign ? {
|
1898
|
+
left: "flex-start",
|
1899
|
+
center: "center",
|
1900
|
+
right: "flex-end"
|
1901
|
+
}[textAlign] : textAlign;
|
1902
|
+
const root$9 = "_root_otuq1_1";
|
1903
|
+
const styles$9 = {
|
1904
|
+
root: root$9
|
1905
|
+
};
|
1906
|
+
const Line = () => {
|
1907
|
+
var _a;
|
1908
|
+
const state = useCurrentState();
|
1909
|
+
const rules = useParseRules(state);
|
1910
|
+
return o("div", {
|
1911
|
+
className: styles$9.root,
|
1912
|
+
style: rules.root,
|
1913
|
+
children: o(DisplayText, {
|
1914
|
+
children: (_a = rules == null ? void 0 : rules.root) == null ? void 0 : _a.children
|
1915
|
+
})
|
1916
|
+
});
|
1917
|
+
};
|
1918
|
+
const SimplePopup$2 = () => {
|
1919
|
+
var _a, _b, _c, _d, _e, _f;
|
1920
|
+
const rootRef = _$1(null);
|
1921
|
+
const device = useContainerDevice({
|
1922
|
+
watchRef: rootRef
|
1923
|
+
});
|
1924
|
+
const state = useCurrentState();
|
1925
|
+
const deviceState = useDeviceState(state, device);
|
1926
|
+
set(deviceState, "button.percent_width", (_a = deviceState == null ? void 0 : deviceState.button) == null ? void 0 : _a.width);
|
1927
|
+
set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
|
1928
|
+
const rules = useParseRules(deviceState);
|
1929
|
+
const bodyRules = {
|
1930
|
+
alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
|
1931
|
+
};
|
1932
|
+
const buttonRules = {
|
1933
|
+
...rules == null ? void 0 : rules.button,
|
1934
|
+
justifyContent: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.textAlign)
|
1935
|
+
};
|
1936
|
+
const legalRules = {
|
1937
|
+
...rules == null ? void 0 : rules.legal,
|
1938
|
+
justifyContent: switchTextAlignToFlex((_e = rules.root) == null ? void 0 : _e.textAlign)
|
1939
|
+
};
|
1940
|
+
return o("a", {
|
1941
|
+
ref: rootRef,
|
1942
|
+
href: (_f = rules.root) == null ? void 0 : _f.offer,
|
1943
|
+
target: "_blank",
|
1944
|
+
rel: "nofollow noopener noreferrer",
|
1945
|
+
className: classNames(styles$a.root, {
|
1946
|
+
[styles$a.desktop]: device === "desktop",
|
1947
|
+
[styles$a.tablet]: device === "tablet",
|
1948
|
+
[styles$a.laptop]: device === "laptop"
|
1949
|
+
}),
|
1950
|
+
style: rules.root,
|
1951
|
+
children: o("div", {
|
1952
|
+
className: styles$a.body,
|
1953
|
+
style: bodyRules,
|
1954
|
+
children: [o("div", {
|
1955
|
+
className: styles$a.logo,
|
1956
|
+
style: rules.logo
|
1957
|
+
}), o("div", {
|
1958
|
+
className: styles$a.text,
|
1959
|
+
children: ((rules == null ? void 0 : rules.content) || []).map((el) => o(StateContext, {
|
1960
|
+
value: el,
|
1961
|
+
children: o(Line, {})
|
1962
|
+
}))
|
1963
|
+
}), o("div", {
|
1964
|
+
className: styles$a.button,
|
1965
|
+
style: buttonRules,
|
1966
|
+
children: buttonRules == null ? void 0 : buttonRules.children
|
1967
|
+
}), o("div", {
|
1968
|
+
className: styles$a.legal,
|
1969
|
+
style: legalRules,
|
1970
|
+
children: legalRules == null ? void 0 : legalRules.children
|
1971
|
+
})]
|
1972
|
+
})
|
1973
|
+
});
|
1974
|
+
};
|
1975
|
+
const index$4 = render(o(SimplePopup$2, {}));
|
1976
|
+
const root$8 = "_root_1q3m6_1";
|
1977
|
+
const desktop$6 = "_desktop_1q3m6_9";
|
1978
|
+
const content$1 = "_content_1q3m6_13";
|
1979
|
+
const title$2 = "_title_1q3m6_24";
|
1980
|
+
const wrapper$1 = "_wrapper_1q3m6_39";
|
1981
|
+
const styles$8 = {
|
1982
|
+
root: root$8,
|
1983
|
+
desktop: desktop$6,
|
1984
|
+
content: content$1,
|
1985
|
+
title: title$2,
|
1986
|
+
wrapper: wrapper$1
|
1987
|
+
};
|
1988
|
+
const root$7 = "_root_6a4bh_1";
|
1989
|
+
const desktop$5 = "_desktop_6a4bh_10";
|
1990
|
+
const header = "_header_6a4bh_14";
|
1991
|
+
const logo$3 = "_logo_6a4bh_25";
|
1992
|
+
const container = "_container_6a4bh_31";
|
1993
|
+
const body$2 = "_body_6a4bh_42";
|
1994
|
+
const text$1 = "_text_6a4bh_59";
|
1995
|
+
const button$3 = "_button_6a4bh_80";
|
1996
|
+
const legal$2 = "_legal_6a4bh_100";
|
1997
|
+
const styles$7 = {
|
1998
|
+
root: root$7,
|
1999
|
+
desktop: desktop$5,
|
2000
|
+
header,
|
2001
|
+
logo: logo$3,
|
2002
|
+
container,
|
2003
|
+
body: body$2,
|
2004
|
+
text: text$1,
|
2005
|
+
button: button$3,
|
2006
|
+
legal: legal$2
|
2007
|
+
};
|
2008
|
+
const Bonus$1 = () => {
|
2009
|
+
var _a, _b, _c, _d;
|
2010
|
+
const state = useCurrentState();
|
2011
|
+
const rules = useParseRules(state);
|
2012
|
+
const device = (state == null ? void 0 : state.device) || "desktop";
|
2013
|
+
return o("a", {
|
2014
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
2015
|
+
target: "_blank",
|
2016
|
+
rel: "nofollow noopener noreferrer",
|
2017
|
+
className: classNames(styles$7.root, {
|
2018
|
+
[styles$7.desktop]: device === "desktop"
|
2019
|
+
}),
|
2020
|
+
style: rules.root,
|
2021
|
+
children: [o("div", {
|
2022
|
+
className: styles$7.header,
|
2023
|
+
style: rules.header,
|
2024
|
+
children: o("div", {
|
2025
|
+
className: styles$7.logo,
|
2026
|
+
style: rules.logo
|
2027
|
+
})
|
2028
|
+
}), o("div", {
|
2029
|
+
className: styles$7.container,
|
2030
|
+
children: [o("div", {
|
2031
|
+
className: styles$7.body,
|
2032
|
+
children: [o("div", {
|
2033
|
+
className: styles$7.logo
|
2034
|
+
}), o(DisplayText, {
|
2035
|
+
className: styles$7.text,
|
2036
|
+
style: rules.text,
|
2037
|
+
children: (_b = rules.text) == null ? void 0 : _b.children
|
2038
|
+
})]
|
2039
|
+
}), o("div", {
|
2040
|
+
children: [o("div", {
|
2041
|
+
className: styles$7.button,
|
2042
|
+
style: rules.button,
|
2043
|
+
children: (_c = rules.button) == null ? void 0 : _c.children
|
2044
|
+
}), o("div", {
|
2045
|
+
className: styles$7.legal,
|
2046
|
+
style: rules.legal,
|
2047
|
+
children: (_d = rules.legal) == null ? void 0 : _d.children
|
2048
|
+
})]
|
2049
|
+
})]
|
2050
|
+
})]
|
2051
|
+
});
|
2052
|
+
};
|
2053
|
+
const SimplePopup$1 = () => {
|
2054
|
+
var _a;
|
2055
|
+
const rootRef = _$1(null);
|
2056
|
+
const device = useContainerDevice({
|
2057
|
+
watchRef: rootRef
|
2058
|
+
});
|
2059
|
+
const state = useCurrentState();
|
2060
|
+
const deviceState = useDeviceState(state, device);
|
2061
|
+
const rules = useParseRules(deviceState);
|
2062
|
+
return o("div", {
|
2063
|
+
ref: rootRef,
|
2064
|
+
className: classNames(styles$8.root, {
|
2065
|
+
[styles$8.desktop]: device === "desktop"
|
2066
|
+
}),
|
2067
|
+
style: rules.root,
|
2068
|
+
children: o("div", {
|
2069
|
+
className: styles$8.content,
|
2070
|
+
children: [o("div", {
|
2071
|
+
className: styles$8.title,
|
2072
|
+
style: rules.title,
|
2073
|
+
children: (_a = rules.title) == null ? void 0 : _a.children
|
2074
|
+
}), o("div", {
|
2075
|
+
className: styles$8.wrapper,
|
2076
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
2077
|
+
value: {
|
2078
|
+
...child,
|
2079
|
+
device
|
2080
|
+
},
|
2081
|
+
children: o(Bonus$1, {})
|
2082
|
+
}))
|
2083
|
+
})]
|
2084
|
+
})
|
2085
|
+
});
|
2086
|
+
};
|
2087
|
+
const index$3 = render(o(SimplePopup$1, {}));
|
2088
|
+
const root$6 = "_root_q9549_1";
|
2089
|
+
const laptop$2 = "_laptop_q9549_11";
|
2090
|
+
const tablet$1 = "_tablet_q9549_12";
|
2091
|
+
const desktop$4 = "_desktop_q9549_17";
|
2092
|
+
const body$1 = "_body_q9549_22";
|
2093
|
+
const head = "_head_q9549_34";
|
2094
|
+
const title$1 = "_title_q9549_44";
|
2095
|
+
const logo$2 = "_logo_q9549_57";
|
2096
|
+
const wrapper = "_wrapper_q9549_63";
|
2097
|
+
const text = "_text_q9549_70";
|
2098
|
+
const button$2 = "_button_q9549_83";
|
2099
|
+
const buttonHead = "_buttonHead_q9549_98";
|
2100
|
+
const buttonTarget = "_buttonTarget_q9549_117";
|
2101
|
+
const legal$1 = "_legal_q9549_133";
|
2102
|
+
const styles$6 = {
|
2103
|
+
root: root$6,
|
2104
|
+
laptop: laptop$2,
|
2105
|
+
tablet: tablet$1,
|
2106
|
+
desktop: desktop$4,
|
2107
|
+
body: body$1,
|
2108
|
+
head,
|
2109
|
+
title: title$1,
|
2110
|
+
logo: logo$2,
|
2111
|
+
wrapper,
|
2112
|
+
text,
|
2113
|
+
button: button$2,
|
2114
|
+
buttonHead,
|
2115
|
+
buttonTarget,
|
2116
|
+
legal: legal$1
|
2117
|
+
};
|
2118
|
+
const root$5 = "_root_1ew5t_1";
|
2119
|
+
const left$1 = "_left_1ew5t_8";
|
2120
|
+
const desktop$3 = "_desktop_1ew5t_15";
|
2121
|
+
const teams = "_teams_1ew5t_19";
|
2122
|
+
const logo$1 = "_logo_1ew5t_25";
|
2123
|
+
const league = "_league_1ew5t_31";
|
2124
|
+
const name = "_name_1ew5t_36";
|
2125
|
+
const right$1 = "_right_1ew5t_42";
|
2126
|
+
const odd$1 = "_odd_1ew5t_53";
|
2127
|
+
const oddLabel$1 = "_oddLabel_1ew5t_64";
|
2128
|
+
const oddValue = "_oddValue_1ew5t_73";
|
2129
|
+
const team$1 = "_team_1ew5t_19";
|
2130
|
+
const teamLogo$1 = "_teamLogo_1ew5t_96";
|
2131
|
+
const teamName$1 = "_teamName_1ew5t_102";
|
2132
|
+
const styles$5 = {
|
2133
|
+
root: root$5,
|
2134
|
+
left: left$1,
|
2135
|
+
desktop: desktop$3,
|
2136
|
+
teams,
|
2137
|
+
logo: logo$1,
|
2138
|
+
league,
|
2139
|
+
name,
|
2140
|
+
right: right$1,
|
2141
|
+
odd: odd$1,
|
2142
|
+
oddLabel: oddLabel$1,
|
2143
|
+
oddValue,
|
2144
|
+
team: team$1,
|
2145
|
+
teamLogo: teamLogo$1,
|
2146
|
+
teamName: teamName$1
|
2147
|
+
};
|
2148
|
+
const Match = () => {
|
2149
|
+
var _a, _b, _c, _d;
|
2150
|
+
const state = useCurrentState();
|
2151
|
+
const rules = useParseRules(state);
|
2152
|
+
const device = (state == null ? void 0 : state.device) || "desktop";
|
2153
|
+
return o("div", {
|
2154
|
+
className: classNames(styles$5.root, {
|
2155
|
+
[styles$5.desktop]: device === "desktop"
|
2156
|
+
}),
|
2157
|
+
children: [o("div", {
|
2158
|
+
className: styles$5.left,
|
2159
|
+
children: [o("div", {
|
2160
|
+
className: styles$5.teams,
|
2161
|
+
children: [o("div", {
|
2162
|
+
className: styles$5.logo
|
2163
|
+
}), o("div", {
|
2164
|
+
className: styles$5.logo
|
2165
|
+
})]
|
2166
|
+
}), o("div", {
|
2167
|
+
className: styles$5.body,
|
2168
|
+
children: [o("div", {
|
2169
|
+
className: styles$5.league,
|
2170
|
+
style: rules.league,
|
2171
|
+
children: (_a = rules.league) == null ? void 0 : _a.children
|
2172
|
+
}), o("div", {
|
2173
|
+
className: styles$5.name,
|
2174
|
+
style: rules.teams,
|
2175
|
+
children: (_b = rules.teams) == null ? void 0 : _b.children
|
2176
|
+
})]
|
2177
|
+
})]
|
2178
|
+
}), o("div", {
|
2179
|
+
className: styles$5.right,
|
2180
|
+
children: [o("div", {
|
2181
|
+
className: styles$5.team,
|
2182
|
+
children: [o("div", {
|
2183
|
+
className: styles$5.teamLogo
|
2184
|
+
}), o("div", {
|
2185
|
+
className: styles$5.teamName,
|
2186
|
+
style: rules.teams,
|
2187
|
+
children: "НЬЮКАСЛ"
|
2188
|
+
})]
|
2189
|
+
}), o("div", {
|
2190
|
+
className: styles$5.odd,
|
2191
|
+
children: [o("div", {
|
2192
|
+
className: styles$5.oddLabel,
|
2193
|
+
style: rules.oddLabel,
|
2194
|
+
children: (_c = rules.oddLabel) == null ? void 0 : _c.children
|
2195
|
+
}), o("div", {
|
2196
|
+
className: styles$5.oddValue,
|
2197
|
+
style: rules.oddValue,
|
2198
|
+
children: (_d = rules.oddValue) == null ? void 0 : _d.children
|
2199
|
+
})]
|
2200
|
+
}), o("div", {
|
2201
|
+
className: styles$5.team,
|
2202
|
+
children: [o("div", {
|
2203
|
+
className: styles$5.teamLogo
|
2204
|
+
}), o("div", {
|
2205
|
+
className: styles$5.teamName,
|
2206
|
+
style: rules.teams,
|
2207
|
+
children: "ЛИДС"
|
2208
|
+
})]
|
2209
|
+
})]
|
2210
|
+
})]
|
2211
|
+
});
|
2212
|
+
};
|
2213
|
+
const SimplePopup = () => {
|
2214
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
2215
|
+
const rootRef = _$1(null);
|
2216
|
+
const device = useContainerDevice({
|
2217
|
+
watchRef: rootRef
|
2218
|
+
});
|
2219
|
+
const state = useCurrentState();
|
2220
|
+
const deviceState = useDeviceState(state, device);
|
2221
|
+
set(deviceState, "buttonWrapper.percent_width", (_a = deviceState == null ? void 0 : deviceState.buttonWrapper) == null ? void 0 : _a.width);
|
2222
|
+
set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
|
2223
|
+
const rules = useParseRules(deviceState);
|
2224
|
+
const bodyRules = {
|
2225
|
+
...rules.root,
|
2226
|
+
alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
|
2227
|
+
};
|
2228
|
+
const contentRules = {
|
2229
|
+
...rules.content,
|
2230
|
+
alignItems: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.align)
|
2231
|
+
};
|
2232
|
+
const textRules = {
|
2233
|
+
...rules.text,
|
2234
|
+
textAlign: (_e = rules.root) == null ? void 0 : _e.align
|
2235
|
+
};
|
2236
|
+
const buttonRules = {
|
2237
|
+
...rules == null ? void 0 : rules.button,
|
2238
|
+
justifyContent: switchTextAlignToFlex((_f = rules.root) == null ? void 0 : _f.textAlign)
|
2239
|
+
};
|
2240
|
+
const legalRules = {
|
2241
|
+
...rules == null ? void 0 : rules.legal,
|
2242
|
+
justifyContent: switchTextAlignToFlex((_g = rules.root) == null ? void 0 : _g.textAlign)
|
2243
|
+
};
|
2244
|
+
return o("a", {
|
2245
|
+
ref: rootRef,
|
2246
|
+
href: (_h = rules.root) == null ? void 0 : _h.offer,
|
2247
|
+
target: "_blank",
|
2248
|
+
rel: "nofollow noopener noreferrer",
|
2249
|
+
className: classNames(styles$6.root, {
|
2250
|
+
[styles$6.desktop]: device === "desktop",
|
2251
|
+
[styles$6.laptop]: device === "laptop",
|
2252
|
+
[styles$6.tablet]: device === "tablet"
|
2253
|
+
}),
|
2254
|
+
children: o("div", {
|
2255
|
+
className: styles$6.body,
|
2256
|
+
style: bodyRules,
|
2257
|
+
children: [o("div", {
|
2258
|
+
className: styles$6.head,
|
2259
|
+
children: [o("div", {
|
2260
|
+
className: styles$6.title,
|
2261
|
+
style: rules.title,
|
2262
|
+
children: (_i = rules.title) == null ? void 0 : _i.children
|
2263
|
+
}), o("div", {
|
2264
|
+
className: styles$6.logo,
|
2265
|
+
style: rules.logo
|
2266
|
+
})]
|
2267
|
+
}), o("div", {
|
2268
|
+
className: styles$6.wrapper,
|
2269
|
+
style: contentRules,
|
2270
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
2271
|
+
value: {
|
2272
|
+
...child,
|
2273
|
+
device
|
2274
|
+
},
|
2275
|
+
children: o(Match, {})
|
2276
|
+
}))
|
2277
|
+
}), o(DisplayText, {
|
2278
|
+
className: styles$6.text,
|
2279
|
+
style: textRules,
|
2280
|
+
children: (_j = rules.text) == null ? void 0 : _j.children
|
2281
|
+
}), o("div", {
|
2282
|
+
className: styles$6.button,
|
2283
|
+
style: rules.buttonWrapper,
|
2284
|
+
children: [o("div", {
|
2285
|
+
className: styles$6.buttonHead,
|
2286
|
+
style: rules.buttonHead,
|
2287
|
+
children: (_k = rules.buttonHead) == null ? void 0 : _k.children
|
2288
|
+
}), o("div", {
|
2289
|
+
className: styles$6.buttonTarget,
|
2290
|
+
style: buttonRules,
|
2291
|
+
children: (_l = rules.button) == null ? void 0 : _l.children
|
2292
|
+
})]
|
2293
|
+
}), o("div", {
|
2294
|
+
className: styles$6.legal,
|
2295
|
+
style: legalRules,
|
2296
|
+
children: (_m = rules.legal) == null ? void 0 : _m.children
|
2297
|
+
})]
|
2298
|
+
})
|
2299
|
+
});
|
2300
|
+
};
|
2301
|
+
const index$2 = render(o(SimplePopup, {}));
|
2302
|
+
const root$4 = "_root_1slvw_1";
|
2303
|
+
const background$1 = "_background_1slvw_20";
|
2304
|
+
const body = "_body_1slvw_29";
|
2305
|
+
const bookmaker = "_bookmaker_1slvw_39";
|
2306
|
+
const button$1 = "_button_1slvw_46";
|
2307
|
+
const rowFirst = "_rowFirst_1slvw_60";
|
2308
|
+
const rowSecond = "_rowSecond_1slvw_66";
|
2309
|
+
const legal = "_legal_1slvw_72";
|
2310
|
+
const legalText = "_legalText_1slvw_88";
|
2311
|
+
const legalOpen = "_legalOpen_1slvw_98";
|
2312
|
+
const legalButton = "_legalButton_1slvw_103";
|
2313
|
+
const styles$4 = {
|
2314
|
+
root: root$4,
|
2315
|
+
background: background$1,
|
2316
|
+
body,
|
2317
|
+
bookmaker,
|
2318
|
+
button: button$1,
|
2319
|
+
rowFirst,
|
2320
|
+
rowSecond,
|
2321
|
+
legal,
|
2322
|
+
legalText,
|
2323
|
+
legalOpen,
|
2324
|
+
legalButton
|
2325
|
+
};
|
2326
|
+
const Bonus = () => {
|
2327
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
2328
|
+
const state = useCurrentState();
|
2329
|
+
const rules = useParseRules(state);
|
2330
|
+
const [isOpen, toggleIsOpen] = useToggle();
|
2331
|
+
return o("div", {
|
2332
|
+
className: styles$4.root,
|
2333
|
+
style: rules.root,
|
2334
|
+
children: [o("div", {
|
2335
|
+
className: styles$4.background,
|
2336
|
+
style: rules.background
|
2337
|
+
}), o("a", {
|
2338
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
2339
|
+
target: "_blank",
|
2340
|
+
rel: "nofollow noopener noreferrer",
|
2341
|
+
className: styles$4.body,
|
2342
|
+
children: [o("div", {
|
2343
|
+
children: [o("div", {
|
2344
|
+
className: styles$4.rowFirst,
|
2345
|
+
style: rules.rowFirst,
|
2346
|
+
children: (_b = rules.rowFirst) == null ? void 0 : _b.children
|
2347
|
+
}), o("div", {
|
2348
|
+
className: styles$4.rowSecond,
|
2349
|
+
style: rules.rowSecond,
|
2350
|
+
children: (_c = rules.rowSecond) == null ? void 0 : _c.children
|
2351
|
+
}), o("div", {
|
2352
|
+
className: styles$4.bookmaker,
|
2353
|
+
children: "winline"
|
2354
|
+
})]
|
2355
|
+
}), o("div", {
|
2356
|
+
className: styles$4.button,
|
2357
|
+
style: rules.button,
|
2358
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
2359
|
+
})]
|
2360
|
+
}), o("div", {
|
2361
|
+
className: classNames(styles$4.legal, {
|
2362
|
+
[styles$4.legalOpen]: isOpen
|
2363
|
+
}),
|
2364
|
+
style: rules.legalInfo,
|
2365
|
+
children: o("span", {
|
2366
|
+
className: styles$4.legalText,
|
2367
|
+
children: [o("span", {
|
2368
|
+
children: (_e = rules.legalInfo) == null ? void 0 : _e.children
|
2369
|
+
}), o("span", {
|
2370
|
+
className: styles$4.legalButton,
|
2371
|
+
style: rules.legalInfoButton,
|
2372
|
+
onClick: toggleIsOpen,
|
2373
|
+
children: isOpen ? (_f = rules.legalInfoButton) == null ? void 0 : _f.openText : (_g = rules.legalInfoButton) == null ? void 0 : _g.closeText
|
2374
|
+
})]
|
2375
|
+
})
|
2376
|
+
})]
|
2377
|
+
});
|
2378
|
+
};
|
2379
|
+
const BonusCard = () => {
|
2380
|
+
const rootRef = _$1(null);
|
2381
|
+
const state = useCurrentState();
|
2382
|
+
const device = "desktop";
|
2383
|
+
const deviceState = useDeviceState(state, device);
|
2384
|
+
const rules = useParseRules(deviceState);
|
2385
|
+
return o("div", {
|
2386
|
+
ref: rootRef,
|
2387
|
+
children: ((rules == null ? void 0 : rules.children) || []).map((child) => o(StateContext, {
|
2388
|
+
value: child,
|
2389
|
+
children: o(Bonus, {})
|
2390
|
+
}))
|
2391
|
+
});
|
2392
|
+
};
|
2393
|
+
const index$1 = render(o(BonusCard, {}));
|
2394
|
+
const root$3 = "_root_1i5vb_1";
|
2395
|
+
const desktop$2 = "_desktop_1i5vb_13";
|
2396
|
+
const laptop$1 = "_laptop_1i5vb_14";
|
2397
|
+
const promotion = "_promotion_1i5vb_18";
|
2398
|
+
const background = "_background_1i5vb_29";
|
2399
|
+
const content = "_content_1i5vb_38";
|
2400
|
+
const variant2 = "_variant2_1i5vb_51";
|
2401
|
+
const logo = "_logo_1i5vb_55";
|
2402
|
+
const left = "_left_1i5vb_67";
|
2403
|
+
const center = "_center_1i5vb_81";
|
2404
|
+
const slide = "_slide_1i5vb_87";
|
2405
|
+
const slide_animated_default = "_slide_animated_default_1i5vb_101";
|
2406
|
+
const right = "_right_1i5vb_111";
|
2407
|
+
const buttonWrapper = "_buttonWrapper_1i5vb_126";
|
2408
|
+
const button = "_button_1i5vb_126";
|
2409
|
+
const button_animated = "_button_animated_1i5vb_157";
|
2410
|
+
const increase = "_increase_1i5vb_1";
|
2411
|
+
const styles$3 = {
|
2412
|
+
root: root$3,
|
2413
|
+
desktop: desktop$2,
|
2414
|
+
laptop: laptop$1,
|
2415
|
+
promotion,
|
2416
|
+
background,
|
2417
|
+
content,
|
2418
|
+
variant2,
|
2419
|
+
logo,
|
2420
|
+
left,
|
2421
|
+
center,
|
2422
|
+
slide,
|
2423
|
+
slide_animated_default,
|
2424
|
+
"fade-in-out": "_fade-in-out_1i5vb_1",
|
2425
|
+
"slide_animated_bottom-top": "_slide_animated_bottom-top_1i5vb_104",
|
2426
|
+
"fade-in-bottom-out-top": "_fade-in-bottom-out-top_1i5vb_1",
|
2427
|
+
"slide_animated_top-bottom": "_slide_animated_top-bottom_1i5vb_107",
|
2428
|
+
right,
|
2429
|
+
buttonWrapper,
|
2430
|
+
button,
|
2431
|
+
button_animated,
|
2432
|
+
increase,
|
2433
|
+
"fade-in-top-out-bottom": "_fade-in-top-out-bottom_1i5vb_1"
|
2434
|
+
};
|
2435
|
+
const root$2 = "_root_1o6so_1";
|
2436
|
+
const desktop$1 = "_desktop_1o6so_17";
|
2437
|
+
const styles$2 = {
|
2438
|
+
root: root$2,
|
2439
|
+
desktop: desktop$1
|
2440
|
+
};
|
2441
|
+
const Text = () => {
|
2442
|
+
var _a;
|
2443
|
+
const state = useCurrentState();
|
2444
|
+
const rules = useParseRules(state);
|
2445
|
+
return o("div", {
|
2446
|
+
className: classNames(styles$2.root, {
|
2447
|
+
[styles$2.desktop]: (state == null ? void 0 : state.device) === "desktop"
|
2448
|
+
}),
|
2449
|
+
style: omit(rules.root, ...backgroundOptions),
|
2450
|
+
children: (_a = rules.root) == null ? void 0 : _a.children
|
2451
|
+
});
|
2452
|
+
};
|
2453
|
+
const root$1 = "_root_vjs41_1";
|
2454
|
+
const odd = "_odd_vjs41_7";
|
2455
|
+
const oddReverse = "_oddReverse_vjs41_14";
|
2456
|
+
const oddLabel = "_oddLabel_vjs41_18";
|
2457
|
+
const oddLogo = "_oddLogo_vjs41_30";
|
2458
|
+
const coef = "_coef_vjs41_36";
|
2459
|
+
const coefHead = "_coefHead_vjs41_42";
|
2460
|
+
const coefValue = "_coefValue_vjs41_47";
|
2461
|
+
const styles$1 = {
|
2462
|
+
root: root$1,
|
2463
|
+
odd,
|
2464
|
+
oddReverse,
|
2465
|
+
oddLabel,
|
2466
|
+
oddLogo,
|
2467
|
+
coef,
|
2468
|
+
coefHead,
|
2469
|
+
coefValue
|
2470
|
+
};
|
2471
|
+
const Matches = () => {
|
2472
|
+
const state = useCurrentState();
|
2473
|
+
const rules = useParseRules(state);
|
2474
|
+
const rootRules = omit(rules.root, ...backgroundOptions);
|
2475
|
+
return o("div", {
|
2476
|
+
className: styles$1.root,
|
2477
|
+
children: [o("div", {
|
2478
|
+
className: styles$1.odd,
|
2479
|
+
children: [o("div", {
|
2480
|
+
className: styles$1.oddLogo,
|
2481
|
+
style: rootRules
|
2482
|
+
}), o("div", {
|
2483
|
+
className: styles$1.oddLabel,
|
2484
|
+
style: rootRules,
|
2485
|
+
children: "3"
|
2486
|
+
})]
|
2487
|
+
}), o("div", {
|
2488
|
+
className: styles$1.coef,
|
2489
|
+
children: [o("div", {
|
2490
|
+
className: styles$1.coefHead,
|
2491
|
+
style: rules.coef,
|
2492
|
+
children: "X"
|
2493
|
+
}), o("div", {
|
2494
|
+
className: styles$1.coefValue,
|
2495
|
+
style: rootRules,
|
2496
|
+
children: "3.92"
|
2497
|
+
})]
|
2498
|
+
}), o("div", {
|
2499
|
+
className: classNames(styles$1.odd, styles$1.oddReverse),
|
2500
|
+
children: [o("div", {
|
2501
|
+
className: styles$1.oddLogo,
|
2502
|
+
style: rootRules
|
2503
|
+
}), o("div", {
|
2504
|
+
className: styles$1.oddLabel,
|
2505
|
+
style: rootRules,
|
2506
|
+
children: "2.8"
|
2507
|
+
})]
|
2508
|
+
})]
|
2509
|
+
});
|
2510
|
+
};
|
2511
|
+
const root = "_root_1va5h_1";
|
2512
|
+
const title = "_title_1va5h_8";
|
2513
|
+
const titleLabel = "_titleLabel_1va5h_12";
|
2514
|
+
const tablet = "_tablet_1va5h_16";
|
2515
|
+
const desktop = "_desktop_1va5h_19";
|
2516
|
+
const laptop = "_laptop_1va5h_19";
|
2517
|
+
const titleValue = "_titleValue_1va5h_23";
|
2518
|
+
const team = "_team_1va5h_34";
|
2519
|
+
const teamLogo = "_teamLogo_1va5h_44";
|
2520
|
+
const teamName = "_teamName_1va5h_72";
|
2521
|
+
const teamValue = "_teamValue_1va5h_84";
|
2522
|
+
const styles = {
|
2523
|
+
root,
|
2524
|
+
title,
|
2525
|
+
titleLabel,
|
2526
|
+
tablet,
|
2527
|
+
desktop,
|
2528
|
+
laptop,
|
2529
|
+
titleValue,
|
2530
|
+
team,
|
2531
|
+
teamLogo,
|
2532
|
+
teamName,
|
2533
|
+
teamValue
|
2534
|
+
};
|
2535
|
+
const MatchesOneTwo = () => {
|
2536
|
+
const state = useCurrentState();
|
2537
|
+
const rules = useParseRules(state);
|
2538
|
+
return o("div", {
|
2539
|
+
className: classNames(styles.root, {
|
2540
|
+
[styles.desktop]: (state == null ? void 0 : state.device) === "desktop",
|
2541
|
+
[styles.laptop]: (state == null ? void 0 : state.device) === "laptop",
|
2542
|
+
[styles.tablet]: (state == null ? void 0 : state.device) === "tablet"
|
2543
|
+
}),
|
2544
|
+
style: omit(rules.root, ...backgroundOptions),
|
2545
|
+
children: [o("div", {
|
2546
|
+
className: styles.title,
|
2547
|
+
children: [o("div", {
|
2548
|
+
className: styles.titleLabel,
|
2549
|
+
style: rules.titleLabel,
|
2550
|
+
children: rules.titleLabel.children
|
2551
|
+
}), o("div", {
|
2552
|
+
className: styles.titleValue,
|
2553
|
+
style: rules.titleValue,
|
2554
|
+
children: rules.titleValue.children
|
2555
|
+
})]
|
2556
|
+
}), o("div", {
|
2557
|
+
children: [o("div", {
|
2558
|
+
className: styles.team,
|
2559
|
+
children: [o("div", {
|
2560
|
+
className: styles.teamLogo,
|
2561
|
+
style: rules.logo
|
2562
|
+
}), o("div", {
|
2563
|
+
className: styles.teamName,
|
2564
|
+
style: rules.teamName,
|
2565
|
+
children: rules.team1Name.children
|
2566
|
+
}), o("div", {
|
2567
|
+
className: styles.teamValue,
|
2568
|
+
style: rules.value,
|
2569
|
+
children: rules.value1.children
|
2570
|
+
})]
|
2571
|
+
}), o("div", {
|
2572
|
+
className: styles.team,
|
2573
|
+
children: [o("div", {
|
2574
|
+
className: styles.teamLogo,
|
2575
|
+
style: rules.logo
|
2576
|
+
}), o("div", {
|
2577
|
+
className: styles.teamName,
|
2578
|
+
style: rules.teamName,
|
2579
|
+
children: rules.team2Name.children
|
2580
|
+
}), o("div", {
|
2581
|
+
className: styles.teamValue,
|
2582
|
+
style: rules.value,
|
2583
|
+
children: rules.value2.children
|
2584
|
+
})]
|
2585
|
+
})]
|
2586
|
+
})]
|
2587
|
+
});
|
2588
|
+
};
|
2589
|
+
const useAnimatedList = (slides = []) => {
|
2590
|
+
var _a;
|
2591
|
+
const itemsCount = slides.length;
|
2592
|
+
const [animatedIdx, setAnimatedIdx] = h(0);
|
2593
|
+
const animationDuration = (_a = slides[animatedIdx || 0]) == null ? void 0 : _a.animationDuration;
|
2594
|
+
p(() => {
|
2595
|
+
const goNext = () => {
|
2596
|
+
setAnimatedIdx((index2) => {
|
2597
|
+
if (index2 + 1 < itemsCount)
|
2598
|
+
return index2 + 1;
|
2599
|
+
return 0;
|
2600
|
+
});
|
2601
|
+
};
|
2602
|
+
const timeout = setTimeout(goNext, animationDuration);
|
2603
|
+
return () => clearTimeout(timeout);
|
2604
|
+
}, [setAnimatedIdx, itemsCount, animationDuration, animatedIdx]);
|
2605
|
+
return animatedIdx;
|
2606
|
+
};
|
2607
|
+
const DEFAULT_ANIMATION_SPEED = 3700;
|
2608
|
+
const backgroundOptions = ["backgroundColor", "backgroundColorOpacity", "backgroundImage", "backgroundFit"];
|
2609
|
+
const WideCard = () => {
|
2610
|
+
var _a, _b, _c, _d, _e;
|
2611
|
+
const rootRef = _$1(null);
|
2612
|
+
const state = useCurrentState();
|
2613
|
+
const device = useContainerDevice({
|
2614
|
+
watchRef: rootRef
|
2615
|
+
});
|
2616
|
+
const deviceState = useDeviceState(state, device);
|
2617
|
+
const rules = useParseRules(deviceState);
|
2618
|
+
const getChild = (name2) => ({
|
2619
|
+
text: o(Text, {}),
|
2620
|
+
matches: o(Matches, {}),
|
2621
|
+
matchesOneTwo: o(MatchesOneTwo, {})
|
2622
|
+
})[name2];
|
2623
|
+
const slidesList = (rules.children || []).filter(Boolean).map((slide2) => {
|
2624
|
+
var _a2, _b2;
|
2625
|
+
return {
|
2626
|
+
...slide2,
|
2627
|
+
animationName: (_a2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _a2.animationName,
|
2628
|
+
animationDuration: ((_b2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _b2.animationDuration) || DEFAULT_ANIMATION_SPEED
|
2629
|
+
};
|
2630
|
+
});
|
2631
|
+
const currentSlide = useAnimatedList(slidesList);
|
2632
|
+
const slideRules = useParseRules(slidesList[currentSlide] || {});
|
2633
|
+
const backgroundRules = ((_a = slideRules == null ? void 0 : slideRules.root) == null ? void 0 : _a.hasCustomBackground) ? pick((slideRules == null ? void 0 : slideRules.root) || {}, ...backgroundOptions) : pick(rules.background, ...backgroundOptions);
|
2634
|
+
return o("a", {
|
2635
|
+
ref: rootRef,
|
2636
|
+
href: (_b = rules.root) == null ? void 0 : _b.offer,
|
2637
|
+
target: "_blank",
|
2638
|
+
rel: "nofollow noopener noreferrer",
|
2639
|
+
className: classNames(styles$3.root, {
|
2640
|
+
[styles$3.desktop]: device === "desktop",
|
2641
|
+
[styles$3.laptop]: device === "laptop",
|
2642
|
+
[styles$3.tablet]: device === "tablet",
|
2643
|
+
[styles$3.variant2]: ((_c = rules.root) == null ? void 0 : _c.variant) === "variant2"
|
2644
|
+
}),
|
2645
|
+
style: rules.root,
|
2646
|
+
children: [o("div", {
|
2647
|
+
className: styles$3.background,
|
2648
|
+
style: backgroundRules
|
2649
|
+
}), o("div", {
|
2650
|
+
className: styles$3.promotion,
|
2651
|
+
style: rules.promotion,
|
2652
|
+
children: (_d = rules.promotion) == null ? void 0 : _d.children
|
2653
|
+
}), o("div", {
|
2654
|
+
className: styles$3.content,
|
2655
|
+
children: [o("div", {
|
2656
|
+
className: styles$3.left,
|
2657
|
+
children: o("div", {
|
2658
|
+
className: styles$3.logo,
|
2659
|
+
style: rules.logo
|
2660
|
+
})
|
2661
|
+
}), o("div", {
|
2662
|
+
className: styles$3.center,
|
2663
|
+
children: (rules.children || []).map((child, index2) => {
|
2664
|
+
var _a2, _b2;
|
2665
|
+
return o("div", {
|
2666
|
+
className: styles$3.slide,
|
2667
|
+
style: {
|
2668
|
+
animationName: currentSlide === index2 ? styles$3[((_a2 = child.root) == null ? void 0 : _a2.animationName) || "fade-in-out"] : "none",
|
2669
|
+
animationDuration: `${(_b2 = child.root) == null ? void 0 : _b2.animationDuration}ms`
|
2670
|
+
},
|
2671
|
+
children: o(StateContext, {
|
2672
|
+
value: {
|
2673
|
+
...child,
|
2674
|
+
device
|
2675
|
+
},
|
2676
|
+
children: getChild(child.name)
|
2677
|
+
})
|
2678
|
+
});
|
2679
|
+
})
|
2680
|
+
}), o("div", {
|
2681
|
+
className: styles$3.right,
|
2682
|
+
children: [o("div", {
|
2683
|
+
className: styles$3.logo,
|
2684
|
+
style: rules.logo
|
2685
|
+
}), o("div", {
|
2686
|
+
className: styles$3.buttonWrapper,
|
2687
|
+
children: o("div", {
|
2688
|
+
className: styles$3.button,
|
2689
|
+
style: rules.button,
|
2690
|
+
children: [o("div", {
|
2691
|
+
className: styles$3.logo,
|
2692
|
+
style: rules.logo
|
2693
|
+
}), (_e = rules.button) == null ? void 0 : _e.children]
|
2694
|
+
})
|
2695
|
+
})]
|
2696
|
+
})]
|
2697
|
+
})]
|
2698
|
+
});
|
2699
|
+
};
|
2700
|
+
const index = render(o(WideCard, {}));
|
2701
|
+
exports2.BonusCard = index$1;
|
2702
|
+
exports2.ComplexGift = index$5;
|
2703
|
+
exports2.ComplexPopup = index$3;
|
2704
|
+
exports2.ExpressPopup = index$2;
|
2705
|
+
exports2.SimpleGift = index$6;
|
2706
|
+
exports2.SimplePopup = index$4;
|
2707
|
+
exports2.WideCard = index;
|
2708
|
+
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
2709
|
+
});
|
2710
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLnVtZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL2Rpc3QvaG9va3MubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwiLi4vc3JjL2hvb2tzL3VzZUdpZnRPcGVuLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwiLi4vc3JjL1N0YXRlQ29udGV4dC50c3giLCIuLi9zcmMvaGVscGVycy9yZW5kZXIudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZS50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2FmZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlRGVlcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lcmdlLmpzIiwiLi4vLi4vdXRpbHMvaXRlcmF0b3IudHMiLCIuLi8uLi91dGlscy9pbmRleC50cyIsIi4uL3NyYy9oZWxwZXJzL2dldERldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZURldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZS50cyIsIi4uL3NyYy9oZWxwZXJzL3BhcnNlUnVsZXMudHMiLCIuLi9zcmMvaG9va3MvdXNlUGFyc2VSdWxlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0LnRzeCIsIi4uL3NyYy9ob29rcy91c2VUb2dnbGUudHMiLCIuLi9zcmMvY29tcG9uZW50cy9DbG9zZUljb24udHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvR2lmdEljb24udHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvY29tcG9uZW50cy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgudHMiLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2NvbXBvbmVudHMvbGluZS9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2NvbXBvbmVudHMvQm9udXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4UG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvY29tcG9uZW50cy9NYXRjaC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0V4cHJlc3NQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9UZXh0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9NYXRjaGVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9NYXRjaGVzT25lVHdvL2luZGV4LnRzeCIsIi4uL3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QudHMiLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9ICgpID0+IHVzZUNvbnRleHQoU3RhdGUpXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5JyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpLFxuICAgIHRvUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL3RvUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gIGlmIChzdGFja2VkKSB7XG4gICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICBpZiAoaXNDb21tb24pIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2VEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAgYmFzZU1lcmdlRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZURlZXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2U7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuXG50eXBlIFZpc2l0b3IgPSBDYWxsYmFjazxbUHJvcGVydHlLZXksIHVua25vd25dPlxuXG5leHBvcnQgY29uc3QgaXRlcmF0b3IgPSAoaW5wdXQ6IHVua25vd24sIHZpc2l0b3I6IFZpc2l0b3IpOiBhbnkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IGl0ZXJhdG9yKHZpc2l0b3IoaW5kZXgsIGVsKSwgdmlzaXRvcikpXG4gIH1cblxuICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dCkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUpLCB2aXNpdG9yKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29uc3RhbnRzID0gPEsgZXh0ZW5kcyBzdHJpbmc+KC4uLmNvbnN0YW50czogS1tdKSA9PiB7XG4gIHJldHVybiBjb25zdGFudHMucmVkdWNlPHsgW1AgaW4gS106IFAgfT4oKGFjYywgY29uc3RhbnQpID0+IHtcbiAgICBhY2NbY29uc3RhbnRdID0gY29uc3RhbnRcbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9IGFzIHsgW1AgaW4gS106IFAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHBpY2sgPSA8VFZhbHVlIGV4dGVuZHMgQW55T2JqZWN0PihvYmo6IFRWYWx1ZSwgLi4ucHJvcHM6IChrZXlvZiBUVmFsdWUpW10pID0+IHtcbiAgcmV0dXJuIHByb3BzLnJlZHVjZSgocmVzdWx0LCBwcm9wKSA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqW3Byb3BdXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCB7fSBhcyBhbnkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0PFQgZXh0ZW5kcyBBbnlPYmplY3QsIFAgZXh0ZW5kcyBzdHJpbmdbXT4ob2JqOiBULCAuLi5wcm9wczogUCk6IE9taXQ8VCwgUFtudW1iZXJdPiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgcHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICBkZWxldGUgcmVzdWx0W3Byb3BdXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IGdldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCBkZWZWYWx1ZT86IHVua25vd24pOiBhbnkgPT4ge1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG4gIGNvbnN0IHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKHByZXZPYmo6IEFueU9iamVjdCwga2V5OiBzdHJpbmcpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopXG4gIC8vIElmIGZvdW5kIHZhbHVlIGlzIHVuZGVmaW5lZCByZXR1cm4gZGVmYXVsdCB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiB0aGUgdmFsdWVcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmVmFsdWUgOiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IHNldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBwYXRoQXJyYXkgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKSkgYXMgc3RyaW5nW11cblxuICByZXR1cm4gcGF0aEFycmF5LnJlZHVjZSgoYWNjLCBrZXksIGkpID0+IHtcbiAgICBpZiAoYWNjW2tleV0gPT09IHVuZGVmaW5lZCkgYWNjW2tleV0gPSB7fVxuICAgIGlmIChpID09PSBwYXRoQXJyYXkubGVuZ3RoIC0gMSkgYWNjW2tleV0gPSB2YWx1ZVxuICAgIHJldHVybiBhY2Nba2V5XVxuICB9LCBvYmopXG59XG5cbmV4cG9ydCBjb25zdCBoZXhUb1JnYiA9IChoZXg6IHN0cmluZykgPT4ge1xuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCByZ2JUb1JnYmEgPSAocmdiOiBzdHJpbmcsIGFscGhhID0gMSk6IHN0cmluZyA9PiByZ2IucmVwbGFjZSgnKScsIGAsICR7YWxwaGF9KWApLnJlcGxhY2UoJ3JnYicsICdyZ2JhJylcblxuZXhwb3J0IGNvbnN0IG1lcmdlID0gbG9kYXNoTWVyZ2VcblxuZXhwb3J0IGNvbnN0IGRldmljZXMgPSBbJ2Rlc2t0b3AnLCAnbGFwdG9wJywgJ3RhYmxldCcsICdtb2JpbGUnXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQlJFQUtQT0lOVFMgPSB7XG4gIG1vYmlsZTogMzIwLFxuICB0YWJsZXQ6IDc2OCxcbiAgbGFwdG9wOiAxMDI0LFxuICBkZXNrdG9wOiAxOTIwXG59IGFzIGNvbnN0XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG5leHBvcnQgKiBmcm9tICcuL2l0ZXJhdG9yJ1xuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBEZXZpY2UsIGRldmljZXMsIGlzVmFsdWUsIGl0ZXJhdG9yIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IGlzVmFsaWREZXZpY2VTdGF0ZSA9IChzdGF0ZTogQW55T2JqZWN0ID0ge30pID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0RGV2aWNlU3RhdGUgPSAoc3RhdGU/OiB1bmtub3duLCBkZXZpY2U6IERldmljZSA9ICdkZXNrdG9wJyk6IHVua25vd24gPT4ge1xuICBpZiAoIXN0YXRlKSByZXR1cm4ge31cblxuICByZXR1cm4gaXRlcmF0b3Ioc3RhdGUsIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkRGV2aWNlU3RhdGUodmFsdWUpKSB7XG4gICAgICAvLyBjb25zdCBwcm94eVJ1bGVzID0geyAuLi52YWx1ZSB9XG4gICAgICAvL1xuICAgICAgLy8gZGV2aWNlcy5mb3JFYWNoKGRldmljZVByb3AgPT4ge1xuICAgICAgLy8gICBpZiAoZGV2aWNlUHJvcCAhPT0gZGV2aWNlKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHByb3h5UnVsZXNbZGV2aWNlUHJvcF1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICAgIC8vXG4gICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSwgcHJveHlSdWxlcyk7XG4gICAgICAvLyByZXR1cm4ge1xuICAgICAgLy8gICAuLi5wcm94eVJ1bGVzW2RldmljZV0sXG4gICAgICAvL1xuICAgICAgLy8gfVxuICAgICAgcmV0dXJuIHZhbHVlW2RldmljZV1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfSlcbn1cbiIsImltcG9ydCB7IERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGV2aWNlU3RhdGUgfSBmcm9tICcuLi9oZWxwZXJzL2dldERldmljZVN0YXRlJ1xuXG5leHBvcnQgY29uc3QgdXNlRGV2aWNlU3RhdGUgPSAoc3RhdGU6IHVua25vd24sIGRldmljZTogRGV2aWNlKSA9PiBnZXREZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHdhdGNoUmVmOiBNdXRhYmxlUmVmPEhUTUxFbGVtZW50PlxuICBicmVha3BvaW50cz86IHR5cGVvZiBCUkVBS1BPSU5UU1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGFpbmVyRGV2aWNlID0gKHsgd2F0Y2hSZWYsIGJyZWFrcG9pbnRzID0gQlJFQUtQT0lOVFMgfTogT3B0aW9ucykgPT4ge1xuICBjb25zdCBbZGV2aWNlLCBzZXREZXZpY2VdID0gdXNlU3RhdGU8RGV2aWNlPignZGVza3RvcCcpXG5cbiAgY29uc3QgY2hlY2tEZXZpY2UgPSAocGFyZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDBcbiAgICBjb25zdCBmaW5kRGV2aWNlID0gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpLmZpbmQoKFssIHZhbHVlXSkgPT4gdmFsdWUgPj0gcGFyZW50V2lkdGgpPy5bMF0gYXMgRGV2aWNlXG5cbiAgICBzZXREZXZpY2UoZmluZERldmljZSlcbiAgfVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHdhdGNoUmVmLmN1cnJlbnQucGFyZW50RWxlbWVudFxuXG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpKVxuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnRFbGVtZW50KVxuXG4gICAgICBjaGVja0RldmljZShwYXJlbnRFbGVtZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIGRldmljZVxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBkZXZpY2VzLCBGaXRPcHRpb24sIGhleFRvUmdiLCBpc0VtcHR5VmFsdWUsIGlzVmFsdWUsIHJnYlRvUmdiYSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tICdzcmMvcmVuZGVyRHJpdmVyJ1xuaW1wb3J0IHsgaW5qZWN0U3R5bGVSdWxlcywgU3R5bGVSdWxlcyB9IGZyb20gJ3NyYy91dGlscy9pbmplY3RTdHlsZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWxpZFN0eWxlS2V5IH0gZnJvbSAnLi9pc1ZhbGlkU3R5bGVLZXknXG5cbi8qKlxuICog0J/Qu9Cw0LPQuNC9INC/0YDQuNC80LXQvdGP0LXRgiDQv9GA0LDQstC40LvQsDog0YHRgtC40LvQuCwgaW5uZXJUZXh0IC4uLlxuICog0JXRgdC70Lgg0LrQvtC90YLQtdC90YLQsCDQvdC10YIsINGC0L4g0J3QvtC00LAg0YHQutGA0YvQstCw0LXRgtGB0Y9cbiAqL1xuXG50eXBlIEN1c3RvbVN0eWxlcyA9IFBhcnRpYWw8XG4gIE9taXQ8U3R5bGVSdWxlcywgJ2JvcmRlcldpZHRoJyB8ICdtaW5IZWlnaHQnIHwgJ21pbldpZHRoJyB8ICdmb250U2l6ZSc+ICYge1xuICAgIG1pbkhlaWdodDogbnVtYmVyXG4gICAgbWluV2lkdGg6IG51bWJlclxuICAgIGZvbnRTaXplOiBudW1iZXJcbiAgfVxuPlxuXG5kZWNsYXJlIG1vZHVsZSAnc3JjL3JlbmRlckRyaXZlcicge1xuICBpbnRlcmZhY2UgUmVuZGVyRHJpdmVyUnVsZSBleHRlbmRzIEN1c3RvbVN0eWxlcyB7XG4gICAgaW5uZXJIVE1MPzogc3RyaW5nXG4gICAgaW5uZXJUZXh0Pzogc3RyaW5nXG4gICAgY29ybmVyPzogbnVtYmVyXG4gICAgYmFja2dyb3VuZEZpdD86IEZpdE9wdGlvblxuICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk/OiBudW1iZXJcbiAgICBpc0JvbGQ/OiBib29sZWFuXG4gICAgaXNJdGFsaWM/OiBib29sZWFuXG4gICAgaXNUaHJvdWdoPzogYm9vbGVhblxuICAgICRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgfVxufVxuXG5jb25zdCB3cmFwVG8gPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciwgdW50aWw6ICclJyB8ICdweCcpID0+IGAke3ZhbHVlfSR7dW50aWx9YFxuXG5jb25zdCB0b1B4ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncHhfJylcbmNvbnN0IHRvUGVyY2VudCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnN0YXJ0c1dpdGgoJ3BlcmNlbnRfJylcblxuY29uc3QgZm9ybWF0UnVsZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICBsZXQgbmV3S2V5ID0ga2V5XG4gIGxldCBuZXdWYWx1ZSA9IHZhbHVlXG5cbiAgaWYgKHRvUHgobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdweF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgfVxuICBpZiAodG9QZXJjZW50KG5ld0tleSkpIHtcbiAgICBuZXdLZXkgPSBuZXdLZXkucmVwbGFjZSgncGVyY2VudF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJyUnKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXk6IG5ld0tleSxcbiAgICB2YWx1ZTogbmV3VmFsdWVcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX1RPX1BYID0gW1xuICAnYm9yZGVyV2lkdGgnLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyVG9wV2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnbWluSGVpZ2h0JyxcbiAgJ21pbldpZHRoJyxcbiAgJ21heFdpZHRoJyxcbiAgJ21heEhlaWdodCcsXG4gICdmb250U2l6ZScsXG4gICdoZWlnaHQnLFxuICAnd2lkdGgnLFxuICAnbGV0dGVyU3BhY2luZycsXG4gICdmb250U2l6ZScsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0JyxcbiAgJ3RvcCcsXG4gICdib3R0b20nXG5dXG5cbmV4cG9ydCBjb25zdCBwYXJzZVJ1bGVzID0gKHJ1bGVzOiBBbnlPYmplY3QsIGxheWVyPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhydWxlcylcblxuICBpZiAoa2V5cy5pbmNsdWRlcygnaW5uZXJIVE1MJykgfHwga2V5cy5pbmNsdWRlcygnaW5uZXJUZXh0JykpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmchIElubmVySFRNTCBhbmQgaW5uZXJUZXh0IGlzIGRlcHJlY2F0ZWQuIFVzZSBcImNoaWxkcmVuXCIgcHJvcGVydHkuYCwgbGF5ZXIpXG4gIH1cblxuICBpZiAodHlwZW9mIHJ1bGVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBydWxlc1xuICB9XG5cbiAgaWYgKCd0eXBvZ3JhcGh5JyBpbiBydWxlcyAmJiAnYWNjZW50VHlwb2dyYXBoeScgaW4gcnVsZXMpIHtcbiAgICBjb25zdCB0eXBvZ3JhcGh5ID0gcnVsZXMudHlwb2dyYXBoeVxuICAgIGNvbnN0IGFjY2VudFR5cG9ncmFwaHkgPSBydWxlcy5hY2NlbnRUeXBvZ3JhcGh5XG5cbiAgICBydWxlcyA9IHtcbiAgICAgIC4uLnJ1bGVzLFxuICAgICAgLi4udHlwb2dyYXBoeSxcbiAgICAgICctLWFjY2VudC1jb2xvcic6IGFjY2VudFR5cG9ncmFwaHkuY29sb3IsXG4gICAgICAncHhfLS1hY2NlbnQtc2l6ZSc6IGFjY2VudFR5cG9ncmFwaHkuZm9udFNpemVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocnVsZXMpLnJlZHVjZSgoYWNjLCBbcHJvcEtleSwgcHJvcFZhbHVlXSkgPT4ge1xuICAgIGlmIChERUZBVUxUX1RPX1BYLmluY2x1ZGVzKHByb3BLZXkpKSB7XG4gICAgICBwcm9wVmFsdWUgPSB3cmFwVG8ocHJvcFZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gZm9ybWF0UnVsZShwcm9wS2V5LCBwcm9wVmFsdWUpXG4gICAgYWNjW2tleV0gPSB2YWx1ZVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGFjYy5pbm5lckhUTUwgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lclRleHQnKSB7XG4gICAgICBhY2MuaW5uZXJUZXh0ID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBhY2MuY2hpbGRyZW4gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnKSA6IHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgfHwga2V5ID09PSAnaW5uZXJUZXh0JyB8fCAoa2V5ID09PSAnY2hpbGRyZW4nICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBpZiAocHJvcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuXG5jb25zdCBTaW1wbGVHaWZ0ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IFtsZWdhbElzT3BlbiwgdG9nZ2xlTGVnYWxJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSByZWY9e3Jvb3RSZWZ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17cnVsZXMuaWNvbn0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT0nc2ltcGxlR2lmdC1ib2R5X19vZmZlcidcbiAgICAgICAgICAgIGRhdGEtbGF5ZXI9J29mZmVyJ1xuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgICB7cnVsZXM/LnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBsZWdhbElzT3BlblxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBzdHlsZT17cnVsZXMubGVnYWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e3J1bGVzPy5sZWdhbD8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgIHtsZWdhbElzT3BlbiA/IHJ1bGVzPy5sZWdhbD8uYnV0dG9uT3BlblRleHQgOiBydWxlcz8ubGVnYWw/LmJ1dHRvbkhpZGVUZXh0fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVHaWZ0IC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxhIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfSB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICB9KX0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5saW5lfSBzdHlsZT17cnVsZXMubGluZX0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgPERpc3BsYXlUZXh0PntydWxlcy50ZXh0Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UZXh0fT57cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNDYXJkXG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17cnVsZXMuaWNvbn0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRJY29ufT5cbiAgICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZFRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHdhdGNoUmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbi5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY29udGVudCB8fCBbXSkubWFwKGVsID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2VsfT5cbiAgICAgICAgICAgICAgPExpbmUgLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAge2J1dHRvblJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7bGVnYWxSdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBzdHlsZT17cnVsZXMuaGVhZGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB3YXRjaFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlRGV2aWNlU3RhdGUoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBNYXRjaDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWFndWV9IHN0eWxlPXtydWxlcy5sZWFndWV9PntydWxlcy5sZWFndWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PtCd0KzQrtCa0JDQodCbPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PtCb0JjQlNChPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTWF0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9NYXRjaFwiO1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbldyYXBwZXIucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b25XcmFwcGVyPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9IHN0eWxlPXtjb250ZW50UnVsZXN9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICAgIDxNYXRjaCAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17dGV4dFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25IZWFkfSBzdHlsZT17cnVsZXMuYnV0dG9uSGVhZH0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uSGVhZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UYXJnZXR9IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcblxuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBbaXNPcGVuLCB0b2dnbGVJc09wZW5dID0gdXNlVG9nZ2xlKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfSB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleFwiO1xuXG5jb25zdCBUZXh0OiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICB7cnVsZXMucm9vdD8uY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleFwiO1xuXG5jb25zdCBNYXRjaGVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgY29uc3Qgcm9vdFJ1bGVzID0gb21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+MzwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZIZWFkfSBzdHlsZT17cnVsZXMuY29lZn0+WDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZWYWx1ZX0gc3R5bGU9e3Jvb3RSdWxlc30+My45MjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMub2RkLCBzdHlsZXMub2RkUmV2ZXJzZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+Mi44PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4XCI7XG5cbmNvbnN0IE1hdGNoZXNPbmVUd286IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogc3RhdGU/LmRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlTGFiZWx9IHN0eWxlPXtydWxlcy50aXRsZUxhYmVsfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVMYWJlbC5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVWYWx1ZX0gc3R5bGU9e3J1bGVzLnRpdGxlVmFsdWV9PlxuICAgICAgICAgIHtydWxlcy50aXRsZVZhbHVlLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0xTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTEuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTJOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMi5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzT25lVHdvXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW50ZXJmYWNlIFNsaWRlIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IG51bWJlclxufVxuXG5jb25zdCB1c2VBbmltYXRlZExpc3QgPSAoc2xpZGVzOiBTbGlkZVtdID0gW10pID0+IHtcbiAgY29uc3QgaXRlbXNDb3VudCA9IHNsaWRlcy5sZW5ndGhcbiAgY29uc3QgW2FuaW1hdGVkSWR4LCBzZXRBbmltYXRlZElkeF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gc2xpZGVzW2FuaW1hdGVkSWR4IHx8IDBdPy5hbmltYXRpb25EdXJhdGlvblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ29OZXh0ID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZWRJZHgoaW5kZXggPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgaXRlbXNDb3VudCkgcmV0dXJuIGluZGV4ICsgMVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChnb05leHQsIGFuaW1hdGlvbkR1cmF0aW9uKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICB9LCBbc2V0QW5pbWF0ZWRJZHgsIGl0ZW1zQ291bnQsIGFuaW1hdGlvbkR1cmF0aW9uLCBhbmltYXRlZElkeF0pXG5cbiAgcmV0dXJuIGFuaW1hdGVkSWR4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFuaW1hdGVkTGlzdFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZURldmljZVN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBUZXh0IGZyb20gJy4vY29tcG9uZW50cy9UZXh0J1xuaW1wb3J0IE1hdGNoZXMgZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXMnXG5pbXBvcnQgTWF0Y2hlc09uZVR3byBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3bydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgdXNlQW5pbWF0ZWRMaXN0IGZyb20gJ3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEID0gMzcwMFxuXG5leHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgZ2V0Q2hpbGQgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICh7XG4gICAgICB0ZXh0OiA8VGV4dCAvPixcbiAgICAgIG1hdGNoZXM6IDxNYXRjaGVzIC8+LFxuICAgICAgbWF0Y2hlc09uZVR3bzogPE1hdGNoZXNPbmVUd28gLz5cbiAgICB9W25hbWVdKVxuXG4gIGNvbnN0IHNsaWRlc0xpc3QgPSAocnVsZXMuY2hpbGRyZW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5tYXAoc2xpZGUgPT4gKHtcbiAgICAuLi5zbGlkZSxcbiAgICBhbmltYXRpb25OYW1lOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uTmFtZSxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9uIHx8IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEXG4gIH0pKVxuXG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHVzZUFuaW1hdGVkTGlzdChzbGlkZXNMaXN0KVxuICBjb25zdCBzbGlkZVJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzbGlkZXNMaXN0W2N1cnJlbnRTbGlkZV0gfHwge30pXG5cblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17YmFja2dyb3VuZFJ1bGVzfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNlbnRlcn0+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKChjaGlsZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2xpZGV9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZTogY3VycmVudFNsaWRlID09PSBpbmRleCA/IHN0eWxlc1tjaGlsZC5yb290Py5hbmltYXRpb25OYW1lIHx8ICdmYWRlLWluLW91dCddIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBgJHtjaGlsZC5yb290Py5hbmltYXRpb25EdXJhdGlvbn1tc2BcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PntnZXRDaGlsZChjaGlsZC5uYW1lKX08L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8V2lkZUNhcmQgLz4pXG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm1vZHVsZSIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiaW5kZXgiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJyb290IiwiU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHZXRUYWciLCJpc09iamVjdCIsImZ1bmNUYWciLCJpc0Z1bmN0aW9uIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIk1hcCIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJtYXBDYWNoZUNsZWFyIiwiaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiZXhwb3J0cyIsImNsb25lQnVmZmVyIiwiVWludDhBcnJheSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwib3ZlckFyZyIsImdldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsImJhc2VJc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzIiwiaXNBcnJheSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3QiLCJzdHViRmFsc2UiLCJpc0J1ZmZlciIsIm9iamVjdFRhZyIsImlzUGxhaW5PYmplY3QiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJpc1R5cGVkQXJyYXkiLCJzYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJjb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsImFycmF5TGlrZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJiYXNlS2V5c0luIiwia2V5c0luIiwidG9QbGFpbk9iamVjdCIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VNZXJnZSIsImlkZW50aXR5IiwiYXBwbHkiLCJvdmVyUmVzdCIsImNvbnN0YW50IiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJzZXRUb1N0cmluZyIsImJhc2VSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJjcmVhdGVBc3NpZ25lciIsIml0ZXJhdG9yIiwiaW5wdXQiLCJ2aXNpdG9yIiwiQXJyYXkiLCJtYXAiLCJlbCIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJhY2MiLCJrZXkiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJpc1ZhbHVlIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJmb3JFYWNoIiwic2V0IiwicGF0aCIsInBhdGhBcnJheSIsIm1hdGNoIiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJleGVjIiwicGFyc2VJbnQiLCJiIiwicmdiVG9SZ2JhIiwicmdiIiwiYWxwaGEiLCJyZXBsYWNlIiwiZGV2aWNlcyIsIkJSRUFLUE9JTlRTIiwibW9iaWxlIiwidGFibGV0IiwibGFwdG9wIiwiZGVza3RvcCIsImlzVmFsaWREZXZpY2VTdGF0ZSIsImV2ZXJ5IiwiZGV2aWNlIiwiZ2V0RGV2aWNlU3RhdGUiLCJfa2V5IiwidXNlRGV2aWNlU3RhdGUiLCJ1c2VDb250YWluZXJEZXZpY2UiLCJ3YXRjaFJlZiIsImJyZWFrcG9pbnRzIiwic2V0RGV2aWNlIiwiY2hlY2tEZXZpY2UiLCJwYXJlbnQiLCJwYXJlbnRXaWR0aCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiZmluZERldmljZSIsImZpbmQiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3cmFwVG8iLCJ1bnRpbCIsInRvUHgiLCJzdGFydHNXaXRoIiwidG9QZXJjZW50IiwiZm9ybWF0UnVsZSIsIm5ld0tleSIsIm5ld1ZhbHVlIiwiREVGQVVMVF9UT19QWCIsInBhcnNlUnVsZXMiLCJydWxlcyIsImxheWVyIiwia2V5cyIsImluY2x1ZGVzIiwid2FybiIsInR5cG9ncmFwaHkiLCJhY2NlbnRUeXBvZ3JhcGh5IiwiY29sb3IiLCJmb250U2l6ZSIsInByb3BLZXkiLCJwcm9wVmFsdWUiLCJpbm5lckhUTUwiLCJpbm5lclRleHQiLCJkaXNwbGF5IiwiYm9yZGVyU3R5bGUiLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsInRleHREZWNvcmF0aW9uIiwiaXNWYWxpZFJ1bGUiLCJydWxlIiwidXNlUGFyc2VSdWxlcyIsIkRpc3BsYXlUZXh0IiwicmVzdCIsImZvcm1hdFZhbHVlIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJ1c2VUb2dnbGUiLCJDbG9zZUljb24iLCJ4bWxucyIsImhlaWdodCIsInZpZXdCb3giLCJkIiwiZmlsbCIsIkdpZnRJY29uIiwiZmlsbFJ1bGUiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJkZXZpY2VTdGF0ZSIsImhhc0ljb24iLCJpY29uIiwiYXJyb3dSdWxlcyIsImxlZnQiLCJjb250YWluZXIiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9keVJ1bGVzIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJyZWYiLCJzdHlsZSIsIm9uQ2xpY2siLCJpY29uVGFyZ2V0IiwiYm9keSIsImJvZHlPcGVuIiwiYXJyb3ciLCJjbG9zZSIsImhyZWYiLCJvZmZlciIsInJlbCIsImxvZ28iLCJ0ZXh0IiwiYnV0dG9uIiwibGVnYWwiLCJsZWdhbE9wZW4iLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJCb251c0NhcmQiLCJ2YXJpYW50MiIsInZhcmlhbnQiLCJsaW5lIiwiYnV0dG9uVGV4dCIsIkNvbXBsZXhHaWZ0IiwicHJvbW90aW9uIiwiaGVhZCIsImhlYWRJY29uIiwiaGVhZFRpdGxlIiwidGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJjb250ZW50IiwiQm9udXMiLCJoZWFkZXIiLCJ3cmFwcGVyIiwiTWF0Y2giLCJ0ZWFtcyIsImxlYWd1ZSIsIm5hbWUiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwidGV4dFJ1bGVzIiwiYnV0dG9uSGVhZCIsImJ1dHRvblRhcmdldCIsInRvZ2dsZUlzT3BlbiIsImJhY2tncm91bmQiLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsImJhY2tncm91bmRPcHRpb25zIiwiTWF0Y2hlcyIsInJvb3RSdWxlcyIsIm9kZExvZ28iLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJvZGRSZXZlcnNlIiwiTWF0Y2hlc09uZVR3byIsInRpdGxlTGFiZWwiLCJ0aXRsZVZhbHVlIiwidGVhbTFOYW1lIiwidGVhbVZhbHVlIiwidmFsdWUxIiwidGVhbTJOYW1lIiwidmFsdWUyIiwidXNlQW5pbWF0ZWRMaXN0Iiwic2xpZGVzIiwiaXRlbXNDb3VudCIsImFuaW1hdGVkSWR4Iiwic2V0QW5pbWF0ZWRJZHgiLCJhbmltYXRpb25EdXJhdGlvbiIsImdvTmV4dCIsInRpbWVvdXQiLCJERUZBVUxUX0FOSU1BVElPTl9TUEVFRCIsIldpZGVDYXJkIiwiZ2V0Q2hpbGQiLCJtYXRjaGVzIiwibWF0Y2hlc09uZVR3byIsInNsaWRlc0xpc3QiLCJmaWx0ZXIiLCJCb29sZWFuIiwic2xpZGUiLCJhbmltYXRpb25OYW1lIiwiY3VycmVudFNsaWRlIiwic2xpZGVSdWxlcyIsImJhY2tncm91bmRSdWxlcyIsImhhc0N1c3RvbUJhY2tncm91bmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsS0FBQyxXQUFZO0FBR1osVUFBSSxTQUFTLENBQUUsRUFBQztBQUdoQixlQUFTQSxjQUFhO0FBQ3JCLFlBQUksVUFBVSxDQUFBO0FBRWQsaUJBQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVFBLE1BQUs7QUFDMUMsY0FBSSxNQUFNLFVBQVVBLEVBQUM7QUFDckIsY0FBSSxDQUFDO0FBQUs7QUFFVixjQUFJLFVBQVUsT0FBTztBQUVyQixjQUFJLFlBQVksWUFBWSxZQUFZLFVBQVU7QUFDakQsb0JBQVEsS0FBSyxHQUFHO0FBQUEsVUFDaEIsV0FBVSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQzlCLGdCQUFJLElBQUksUUFBUTtBQUNmLGtCQUFJQyxTQUFRRixZQUFXLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLGtCQUFJRSxRQUFPO0FBQ1Ysd0JBQVEsS0FBS0EsTUFBSztBQUFBLGNBQ2xCO0FBQUEsWUFDRDtBQUFB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TSxFQUFDLFNBQVEsRUFBQztBQUFBLElBQUMsR0FBRSxFQUFFO0FBQUEsRUFBQztBQUFzTCxXQUFTQSxJQUFFLEdBQUVMLElBQUU7QUFBQyxRQUFJRixLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsV0FBTyxFQUFFQSxHQUFFLEtBQUlFLEVBQUMsS0FBR0YsR0FBRSxNQUFJLEVBQUcsR0FBQ0EsR0FBRSxJQUFFRSxJQUFFRixHQUFFLE1BQUksR0FBRUEsR0FBRSxPQUFLQSxHQUFFO0FBQUEsRUFBRTtBQUFzRCxXQUFTUSxJQUFFLEdBQUU7QUFBQyxRQUFJUixLQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRU4sS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFdBQU9BLEdBQUUsSUFBRSxHQUFFTSxNQUFHLFFBQU1OLEdBQUUsT0FBS0EsR0FBRSxLQUFHLE1BQUdNLEdBQUUsSUFBSSxDQUFDLElBQUdBLEdBQUUsTUFBTSxTQUFPLEVBQUU7QUFBQSxFQUFFO0FBQTZYLFdBQVMsSUFBRztBQUFDLGFBQVFELElBQUVBLEtBQUUsRUFBRTtBQUFTLFVBQUdBLEdBQUUsT0FBS0EsR0FBRTtBQUFJLFlBQUc7QUFBQyxVQUFBQSxHQUFFLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRUEsR0FBRSxJQUFJLElBQUksUUFBUVUsR0FBQyxHQUFFVixHQUFFLElBQUksTUFBSSxDQUFBO0FBQUEsUUFBRSxTQUFPRyxJQUFOO0FBQVMsVUFBQUgsR0FBRSxJQUFJLE1BQUksQ0FBQSxHQUFHRCxPQUFDLFFBQUMsSUFBSUksSUFBRUgsR0FBRSxHQUFHO0FBQUEsUUFBQztBQUFBLEVBQUM7QUFBQ0QsU0FBQyxRQUFDLE1BQUksU0FBUyxHQUFFO0FBQUMsUUFBRSxNQUFLLEtBQUcsRUFBRSxDQUFDO0FBQUEsRUFBQyxHQUFFQSxlQUFFLE1BQUksU0FBUyxHQUFFO0FBQUMsU0FBRyxFQUFFLENBQUMsR0FBRSxJQUFFO0FBQUUsUUFBSUosTUFBRyxJQUFFLEVBQUUsS0FBSztBQUFJLElBQUFBLE9BQUksTUFBSSxLQUFHQSxHQUFFLE1B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WUFBTVYsT0FBT2hFLE1BQU0wRTtBQUFBQSxVQUFBQSxDQUFLLEdBRS9DeFIsRUFBQSxPQUFBO0FBQUEsWUFBSzJRLFdBQVdDLFNBQU8wRDtBQUFBQSxZQUFjeFUsVUFDbkM0USxFQUFBLE9BQUE7QUFBQSxjQUFLQyxXQUFXQyxTQUFPYztBQUFBQSxjQUFRWixPQUFPaEUsTUFBTTRFO0FBQUFBLGNBQU81UixXQUNqREUsRUFBQSxPQUFBO0FBQUEsZ0JBQUsyUSxXQUFXQyxTQUFPWTtBQUFBQSxnQkFBTVYsT0FBT2hFLE1BQU0wRTtBQUFBQSxjQUFBQSxDQUFLLElBQzlDMUUsV0FBTTRFLFdBQU41RSxtQkFBY2hOLFFBQVE7QUFBQSxZQUFBLENBQUE7QUFBQSxVQUFBLENBRXJCLENBQUE7QUFBQSxRQUFBLENBQ0YsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNKO0FBQUEsRUFFUjtBQUVlSSxRQUFBQSxRQUFBQSxPQUFPRixFQUFDOFcsYUFBVzs7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsNCw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzXX0=
|