@adstore/templates 1.0.0 → 2.0.4
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 +52 -2
- package/dist/style.css +1651 -0
- package/dist/templates.es.js +2826 -0
- package/dist/templates.umd.js +2829 -0
- package/package.json +11 -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,2826 @@
|
|
1
|
+
import { options, Component, createElement, Fragment, toChildArray, createContext, render as render$1 } from "preact";
|
2
|
+
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
3
|
+
var classnamesExports = {};
|
4
|
+
var classnames = {
|
5
|
+
get exports() {
|
6
|
+
return classnamesExports;
|
7
|
+
},
|
8
|
+
set exports(v2) {
|
9
|
+
classnamesExports = v2;
|
10
|
+
}
|
11
|
+
};
|
12
|
+
/*!
|
13
|
+
Copyright (c) 2018 Jed Watson.
|
14
|
+
Licensed under the MIT License (MIT), see
|
15
|
+
http://jedwatson.github.io/classnames
|
16
|
+
*/
|
17
|
+
(function(module) {
|
18
|
+
(function() {
|
19
|
+
var hasOwn = {}.hasOwnProperty;
|
20
|
+
function classNames2() {
|
21
|
+
var classes = [];
|
22
|
+
for (var i2 = 0; i2 < arguments.length; i2++) {
|
23
|
+
var arg = arguments[i2];
|
24
|
+
if (!arg)
|
25
|
+
continue;
|
26
|
+
var argType = typeof arg;
|
27
|
+
if (argType === "string" || argType === "number") {
|
28
|
+
classes.push(arg);
|
29
|
+
} else if (Array.isArray(arg)) {
|
30
|
+
if (arg.length) {
|
31
|
+
var inner2 = classNames2.apply(null, arg);
|
32
|
+
if (inner2) {
|
33
|
+
classes.push(inner2);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
} else if (argType === "object") {
|
37
|
+
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
|
38
|
+
classes.push(arg.toString());
|
39
|
+
continue;
|
40
|
+
}
|
41
|
+
for (var key in arg) {
|
42
|
+
if (hasOwn.call(arg, key) && arg[key]) {
|
43
|
+
classes.push(key);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
return classes.join(" ");
|
49
|
+
}
|
50
|
+
if (module.exports) {
|
51
|
+
classNames2.default = classNames2;
|
52
|
+
module.exports = classNames2;
|
53
|
+
} else {
|
54
|
+
window.classNames = classNames2;
|
55
|
+
}
|
56
|
+
})();
|
57
|
+
})(classnames);
|
58
|
+
const classNames = classnamesExports;
|
59
|
+
var t, r, u, i, o$1 = 0, f = [], c = [], e = options.__b, a = options.__r, v = options.diffed, l = options.__c, m = options.unmount;
|
60
|
+
function d(t2, u2) {
|
61
|
+
options.__h && options.__h(r, t2, o$1 || u2), o$1 = 0;
|
62
|
+
var i2 = r.__H || (r.__H = { __: [], __h: [] });
|
63
|
+
return t2 >= i2.__.length && i2.__.push({ __V: c }), i2.__[t2];
|
64
|
+
}
|
65
|
+
function h(n) {
|
66
|
+
return o$1 = 1, s(B$1, n);
|
67
|
+
}
|
68
|
+
function s(n, u2, i2) {
|
69
|
+
var o2 = d(t++, 2);
|
70
|
+
if (o2.t = n, !o2.__c && (o2.__ = [i2 ? i2(u2) : B$1(void 0, u2), function(n2) {
|
71
|
+
var t2 = o2.__N ? o2.__N[0] : o2.__[0], r2 = o2.t(t2, n2);
|
72
|
+
t2 !== r2 && (o2.__N = [r2, o2.__[1]], o2.__c.setState({}));
|
73
|
+
}], o2.__c = r, !r.u)) {
|
74
|
+
var f2 = function(n2, t2, r2) {
|
75
|
+
if (!o2.__c.__H)
|
76
|
+
return true;
|
77
|
+
var u3 = o2.__c.__H.__.filter(function(n3) {
|
78
|
+
return n3.__c;
|
79
|
+
});
|
80
|
+
if (u3.every(function(n3) {
|
81
|
+
return !n3.__N;
|
82
|
+
}))
|
83
|
+
return !c2 || c2.call(this, n2, t2, r2);
|
84
|
+
var i3 = false;
|
85
|
+
return u3.forEach(function(n3) {
|
86
|
+
if (n3.__N) {
|
87
|
+
var t3 = n3.__[0];
|
88
|
+
n3.__ = n3.__N, n3.__N = void 0, t3 !== n3.__[0] && (i3 = true);
|
89
|
+
}
|
90
|
+
}), !(!i3 && o2.__c.props === n2) && (!c2 || c2.call(this, n2, t2, r2));
|
91
|
+
};
|
92
|
+
r.u = true;
|
93
|
+
var c2 = r.shouldComponentUpdate, e2 = r.componentWillUpdate;
|
94
|
+
r.componentWillUpdate = function(n2, t2, r2) {
|
95
|
+
if (this.__e) {
|
96
|
+
var u3 = c2;
|
97
|
+
c2 = void 0, f2(n2, t2, r2), c2 = u3;
|
98
|
+
}
|
99
|
+
e2 && e2.call(this, n2, t2, r2);
|
100
|
+
}, r.shouldComponentUpdate = f2;
|
101
|
+
}
|
102
|
+
return o2.__N || o2.__;
|
103
|
+
}
|
104
|
+
function p(u2, i2) {
|
105
|
+
var o2 = d(t++, 3);
|
106
|
+
!options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__H.__h.push(o2));
|
107
|
+
}
|
108
|
+
function y(u2, i2) {
|
109
|
+
var o2 = d(t++, 4);
|
110
|
+
!options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__h.push(o2));
|
111
|
+
}
|
112
|
+
function _$1(n) {
|
113
|
+
return o$1 = 5, F$1(function() {
|
114
|
+
return { current: n };
|
115
|
+
}, []);
|
116
|
+
}
|
117
|
+
function F$1(n, r2) {
|
118
|
+
var u2 = d(t++, 7);
|
119
|
+
return z(u2.__H, r2) ? (u2.__V = n(), u2.i = r2, u2.__h = n, u2.__V) : u2.__;
|
120
|
+
}
|
121
|
+
function q$1(n) {
|
122
|
+
var u2 = r.context[n.__c], i2 = d(t++, 9);
|
123
|
+
return i2.c = n, u2 ? (null == i2.__ && (i2.__ = true, u2.sub(r)), u2.props.value) : n.__;
|
124
|
+
}
|
125
|
+
function b() {
|
126
|
+
for (var t2; t2 = f.shift(); )
|
127
|
+
if (t2.__P && t2.__H)
|
128
|
+
try {
|
129
|
+
t2.__H.__h.forEach(k), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
|
130
|
+
} catch (r2) {
|
131
|
+
t2.__H.__h = [], options.__e(r2, t2.__v);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
options.__b = function(n) {
|
135
|
+
r = null, e && e(n);
|
136
|
+
}, options.__r = function(n) {
|
137
|
+
a && a(n), t = 0;
|
138
|
+
var i2 = (r = n.__c).__H;
|
139
|
+
i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n2) {
|
140
|
+
n2.__N && (n2.__ = n2.__N), n2.__V = c, n2.__N = n2.i = void 0;
|
141
|
+
})) : (i2.__h.forEach(k), i2.__h.forEach(w$1), i2.__h = [])), u = r;
|
142
|
+
}, options.diffed = function(t2) {
|
143
|
+
v && v(t2);
|
144
|
+
var o2 = t2.__c;
|
145
|
+
o2 && o2.__H && (o2.__H.__h.length && (1 !== f.push(o2) && i === options.requestAnimationFrame || ((i = options.requestAnimationFrame) || j)(b)), o2.__H.__.forEach(function(n) {
|
146
|
+
n.i && (n.__H = n.i), n.__V !== c && (n.__ = n.__V), n.i = void 0, n.__V = c;
|
147
|
+
})), u = r = null;
|
148
|
+
}, options.__c = function(t2, r2) {
|
149
|
+
r2.some(function(t3) {
|
150
|
+
try {
|
151
|
+
t3.__h.forEach(k), t3.__h = t3.__h.filter(function(n) {
|
152
|
+
return !n.__ || w$1(n);
|
153
|
+
});
|
154
|
+
} catch (u2) {
|
155
|
+
r2.some(function(n) {
|
156
|
+
n.__h && (n.__h = []);
|
157
|
+
}), r2 = [], options.__e(u2, t3.__v);
|
158
|
+
}
|
159
|
+
}), l && l(t2, r2);
|
160
|
+
}, options.unmount = function(t2) {
|
161
|
+
m && m(t2);
|
162
|
+
var r2, u2 = t2.__c;
|
163
|
+
u2 && u2.__H && (u2.__H.__.forEach(function(n) {
|
164
|
+
try {
|
165
|
+
k(n);
|
166
|
+
} catch (n2) {
|
167
|
+
r2 = n2;
|
168
|
+
}
|
169
|
+
}), u2.__H = void 0, r2 && options.__e(r2, u2.__v));
|
170
|
+
};
|
171
|
+
var g$1 = "function" == typeof requestAnimationFrame;
|
172
|
+
function j(n) {
|
173
|
+
var t2, r2 = function() {
|
174
|
+
clearTimeout(u2), g$1 && cancelAnimationFrame(t2), setTimeout(n);
|
175
|
+
}, u2 = setTimeout(r2, 100);
|
176
|
+
g$1 && (t2 = requestAnimationFrame(r2));
|
177
|
+
}
|
178
|
+
function k(n) {
|
179
|
+
var t2 = r, u2 = n.__c;
|
180
|
+
"function" == typeof u2 && (n.__c = void 0, u2()), r = t2;
|
181
|
+
}
|
182
|
+
function w$1(n) {
|
183
|
+
var t2 = r;
|
184
|
+
n.__c = n.__(), r = t2;
|
185
|
+
}
|
186
|
+
function z(n, t2) {
|
187
|
+
return !n || n.length !== t2.length || t2.some(function(t3, r2) {
|
188
|
+
return t3 !== n[r2];
|
189
|
+
});
|
190
|
+
}
|
191
|
+
function B$1(n, t2) {
|
192
|
+
return "function" == typeof t2 ? t2(n) : t2;
|
193
|
+
}
|
194
|
+
function g(n, t2) {
|
195
|
+
for (var e2 in t2)
|
196
|
+
n[e2] = t2[e2];
|
197
|
+
return n;
|
198
|
+
}
|
199
|
+
function C(n, t2) {
|
200
|
+
for (var e2 in n)
|
201
|
+
if ("__source" !== e2 && !(e2 in t2))
|
202
|
+
return true;
|
203
|
+
for (var r2 in t2)
|
204
|
+
if ("__source" !== r2 && n[r2] !== t2[r2])
|
205
|
+
return true;
|
206
|
+
return false;
|
207
|
+
}
|
208
|
+
function w(n) {
|
209
|
+
this.props = n;
|
210
|
+
}
|
211
|
+
(w.prototype = new Component()).isPureReactComponent = true, w.prototype.shouldComponentUpdate = function(n, t2) {
|
212
|
+
return C(this.props, n) || C(this.state, t2);
|
213
|
+
};
|
214
|
+
var R = options.__b;
|
215
|
+
options.__b = function(n) {
|
216
|
+
n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), R && R(n);
|
217
|
+
};
|
218
|
+
var T = options.__e;
|
219
|
+
options.__e = function(n, t2, e2, r2) {
|
220
|
+
if (n.then) {
|
221
|
+
for (var u2, o2 = t2; o2 = o2.__; )
|
222
|
+
if ((u2 = o2.__c) && u2.__c)
|
223
|
+
return null == t2.__e && (t2.__e = e2.__e, t2.__k = e2.__k), u2.__c(n, t2);
|
224
|
+
}
|
225
|
+
T(n, t2, e2, r2);
|
226
|
+
};
|
227
|
+
var I = options.unmount;
|
228
|
+
function L(n, t2, e2) {
|
229
|
+
return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) {
|
230
|
+
"function" == typeof n2.__c && n2.__c();
|
231
|
+
}), 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) {
|
232
|
+
return L(n2, t2, e2);
|
233
|
+
})), n;
|
234
|
+
}
|
235
|
+
function U(n, t2, e2) {
|
236
|
+
return n && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) {
|
237
|
+
return U(n2, t2, e2);
|
238
|
+
}), n.__c && n.__c.__P === t2 && (n.__e && e2.insertBefore(n.__e, n.__d), n.__c.__e = true, n.__c.__P = e2)), n;
|
239
|
+
}
|
240
|
+
function D() {
|
241
|
+
this.__u = 0, this.t = null, this.__b = null;
|
242
|
+
}
|
243
|
+
function F(n) {
|
244
|
+
var t2 = n.__.__c;
|
245
|
+
return t2 && t2.__a && t2.__a(n);
|
246
|
+
}
|
247
|
+
function V() {
|
248
|
+
this.u = null, this.o = null;
|
249
|
+
}
|
250
|
+
options.unmount = function(n) {
|
251
|
+
var t2 = n.__c;
|
252
|
+
t2 && t2.__R && t2.__R(), t2 && true === n.__h && (n.type = null), I && I(n);
|
253
|
+
}, (D.prototype = new Component()).__c = function(n, t2) {
|
254
|
+
var e2 = t2.__c, r2 = this;
|
255
|
+
null == r2.t && (r2.t = []), r2.t.push(e2);
|
256
|
+
var u2 = F(r2.__v), o2 = false, i2 = function() {
|
257
|
+
o2 || (o2 = true, e2.__R = null, u2 ? u2(l2) : l2());
|
258
|
+
};
|
259
|
+
e2.__R = i2;
|
260
|
+
var l2 = function() {
|
261
|
+
if (!--r2.__u) {
|
262
|
+
if (r2.state.__a) {
|
263
|
+
var n2 = r2.state.__a;
|
264
|
+
r2.__v.__k[0] = U(n2, n2.__c.__P, n2.__c.__O);
|
265
|
+
}
|
266
|
+
var t3;
|
267
|
+
for (r2.setState({ __a: r2.__b = null }); t3 = r2.t.pop(); )
|
268
|
+
t3.forceUpdate();
|
269
|
+
}
|
270
|
+
}, c2 = true === t2.__h;
|
271
|
+
r2.__u++ || c2 || r2.setState({ __a: r2.__b = r2.__v.__k[0] }), n.then(i2, i2);
|
272
|
+
}, D.prototype.componentWillUnmount = function() {
|
273
|
+
this.t = [];
|
274
|
+
}, D.prototype.render = function(n, e2) {
|
275
|
+
if (this.__b) {
|
276
|
+
if (this.__v.__k) {
|
277
|
+
var r2 = document.createElement("div"), o2 = this.__v.__k[0].__c;
|
278
|
+
this.__v.__k[0] = L(this.__b, r2, o2.__O = o2.__P);
|
279
|
+
}
|
280
|
+
this.__b = null;
|
281
|
+
}
|
282
|
+
var i2 = e2.__a && createElement(Fragment, null, n.fallback);
|
283
|
+
return i2 && (i2.__h = null), [createElement(Fragment, null, e2.__a ? null : n.children), i2];
|
284
|
+
};
|
285
|
+
var W = function(n, t2, e2) {
|
286
|
+
if (++e2[1] === e2[0] && n.o.delete(t2), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.o.size))
|
287
|
+
for (e2 = n.u; e2; ) {
|
288
|
+
for (; e2.length > 3; )
|
289
|
+
e2.pop()();
|
290
|
+
if (e2[1] < e2[0])
|
291
|
+
break;
|
292
|
+
n.u = e2 = e2[2];
|
293
|
+
}
|
294
|
+
};
|
295
|
+
(V.prototype = new Component()).__a = function(n) {
|
296
|
+
var t2 = this, e2 = F(t2.__v), r2 = t2.o.get(n);
|
297
|
+
return r2[0]++, function(u2) {
|
298
|
+
var o2 = function() {
|
299
|
+
t2.props.revealOrder ? (r2.push(u2), W(t2, n, r2)) : u2();
|
300
|
+
};
|
301
|
+
e2 ? e2(o2) : o2();
|
302
|
+
};
|
303
|
+
}, V.prototype.render = function(n) {
|
304
|
+
this.u = null, this.o = /* @__PURE__ */ new Map();
|
305
|
+
var t2 = toChildArray(n.children);
|
306
|
+
n.revealOrder && "b" === n.revealOrder[0] && t2.reverse();
|
307
|
+
for (var e2 = t2.length; e2--; )
|
308
|
+
this.o.set(t2[e2], this.u = [1, 0, this.u]);
|
309
|
+
return n.children;
|
310
|
+
}, V.prototype.componentDidUpdate = V.prototype.componentDidMount = function() {
|
311
|
+
var n = this;
|
312
|
+
this.o.forEach(function(t2, e2) {
|
313
|
+
W(n, e2, t2);
|
314
|
+
});
|
315
|
+
};
|
316
|
+
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) {
|
317
|
+
return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
|
318
|
+
};
|
319
|
+
Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t2) {
|
320
|
+
Object.defineProperty(Component.prototype, t2, { configurable: true, get: function() {
|
321
|
+
return this["UNSAFE_" + t2];
|
322
|
+
}, set: function(n) {
|
323
|
+
Object.defineProperty(this, t2, { configurable: true, writable: true, value: n });
|
324
|
+
} });
|
325
|
+
});
|
326
|
+
var K = options.event;
|
327
|
+
function Q() {
|
328
|
+
}
|
329
|
+
function X() {
|
330
|
+
return this.cancelBubble;
|
331
|
+
}
|
332
|
+
function nn() {
|
333
|
+
return this.defaultPrevented;
|
334
|
+
}
|
335
|
+
options.event = function(n) {
|
336
|
+
return K && (n = K(n)), n.persist = Q, n.isPropagationStopped = X, n.isDefaultPrevented = nn, n.nativeEvent = n;
|
337
|
+
};
|
338
|
+
var en = { enumerable: false, configurable: true, get: function() {
|
339
|
+
return this.class;
|
340
|
+
} }, rn = options.vnode;
|
341
|
+
options.vnode = function(n) {
|
342
|
+
"string" == typeof n.type && function(n2) {
|
343
|
+
var t2 = n2.props, e2 = n2.type, u2 = {};
|
344
|
+
for (var o2 in t2) {
|
345
|
+
var i2 = t2[o2];
|
346
|
+
if (!("value" === o2 && "defaultValue" in t2 && null == i2 || $ && "children" === o2 && "noscript" === e2 || "class" === o2 || "className" === o2)) {
|
347
|
+
var l2 = o2.toLowerCase();
|
348
|
+
"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;
|
349
|
+
}
|
350
|
+
}
|
351
|
+
"select" == e2 && u2.multiple && Array.isArray(u2.value) && (u2.value = toChildArray(t2.children).forEach(function(n3) {
|
352
|
+
n3.props.selected = -1 != u2.value.indexOf(n3.props.value);
|
353
|
+
})), "select" == e2 && null != u2.defaultValue && (u2.value = toChildArray(t2.children).forEach(function(n3) {
|
354
|
+
n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value;
|
355
|
+
})), 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;
|
356
|
+
}(n), n.$$typeof = B, rn && rn(n);
|
357
|
+
};
|
358
|
+
var un = options.__r;
|
359
|
+
options.__r = function(n) {
|
360
|
+
un && un(n), n.__c;
|
361
|
+
};
|
362
|
+
var on = options.diffed;
|
363
|
+
options.diffed = function(n) {
|
364
|
+
on && on(n);
|
365
|
+
var t2 = n.props, e2 = n.__e;
|
366
|
+
null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
|
367
|
+
};
|
368
|
+
const reset = "";
|
369
|
+
const root$i = "_root_10lbg_1";
|
370
|
+
const icon$1 = "_icon_10lbg_5";
|
371
|
+
const iconTarget$1 = "_iconTarget_10lbg_17";
|
372
|
+
const body$6 = "_body_10lbg_22";
|
373
|
+
const bodyOpen$1 = "_bodyOpen_10lbg_30";
|
374
|
+
const simpleGift_in = "_simpleGift_in_10lbg_1";
|
375
|
+
const close$1 = "_close_10lbg_43";
|
376
|
+
const arrow$1 = "_arrow_10lbg_57";
|
377
|
+
const container$2 = "_container_10lbg_67";
|
378
|
+
const inner$1 = "_inner_10lbg_73";
|
379
|
+
const logo$6 = "_logo_10lbg_80";
|
380
|
+
const text$4 = "_text_10lbg_86";
|
381
|
+
const button$6 = "_button_10lbg_101";
|
382
|
+
const buttonAnimated = "_buttonAnimated_10lbg_110";
|
383
|
+
const increase$1 = "_increase_10lbg_1";
|
384
|
+
const legal$5 = "_legal_10lbg_114";
|
385
|
+
const legalOpen$1 = "_legalOpen_10lbg_131";
|
386
|
+
const legalText$1 = "_legalText_10lbg_139";
|
387
|
+
const legalButton$1 = "_legalButton_10lbg_154";
|
388
|
+
const fadein$1 = "_fadein_10lbg_1";
|
389
|
+
const pulse$1 = "_pulse_10lbg_1";
|
390
|
+
const gradient$1 = "_gradient_10lbg_1";
|
391
|
+
const wiggle$1 = "_wiggle_10lbg_1";
|
392
|
+
const styles$d = {
|
393
|
+
root: root$i,
|
394
|
+
icon: icon$1,
|
395
|
+
iconTarget: iconTarget$1,
|
396
|
+
body: body$6,
|
397
|
+
bodyOpen: bodyOpen$1,
|
398
|
+
simpleGift_in,
|
399
|
+
close: close$1,
|
400
|
+
arrow: arrow$1,
|
401
|
+
container: container$2,
|
402
|
+
inner: inner$1,
|
403
|
+
logo: logo$6,
|
404
|
+
text: text$4,
|
405
|
+
button: button$6,
|
406
|
+
buttonAnimated,
|
407
|
+
increase: increase$1,
|
408
|
+
legal: legal$5,
|
409
|
+
legalOpen: legalOpen$1,
|
410
|
+
legalText: legalText$1,
|
411
|
+
legalButton: legalButton$1,
|
412
|
+
fadein: fadein$1,
|
413
|
+
pulse: pulse$1,
|
414
|
+
gradient: gradient$1,
|
415
|
+
wiggle: wiggle$1
|
416
|
+
};
|
417
|
+
const useGiftOpen = (delay = 1e3) => {
|
418
|
+
const [isOpen, setIsOpen] = h(false);
|
419
|
+
const timerRef = _$1(null);
|
420
|
+
const onToggle = () => {
|
421
|
+
clearTimeout(timerRef.current);
|
422
|
+
setIsOpen((prev) => !prev);
|
423
|
+
};
|
424
|
+
p(() => {
|
425
|
+
timerRef.current = setTimeout(() => {
|
426
|
+
setIsOpen(true);
|
427
|
+
}, delay);
|
428
|
+
return () => clearTimeout(timerRef.current);
|
429
|
+
}, [delay]);
|
430
|
+
return {
|
431
|
+
isOpen,
|
432
|
+
onToggle
|
433
|
+
};
|
434
|
+
};
|
435
|
+
var _ = 0;
|
436
|
+
function o(o2, e2, n, t2, f2, l2) {
|
437
|
+
var s2, u2, a2 = {};
|
438
|
+
for (u2 in e2)
|
439
|
+
"ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
|
440
|
+
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 };
|
441
|
+
if ("function" == typeof o2 && (s2 = o2.defaultProps))
|
442
|
+
for (u2 in s2)
|
443
|
+
void 0 === a2[u2] && (a2[u2] = s2[u2]);
|
444
|
+
return options.vnode && options.vnode(i2), i2;
|
445
|
+
}
|
446
|
+
const State = createContext();
|
447
|
+
const StateContext = ({
|
448
|
+
children,
|
449
|
+
value
|
450
|
+
}) => {
|
451
|
+
return o(State.Provider, {
|
452
|
+
value,
|
453
|
+
children
|
454
|
+
});
|
455
|
+
};
|
456
|
+
const render = (vNode) => (target, state) => render$1(o(StateContext, {
|
457
|
+
value: state,
|
458
|
+
children: vNode
|
459
|
+
}), target);
|
460
|
+
const useCurrentState = () => q$1(State);
|
461
|
+
function listCacheClear$1() {
|
462
|
+
this.__data__ = [];
|
463
|
+
this.size = 0;
|
464
|
+
}
|
465
|
+
var _listCacheClear = listCacheClear$1;
|
466
|
+
function eq$4(value, other) {
|
467
|
+
return value === other || value !== value && other !== other;
|
468
|
+
}
|
469
|
+
var eq_1 = eq$4;
|
470
|
+
var eq$3 = eq_1;
|
471
|
+
function assocIndexOf$4(array, key) {
|
472
|
+
var length = array.length;
|
473
|
+
while (length--) {
|
474
|
+
if (eq$3(array[length][0], key)) {
|
475
|
+
return length;
|
476
|
+
}
|
477
|
+
}
|
478
|
+
return -1;
|
479
|
+
}
|
480
|
+
var _assocIndexOf = assocIndexOf$4;
|
481
|
+
var assocIndexOf$3 = _assocIndexOf;
|
482
|
+
var arrayProto = Array.prototype;
|
483
|
+
var splice = arrayProto.splice;
|
484
|
+
function listCacheDelete$1(key) {
|
485
|
+
var data = this.__data__, index2 = assocIndexOf$3(data, key);
|
486
|
+
if (index2 < 0) {
|
487
|
+
return false;
|
488
|
+
}
|
489
|
+
var lastIndex = data.length - 1;
|
490
|
+
if (index2 == lastIndex) {
|
491
|
+
data.pop();
|
492
|
+
} else {
|
493
|
+
splice.call(data, index2, 1);
|
494
|
+
}
|
495
|
+
--this.size;
|
496
|
+
return true;
|
497
|
+
}
|
498
|
+
var _listCacheDelete = listCacheDelete$1;
|
499
|
+
var assocIndexOf$2 = _assocIndexOf;
|
500
|
+
function listCacheGet$1(key) {
|
501
|
+
var data = this.__data__, index2 = assocIndexOf$2(data, key);
|
502
|
+
return index2 < 0 ? void 0 : data[index2][1];
|
503
|
+
}
|
504
|
+
var _listCacheGet = listCacheGet$1;
|
505
|
+
var assocIndexOf$1 = _assocIndexOf;
|
506
|
+
function listCacheHas$1(key) {
|
507
|
+
return assocIndexOf$1(this.__data__, key) > -1;
|
508
|
+
}
|
509
|
+
var _listCacheHas = listCacheHas$1;
|
510
|
+
var assocIndexOf = _assocIndexOf;
|
511
|
+
function listCacheSet$1(key, value) {
|
512
|
+
var data = this.__data__, index2 = assocIndexOf(data, key);
|
513
|
+
if (index2 < 0) {
|
514
|
+
++this.size;
|
515
|
+
data.push([key, value]);
|
516
|
+
} else {
|
517
|
+
data[index2][1] = value;
|
518
|
+
}
|
519
|
+
return this;
|
520
|
+
}
|
521
|
+
var _listCacheSet = listCacheSet$1;
|
522
|
+
var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;
|
523
|
+
function ListCache$4(entries) {
|
524
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
525
|
+
this.clear();
|
526
|
+
while (++index2 < length) {
|
527
|
+
var entry = entries[index2];
|
528
|
+
this.set(entry[0], entry[1]);
|
529
|
+
}
|
530
|
+
}
|
531
|
+
ListCache$4.prototype.clear = listCacheClear;
|
532
|
+
ListCache$4.prototype["delete"] = listCacheDelete;
|
533
|
+
ListCache$4.prototype.get = listCacheGet;
|
534
|
+
ListCache$4.prototype.has = listCacheHas;
|
535
|
+
ListCache$4.prototype.set = listCacheSet;
|
536
|
+
var _ListCache = ListCache$4;
|
537
|
+
var ListCache$3 = _ListCache;
|
538
|
+
function stackClear$1() {
|
539
|
+
this.__data__ = new ListCache$3();
|
540
|
+
this.size = 0;
|
541
|
+
}
|
542
|
+
var _stackClear = stackClear$1;
|
543
|
+
function stackDelete$1(key) {
|
544
|
+
var data = this.__data__, result = data["delete"](key);
|
545
|
+
this.size = data.size;
|
546
|
+
return result;
|
547
|
+
}
|
548
|
+
var _stackDelete = stackDelete$1;
|
549
|
+
function stackGet$1(key) {
|
550
|
+
return this.__data__.get(key);
|
551
|
+
}
|
552
|
+
var _stackGet = stackGet$1;
|
553
|
+
function stackHas$1(key) {
|
554
|
+
return this.__data__.has(key);
|
555
|
+
}
|
556
|
+
var _stackHas = stackHas$1;
|
557
|
+
var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
|
558
|
+
var _freeGlobal = freeGlobal$1;
|
559
|
+
var freeGlobal = _freeGlobal;
|
560
|
+
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
561
|
+
var root$h = freeGlobal || freeSelf || Function("return this")();
|
562
|
+
var _root = root$h;
|
563
|
+
var root$g = _root;
|
564
|
+
var Symbol$3 = root$g.Symbol;
|
565
|
+
var _Symbol = Symbol$3;
|
566
|
+
var Symbol$2 = _Symbol;
|
567
|
+
var objectProto$a = Object.prototype;
|
568
|
+
var hasOwnProperty$8 = objectProto$a.hasOwnProperty;
|
569
|
+
var nativeObjectToString$1 = objectProto$a.toString;
|
570
|
+
var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;
|
571
|
+
function getRawTag$1(value) {
|
572
|
+
var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];
|
573
|
+
try {
|
574
|
+
value[symToStringTag$1] = void 0;
|
575
|
+
var unmasked = true;
|
576
|
+
} catch (e2) {
|
577
|
+
}
|
578
|
+
var result = nativeObjectToString$1.call(value);
|
579
|
+
if (unmasked) {
|
580
|
+
if (isOwn) {
|
581
|
+
value[symToStringTag$1] = tag;
|
582
|
+
} else {
|
583
|
+
delete value[symToStringTag$1];
|
584
|
+
}
|
585
|
+
}
|
586
|
+
return result;
|
587
|
+
}
|
588
|
+
var _getRawTag = getRawTag$1;
|
589
|
+
var objectProto$9 = Object.prototype;
|
590
|
+
var nativeObjectToString = objectProto$9.toString;
|
591
|
+
function objectToString$1(value) {
|
592
|
+
return nativeObjectToString.call(value);
|
593
|
+
}
|
594
|
+
var _objectToString = objectToString$1;
|
595
|
+
var Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;
|
596
|
+
var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
|
597
|
+
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
|
598
|
+
function baseGetTag$4(value) {
|
599
|
+
if (value == null) {
|
600
|
+
return value === void 0 ? undefinedTag : nullTag;
|
601
|
+
}
|
602
|
+
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
|
603
|
+
}
|
604
|
+
var _baseGetTag = baseGetTag$4;
|
605
|
+
function isObject$7(value) {
|
606
|
+
var type = typeof value;
|
607
|
+
return value != null && (type == "object" || type == "function");
|
608
|
+
}
|
609
|
+
var isObject_1 = isObject$7;
|
610
|
+
var baseGetTag$3 = _baseGetTag, isObject$6 = isObject_1;
|
611
|
+
var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
|
612
|
+
function isFunction$3(value) {
|
613
|
+
if (!isObject$6(value)) {
|
614
|
+
return false;
|
615
|
+
}
|
616
|
+
var tag = baseGetTag$3(value);
|
617
|
+
return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
|
618
|
+
}
|
619
|
+
var isFunction_1 = isFunction$3;
|
620
|
+
var root$f = _root;
|
621
|
+
var coreJsData$1 = root$f["__core-js_shared__"];
|
622
|
+
var _coreJsData = coreJsData$1;
|
623
|
+
var coreJsData = _coreJsData;
|
624
|
+
var maskSrcKey = function() {
|
625
|
+
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
|
626
|
+
return uid ? "Symbol(src)_1." + uid : "";
|
627
|
+
}();
|
628
|
+
function isMasked$1(func) {
|
629
|
+
return !!maskSrcKey && maskSrcKey in func;
|
630
|
+
}
|
631
|
+
var _isMasked = isMasked$1;
|
632
|
+
var funcProto$2 = Function.prototype;
|
633
|
+
var funcToString$2 = funcProto$2.toString;
|
634
|
+
function toSource$1(func) {
|
635
|
+
if (func != null) {
|
636
|
+
try {
|
637
|
+
return funcToString$2.call(func);
|
638
|
+
} catch (e2) {
|
639
|
+
}
|
640
|
+
try {
|
641
|
+
return func + "";
|
642
|
+
} catch (e2) {
|
643
|
+
}
|
644
|
+
}
|
645
|
+
return "";
|
646
|
+
}
|
647
|
+
var _toSource = toSource$1;
|
648
|
+
var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$5 = isObject_1, toSource = _toSource;
|
649
|
+
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
650
|
+
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
651
|
+
var funcProto$1 = Function.prototype, objectProto$8 = Object.prototype;
|
652
|
+
var funcToString$1 = funcProto$1.toString;
|
653
|
+
var hasOwnProperty$7 = objectProto$8.hasOwnProperty;
|
654
|
+
var reIsNative = RegExp(
|
655
|
+
"^" + funcToString$1.call(hasOwnProperty$7).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
|
656
|
+
);
|
657
|
+
function baseIsNative$1(value) {
|
658
|
+
if (!isObject$5(value) || isMasked(value)) {
|
659
|
+
return false;
|
660
|
+
}
|
661
|
+
var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
|
662
|
+
return pattern.test(toSource(value));
|
663
|
+
}
|
664
|
+
var _baseIsNative = baseIsNative$1;
|
665
|
+
function getValue$1(object, key) {
|
666
|
+
return object == null ? void 0 : object[key];
|
667
|
+
}
|
668
|
+
var _getValue = getValue$1;
|
669
|
+
var baseIsNative = _baseIsNative, getValue = _getValue;
|
670
|
+
function getNative$3(object, key) {
|
671
|
+
var value = getValue(object, key);
|
672
|
+
return baseIsNative(value) ? value : void 0;
|
673
|
+
}
|
674
|
+
var _getNative = getNative$3;
|
675
|
+
var getNative$2 = _getNative, root$e = _root;
|
676
|
+
var Map$3 = getNative$2(root$e, "Map");
|
677
|
+
var _Map = Map$3;
|
678
|
+
var getNative$1 = _getNative;
|
679
|
+
var nativeCreate$4 = getNative$1(Object, "create");
|
680
|
+
var _nativeCreate = nativeCreate$4;
|
681
|
+
var nativeCreate$3 = _nativeCreate;
|
682
|
+
function hashClear$1() {
|
683
|
+
this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};
|
684
|
+
this.size = 0;
|
685
|
+
}
|
686
|
+
var _hashClear = hashClear$1;
|
687
|
+
function hashDelete$1(key) {
|
688
|
+
var result = this.has(key) && delete this.__data__[key];
|
689
|
+
this.size -= result ? 1 : 0;
|
690
|
+
return result;
|
691
|
+
}
|
692
|
+
var _hashDelete = hashDelete$1;
|
693
|
+
var nativeCreate$2 = _nativeCreate;
|
694
|
+
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
|
695
|
+
var objectProto$7 = Object.prototype;
|
696
|
+
var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
|
697
|
+
function hashGet$1(key) {
|
698
|
+
var data = this.__data__;
|
699
|
+
if (nativeCreate$2) {
|
700
|
+
var result = data[key];
|
701
|
+
return result === HASH_UNDEFINED$1 ? void 0 : result;
|
702
|
+
}
|
703
|
+
return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
|
704
|
+
}
|
705
|
+
var _hashGet = hashGet$1;
|
706
|
+
var nativeCreate$1 = _nativeCreate;
|
707
|
+
var objectProto$6 = Object.prototype;
|
708
|
+
var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
|
709
|
+
function hashHas$1(key) {
|
710
|
+
var data = this.__data__;
|
711
|
+
return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
|
712
|
+
}
|
713
|
+
var _hashHas = hashHas$1;
|
714
|
+
var nativeCreate = _nativeCreate;
|
715
|
+
var HASH_UNDEFINED = "__lodash_hash_undefined__";
|
716
|
+
function hashSet$1(key, value) {
|
717
|
+
var data = this.__data__;
|
718
|
+
this.size += this.has(key) ? 0 : 1;
|
719
|
+
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
|
720
|
+
return this;
|
721
|
+
}
|
722
|
+
var _hashSet = hashSet$1;
|
723
|
+
var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;
|
724
|
+
function Hash$1(entries) {
|
725
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
726
|
+
this.clear();
|
727
|
+
while (++index2 < length) {
|
728
|
+
var entry = entries[index2];
|
729
|
+
this.set(entry[0], entry[1]);
|
730
|
+
}
|
731
|
+
}
|
732
|
+
Hash$1.prototype.clear = hashClear;
|
733
|
+
Hash$1.prototype["delete"] = hashDelete;
|
734
|
+
Hash$1.prototype.get = hashGet;
|
735
|
+
Hash$1.prototype.has = hashHas;
|
736
|
+
Hash$1.prototype.set = hashSet;
|
737
|
+
var _Hash = Hash$1;
|
738
|
+
var Hash = _Hash, ListCache$2 = _ListCache, Map$2 = _Map;
|
739
|
+
function mapCacheClear$1() {
|
740
|
+
this.size = 0;
|
741
|
+
this.__data__ = {
|
742
|
+
"hash": new Hash(),
|
743
|
+
"map": new (Map$2 || ListCache$2)(),
|
744
|
+
"string": new Hash()
|
745
|
+
};
|
746
|
+
}
|
747
|
+
var _mapCacheClear = mapCacheClear$1;
|
748
|
+
function isKeyable$1(value) {
|
749
|
+
var type = typeof value;
|
750
|
+
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
|
751
|
+
}
|
752
|
+
var _isKeyable = isKeyable$1;
|
753
|
+
var isKeyable = _isKeyable;
|
754
|
+
function getMapData$4(map, key) {
|
755
|
+
var data = map.__data__;
|
756
|
+
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
|
757
|
+
}
|
758
|
+
var _getMapData = getMapData$4;
|
759
|
+
var getMapData$3 = _getMapData;
|
760
|
+
function mapCacheDelete$1(key) {
|
761
|
+
var result = getMapData$3(this, key)["delete"](key);
|
762
|
+
this.size -= result ? 1 : 0;
|
763
|
+
return result;
|
764
|
+
}
|
765
|
+
var _mapCacheDelete = mapCacheDelete$1;
|
766
|
+
var getMapData$2 = _getMapData;
|
767
|
+
function mapCacheGet$1(key) {
|
768
|
+
return getMapData$2(this, key).get(key);
|
769
|
+
}
|
770
|
+
var _mapCacheGet = mapCacheGet$1;
|
771
|
+
var getMapData$1 = _getMapData;
|
772
|
+
function mapCacheHas$1(key) {
|
773
|
+
return getMapData$1(this, key).has(key);
|
774
|
+
}
|
775
|
+
var _mapCacheHas = mapCacheHas$1;
|
776
|
+
var getMapData = _getMapData;
|
777
|
+
function mapCacheSet$1(key, value) {
|
778
|
+
var data = getMapData(this, key), size = data.size;
|
779
|
+
data.set(key, value);
|
780
|
+
this.size += data.size == size ? 0 : 1;
|
781
|
+
return this;
|
782
|
+
}
|
783
|
+
var _mapCacheSet = mapCacheSet$1;
|
784
|
+
var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;
|
785
|
+
function MapCache$1(entries) {
|
786
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
787
|
+
this.clear();
|
788
|
+
while (++index2 < length) {
|
789
|
+
var entry = entries[index2];
|
790
|
+
this.set(entry[0], entry[1]);
|
791
|
+
}
|
792
|
+
}
|
793
|
+
MapCache$1.prototype.clear = mapCacheClear;
|
794
|
+
MapCache$1.prototype["delete"] = mapCacheDelete;
|
795
|
+
MapCache$1.prototype.get = mapCacheGet;
|
796
|
+
MapCache$1.prototype.has = mapCacheHas;
|
797
|
+
MapCache$1.prototype.set = mapCacheSet;
|
798
|
+
var _MapCache = MapCache$1;
|
799
|
+
var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache;
|
800
|
+
var LARGE_ARRAY_SIZE = 200;
|
801
|
+
function stackSet$1(key, value) {
|
802
|
+
var data = this.__data__;
|
803
|
+
if (data instanceof ListCache$1) {
|
804
|
+
var pairs = data.__data__;
|
805
|
+
if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
|
806
|
+
pairs.push([key, value]);
|
807
|
+
this.size = ++data.size;
|
808
|
+
return this;
|
809
|
+
}
|
810
|
+
data = this.__data__ = new MapCache(pairs);
|
811
|
+
}
|
812
|
+
data.set(key, value);
|
813
|
+
this.size = data.size;
|
814
|
+
return this;
|
815
|
+
}
|
816
|
+
var _stackSet = stackSet$1;
|
817
|
+
var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
|
818
|
+
function Stack$1(entries) {
|
819
|
+
var data = this.__data__ = new ListCache(entries);
|
820
|
+
this.size = data.size;
|
821
|
+
}
|
822
|
+
Stack$1.prototype.clear = stackClear;
|
823
|
+
Stack$1.prototype["delete"] = stackDelete;
|
824
|
+
Stack$1.prototype.get = stackGet;
|
825
|
+
Stack$1.prototype.has = stackHas;
|
826
|
+
Stack$1.prototype.set = stackSet;
|
827
|
+
var _Stack = Stack$1;
|
828
|
+
var getNative = _getNative;
|
829
|
+
var defineProperty$2 = function() {
|
830
|
+
try {
|
831
|
+
var func = getNative(Object, "defineProperty");
|
832
|
+
func({}, "", {});
|
833
|
+
return func;
|
834
|
+
} catch (e2) {
|
835
|
+
}
|
836
|
+
}();
|
837
|
+
var _defineProperty = defineProperty$2;
|
838
|
+
var defineProperty$1 = _defineProperty;
|
839
|
+
function baseAssignValue$3(object, key, value) {
|
840
|
+
if (key == "__proto__" && defineProperty$1) {
|
841
|
+
defineProperty$1(object, key, {
|
842
|
+
"configurable": true,
|
843
|
+
"enumerable": true,
|
844
|
+
"value": value,
|
845
|
+
"writable": true
|
846
|
+
});
|
847
|
+
} else {
|
848
|
+
object[key] = value;
|
849
|
+
}
|
850
|
+
}
|
851
|
+
var _baseAssignValue = baseAssignValue$3;
|
852
|
+
var baseAssignValue$2 = _baseAssignValue, eq$2 = eq_1;
|
853
|
+
function assignMergeValue$2(object, key, value) {
|
854
|
+
if (value !== void 0 && !eq$2(object[key], value) || value === void 0 && !(key in object)) {
|
855
|
+
baseAssignValue$2(object, key, value);
|
856
|
+
}
|
857
|
+
}
|
858
|
+
var _assignMergeValue = assignMergeValue$2;
|
859
|
+
function createBaseFor$1(fromRight) {
|
860
|
+
return function(object, iteratee, keysFunc) {
|
861
|
+
var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
|
862
|
+
while (length--) {
|
863
|
+
var key = props[fromRight ? length : ++index2];
|
864
|
+
if (iteratee(iterable[key], key, iterable) === false) {
|
865
|
+
break;
|
866
|
+
}
|
867
|
+
}
|
868
|
+
return object;
|
869
|
+
};
|
870
|
+
}
|
871
|
+
var _createBaseFor = createBaseFor$1;
|
872
|
+
var createBaseFor = _createBaseFor;
|
873
|
+
var baseFor$1 = createBaseFor();
|
874
|
+
var _baseFor = baseFor$1;
|
875
|
+
var _cloneBufferExports = {};
|
876
|
+
var _cloneBuffer = {
|
877
|
+
get exports() {
|
878
|
+
return _cloneBufferExports;
|
879
|
+
},
|
880
|
+
set exports(v2) {
|
881
|
+
_cloneBufferExports = v2;
|
882
|
+
}
|
883
|
+
};
|
884
|
+
(function(module, exports) {
|
885
|
+
var root2 = _root;
|
886
|
+
var freeExports = exports && !exports.nodeType && exports;
|
887
|
+
var freeModule = freeExports && true && module && !module.nodeType && module;
|
888
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
889
|
+
var Buffer = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;
|
890
|
+
function cloneBuffer2(buffer, isDeep) {
|
891
|
+
if (isDeep) {
|
892
|
+
return buffer.slice();
|
893
|
+
}
|
894
|
+
var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
|
895
|
+
buffer.copy(result);
|
896
|
+
return result;
|
897
|
+
}
|
898
|
+
module.exports = cloneBuffer2;
|
899
|
+
})(_cloneBuffer, _cloneBufferExports);
|
900
|
+
var root$d = _root;
|
901
|
+
var Uint8Array$1 = root$d.Uint8Array;
|
902
|
+
var _Uint8Array = Uint8Array$1;
|
903
|
+
var Uint8Array = _Uint8Array;
|
904
|
+
function cloneArrayBuffer$1(arrayBuffer) {
|
905
|
+
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
|
906
|
+
new Uint8Array(result).set(new Uint8Array(arrayBuffer));
|
907
|
+
return result;
|
908
|
+
}
|
909
|
+
var _cloneArrayBuffer = cloneArrayBuffer$1;
|
910
|
+
var cloneArrayBuffer = _cloneArrayBuffer;
|
911
|
+
function cloneTypedArray$1(typedArray, isDeep) {
|
912
|
+
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
|
913
|
+
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
|
914
|
+
}
|
915
|
+
var _cloneTypedArray = cloneTypedArray$1;
|
916
|
+
function copyArray$1(source, array) {
|
917
|
+
var index2 = -1, length = source.length;
|
918
|
+
array || (array = Array(length));
|
919
|
+
while (++index2 < length) {
|
920
|
+
array[index2] = source[index2];
|
921
|
+
}
|
922
|
+
return array;
|
923
|
+
}
|
924
|
+
var _copyArray = copyArray$1;
|
925
|
+
var isObject$4 = isObject_1;
|
926
|
+
var objectCreate = Object.create;
|
927
|
+
var baseCreate$1 = function() {
|
928
|
+
function object() {
|
929
|
+
}
|
930
|
+
return function(proto) {
|
931
|
+
if (!isObject$4(proto)) {
|
932
|
+
return {};
|
933
|
+
}
|
934
|
+
if (objectCreate) {
|
935
|
+
return objectCreate(proto);
|
936
|
+
}
|
937
|
+
object.prototype = proto;
|
938
|
+
var result = new object();
|
939
|
+
object.prototype = void 0;
|
940
|
+
return result;
|
941
|
+
};
|
942
|
+
}();
|
943
|
+
var _baseCreate = baseCreate$1;
|
944
|
+
function overArg$1(func, transform) {
|
945
|
+
return function(arg) {
|
946
|
+
return func(transform(arg));
|
947
|
+
};
|
948
|
+
}
|
949
|
+
var _overArg = overArg$1;
|
950
|
+
var overArg = _overArg;
|
951
|
+
var getPrototype$2 = overArg(Object.getPrototypeOf, Object);
|
952
|
+
var _getPrototype = getPrototype$2;
|
953
|
+
var objectProto$5 = Object.prototype;
|
954
|
+
function isPrototype$2(value) {
|
955
|
+
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$5;
|
956
|
+
return value === proto;
|
957
|
+
}
|
958
|
+
var _isPrototype = isPrototype$2;
|
959
|
+
var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype$1 = _isPrototype;
|
960
|
+
function initCloneObject$1(object) {
|
961
|
+
return typeof object.constructor == "function" && !isPrototype$1(object) ? baseCreate(getPrototype$1(object)) : {};
|
962
|
+
}
|
963
|
+
var _initCloneObject = initCloneObject$1;
|
964
|
+
function isObjectLike$5(value) {
|
965
|
+
return value != null && typeof value == "object";
|
966
|
+
}
|
967
|
+
var isObjectLike_1 = isObjectLike$5;
|
968
|
+
var baseGetTag$2 = _baseGetTag, isObjectLike$4 = isObjectLike_1;
|
969
|
+
var argsTag$1 = "[object Arguments]";
|
970
|
+
function baseIsArguments$1(value) {
|
971
|
+
return isObjectLike$4(value) && baseGetTag$2(value) == argsTag$1;
|
972
|
+
}
|
973
|
+
var _baseIsArguments = baseIsArguments$1;
|
974
|
+
var baseIsArguments = _baseIsArguments, isObjectLike$3 = isObjectLike_1;
|
975
|
+
var objectProto$4 = Object.prototype;
|
976
|
+
var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
|
977
|
+
var propertyIsEnumerable = objectProto$4.propertyIsEnumerable;
|
978
|
+
var isArguments$2 = baseIsArguments(function() {
|
979
|
+
return arguments;
|
980
|
+
}()) ? baseIsArguments : function(value) {
|
981
|
+
return isObjectLike$3(value) && hasOwnProperty$4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
|
982
|
+
};
|
983
|
+
var isArguments_1 = isArguments$2;
|
984
|
+
var isArray$2 = Array.isArray;
|
985
|
+
var isArray_1 = isArray$2;
|
986
|
+
var MAX_SAFE_INTEGER$1 = 9007199254740991;
|
987
|
+
function isLength$2(value) {
|
988
|
+
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
|
989
|
+
}
|
990
|
+
var isLength_1 = isLength$2;
|
991
|
+
var isFunction$1 = isFunction_1, isLength$1 = isLength_1;
|
992
|
+
function isArrayLike$3(value) {
|
993
|
+
return value != null && isLength$1(value.length) && !isFunction$1(value);
|
994
|
+
}
|
995
|
+
var isArrayLike_1 = isArrayLike$3;
|
996
|
+
var isArrayLike$2 = isArrayLike_1, isObjectLike$2 = isObjectLike_1;
|
997
|
+
function isArrayLikeObject$1(value) {
|
998
|
+
return isObjectLike$2(value) && isArrayLike$2(value);
|
999
|
+
}
|
1000
|
+
var isArrayLikeObject_1 = isArrayLikeObject$1;
|
1001
|
+
var isBufferExports = {};
|
1002
|
+
var isBuffer$2 = {
|
1003
|
+
get exports() {
|
1004
|
+
return isBufferExports;
|
1005
|
+
},
|
1006
|
+
set exports(v2) {
|
1007
|
+
isBufferExports = v2;
|
1008
|
+
}
|
1009
|
+
};
|
1010
|
+
function stubFalse() {
|
1011
|
+
return false;
|
1012
|
+
}
|
1013
|
+
var stubFalse_1 = stubFalse;
|
1014
|
+
(function(module, exports) {
|
1015
|
+
var root2 = _root, stubFalse2 = stubFalse_1;
|
1016
|
+
var freeExports = exports && !exports.nodeType && exports;
|
1017
|
+
var freeModule = freeExports && true && module && !module.nodeType && module;
|
1018
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
1019
|
+
var Buffer = moduleExports ? root2.Buffer : void 0;
|
1020
|
+
var nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;
|
1021
|
+
var isBuffer2 = nativeIsBuffer || stubFalse2;
|
1022
|
+
module.exports = isBuffer2;
|
1023
|
+
})(isBuffer$2, isBufferExports);
|
1024
|
+
var baseGetTag$1 = _baseGetTag, getPrototype = _getPrototype, isObjectLike$1 = isObjectLike_1;
|
1025
|
+
var objectTag$1 = "[object Object]";
|
1026
|
+
var funcProto = Function.prototype, objectProto$3 = Object.prototype;
|
1027
|
+
var funcToString = funcProto.toString;
|
1028
|
+
var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
|
1029
|
+
var objectCtorString = funcToString.call(Object);
|
1030
|
+
function isPlainObject$1(value) {
|
1031
|
+
if (!isObjectLike$1(value) || baseGetTag$1(value) != objectTag$1) {
|
1032
|
+
return false;
|
1033
|
+
}
|
1034
|
+
var proto = getPrototype(value);
|
1035
|
+
if (proto === null) {
|
1036
|
+
return true;
|
1037
|
+
}
|
1038
|
+
var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor;
|
1039
|
+
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
|
1040
|
+
}
|
1041
|
+
var isPlainObject_1 = isPlainObject$1;
|
1042
|
+
var baseGetTag = _baseGetTag, isLength = isLength_1, isObjectLike = isObjectLike_1;
|
1043
|
+
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]";
|
1044
|
+
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]";
|
1045
|
+
var typedArrayTags = {};
|
1046
|
+
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
|
1047
|
+
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;
|
1048
|
+
function baseIsTypedArray$1(value) {
|
1049
|
+
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
|
1050
|
+
}
|
1051
|
+
var _baseIsTypedArray = baseIsTypedArray$1;
|
1052
|
+
function baseUnary$1(func) {
|
1053
|
+
return function(value) {
|
1054
|
+
return func(value);
|
1055
|
+
};
|
1056
|
+
}
|
1057
|
+
var _baseUnary = baseUnary$1;
|
1058
|
+
var _nodeUtilExports = {};
|
1059
|
+
var _nodeUtil = {
|
1060
|
+
get exports() {
|
1061
|
+
return _nodeUtilExports;
|
1062
|
+
},
|
1063
|
+
set exports(v2) {
|
1064
|
+
_nodeUtilExports = v2;
|
1065
|
+
}
|
1066
|
+
};
|
1067
|
+
(function(module, exports) {
|
1068
|
+
var freeGlobal2 = _freeGlobal;
|
1069
|
+
var freeExports = exports && !exports.nodeType && exports;
|
1070
|
+
var freeModule = freeExports && true && module && !module.nodeType && module;
|
1071
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
1072
|
+
var freeProcess = moduleExports && freeGlobal2.process;
|
1073
|
+
var nodeUtil2 = function() {
|
1074
|
+
try {
|
1075
|
+
var types = freeModule && freeModule.require && freeModule.require("util").types;
|
1076
|
+
if (types) {
|
1077
|
+
return types;
|
1078
|
+
}
|
1079
|
+
return freeProcess && freeProcess.binding && freeProcess.binding("util");
|
1080
|
+
} catch (e2) {
|
1081
|
+
}
|
1082
|
+
}();
|
1083
|
+
module.exports = nodeUtil2;
|
1084
|
+
})(_nodeUtil, _nodeUtilExports);
|
1085
|
+
var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports;
|
1086
|
+
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
1087
|
+
var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
|
1088
|
+
var isTypedArray_1 = isTypedArray$2;
|
1089
|
+
function safeGet$2(object, key) {
|
1090
|
+
if (key === "constructor" && typeof object[key] === "function") {
|
1091
|
+
return;
|
1092
|
+
}
|
1093
|
+
if (key == "__proto__") {
|
1094
|
+
return;
|
1095
|
+
}
|
1096
|
+
return object[key];
|
1097
|
+
}
|
1098
|
+
var _safeGet = safeGet$2;
|
1099
|
+
var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1;
|
1100
|
+
var objectProto$2 = Object.prototype;
|
1101
|
+
var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
|
1102
|
+
function assignValue$1(object, key, value) {
|
1103
|
+
var objValue = object[key];
|
1104
|
+
if (!(hasOwnProperty$2.call(object, key) && eq$1(objValue, value)) || value === void 0 && !(key in object)) {
|
1105
|
+
baseAssignValue$1(object, key, value);
|
1106
|
+
}
|
1107
|
+
}
|
1108
|
+
var _assignValue = assignValue$1;
|
1109
|
+
var assignValue = _assignValue, baseAssignValue = _baseAssignValue;
|
1110
|
+
function copyObject$1(source, props, object, customizer) {
|
1111
|
+
var isNew = !object;
|
1112
|
+
object || (object = {});
|
1113
|
+
var index2 = -1, length = props.length;
|
1114
|
+
while (++index2 < length) {
|
1115
|
+
var key = props[index2];
|
1116
|
+
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
|
1117
|
+
if (newValue === void 0) {
|
1118
|
+
newValue = source[key];
|
1119
|
+
}
|
1120
|
+
if (isNew) {
|
1121
|
+
baseAssignValue(object, key, newValue);
|
1122
|
+
} else {
|
1123
|
+
assignValue(object, key, newValue);
|
1124
|
+
}
|
1125
|
+
}
|
1126
|
+
return object;
|
1127
|
+
}
|
1128
|
+
var _copyObject = copyObject$1;
|
1129
|
+
function baseTimes$1(n, iteratee) {
|
1130
|
+
var index2 = -1, result = Array(n);
|
1131
|
+
while (++index2 < n) {
|
1132
|
+
result[index2] = iteratee(index2);
|
1133
|
+
}
|
1134
|
+
return result;
|
1135
|
+
}
|
1136
|
+
var _baseTimes = baseTimes$1;
|
1137
|
+
var MAX_SAFE_INTEGER = 9007199254740991;
|
1138
|
+
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
1139
|
+
function isIndex$2(value, length) {
|
1140
|
+
var type = typeof value;
|
1141
|
+
length = length == null ? MAX_SAFE_INTEGER : length;
|
1142
|
+
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
|
1143
|
+
}
|
1144
|
+
var _isIndex = isIndex$2;
|
1145
|
+
var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1;
|
1146
|
+
var objectProto$1 = Object.prototype;
|
1147
|
+
var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
|
1148
|
+
function arrayLikeKeys$1(value, inherited) {
|
1149
|
+
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;
|
1150
|
+
for (var key in value) {
|
1151
|
+
if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
|
1152
|
+
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
|
1153
|
+
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
|
1154
|
+
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
|
1155
|
+
isIndex$1(key, length)))) {
|
1156
|
+
result.push(key);
|
1157
|
+
}
|
1158
|
+
}
|
1159
|
+
return result;
|
1160
|
+
}
|
1161
|
+
var _arrayLikeKeys = arrayLikeKeys$1;
|
1162
|
+
function nativeKeysIn$1(object) {
|
1163
|
+
var result = [];
|
1164
|
+
if (object != null) {
|
1165
|
+
for (var key in Object(object)) {
|
1166
|
+
result.push(key);
|
1167
|
+
}
|
1168
|
+
}
|
1169
|
+
return result;
|
1170
|
+
}
|
1171
|
+
var _nativeKeysIn = nativeKeysIn$1;
|
1172
|
+
var isObject$3 = isObject_1, isPrototype = _isPrototype, nativeKeysIn = _nativeKeysIn;
|
1173
|
+
var objectProto = Object.prototype;
|
1174
|
+
var hasOwnProperty = objectProto.hasOwnProperty;
|
1175
|
+
function baseKeysIn$1(object) {
|
1176
|
+
if (!isObject$3(object)) {
|
1177
|
+
return nativeKeysIn(object);
|
1178
|
+
}
|
1179
|
+
var isProto = isPrototype(object), result = [];
|
1180
|
+
for (var key in object) {
|
1181
|
+
if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
|
1182
|
+
result.push(key);
|
1183
|
+
}
|
1184
|
+
}
|
1185
|
+
return result;
|
1186
|
+
}
|
1187
|
+
var _baseKeysIn = baseKeysIn$1;
|
1188
|
+
var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$1 = isArrayLike_1;
|
1189
|
+
function keysIn$2(object) {
|
1190
|
+
return isArrayLike$1(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
|
1191
|
+
}
|
1192
|
+
var keysIn_1 = keysIn$2;
|
1193
|
+
var copyObject = _copyObject, keysIn$1 = keysIn_1;
|
1194
|
+
function toPlainObject$1(value) {
|
1195
|
+
return copyObject(value, keysIn$1(value));
|
1196
|
+
}
|
1197
|
+
var toPlainObject_1 = toPlainObject$1;
|
1198
|
+
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;
|
1199
|
+
function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {
|
1200
|
+
var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);
|
1201
|
+
if (stacked) {
|
1202
|
+
assignMergeValue$1(object, key, stacked);
|
1203
|
+
return;
|
1204
|
+
}
|
1205
|
+
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
|
1206
|
+
var isCommon = newValue === void 0;
|
1207
|
+
if (isCommon) {
|
1208
|
+
var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
|
1209
|
+
newValue = srcValue;
|
1210
|
+
if (isArr || isBuff || isTyped) {
|
1211
|
+
if (isArray(objValue)) {
|
1212
|
+
newValue = objValue;
|
1213
|
+
} else if (isArrayLikeObject(objValue)) {
|
1214
|
+
newValue = copyArray(objValue);
|
1215
|
+
} else if (isBuff) {
|
1216
|
+
isCommon = false;
|
1217
|
+
newValue = cloneBuffer(srcValue, true);
|
1218
|
+
} else if (isTyped) {
|
1219
|
+
isCommon = false;
|
1220
|
+
newValue = cloneTypedArray(srcValue, true);
|
1221
|
+
} else {
|
1222
|
+
newValue = [];
|
1223
|
+
}
|
1224
|
+
} else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
1225
|
+
newValue = objValue;
|
1226
|
+
if (isArguments(objValue)) {
|
1227
|
+
newValue = toPlainObject(objValue);
|
1228
|
+
} else if (!isObject$2(objValue) || isFunction(objValue)) {
|
1229
|
+
newValue = initCloneObject(srcValue);
|
1230
|
+
}
|
1231
|
+
} else {
|
1232
|
+
isCommon = false;
|
1233
|
+
}
|
1234
|
+
}
|
1235
|
+
if (isCommon) {
|
1236
|
+
stack.set(srcValue, newValue);
|
1237
|
+
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
|
1238
|
+
stack["delete"](srcValue);
|
1239
|
+
}
|
1240
|
+
assignMergeValue$1(object, key, newValue);
|
1241
|
+
}
|
1242
|
+
var _baseMergeDeep = baseMergeDeep$1;
|
1243
|
+
var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet;
|
1244
|
+
function baseMerge$1(object, source, srcIndex, customizer, stack) {
|
1245
|
+
if (object === source) {
|
1246
|
+
return;
|
1247
|
+
}
|
1248
|
+
baseFor(source, function(srcValue, key) {
|
1249
|
+
stack || (stack = new Stack());
|
1250
|
+
if (isObject$1(srcValue)) {
|
1251
|
+
baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack);
|
1252
|
+
} else {
|
1253
|
+
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
|
1254
|
+
if (newValue === void 0) {
|
1255
|
+
newValue = srcValue;
|
1256
|
+
}
|
1257
|
+
assignMergeValue(object, key, newValue);
|
1258
|
+
}
|
1259
|
+
}, keysIn);
|
1260
|
+
}
|
1261
|
+
var _baseMerge = baseMerge$1;
|
1262
|
+
function identity$2(value) {
|
1263
|
+
return value;
|
1264
|
+
}
|
1265
|
+
var identity_1 = identity$2;
|
1266
|
+
function apply$1(func, thisArg, args) {
|
1267
|
+
switch (args.length) {
|
1268
|
+
case 0:
|
1269
|
+
return func.call(thisArg);
|
1270
|
+
case 1:
|
1271
|
+
return func.call(thisArg, args[0]);
|
1272
|
+
case 2:
|
1273
|
+
return func.call(thisArg, args[0], args[1]);
|
1274
|
+
case 3:
|
1275
|
+
return func.call(thisArg, args[0], args[1], args[2]);
|
1276
|
+
}
|
1277
|
+
return func.apply(thisArg, args);
|
1278
|
+
}
|
1279
|
+
var _apply = apply$1;
|
1280
|
+
var apply = _apply;
|
1281
|
+
var nativeMax = Math.max;
|
1282
|
+
function overRest$1(func, start, transform) {
|
1283
|
+
start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
|
1284
|
+
return function() {
|
1285
|
+
var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);
|
1286
|
+
while (++index2 < length) {
|
1287
|
+
array[index2] = args[start + index2];
|
1288
|
+
}
|
1289
|
+
index2 = -1;
|
1290
|
+
var otherArgs = Array(start + 1);
|
1291
|
+
while (++index2 < start) {
|
1292
|
+
otherArgs[index2] = args[index2];
|
1293
|
+
}
|
1294
|
+
otherArgs[start] = transform(array);
|
1295
|
+
return apply(func, this, otherArgs);
|
1296
|
+
};
|
1297
|
+
}
|
1298
|
+
var _overRest = overRest$1;
|
1299
|
+
function constant$1(value) {
|
1300
|
+
return function() {
|
1301
|
+
return value;
|
1302
|
+
};
|
1303
|
+
}
|
1304
|
+
var constant_1 = constant$1;
|
1305
|
+
var constant = constant_1, defineProperty = _defineProperty, identity$1 = identity_1;
|
1306
|
+
var baseSetToString$1 = !defineProperty ? identity$1 : function(func, string) {
|
1307
|
+
return defineProperty(func, "toString", {
|
1308
|
+
"configurable": true,
|
1309
|
+
"enumerable": false,
|
1310
|
+
"value": constant(string),
|
1311
|
+
"writable": true
|
1312
|
+
});
|
1313
|
+
};
|
1314
|
+
var _baseSetToString = baseSetToString$1;
|
1315
|
+
var HOT_COUNT = 800, HOT_SPAN = 16;
|
1316
|
+
var nativeNow = Date.now;
|
1317
|
+
function shortOut$1(func) {
|
1318
|
+
var count = 0, lastCalled = 0;
|
1319
|
+
return function() {
|
1320
|
+
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
|
1321
|
+
lastCalled = stamp;
|
1322
|
+
if (remaining > 0) {
|
1323
|
+
if (++count >= HOT_COUNT) {
|
1324
|
+
return arguments[0];
|
1325
|
+
}
|
1326
|
+
} else {
|
1327
|
+
count = 0;
|
1328
|
+
}
|
1329
|
+
return func.apply(void 0, arguments);
|
1330
|
+
};
|
1331
|
+
}
|
1332
|
+
var _shortOut = shortOut$1;
|
1333
|
+
var baseSetToString = _baseSetToString, shortOut = _shortOut;
|
1334
|
+
var setToString$1 = shortOut(baseSetToString);
|
1335
|
+
var _setToString = setToString$1;
|
1336
|
+
var identity = identity_1, overRest = _overRest, setToString = _setToString;
|
1337
|
+
function baseRest$1(func, start) {
|
1338
|
+
return setToString(overRest(func, start, identity), func + "");
|
1339
|
+
}
|
1340
|
+
var _baseRest = baseRest$1;
|
1341
|
+
var eq = eq_1, isArrayLike = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1;
|
1342
|
+
function isIterateeCall$1(value, index2, object) {
|
1343
|
+
if (!isObject(object)) {
|
1344
|
+
return false;
|
1345
|
+
}
|
1346
|
+
var type = typeof index2;
|
1347
|
+
if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
|
1348
|
+
return eq(object[index2], value);
|
1349
|
+
}
|
1350
|
+
return false;
|
1351
|
+
}
|
1352
|
+
var _isIterateeCall = isIterateeCall$1;
|
1353
|
+
var baseRest = _baseRest, isIterateeCall = _isIterateeCall;
|
1354
|
+
function createAssigner$1(assigner) {
|
1355
|
+
return baseRest(function(object, sources) {
|
1356
|
+
var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
|
1357
|
+
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
|
1358
|
+
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
1359
|
+
customizer = length < 3 ? void 0 : customizer;
|
1360
|
+
length = 1;
|
1361
|
+
}
|
1362
|
+
object = Object(object);
|
1363
|
+
while (++index2 < length) {
|
1364
|
+
var source = sources[index2];
|
1365
|
+
if (source) {
|
1366
|
+
assigner(object, source, index2, customizer);
|
1367
|
+
}
|
1368
|
+
}
|
1369
|
+
return object;
|
1370
|
+
});
|
1371
|
+
}
|
1372
|
+
var _createAssigner = createAssigner$1;
|
1373
|
+
var baseMerge = _baseMerge, createAssigner = _createAssigner;
|
1374
|
+
createAssigner(function(object, source, srcIndex) {
|
1375
|
+
baseMerge(object, source, srcIndex);
|
1376
|
+
});
|
1377
|
+
const injectLink = (options2) => {
|
1378
|
+
const head2 = document.getElementsByTagName("head")[0];
|
1379
|
+
const link = document.createElement("link");
|
1380
|
+
Object.entries(options2).forEach(([key, value]) => link.setAttribute(key, value));
|
1381
|
+
head2.appendChild(link);
|
1382
|
+
};
|
1383
|
+
const iterator = (input, visitor) => {
|
1384
|
+
if (Array.isArray(input)) {
|
1385
|
+
return input.map((el, index2) => iterator(visitor(index2, el), visitor));
|
1386
|
+
}
|
1387
|
+
if (typeof input === "object" && input) {
|
1388
|
+
return Object.entries(input).reduce((acc, [key, value]) => {
|
1389
|
+
acc[key] = iterator(visitor(key, value), visitor);
|
1390
|
+
return acc;
|
1391
|
+
}, {});
|
1392
|
+
}
|
1393
|
+
return input;
|
1394
|
+
};
|
1395
|
+
const isEmptyValue = (value) => !value && (value === null || value === void 0);
|
1396
|
+
const isValue = (value) => !isEmptyValue(value);
|
1397
|
+
const pick = (obj, ...props) => {
|
1398
|
+
return props.reduce((result, prop) => {
|
1399
|
+
result[prop] = obj[prop];
|
1400
|
+
return result;
|
1401
|
+
}, {});
|
1402
|
+
};
|
1403
|
+
function omit(obj, ...props) {
|
1404
|
+
const result = {
|
1405
|
+
...obj
|
1406
|
+
};
|
1407
|
+
props.forEach((prop) => {
|
1408
|
+
delete result[prop];
|
1409
|
+
});
|
1410
|
+
return result;
|
1411
|
+
}
|
1412
|
+
const set = (obj, path, value) => {
|
1413
|
+
const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
|
1414
|
+
return pathArray.reduce((acc, key, i2) => {
|
1415
|
+
if (acc[key] === void 0)
|
1416
|
+
acc[key] = {};
|
1417
|
+
if (i2 === pathArray.length - 1)
|
1418
|
+
acc[key] = value;
|
1419
|
+
return acc[key];
|
1420
|
+
}, obj);
|
1421
|
+
};
|
1422
|
+
const hexToRgb = (hex) => {
|
1423
|
+
const chars = hex.slice(1);
|
1424
|
+
if (chars.length === 3) {
|
1425
|
+
hex = chars.split("").map((val) => `${val}${val}`).join("");
|
1426
|
+
}
|
1427
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
1428
|
+
return result ? {
|
1429
|
+
r: parseInt(result[1], 16),
|
1430
|
+
g: parseInt(result[2], 16),
|
1431
|
+
b: parseInt(result[3], 16)
|
1432
|
+
} : void 0;
|
1433
|
+
};
|
1434
|
+
const isJsonSame = (...values) => {
|
1435
|
+
return values.map((value) => JSON.stringify(value)).every((val, _2, arr) => val === arr[0]);
|
1436
|
+
};
|
1437
|
+
const rgbToRgba = (rgb, alpha = 1) => rgb.replace(")", `, ${alpha})`).replace("rgb", "rgba");
|
1438
|
+
const devices = ["desktop", "laptop", "tablet", "mobile"];
|
1439
|
+
const BREAKPOINTS = {
|
1440
|
+
mobile: 320,
|
1441
|
+
tablet: 768,
|
1442
|
+
laptop: 1024,
|
1443
|
+
desktop: 1920
|
1444
|
+
};
|
1445
|
+
const isValidRule$1 = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
|
1446
|
+
const getRules = (state, device) => {
|
1447
|
+
if (!state)
|
1448
|
+
return state;
|
1449
|
+
return iterator(state, (_key, value) => {
|
1450
|
+
if (isValidRule$1(value)) {
|
1451
|
+
return value[device];
|
1452
|
+
}
|
1453
|
+
return value;
|
1454
|
+
});
|
1455
|
+
};
|
1456
|
+
const useGetRules = (state, device) => getRules(state, device);
|
1457
|
+
const useContainerDevice = ({
|
1458
|
+
targetRef,
|
1459
|
+
parentKey = "device-container",
|
1460
|
+
breakpoints = BREAKPOINTS
|
1461
|
+
}) => {
|
1462
|
+
const [device, setDevice] = h("desktop");
|
1463
|
+
const checkDevice = (parent) => {
|
1464
|
+
var _a;
|
1465
|
+
const parentWidth = parent.getBoundingClientRect().width || 0;
|
1466
|
+
const findDevice = (_a = Object.entries(breakpoints).find(([, value]) => value >= parentWidth)) == null ? void 0 : _a[0];
|
1467
|
+
setDevice(findDevice);
|
1468
|
+
};
|
1469
|
+
y(() => {
|
1470
|
+
const parentElement = targetRef.current.closest(`[data-${parentKey}]`);
|
1471
|
+
if (parentElement) {
|
1472
|
+
const resizeObserver = new ResizeObserver(() => checkDevice(parentElement));
|
1473
|
+
resizeObserver.observe(parentElement);
|
1474
|
+
checkDevice(parentElement);
|
1475
|
+
}
|
1476
|
+
}, []);
|
1477
|
+
return device;
|
1478
|
+
};
|
1479
|
+
const wrapTo = (value, until) => `${value}${until}`;
|
1480
|
+
const toPx = (key) => key.startsWith("px_");
|
1481
|
+
const toPercent = (key) => key.startsWith("percent_");
|
1482
|
+
const formatRule = (key, value) => {
|
1483
|
+
let newKey = key;
|
1484
|
+
let newValue = value;
|
1485
|
+
if (toPx(newKey)) {
|
1486
|
+
newKey = newKey.replace("px_", "");
|
1487
|
+
newValue = wrapTo(value, "px");
|
1488
|
+
}
|
1489
|
+
if (toPercent(newKey)) {
|
1490
|
+
newKey = newKey.replace("percent_", "");
|
1491
|
+
newValue = wrapTo(value, "%");
|
1492
|
+
}
|
1493
|
+
return {
|
1494
|
+
key: newKey,
|
1495
|
+
value: newValue
|
1496
|
+
};
|
1497
|
+
};
|
1498
|
+
const DEFAULT_TO_PX = ["borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth", "minHeight", "minWidth", "maxWidth", "maxHeight", "fontSize", "height", "width", "letterSpacing", "fontSize", "left", "right", "top", "bottom", "marginTop", "marginBottom", "marginLeft", "marginRight", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight"];
|
1499
|
+
const parseRules = (rules, layer) => {
|
1500
|
+
const keys = Object.keys(rules);
|
1501
|
+
if (keys.includes("innerHTML") || keys.includes("innerText")) {
|
1502
|
+
console.warn(`Warning! InnerHTML and innerText is deprecated. Use "children" property.`, layer);
|
1503
|
+
}
|
1504
|
+
if (typeof rules !== "object") {
|
1505
|
+
return rules;
|
1506
|
+
}
|
1507
|
+
if ("typography" in rules && "accentTypography" in rules) {
|
1508
|
+
const typography = rules.typography;
|
1509
|
+
const accentTypography = rules.accentTypography;
|
1510
|
+
rules = {
|
1511
|
+
...rules,
|
1512
|
+
...typography,
|
1513
|
+
"--font-family": accentTypography.fontFamily,
|
1514
|
+
"--accent-color": accentTypography.color,
|
1515
|
+
"px_--accent-size": accentTypography.fontSize
|
1516
|
+
};
|
1517
|
+
}
|
1518
|
+
return Object.entries(rules).reduce((acc, [propKey, propValue]) => {
|
1519
|
+
if (DEFAULT_TO_PX.includes(propKey)) {
|
1520
|
+
propValue = wrapTo(propValue, "px");
|
1521
|
+
}
|
1522
|
+
const {
|
1523
|
+
key,
|
1524
|
+
value
|
1525
|
+
} = formatRule(propKey, propValue);
|
1526
|
+
acc[key] = value;
|
1527
|
+
if (key === "innerHTML") {
|
1528
|
+
acc.innerHTML = isValue(value) ? `${value}` : "";
|
1529
|
+
}
|
1530
|
+
if (key === "innerText") {
|
1531
|
+
acc.innerText = isValue(value) ? `${value}` : "";
|
1532
|
+
}
|
1533
|
+
if (key === "children") {
|
1534
|
+
acc.children = typeof value === "string" ? isValue(value) ? `${value}` : "" : value;
|
1535
|
+
}
|
1536
|
+
if (key === "innerHTML" || key === "innerText" || key === "children") {
|
1537
|
+
if (typeof value === "string" && value.length === 0) {
|
1538
|
+
acc.display = "none";
|
1539
|
+
} else if (isEmptyValue(value)) {
|
1540
|
+
acc.display = "none";
|
1541
|
+
}
|
1542
|
+
}
|
1543
|
+
if (key.includes("borderWidth")) {
|
1544
|
+
acc.borderStyle = "solid";
|
1545
|
+
}
|
1546
|
+
if (key === "corner") {
|
1547
|
+
acc.borderRadius = wrapTo(value, "px");
|
1548
|
+
}
|
1549
|
+
if (key === "backgroundFit") {
|
1550
|
+
acc.backgroundSize = value;
|
1551
|
+
}
|
1552
|
+
if (key === "backgroundImage" && isValue(value)) {
|
1553
|
+
acc.backgroundImage = `url(${value})`;
|
1554
|
+
acc.backgroundRepeat = "no-repeat";
|
1555
|
+
}
|
1556
|
+
if (key === "backgroundColorOpacity" && isValue(acc.backgroundColorOpacity) && isValue(acc.backgroundColor)) {
|
1557
|
+
const rgb = hexToRgb(acc.backgroundColor);
|
1558
|
+
if (rgb) {
|
1559
|
+
acc.backgroundColor = rgbToRgba(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`, +acc.backgroundColorOpacity / 100);
|
1560
|
+
}
|
1561
|
+
}
|
1562
|
+
if (key === "isBold") {
|
1563
|
+
acc.fontWeight = value ? "bold" : "initial";
|
1564
|
+
}
|
1565
|
+
if (key === "isItalic") {
|
1566
|
+
acc.fontStyle = value ? "italic" : "initial";
|
1567
|
+
}
|
1568
|
+
if (key === "isThrough") {
|
1569
|
+
acc.textDecoration = value ? "line-through" : "initial";
|
1570
|
+
}
|
1571
|
+
return acc;
|
1572
|
+
}, rules);
|
1573
|
+
};
|
1574
|
+
const isValidRule = (rule) => typeof rule === "object" && !Array.isArray(rule) && "parent" in rule;
|
1575
|
+
const useParseRules = (state) => Object.entries(state).reduce((acc, [layer, rule]) => {
|
1576
|
+
acc[layer] = isValidRule(rule) ? parseRules({
|
1577
|
+
...state[layer]
|
1578
|
+
}, layer) : rule;
|
1579
|
+
return acc;
|
1580
|
+
}, {});
|
1581
|
+
const DisplayText = ({
|
1582
|
+
children,
|
1583
|
+
...rest
|
1584
|
+
}) => {
|
1585
|
+
var _a;
|
1586
|
+
const formatValue = (_a = children == null ? void 0 : children.replace("script", "")) == null ? void 0 : _a.replace(/{{(.*?)}}/g, `<span>$1</span>`);
|
1587
|
+
return o("div", {
|
1588
|
+
...rest,
|
1589
|
+
dangerouslySetInnerHTML: {
|
1590
|
+
__html: formatValue
|
1591
|
+
}
|
1592
|
+
});
|
1593
|
+
};
|
1594
|
+
const useToggle = () => {
|
1595
|
+
const [isOpen, setIsOpen] = h(false);
|
1596
|
+
return [isOpen, () => setIsOpen((prev) => !prev)];
|
1597
|
+
};
|
1598
|
+
const CloseIcon = () => o("svg", {
|
1599
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1600
|
+
width: "20",
|
1601
|
+
height: "20",
|
1602
|
+
viewBox: "0 0 24 24",
|
1603
|
+
children: o("path", {
|
1604
|
+
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",
|
1605
|
+
fill: "currentColor"
|
1606
|
+
})
|
1607
|
+
});
|
1608
|
+
const GiftIcon = () => o("svg", {
|
1609
|
+
viewBox: "0 0 16 16",
|
1610
|
+
children: o("path", {
|
1611
|
+
fill: "currentColor",
|
1612
|
+
fillRule: "evenodd",
|
1613
|
+
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"
|
1614
|
+
})
|
1615
|
+
});
|
1616
|
+
const animationsMap = (animations) => ({
|
1617
|
+
fade: `${animations.fade} 2s linear infinite`,
|
1618
|
+
pulse: `${animations.pulse} .3s linear 0s infinite alternate forwards`,
|
1619
|
+
wiggle: `${animations.wiggle} 2s linear infinite`,
|
1620
|
+
gradient: `${animations.gradient} 3s ease infinite`
|
1621
|
+
});
|
1622
|
+
const useGiftRules = (deviceState, animations) => {
|
1623
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
1624
|
+
const fullAnimations = animationsMap(animations);
|
1625
|
+
const rules = useParseRules(deviceState);
|
1626
|
+
const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
|
1627
|
+
const arrowRules = {
|
1628
|
+
left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
|
1629
|
+
backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
|
1630
|
+
borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
|
1631
|
+
borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
|
1632
|
+
borderTopStyle: "solid",
|
1633
|
+
borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
|
1634
|
+
borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
|
1635
|
+
borderLeftStyle: "solid"
|
1636
|
+
};
|
1637
|
+
const bodyRules = {
|
1638
|
+
left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
|
1639
|
+
};
|
1640
|
+
const allAnimations = (((_i = rules == null ? void 0 : rules.icon) == null ? void 0 : _i.animations) || []).map((animation) => fullAnimations[animation]).join(", ");
|
1641
|
+
const backgroundStyles = isValue((_j = rules == null ? void 0 : rules.icon) == null ? void 0 : _j.gradientColor) && ((_k = rules == null ? void 0 : rules.icon) == null ? void 0 : _k.animations.includes("gradient")) ? {
|
1642
|
+
background: `linear-gradient(-90deg, ${(_l = rules.icon) == null ? void 0 : _l.backgroundColor} 0%, ${(_m = rules == null ? void 0 : rules.icon) == null ? void 0 : _m.gradientColor} 100%) 0% 0% / 400% 400%`,
|
1643
|
+
backgroundSize: "400% 400%"
|
1644
|
+
} : {};
|
1645
|
+
const iconRules = {
|
1646
|
+
...(rules == null ? void 0 : rules.icon) || {},
|
1647
|
+
animation: allAnimations,
|
1648
|
+
...backgroundStyles
|
1649
|
+
};
|
1650
|
+
return {
|
1651
|
+
hasIcon,
|
1652
|
+
arrowRules,
|
1653
|
+
bodyRules,
|
1654
|
+
iconRules
|
1655
|
+
};
|
1656
|
+
};
|
1657
|
+
const backgroundOptions = ["backgroundColor", "backgroundColorOpacity", "backgroundImage", "backgroundFit"];
|
1658
|
+
const spacingOptions = ["marginTop", "marginBottom", "marginLeft", "marginRight", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight"];
|
1659
|
+
const noopYaMetrika = (goal) => console.log(`Noop YaMektika reach goal: ${goal}`);
|
1660
|
+
const noopAdFox = (goal) => console.log(`Noop AdFox reach goal: ${goal}`);
|
1661
|
+
const useMetrics = (state, layerName = "root") => {
|
1662
|
+
const saveMetrics = _$1();
|
1663
|
+
const yaReachGoal = state.yaReachGoal || noopYaMetrika;
|
1664
|
+
const adfoxReachGoal = state.adfoxReachGoal || noopAdFox;
|
1665
|
+
const metrics = pick(state[layerName], "yaShow", "yaClick", "adfoxShow", "adfoxClick");
|
1666
|
+
p(() => {
|
1667
|
+
if (!isJsonSame(saveMetrics.current, metrics)) {
|
1668
|
+
if (metrics.yaShow) {
|
1669
|
+
yaReachGoal(metrics.yaShow);
|
1670
|
+
}
|
1671
|
+
if (metrics.yaShow) {
|
1672
|
+
adfoxReachGoal(metrics.adfoxShow);
|
1673
|
+
}
|
1674
|
+
}
|
1675
|
+
saveMetrics.current = metrics;
|
1676
|
+
}, [metrics]);
|
1677
|
+
return () => {
|
1678
|
+
if (metrics.yaClick) {
|
1679
|
+
yaReachGoal(metrics.yaClick);
|
1680
|
+
}
|
1681
|
+
if (metrics.adfoxClick) {
|
1682
|
+
adfoxReachGoal(metrics.adfoxClick);
|
1683
|
+
}
|
1684
|
+
};
|
1685
|
+
};
|
1686
|
+
const useExtractFonts = (state) => {
|
1687
|
+
const fonts = /* @__PURE__ */ new Set([]);
|
1688
|
+
iterator(state, (key, value) => {
|
1689
|
+
if (key === "fontFamily") {
|
1690
|
+
fonts.add(value);
|
1691
|
+
}
|
1692
|
+
return value;
|
1693
|
+
});
|
1694
|
+
const fontLinks = F$1(() => Array.from(fonts.values()).map((font) => ({
|
1695
|
+
rel: "stylesheet",
|
1696
|
+
href: `https://fonts.googleapis.com/css?family=${font}:300,400,500,700&display=swap`
|
1697
|
+
})), [fonts]);
|
1698
|
+
p(() => {
|
1699
|
+
fontLinks.forEach((link) => injectLink(link));
|
1700
|
+
}, [fontLinks]);
|
1701
|
+
};
|
1702
|
+
const SimpleGift = () => {
|
1703
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
1704
|
+
const rootRef = _$1(null);
|
1705
|
+
const [legalIsOpen, toggleLegalIsOpen] = useToggle();
|
1706
|
+
const state = useCurrentState();
|
1707
|
+
const device = useContainerDevice({
|
1708
|
+
targetRef: rootRef
|
1709
|
+
});
|
1710
|
+
const deviceState = useGetRules(state, device);
|
1711
|
+
const rules = useParseRules(deviceState);
|
1712
|
+
const onClick = useMetrics(deviceState);
|
1713
|
+
const {
|
1714
|
+
isOpen,
|
1715
|
+
onToggle
|
1716
|
+
} = useGiftOpen((_a = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _a.delay);
|
1717
|
+
const {
|
1718
|
+
hasIcon,
|
1719
|
+
iconRules,
|
1720
|
+
bodyRules,
|
1721
|
+
arrowRules
|
1722
|
+
} = useGiftRules(deviceState, {
|
1723
|
+
fade: styles$d.fadein,
|
1724
|
+
pulse: styles$d.pulse,
|
1725
|
+
wiggle: styles$d.wiggle,
|
1726
|
+
gradient: styles$d.gradient
|
1727
|
+
});
|
1728
|
+
useExtractFonts(deviceState);
|
1729
|
+
return o("div", {
|
1730
|
+
className: styles$d.root,
|
1731
|
+
ref: rootRef,
|
1732
|
+
children: [o("div", {
|
1733
|
+
className: styles$d.icon,
|
1734
|
+
style: iconRules,
|
1735
|
+
onClick: onToggle,
|
1736
|
+
children: hasIcon && o("div", {
|
1737
|
+
className: styles$d.iconTarget,
|
1738
|
+
children: o(GiftIcon, {})
|
1739
|
+
})
|
1740
|
+
}), o("div", {
|
1741
|
+
className: classNames(styles$d.body, {
|
1742
|
+
[styles$d.bodyOpen]: isOpen
|
1743
|
+
}),
|
1744
|
+
style: bodyRules,
|
1745
|
+
children: [o("div", {
|
1746
|
+
className: styles$d.arrow,
|
1747
|
+
style: arrowRules
|
1748
|
+
}), o("div", {
|
1749
|
+
className: styles$d.close,
|
1750
|
+
style: rules.close,
|
1751
|
+
onClick: onToggle,
|
1752
|
+
children: o(CloseIcon, {})
|
1753
|
+
}), o("div", {
|
1754
|
+
className: styles$d.container,
|
1755
|
+
style: rules.container,
|
1756
|
+
children: [o("a", {
|
1757
|
+
href: (_b = rules.root) == null ? void 0 : _b.offer,
|
1758
|
+
target: "_blank",
|
1759
|
+
rel: "nofollow noopener noreferrer",
|
1760
|
+
onClick,
|
1761
|
+
children: [o("div", {
|
1762
|
+
className: styles$d.inner,
|
1763
|
+
children: [o("div", {
|
1764
|
+
className: styles$d.logo,
|
1765
|
+
style: rules.logo
|
1766
|
+
}), o(DisplayText, {
|
1767
|
+
className: styles$d.text,
|
1768
|
+
style: rules.text,
|
1769
|
+
children: (_c = rules == null ? void 0 : rules.text) == null ? void 0 : _c.children
|
1770
|
+
})]
|
1771
|
+
}), o("div", {
|
1772
|
+
className: classNames(styles$d.button, {
|
1773
|
+
[styles$d.buttonAnimated]: rules.button.isAnimated
|
1774
|
+
}),
|
1775
|
+
style: rules.button,
|
1776
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
1777
|
+
})]
|
1778
|
+
}), o("div", {
|
1779
|
+
className: classNames(styles$d.legal, {
|
1780
|
+
[styles$d.legalOpen]: legalIsOpen
|
1781
|
+
}),
|
1782
|
+
style: rules.legal,
|
1783
|
+
children: o("span", {
|
1784
|
+
className: styles$d.legalText,
|
1785
|
+
children: [o("span", {
|
1786
|
+
children: (_e = rules == null ? void 0 : rules.legal) == null ? void 0 : _e.children
|
1787
|
+
}), o("span", {
|
1788
|
+
className: styles$d.legalButton,
|
1789
|
+
onClick: toggleLegalIsOpen,
|
1790
|
+
children: legalIsOpen ? (_f = rules == null ? void 0 : rules.legal) == null ? void 0 : _f.buttonOpenText : (_g = rules == null ? void 0 : rules.legal) == null ? void 0 : _g.buttonHideText
|
1791
|
+
})]
|
1792
|
+
})
|
1793
|
+
})]
|
1794
|
+
})]
|
1795
|
+
})]
|
1796
|
+
});
|
1797
|
+
};
|
1798
|
+
const index$6 = render(o(SimpleGift, {}));
|
1799
|
+
const root$c = "_root_107vu_1";
|
1800
|
+
const icon = "_icon_107vu_5";
|
1801
|
+
const iconTarget = "_iconTarget_107vu_17";
|
1802
|
+
const body$5 = "_body_107vu_22";
|
1803
|
+
const bodyOpen = "_bodyOpen_107vu_30";
|
1804
|
+
const complexGift_in = "_complexGift_in_107vu_1";
|
1805
|
+
const arrow = "_arrow_107vu_43";
|
1806
|
+
const container$1 = "_container_107vu_53";
|
1807
|
+
const promotion$1 = "_promotion_107vu_58";
|
1808
|
+
const close = "_close_107vu_66";
|
1809
|
+
const head$1 = "_head_107vu_80";
|
1810
|
+
const headIcon = "_headIcon_107vu_87";
|
1811
|
+
const headTitle = "_headTitle_107vu_93";
|
1812
|
+
const inner = "_inner_107vu_100";
|
1813
|
+
const fadein = "_fadein_107vu_1";
|
1814
|
+
const pulse = "_pulse_107vu_1";
|
1815
|
+
const gradient = "_gradient_107vu_1";
|
1816
|
+
const wiggle = "_wiggle_107vu_1";
|
1817
|
+
const styles$c = {
|
1818
|
+
root: root$c,
|
1819
|
+
icon,
|
1820
|
+
iconTarget,
|
1821
|
+
body: body$5,
|
1822
|
+
bodyOpen,
|
1823
|
+
complexGift_in,
|
1824
|
+
arrow,
|
1825
|
+
container: container$1,
|
1826
|
+
promotion: promotion$1,
|
1827
|
+
close,
|
1828
|
+
head: head$1,
|
1829
|
+
headIcon,
|
1830
|
+
headTitle,
|
1831
|
+
inner,
|
1832
|
+
fadein,
|
1833
|
+
pulse,
|
1834
|
+
gradient,
|
1835
|
+
wiggle
|
1836
|
+
};
|
1837
|
+
const root$b = "_root_1p6us_1";
|
1838
|
+
const body$4 = "_body_1p6us_30";
|
1839
|
+
const bodyInner = "_bodyInner_1p6us_38";
|
1840
|
+
const line = "_line_1p6us_43";
|
1841
|
+
const text$3 = "_text_1p6us_53";
|
1842
|
+
const button$5 = "_button_1p6us_69";
|
1843
|
+
const logo$5 = "_logo_1p6us_81";
|
1844
|
+
const variant2$1 = "_variant2_1p6us_87";
|
1845
|
+
const buttonText = "_buttonText_1p6us_91";
|
1846
|
+
const legal$4 = "_legal_1p6us_107";
|
1847
|
+
const styles$b = {
|
1848
|
+
root: root$b,
|
1849
|
+
body: body$4,
|
1850
|
+
bodyInner,
|
1851
|
+
line,
|
1852
|
+
text: text$3,
|
1853
|
+
button: button$5,
|
1854
|
+
logo: logo$5,
|
1855
|
+
variant2: variant2$1,
|
1856
|
+
buttonText,
|
1857
|
+
legal: legal$4
|
1858
|
+
};
|
1859
|
+
const BonusCard$1 = () => {
|
1860
|
+
var _a, _b, _c, _d, _e;
|
1861
|
+
const state = useCurrentState();
|
1862
|
+
const rules = useParseRules(state);
|
1863
|
+
const onClick = useMetrics(state);
|
1864
|
+
return o("a", {
|
1865
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
1866
|
+
target: "_blank",
|
1867
|
+
rel: "nofollow noopener noreferrer",
|
1868
|
+
className: classNames(styles$b.root, {
|
1869
|
+
[styles$b.variant2]: ((_b = rules.root) == null ? void 0 : _b.variant) === "variant2"
|
1870
|
+
}),
|
1871
|
+
style: rules.root,
|
1872
|
+
onClick,
|
1873
|
+
children: [o("div", {
|
1874
|
+
className: styles$b.body,
|
1875
|
+
children: [o("div", {
|
1876
|
+
className: styles$b.line,
|
1877
|
+
style: rules.line
|
1878
|
+
}), o("div", {
|
1879
|
+
className: styles$b.bodyInner,
|
1880
|
+
children: [o("div", {
|
1881
|
+
className: styles$b.logo,
|
1882
|
+
style: rules.logo
|
1883
|
+
}), o("div", {
|
1884
|
+
className: styles$b.text,
|
1885
|
+
style: rules.text,
|
1886
|
+
children: o(DisplayText, {
|
1887
|
+
children: (_c = rules.text) == null ? void 0 : _c.children
|
1888
|
+
})
|
1889
|
+
})]
|
1890
|
+
}), o("div", {
|
1891
|
+
className: styles$b.button,
|
1892
|
+
style: rules.button,
|
1893
|
+
children: [o("div", {
|
1894
|
+
className: styles$b.logo,
|
1895
|
+
style: rules.logo
|
1896
|
+
}), o("div", {
|
1897
|
+
className: styles$b.buttonText,
|
1898
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
1899
|
+
})]
|
1900
|
+
})]
|
1901
|
+
}), o("div", {
|
1902
|
+
className: styles$b.legal,
|
1903
|
+
style: rules.legal,
|
1904
|
+
children: (_e = rules.legal) == null ? void 0 : _e.children
|
1905
|
+
})]
|
1906
|
+
});
|
1907
|
+
};
|
1908
|
+
const ComplexGift = () => {
|
1909
|
+
var _a, _b;
|
1910
|
+
const rootRef = _$1(null);
|
1911
|
+
const {
|
1912
|
+
isOpen,
|
1913
|
+
onToggle
|
1914
|
+
} = useGiftOpen();
|
1915
|
+
const state = useCurrentState();
|
1916
|
+
const device = useContainerDevice({
|
1917
|
+
targetRef: rootRef
|
1918
|
+
});
|
1919
|
+
const deviceState = useGetRules(state, device);
|
1920
|
+
const rules = useParseRules(deviceState);
|
1921
|
+
useExtractFonts(deviceState);
|
1922
|
+
const {
|
1923
|
+
hasIcon,
|
1924
|
+
iconRules,
|
1925
|
+
bodyRules,
|
1926
|
+
arrowRules
|
1927
|
+
} = useGiftRules(deviceState, {
|
1928
|
+
fade: styles$c.fadein,
|
1929
|
+
pulse: styles$c.pulse,
|
1930
|
+
wiggle: styles$c.wiggle,
|
1931
|
+
gradient: styles$c.gradient
|
1932
|
+
});
|
1933
|
+
return o("div", {
|
1934
|
+
ref: rootRef,
|
1935
|
+
className: styles$c.root,
|
1936
|
+
children: [o("div", {
|
1937
|
+
className: styles$c.icon,
|
1938
|
+
style: iconRules,
|
1939
|
+
onClick: onToggle,
|
1940
|
+
children: hasIcon && o("div", {
|
1941
|
+
className: styles$c.iconTarget,
|
1942
|
+
children: o(GiftIcon, {})
|
1943
|
+
})
|
1944
|
+
}), o("div", {
|
1945
|
+
className: classNames(styles$c.body, {
|
1946
|
+
[styles$c.bodyOpen]: isOpen
|
1947
|
+
}),
|
1948
|
+
style: bodyRules,
|
1949
|
+
children: [o("div", {
|
1950
|
+
className: styles$c.arrow,
|
1951
|
+
style: arrowRules
|
1952
|
+
}), o("div", {
|
1953
|
+
className: styles$c.container,
|
1954
|
+
style: rules.container,
|
1955
|
+
children: [o("div", {
|
1956
|
+
className: styles$c.close,
|
1957
|
+
style: rules.close,
|
1958
|
+
onClick: onToggle,
|
1959
|
+
children: o(CloseIcon, {})
|
1960
|
+
}), o("div", {
|
1961
|
+
className: styles$c.promotion,
|
1962
|
+
style: rules.promotion,
|
1963
|
+
children: (_a = rules.promotion) == null ? void 0 : _a.children
|
1964
|
+
}), o("div", {
|
1965
|
+
className: styles$c.head,
|
1966
|
+
style: rules.title,
|
1967
|
+
children: [o("div", {
|
1968
|
+
className: styles$c.headIcon,
|
1969
|
+
children: o(GiftIcon, {})
|
1970
|
+
}), o("div", {
|
1971
|
+
className: styles$c.headTitle,
|
1972
|
+
children: (_b = rules.title) == null ? void 0 : _b.children
|
1973
|
+
})]
|
1974
|
+
}), o("div", {
|
1975
|
+
className: styles$c.inner,
|
1976
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
1977
|
+
value: child,
|
1978
|
+
children: o(BonusCard$1, {})
|
1979
|
+
}))
|
1980
|
+
})]
|
1981
|
+
})]
|
1982
|
+
})]
|
1983
|
+
});
|
1984
|
+
};
|
1985
|
+
const index$5 = render(o(ComplexGift, {}));
|
1986
|
+
const root$a = "_root_1bgnc_1";
|
1987
|
+
const laptop$3 = "_laptop_1bgnc_11";
|
1988
|
+
const tablet$2 = "_tablet_1bgnc_11";
|
1989
|
+
const desktop$7 = "_desktop_1bgnc_16";
|
1990
|
+
const body$3 = "_body_1bgnc_21";
|
1991
|
+
const logo$4 = "_logo_1bgnc_32";
|
1992
|
+
const text$2 = "_text_1bgnc_38";
|
1993
|
+
const button$4 = "_button_1bgnc_42";
|
1994
|
+
const legal$3 = "_legal_1bgnc_57";
|
1995
|
+
const styles$a = {
|
1996
|
+
root: root$a,
|
1997
|
+
laptop: laptop$3,
|
1998
|
+
tablet: tablet$2,
|
1999
|
+
desktop: desktop$7,
|
2000
|
+
body: body$3,
|
2001
|
+
logo: logo$4,
|
2002
|
+
text: text$2,
|
2003
|
+
button: button$4,
|
2004
|
+
legal: legal$3
|
2005
|
+
};
|
2006
|
+
const switchTextAlignToFlex = (textAlign) => textAlign ? {
|
2007
|
+
left: "flex-start",
|
2008
|
+
center: "center",
|
2009
|
+
right: "flex-end"
|
2010
|
+
}[textAlign] : textAlign;
|
2011
|
+
const root$9 = "_root_2ic16_1";
|
2012
|
+
const styles$9 = {
|
2013
|
+
root: root$9
|
2014
|
+
};
|
2015
|
+
const Line = () => {
|
2016
|
+
var _a;
|
2017
|
+
const state = useCurrentState();
|
2018
|
+
const rules = useParseRules(state);
|
2019
|
+
return o("div", {
|
2020
|
+
className: styles$9.root,
|
2021
|
+
style: rules.root,
|
2022
|
+
children: o(DisplayText, {
|
2023
|
+
children: (_a = rules == null ? void 0 : rules.root) == null ? void 0 : _a.children
|
2024
|
+
})
|
2025
|
+
});
|
2026
|
+
};
|
2027
|
+
const SimplePopup$2 = () => {
|
2028
|
+
var _a, _b, _c, _d, _e, _f;
|
2029
|
+
const rootRef = _$1(null);
|
2030
|
+
const device = useContainerDevice({
|
2031
|
+
targetRef: rootRef
|
2032
|
+
});
|
2033
|
+
const state = useCurrentState();
|
2034
|
+
const deviceState = useGetRules(state, device);
|
2035
|
+
const onClick = useMetrics(deviceState);
|
2036
|
+
set(deviceState, "button.percent_width", (_a = deviceState == null ? void 0 : deviceState.button) == null ? void 0 : _a.width);
|
2037
|
+
set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
|
2038
|
+
const rules = useParseRules(deviceState);
|
2039
|
+
const bodyRules = {
|
2040
|
+
alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
|
2041
|
+
};
|
2042
|
+
const buttonRules = {
|
2043
|
+
...rules == null ? void 0 : rules.button,
|
2044
|
+
justifyContent: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.textAlign)
|
2045
|
+
};
|
2046
|
+
const legalRules = {
|
2047
|
+
...rules == null ? void 0 : rules.legal,
|
2048
|
+
justifyContent: switchTextAlignToFlex((_e = rules.root) == null ? void 0 : _e.textAlign)
|
2049
|
+
};
|
2050
|
+
return o("a", {
|
2051
|
+
ref: rootRef,
|
2052
|
+
href: (_f = rules.root) == null ? void 0 : _f.offer,
|
2053
|
+
target: "_blank",
|
2054
|
+
rel: "nofollow noopener noreferrer",
|
2055
|
+
className: classNames(styles$a.root, {
|
2056
|
+
[styles$a.desktop]: device === "desktop",
|
2057
|
+
[styles$a.tablet]: device === "tablet",
|
2058
|
+
[styles$a.laptop]: device === "laptop"
|
2059
|
+
}),
|
2060
|
+
style: rules.root,
|
2061
|
+
onClick,
|
2062
|
+
children: o("div", {
|
2063
|
+
className: styles$a.body,
|
2064
|
+
style: bodyRules,
|
2065
|
+
children: [o("div", {
|
2066
|
+
className: styles$a.logo,
|
2067
|
+
style: rules.logo
|
2068
|
+
}), o("div", {
|
2069
|
+
className: styles$a.text,
|
2070
|
+
children: ((rules == null ? void 0 : rules.children) || []).map((el) => o(StateContext, {
|
2071
|
+
value: el,
|
2072
|
+
children: o(Line, {})
|
2073
|
+
}))
|
2074
|
+
}), o("div", {
|
2075
|
+
className: styles$a.button,
|
2076
|
+
style: buttonRules,
|
2077
|
+
children: buttonRules == null ? void 0 : buttonRules.children
|
2078
|
+
}), o("div", {
|
2079
|
+
className: styles$a.legal,
|
2080
|
+
style: legalRules,
|
2081
|
+
children: legalRules == null ? void 0 : legalRules.children
|
2082
|
+
})]
|
2083
|
+
})
|
2084
|
+
});
|
2085
|
+
};
|
2086
|
+
const index$4 = render(o(SimplePopup$2, {}));
|
2087
|
+
const root$8 = "_root_13k8c_1";
|
2088
|
+
const desktop$6 = "_desktop_13k8c_13";
|
2089
|
+
const title$2 = "_title_13k8c_18";
|
2090
|
+
const wrapper$1 = "_wrapper_13k8c_33";
|
2091
|
+
const styles$8 = {
|
2092
|
+
root: root$8,
|
2093
|
+
desktop: desktop$6,
|
2094
|
+
title: title$2,
|
2095
|
+
wrapper: wrapper$1
|
2096
|
+
};
|
2097
|
+
const root$7 = "_root_17kc6_1";
|
2098
|
+
const desktop$5 = "_desktop_17kc6_10";
|
2099
|
+
const header = "_header_17kc6_15";
|
2100
|
+
const logo$3 = "_logo_17kc6_26";
|
2101
|
+
const container = "_container_17kc6_32";
|
2102
|
+
const body$2 = "_body_17kc6_43";
|
2103
|
+
const text$1 = "_text_17kc6_60";
|
2104
|
+
const button$3 = "_button_17kc6_83";
|
2105
|
+
const legal$2 = "_legal_17kc6_101";
|
2106
|
+
const styles$7 = {
|
2107
|
+
root: root$7,
|
2108
|
+
desktop: desktop$5,
|
2109
|
+
header,
|
2110
|
+
logo: logo$3,
|
2111
|
+
container,
|
2112
|
+
body: body$2,
|
2113
|
+
text: text$1,
|
2114
|
+
button: button$3,
|
2115
|
+
legal: legal$2
|
2116
|
+
};
|
2117
|
+
const Bonus$1 = () => {
|
2118
|
+
var _a, _b, _c, _d;
|
2119
|
+
const state = useCurrentState();
|
2120
|
+
const rules = useParseRules(state);
|
2121
|
+
const device = (state == null ? void 0 : state.device) || "desktop";
|
2122
|
+
const onClick = useMetrics(state);
|
2123
|
+
return o("a", {
|
2124
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
2125
|
+
target: "_blank",
|
2126
|
+
rel: "nofollow noopener noreferrer",
|
2127
|
+
className: classNames(styles$7.root, {
|
2128
|
+
[styles$7.desktop]: device === "desktop"
|
2129
|
+
}),
|
2130
|
+
style: omit(rules.root, ...spacingOptions),
|
2131
|
+
onClick,
|
2132
|
+
children: [o("div", {
|
2133
|
+
className: styles$7.header,
|
2134
|
+
style: rules.header,
|
2135
|
+
children: o("div", {
|
2136
|
+
className: styles$7.logo,
|
2137
|
+
style: rules.logo
|
2138
|
+
})
|
2139
|
+
}), o("div", {
|
2140
|
+
className: styles$7.container,
|
2141
|
+
style: pick(rules.root, ...spacingOptions),
|
2142
|
+
children: [o("div", {
|
2143
|
+
className: styles$7.body,
|
2144
|
+
children: [o("div", {
|
2145
|
+
className: styles$7.logo
|
2146
|
+
}), o(DisplayText, {
|
2147
|
+
className: styles$7.text,
|
2148
|
+
style: rules.text,
|
2149
|
+
children: (_b = rules.text) == null ? void 0 : _b.children
|
2150
|
+
})]
|
2151
|
+
}), o("div", {
|
2152
|
+
children: [o("div", {
|
2153
|
+
className: styles$7.button,
|
2154
|
+
style: rules.button,
|
2155
|
+
children: (_c = rules.button) == null ? void 0 : _c.children
|
2156
|
+
}), o("div", {
|
2157
|
+
className: styles$7.legal,
|
2158
|
+
style: rules.legal,
|
2159
|
+
children: (_d = rules.legal) == null ? void 0 : _d.children
|
2160
|
+
})]
|
2161
|
+
})]
|
2162
|
+
})]
|
2163
|
+
});
|
2164
|
+
};
|
2165
|
+
const SimplePopup$1 = () => {
|
2166
|
+
var _a;
|
2167
|
+
const rootRef = _$1(null);
|
2168
|
+
const device = useContainerDevice({
|
2169
|
+
targetRef: rootRef
|
2170
|
+
});
|
2171
|
+
const state = useCurrentState();
|
2172
|
+
const deviceState = useGetRules(state, device);
|
2173
|
+
const rules = useParseRules(deviceState);
|
2174
|
+
useExtractFonts(deviceState);
|
2175
|
+
return o("div", {
|
2176
|
+
ref: rootRef,
|
2177
|
+
className: classNames(styles$8.root, {
|
2178
|
+
[styles$8.desktop]: device === "desktop"
|
2179
|
+
}),
|
2180
|
+
style: rules.root,
|
2181
|
+
children: [o("div", {
|
2182
|
+
className: styles$8.title,
|
2183
|
+
style: rules.title,
|
2184
|
+
children: (_a = rules.title) == null ? void 0 : _a.children
|
2185
|
+
}), o("div", {
|
2186
|
+
className: styles$8.wrapper,
|
2187
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
2188
|
+
value: {
|
2189
|
+
...child,
|
2190
|
+
device
|
2191
|
+
},
|
2192
|
+
children: o(Bonus$1, {})
|
2193
|
+
}))
|
2194
|
+
})]
|
2195
|
+
});
|
2196
|
+
};
|
2197
|
+
const index$3 = render(o(SimplePopup$1, {}));
|
2198
|
+
const root$6 = "_root_i7e17_1";
|
2199
|
+
const laptop$2 = "_laptop_i7e17_11";
|
2200
|
+
const tablet$1 = "_tablet_i7e17_12";
|
2201
|
+
const desktop$4 = "_desktop_i7e17_17";
|
2202
|
+
const body$1 = "_body_i7e17_22";
|
2203
|
+
const head = "_head_i7e17_34";
|
2204
|
+
const title$1 = "_title_i7e17_44";
|
2205
|
+
const logo$2 = "_logo_i7e17_57";
|
2206
|
+
const wrapper = "_wrapper_i7e17_63";
|
2207
|
+
const text = "_text_i7e17_70";
|
2208
|
+
const button$2 = "_button_i7e17_85";
|
2209
|
+
const buttonHead = "_buttonHead_i7e17_100";
|
2210
|
+
const buttonTarget = "_buttonTarget_i7e17_119";
|
2211
|
+
const legal$1 = "_legal_i7e17_135";
|
2212
|
+
const styles$6 = {
|
2213
|
+
root: root$6,
|
2214
|
+
laptop: laptop$2,
|
2215
|
+
tablet: tablet$1,
|
2216
|
+
desktop: desktop$4,
|
2217
|
+
body: body$1,
|
2218
|
+
head,
|
2219
|
+
title: title$1,
|
2220
|
+
logo: logo$2,
|
2221
|
+
wrapper,
|
2222
|
+
text,
|
2223
|
+
button: button$2,
|
2224
|
+
buttonHead,
|
2225
|
+
buttonTarget,
|
2226
|
+
legal: legal$1
|
2227
|
+
};
|
2228
|
+
const root$5 = "_root_10yn9_1";
|
2229
|
+
const left$1 = "_left_10yn9_8";
|
2230
|
+
const desktop$3 = "_desktop_10yn9_15";
|
2231
|
+
const teams = "_teams_10yn9_19";
|
2232
|
+
const logo$1 = "_logo_10yn9_25";
|
2233
|
+
const league = "_league_10yn9_31";
|
2234
|
+
const name = "_name_10yn9_36";
|
2235
|
+
const right$1 = "_right_10yn9_42";
|
2236
|
+
const odd$1 = "_odd_10yn9_53";
|
2237
|
+
const oddLabel$1 = "_oddLabel_10yn9_66";
|
2238
|
+
const oddValue = "_oddValue_10yn9_75";
|
2239
|
+
const team$1 = "_team_10yn9_19";
|
2240
|
+
const teamLogo$1 = "_teamLogo_10yn9_99";
|
2241
|
+
const teamName$1 = "_teamName_10yn9_105";
|
2242
|
+
const styles$5 = {
|
2243
|
+
root: root$5,
|
2244
|
+
left: left$1,
|
2245
|
+
desktop: desktop$3,
|
2246
|
+
teams,
|
2247
|
+
logo: logo$1,
|
2248
|
+
league,
|
2249
|
+
name,
|
2250
|
+
right: right$1,
|
2251
|
+
odd: odd$1,
|
2252
|
+
oddLabel: oddLabel$1,
|
2253
|
+
oddValue,
|
2254
|
+
team: team$1,
|
2255
|
+
teamLogo: teamLogo$1,
|
2256
|
+
teamName: teamName$1
|
2257
|
+
};
|
2258
|
+
const Match = () => {
|
2259
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
2260
|
+
const state = useCurrentState();
|
2261
|
+
const rules = useParseRules(state);
|
2262
|
+
const device = (state == null ? void 0 : state.device) || "desktop";
|
2263
|
+
return o("div", {
|
2264
|
+
className: classNames(styles$5.root, {
|
2265
|
+
[styles$5.desktop]: device === "desktop"
|
2266
|
+
}),
|
2267
|
+
children: [o("div", {
|
2268
|
+
className: styles$5.left,
|
2269
|
+
children: [o("div", {
|
2270
|
+
className: styles$5.teams,
|
2271
|
+
children: [o("div", {
|
2272
|
+
className: styles$5.logo
|
2273
|
+
}), o("div", {
|
2274
|
+
className: styles$5.logo
|
2275
|
+
})]
|
2276
|
+
}), o("div", {
|
2277
|
+
className: styles$5.body,
|
2278
|
+
children: [o("div", {
|
2279
|
+
className: styles$5.league,
|
2280
|
+
style: rules.league,
|
2281
|
+
children: (_a = rules.league) == null ? void 0 : _a.children
|
2282
|
+
}), o("div", {
|
2283
|
+
className: styles$5.name,
|
2284
|
+
style: rules.teams,
|
2285
|
+
children: [(_b = rules.teams) == null ? void 0 : _b.teamA, " — ", (_c = rules.teams) == null ? void 0 : _c.teamB]
|
2286
|
+
})]
|
2287
|
+
})]
|
2288
|
+
}), o("div", {
|
2289
|
+
className: styles$5.right,
|
2290
|
+
children: [o("div", {
|
2291
|
+
className: styles$5.team,
|
2292
|
+
children: [o("div", {
|
2293
|
+
className: styles$5.teamLogo
|
2294
|
+
}), o("div", {
|
2295
|
+
className: styles$5.teamName,
|
2296
|
+
style: rules.teams,
|
2297
|
+
children: (_d = rules.teams) == null ? void 0 : _d.teamA
|
2298
|
+
})]
|
2299
|
+
}), o("div", {
|
2300
|
+
className: styles$5.odd,
|
2301
|
+
children: [o("div", {
|
2302
|
+
className: styles$5.oddLabel,
|
2303
|
+
style: rules.oddLabel,
|
2304
|
+
children: (_e = rules.oddLabel) == null ? void 0 : _e.children
|
2305
|
+
}), o("div", {
|
2306
|
+
className: styles$5.oddValue,
|
2307
|
+
style: rules.oddValue,
|
2308
|
+
children: (_f = rules.oddValue) == null ? void 0 : _f.children
|
2309
|
+
})]
|
2310
|
+
}), o("div", {
|
2311
|
+
className: styles$5.team,
|
2312
|
+
children: [o("div", {
|
2313
|
+
className: styles$5.teamLogo
|
2314
|
+
}), o("div", {
|
2315
|
+
className: styles$5.teamName,
|
2316
|
+
style: rules.teams,
|
2317
|
+
children: (_g = rules.teams) == null ? void 0 : _g.teamB
|
2318
|
+
})]
|
2319
|
+
})]
|
2320
|
+
})]
|
2321
|
+
});
|
2322
|
+
};
|
2323
|
+
const SimplePopup = () => {
|
2324
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
2325
|
+
const rootRef = _$1(null);
|
2326
|
+
const device = useContainerDevice({
|
2327
|
+
targetRef: rootRef
|
2328
|
+
});
|
2329
|
+
const state = useCurrentState();
|
2330
|
+
const deviceState = useGetRules(state, device);
|
2331
|
+
set(deviceState, "buttonWrapper.percent_width", (_a = deviceState == null ? void 0 : deviceState.buttonWrapper) == null ? void 0 : _a.width);
|
2332
|
+
set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
|
2333
|
+
const rules = useParseRules(deviceState);
|
2334
|
+
const onClick = useMetrics(deviceState);
|
2335
|
+
const bodyRules = {
|
2336
|
+
...rules.root,
|
2337
|
+
alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
|
2338
|
+
};
|
2339
|
+
const contentRules = {
|
2340
|
+
...rules.content,
|
2341
|
+
alignItems: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.align)
|
2342
|
+
};
|
2343
|
+
const textRules = {
|
2344
|
+
...rules.text,
|
2345
|
+
textAlign: (_e = rules.root) == null ? void 0 : _e.align
|
2346
|
+
};
|
2347
|
+
const buttonRules = {
|
2348
|
+
...rules == null ? void 0 : rules.button,
|
2349
|
+
justifyContent: switchTextAlignToFlex((_f = rules.root) == null ? void 0 : _f.textAlign)
|
2350
|
+
};
|
2351
|
+
const legalRules = {
|
2352
|
+
...rules == null ? void 0 : rules.legal,
|
2353
|
+
justifyContent: switchTextAlignToFlex((_g = rules.root) == null ? void 0 : _g.textAlign)
|
2354
|
+
};
|
2355
|
+
return o("a", {
|
2356
|
+
ref: rootRef,
|
2357
|
+
href: (_h = rules.root) == null ? void 0 : _h.offer,
|
2358
|
+
target: "_blank",
|
2359
|
+
rel: "nofollow noopener noreferrer",
|
2360
|
+
className: classNames(styles$6.root, {
|
2361
|
+
[styles$6.desktop]: device === "desktop",
|
2362
|
+
[styles$6.laptop]: device === "laptop",
|
2363
|
+
[styles$6.tablet]: device === "tablet"
|
2364
|
+
}),
|
2365
|
+
onClick,
|
2366
|
+
children: o("div", {
|
2367
|
+
className: styles$6.body,
|
2368
|
+
style: bodyRules,
|
2369
|
+
children: [o("div", {
|
2370
|
+
className: styles$6.head,
|
2371
|
+
children: [o("div", {
|
2372
|
+
className: styles$6.title,
|
2373
|
+
style: rules.title,
|
2374
|
+
children: (_i = rules.title) == null ? void 0 : _i.children
|
2375
|
+
}), o("div", {
|
2376
|
+
className: styles$6.logo,
|
2377
|
+
style: rules.logo
|
2378
|
+
})]
|
2379
|
+
}), o("div", {
|
2380
|
+
className: styles$6.wrapper,
|
2381
|
+
style: contentRules,
|
2382
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
2383
|
+
value: {
|
2384
|
+
...child,
|
2385
|
+
device
|
2386
|
+
},
|
2387
|
+
children: o(Match, {})
|
2388
|
+
}))
|
2389
|
+
}), o(DisplayText, {
|
2390
|
+
className: styles$6.text,
|
2391
|
+
style: textRules,
|
2392
|
+
children: (_j = rules.text) == null ? void 0 : _j.children
|
2393
|
+
}), o("div", {
|
2394
|
+
className: styles$6.button,
|
2395
|
+
style: rules.buttonWrapper,
|
2396
|
+
children: [o("div", {
|
2397
|
+
className: styles$6.buttonHead,
|
2398
|
+
style: rules.buttonHead,
|
2399
|
+
children: (_k = rules.buttonHead) == null ? void 0 : _k.children
|
2400
|
+
}), o("div", {
|
2401
|
+
className: styles$6.buttonTarget,
|
2402
|
+
style: buttonRules,
|
2403
|
+
children: (_l = rules.button) == null ? void 0 : _l.children
|
2404
|
+
})]
|
2405
|
+
}), o("div", {
|
2406
|
+
className: styles$6.legal,
|
2407
|
+
style: legalRules,
|
2408
|
+
children: (_m = rules.legal) == null ? void 0 : _m.children
|
2409
|
+
})]
|
2410
|
+
})
|
2411
|
+
});
|
2412
|
+
};
|
2413
|
+
const index$2 = render(o(SimplePopup, {}));
|
2414
|
+
const root$4 = "_root_1slvw_1";
|
2415
|
+
const background$1 = "_background_1slvw_20";
|
2416
|
+
const body = "_body_1slvw_29";
|
2417
|
+
const bookmaker = "_bookmaker_1slvw_39";
|
2418
|
+
const button$1 = "_button_1slvw_46";
|
2419
|
+
const rowFirst = "_rowFirst_1slvw_60";
|
2420
|
+
const rowSecond = "_rowSecond_1slvw_66";
|
2421
|
+
const legal = "_legal_1slvw_72";
|
2422
|
+
const legalText = "_legalText_1slvw_88";
|
2423
|
+
const legalOpen = "_legalOpen_1slvw_98";
|
2424
|
+
const legalButton = "_legalButton_1slvw_103";
|
2425
|
+
const styles$4 = {
|
2426
|
+
root: root$4,
|
2427
|
+
background: background$1,
|
2428
|
+
body,
|
2429
|
+
bookmaker,
|
2430
|
+
button: button$1,
|
2431
|
+
rowFirst,
|
2432
|
+
rowSecond,
|
2433
|
+
legal,
|
2434
|
+
legalText,
|
2435
|
+
legalOpen,
|
2436
|
+
legalButton
|
2437
|
+
};
|
2438
|
+
const Bonus = () => {
|
2439
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
2440
|
+
const state = useCurrentState();
|
2441
|
+
const rules = useParseRules(state);
|
2442
|
+
const [isOpen, toggleIsOpen] = useToggle();
|
2443
|
+
const onClick = useMetrics(state);
|
2444
|
+
return o("div", {
|
2445
|
+
className: styles$4.root,
|
2446
|
+
style: rules.root,
|
2447
|
+
children: [o("div", {
|
2448
|
+
className: styles$4.background,
|
2449
|
+
style: rules.background
|
2450
|
+
}), o("a", {
|
2451
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
2452
|
+
target: "_blank",
|
2453
|
+
rel: "nofollow noopener noreferrer",
|
2454
|
+
className: styles$4.body,
|
2455
|
+
onClick,
|
2456
|
+
children: [o("div", {
|
2457
|
+
children: [o("div", {
|
2458
|
+
className: styles$4.rowFirst,
|
2459
|
+
style: rules.rowFirst,
|
2460
|
+
children: (_b = rules.rowFirst) == null ? void 0 : _b.children
|
2461
|
+
}), o("div", {
|
2462
|
+
className: styles$4.rowSecond,
|
2463
|
+
style: rules.rowSecond,
|
2464
|
+
children: (_c = rules.rowSecond) == null ? void 0 : _c.children
|
2465
|
+
}), o("div", {
|
2466
|
+
className: styles$4.bookmaker,
|
2467
|
+
children: "winline"
|
2468
|
+
})]
|
2469
|
+
}), o("div", {
|
2470
|
+
className: styles$4.button,
|
2471
|
+
style: rules.button,
|
2472
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
2473
|
+
})]
|
2474
|
+
}), o("div", {
|
2475
|
+
className: classNames(styles$4.legal, {
|
2476
|
+
[styles$4.legalOpen]: isOpen
|
2477
|
+
}),
|
2478
|
+
style: rules.legalInfo,
|
2479
|
+
children: o("span", {
|
2480
|
+
className: styles$4.legalText,
|
2481
|
+
children: [o("span", {
|
2482
|
+
children: (_e = rules.legalInfo) == null ? void 0 : _e.children
|
2483
|
+
}), o("span", {
|
2484
|
+
className: styles$4.legalButton,
|
2485
|
+
style: rules.legalInfoButton,
|
2486
|
+
onClick: toggleIsOpen,
|
2487
|
+
children: isOpen ? (_f = rules.legalInfoButton) == null ? void 0 : _f.openText : (_g = rules.legalInfoButton) == null ? void 0 : _g.closeText
|
2488
|
+
})]
|
2489
|
+
})
|
2490
|
+
})]
|
2491
|
+
});
|
2492
|
+
};
|
2493
|
+
const BonusCard = () => {
|
2494
|
+
const rootRef = _$1(null);
|
2495
|
+
const state = useCurrentState();
|
2496
|
+
const device = "desktop";
|
2497
|
+
const deviceState = useGetRules(state, device);
|
2498
|
+
const rules = useParseRules(deviceState);
|
2499
|
+
return o("div", {
|
2500
|
+
ref: rootRef,
|
2501
|
+
children: ((rules == null ? void 0 : rules.children) || []).map((child) => o(StateContext, {
|
2502
|
+
value: child,
|
2503
|
+
children: o(Bonus, {})
|
2504
|
+
}))
|
2505
|
+
});
|
2506
|
+
};
|
2507
|
+
const index$1 = render(o(BonusCard, {}));
|
2508
|
+
const root$3 = "_root_a3kem_1";
|
2509
|
+
const desktop$2 = "_desktop_a3kem_13";
|
2510
|
+
const laptop$1 = "_laptop_a3kem_14";
|
2511
|
+
const promotion = "_promotion_a3kem_18";
|
2512
|
+
const background = "_background_a3kem_34";
|
2513
|
+
const content = "_content_a3kem_43";
|
2514
|
+
const variant2 = "_variant2_a3kem_56";
|
2515
|
+
const logo = "_logo_a3kem_60";
|
2516
|
+
const left = "_left_a3kem_72";
|
2517
|
+
const center = "_center_a3kem_86";
|
2518
|
+
const slide = "_slide_a3kem_92";
|
2519
|
+
const slide_animated_default = "_slide_animated_default_a3kem_106";
|
2520
|
+
const right = "_right_a3kem_116";
|
2521
|
+
const buttonWrapper = "_buttonWrapper_a3kem_131";
|
2522
|
+
const button = "_button_a3kem_131";
|
2523
|
+
const button_animated = "_button_animated_a3kem_162";
|
2524
|
+
const increase = "_increase_a3kem_1";
|
2525
|
+
const styles$3 = {
|
2526
|
+
root: root$3,
|
2527
|
+
desktop: desktop$2,
|
2528
|
+
laptop: laptop$1,
|
2529
|
+
promotion,
|
2530
|
+
background,
|
2531
|
+
content,
|
2532
|
+
variant2,
|
2533
|
+
logo,
|
2534
|
+
left,
|
2535
|
+
center,
|
2536
|
+
slide,
|
2537
|
+
slide_animated_default,
|
2538
|
+
"fade-in-out": "_fade-in-out_a3kem_1",
|
2539
|
+
"slide_animated_bottom-top": "_slide_animated_bottom-top_a3kem_109",
|
2540
|
+
"fade-in-bottom-out-top": "_fade-in-bottom-out-top_a3kem_1",
|
2541
|
+
"slide_animated_top-bottom": "_slide_animated_top-bottom_a3kem_112",
|
2542
|
+
right,
|
2543
|
+
buttonWrapper,
|
2544
|
+
button,
|
2545
|
+
button_animated,
|
2546
|
+
increase,
|
2547
|
+
"fade-in-top-out-bottom": "_fade-in-top-out-bottom_a3kem_1"
|
2548
|
+
};
|
2549
|
+
const root$2 = "_root_1cgtj_1";
|
2550
|
+
const desktop$1 = "_desktop_1cgtj_19";
|
2551
|
+
const styles$2 = {
|
2552
|
+
root: root$2,
|
2553
|
+
desktop: desktop$1
|
2554
|
+
};
|
2555
|
+
const Text = () => {
|
2556
|
+
var _a;
|
2557
|
+
const state = useCurrentState();
|
2558
|
+
const rules = useParseRules(state);
|
2559
|
+
return o("div", {
|
2560
|
+
className: classNames(styles$2.root, {
|
2561
|
+
[styles$2.desktop]: (state == null ? void 0 : state.device) === "desktop"
|
2562
|
+
}),
|
2563
|
+
style: omit(rules.root, ...backgroundOptions),
|
2564
|
+
children: (_a = rules.root) == null ? void 0 : _a.children
|
2565
|
+
});
|
2566
|
+
};
|
2567
|
+
const root$1 = "_root_vjs41_1";
|
2568
|
+
const odd = "_odd_vjs41_7";
|
2569
|
+
const oddReverse = "_oddReverse_vjs41_14";
|
2570
|
+
const oddLabel = "_oddLabel_vjs41_18";
|
2571
|
+
const oddLogo = "_oddLogo_vjs41_30";
|
2572
|
+
const coef = "_coef_vjs41_36";
|
2573
|
+
const coefHead = "_coefHead_vjs41_42";
|
2574
|
+
const coefValue = "_coefValue_vjs41_47";
|
2575
|
+
const styles$1 = {
|
2576
|
+
root: root$1,
|
2577
|
+
odd,
|
2578
|
+
oddReverse,
|
2579
|
+
oddLabel,
|
2580
|
+
oddLogo,
|
2581
|
+
coef,
|
2582
|
+
coefHead,
|
2583
|
+
coefValue
|
2584
|
+
};
|
2585
|
+
const Matches = () => {
|
2586
|
+
var _a, _b, _c;
|
2587
|
+
const state = useCurrentState();
|
2588
|
+
const rules = useParseRules(state);
|
2589
|
+
const rootRules = omit(rules.root, ...backgroundOptions);
|
2590
|
+
return o("div", {
|
2591
|
+
className: styles$1.root,
|
2592
|
+
children: [o("div", {
|
2593
|
+
className: styles$1.odd,
|
2594
|
+
children: [o("div", {
|
2595
|
+
className: styles$1.oddLogo,
|
2596
|
+
style: rootRules
|
2597
|
+
}), o("div", {
|
2598
|
+
className: styles$1.oddLabel,
|
2599
|
+
style: rootRules,
|
2600
|
+
children: (_a = rules.root) == null ? void 0 : _a.valueOne
|
2601
|
+
})]
|
2602
|
+
}), o("div", {
|
2603
|
+
className: styles$1.coef,
|
2604
|
+
children: [o("div", {
|
2605
|
+
className: styles$1.coefHead,
|
2606
|
+
style: rules.coef,
|
2607
|
+
children: "X"
|
2608
|
+
}), o("div", {
|
2609
|
+
className: styles$1.coefValue,
|
2610
|
+
style: rootRules,
|
2611
|
+
children: (_b = rules.root) == null ? void 0 : _b.valueX
|
2612
|
+
})]
|
2613
|
+
}), o("div", {
|
2614
|
+
className: classNames(styles$1.odd, styles$1.oddReverse),
|
2615
|
+
children: [o("div", {
|
2616
|
+
className: styles$1.oddLogo,
|
2617
|
+
style: rootRules
|
2618
|
+
}), o("div", {
|
2619
|
+
className: styles$1.oddLabel,
|
2620
|
+
style: rootRules,
|
2621
|
+
children: (_c = rules.root) == null ? void 0 : _c.valueTwo
|
2622
|
+
})]
|
2623
|
+
})]
|
2624
|
+
});
|
2625
|
+
};
|
2626
|
+
const root = "_root_1va5h_1";
|
2627
|
+
const title = "_title_1va5h_8";
|
2628
|
+
const titleLabel = "_titleLabel_1va5h_12";
|
2629
|
+
const tablet = "_tablet_1va5h_16";
|
2630
|
+
const desktop = "_desktop_1va5h_19";
|
2631
|
+
const laptop = "_laptop_1va5h_19";
|
2632
|
+
const titleValue = "_titleValue_1va5h_23";
|
2633
|
+
const team = "_team_1va5h_34";
|
2634
|
+
const teamLogo = "_teamLogo_1va5h_44";
|
2635
|
+
const teamName = "_teamName_1va5h_72";
|
2636
|
+
const teamValue = "_teamValue_1va5h_84";
|
2637
|
+
const styles = {
|
2638
|
+
root,
|
2639
|
+
title,
|
2640
|
+
titleLabel,
|
2641
|
+
tablet,
|
2642
|
+
desktop,
|
2643
|
+
laptop,
|
2644
|
+
titleValue,
|
2645
|
+
team,
|
2646
|
+
teamLogo,
|
2647
|
+
teamName,
|
2648
|
+
teamValue
|
2649
|
+
};
|
2650
|
+
const MatchesOneTwo = () => {
|
2651
|
+
const state = useCurrentState();
|
2652
|
+
const rules = useParseRules(state);
|
2653
|
+
return o("div", {
|
2654
|
+
className: classNames(styles.root, {
|
2655
|
+
[styles.desktop]: (state == null ? void 0 : state.device) === "desktop",
|
2656
|
+
[styles.laptop]: (state == null ? void 0 : state.device) === "laptop",
|
2657
|
+
[styles.tablet]: (state == null ? void 0 : state.device) === "tablet"
|
2658
|
+
}),
|
2659
|
+
style: omit(rules.root, ...backgroundOptions),
|
2660
|
+
children: [o("div", {
|
2661
|
+
className: styles.title,
|
2662
|
+
children: [o("div", {
|
2663
|
+
className: styles.titleLabel,
|
2664
|
+
style: rules.titleLabel,
|
2665
|
+
children: rules.titleLabel.children
|
2666
|
+
}), o("div", {
|
2667
|
+
className: styles.titleValue,
|
2668
|
+
style: rules.titleValue,
|
2669
|
+
children: rules.titleValue.children
|
2670
|
+
})]
|
2671
|
+
}), o("div", {
|
2672
|
+
children: [o("div", {
|
2673
|
+
className: styles.team,
|
2674
|
+
children: [o("div", {
|
2675
|
+
className: styles.teamLogo,
|
2676
|
+
style: rules.logo
|
2677
|
+
}), o("div", {
|
2678
|
+
className: styles.teamName,
|
2679
|
+
style: rules.teamName,
|
2680
|
+
children: rules.team1Name.children
|
2681
|
+
}), o("div", {
|
2682
|
+
className: styles.teamValue,
|
2683
|
+
style: rules.value,
|
2684
|
+
children: rules.value1.children
|
2685
|
+
})]
|
2686
|
+
}), o("div", {
|
2687
|
+
className: styles.team,
|
2688
|
+
children: [o("div", {
|
2689
|
+
className: styles.teamLogo,
|
2690
|
+
style: rules.logo
|
2691
|
+
}), o("div", {
|
2692
|
+
className: styles.teamName,
|
2693
|
+
style: rules.teamName,
|
2694
|
+
children: rules.team2Name.children
|
2695
|
+
}), o("div", {
|
2696
|
+
className: styles.teamValue,
|
2697
|
+
style: rules.value,
|
2698
|
+
children: rules.value2.children
|
2699
|
+
})]
|
2700
|
+
})]
|
2701
|
+
})]
|
2702
|
+
});
|
2703
|
+
};
|
2704
|
+
const useAnimatedList = (slides = []) => {
|
2705
|
+
var _a;
|
2706
|
+
const itemsCount = slides.length;
|
2707
|
+
const [animatedIdx, setAnimatedIdx] = h(0);
|
2708
|
+
const animationDuration = (_a = slides[animatedIdx || 0]) == null ? void 0 : _a.animationDuration;
|
2709
|
+
p(() => {
|
2710
|
+
const goNext = () => {
|
2711
|
+
setAnimatedIdx((index2) => {
|
2712
|
+
if (index2 + 1 < itemsCount)
|
2713
|
+
return index2 + 1;
|
2714
|
+
return 0;
|
2715
|
+
});
|
2716
|
+
};
|
2717
|
+
const timeout = setTimeout(goNext, animationDuration);
|
2718
|
+
return () => clearTimeout(timeout);
|
2719
|
+
}, [setAnimatedIdx, itemsCount, animationDuration, animatedIdx]);
|
2720
|
+
return animatedIdx;
|
2721
|
+
};
|
2722
|
+
const DEFAULT_ANIMATION_SPEED = 3700;
|
2723
|
+
const WideCard = () => {
|
2724
|
+
var _a, _b, _c, _d, _e;
|
2725
|
+
const rootRef = _$1(null);
|
2726
|
+
const state = useCurrentState();
|
2727
|
+
const device = useContainerDevice({
|
2728
|
+
targetRef: rootRef
|
2729
|
+
});
|
2730
|
+
const deviceState = useGetRules(state, device);
|
2731
|
+
const rules = useParseRules(deviceState);
|
2732
|
+
const onClick = useMetrics(deviceState);
|
2733
|
+
const getChild = (name2) => ({
|
2734
|
+
text: o(Text, {}),
|
2735
|
+
matches: o(Matches, {}),
|
2736
|
+
matchesOneTwo: o(MatchesOneTwo, {})
|
2737
|
+
})[name2];
|
2738
|
+
const slidesList = (rules.children || []).filter(Boolean).map((slide2) => {
|
2739
|
+
var _a2, _b2;
|
2740
|
+
return {
|
2741
|
+
...slide2,
|
2742
|
+
animationName: (_a2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _a2.animationName,
|
2743
|
+
animationDuration: ((_b2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _b2.animationDuration) || DEFAULT_ANIMATION_SPEED
|
2744
|
+
};
|
2745
|
+
});
|
2746
|
+
const currentSlide = useAnimatedList(slidesList);
|
2747
|
+
const slideRules = useParseRules(slidesList[currentSlide] || {});
|
2748
|
+
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);
|
2749
|
+
return o("a", {
|
2750
|
+
ref: rootRef,
|
2751
|
+
href: (_b = rules.root) == null ? void 0 : _b.offer,
|
2752
|
+
target: "_blank",
|
2753
|
+
rel: "nofollow noopener noreferrer",
|
2754
|
+
className: classNames(styles$3.root, {
|
2755
|
+
[styles$3.desktop]: device === "desktop",
|
2756
|
+
[styles$3.laptop]: device === "laptop",
|
2757
|
+
[styles$3.tablet]: device === "tablet",
|
2758
|
+
[styles$3.variant2]: ((_c = rules.root) == null ? void 0 : _c.variant) === "variant2"
|
2759
|
+
}),
|
2760
|
+
style: rules.root,
|
2761
|
+
onClick,
|
2762
|
+
children: [o("div", {
|
2763
|
+
className: styles$3.background,
|
2764
|
+
style: backgroundRules
|
2765
|
+
}), o("div", {
|
2766
|
+
className: styles$3.promotion,
|
2767
|
+
style: rules.promotion,
|
2768
|
+
children: (_d = rules.promotion) == null ? void 0 : _d.children
|
2769
|
+
}), o("div", {
|
2770
|
+
className: styles$3.content,
|
2771
|
+
children: [o("div", {
|
2772
|
+
className: styles$3.left,
|
2773
|
+
children: o("div", {
|
2774
|
+
className: styles$3.logo,
|
2775
|
+
style: rules.logo
|
2776
|
+
})
|
2777
|
+
}), o("div", {
|
2778
|
+
className: styles$3.center,
|
2779
|
+
children: (rules.children || []).map((child, index2) => {
|
2780
|
+
var _a2, _b2;
|
2781
|
+
return o("div", {
|
2782
|
+
className: styles$3.slide,
|
2783
|
+
style: {
|
2784
|
+
animationName: currentSlide === index2 ? styles$3[((_a2 = child.root) == null ? void 0 : _a2.animationName) || "fade-in-out"] : "none",
|
2785
|
+
animationDuration: `${(_b2 = child.root) == null ? void 0 : _b2.animationDuration}ms`
|
2786
|
+
},
|
2787
|
+
children: o(StateContext, {
|
2788
|
+
value: {
|
2789
|
+
...child,
|
2790
|
+
device
|
2791
|
+
},
|
2792
|
+
children: getChild(child.name)
|
2793
|
+
})
|
2794
|
+
});
|
2795
|
+
})
|
2796
|
+
}), o("div", {
|
2797
|
+
className: styles$3.right,
|
2798
|
+
children: [o("div", {
|
2799
|
+
className: styles$3.logo,
|
2800
|
+
style: rules.logo
|
2801
|
+
}), o("div", {
|
2802
|
+
className: styles$3.buttonWrapper,
|
2803
|
+
children: o("div", {
|
2804
|
+
className: styles$3.button,
|
2805
|
+
style: rules.button,
|
2806
|
+
children: [o("div", {
|
2807
|
+
className: styles$3.logo,
|
2808
|
+
style: rules.logo
|
2809
|
+
}), (_e = rules.button) == null ? void 0 : _e.children]
|
2810
|
+
})
|
2811
|
+
})]
|
2812
|
+
})]
|
2813
|
+
})]
|
2814
|
+
});
|
2815
|
+
};
|
2816
|
+
const index = render(o(WideCard, {}));
|
2817
|
+
export {
|
2818
|
+
index$1 as BonusCard,
|
2819
|
+
index$5 as ComplexGift,
|
2820
|
+
index$3 as ComplexPopup,
|
2821
|
+
index$2 as ExpressPopup,
|
2822
|
+
index$6 as SimpleGift,
|
2823
|
+
index$4 as SimplePopup,
|
2824
|
+
index as WideCard
|
2825
|
+
};
|
2826
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgbmF0aXZlQ29kZVN0cmluZyA9ICdbbmF0aXZlIGNvZGVdJztcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPW4uX19iLGE9bi5fX3Isdj1uLmRpZmZlZCxsPW4uX19jLG09bi51bm1vdW50O2Z1bmN0aW9uIGQodCx1KXtuLl9faCYmbi5fX2gocix0LG98fHUpLG89MDt2YXIgaT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gdD49aS5fXy5sZW5ndGgmJmkuX18ucHVzaCh7X19WOmN9KSxpLl9fW3RdfWZ1bmN0aW9uIGgobil7cmV0dXJuIG89MSxzKEIsbil9ZnVuY3Rpb24gcyhuLHUsaSl7dmFyIG89ZCh0KyssMik7aWYoby50PW4sIW8uX19jJiYoby5fXz1baT9pKHUpOkIodm9pZCAwLHUpLGZ1bmN0aW9uKG4pe3ZhciB0PW8uX19OP28uX19OWzBdOm8uX19bMF0scj1vLnQodCxuKTt0IT09ciYmKG8uX19OPVtyLG8uX19bMV1dLG8uX19jLnNldFN0YXRlKHt9KSl9XSxvLl9fYz1yLCFyLnUpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT0hMTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksISghaSYmby5fX2MucHJvcHM9PT1uKSYmKCFjfHxjLmNhbGwodGhpcyxuLHQscikpfTtyLnU9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBwKHUsaSl7dmFyIG89ZCh0KyssMyk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19ILl9faC5wdXNoKG8pKX1mdW5jdGlvbiB5KHUsaSl7dmFyIG89ZCh0KyssNCk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19oLnB1c2gobykpfWZ1bmN0aW9uIF8obil7cmV0dXJuIG89NSxGKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBBKG4sdCxyKXtvPTYseShmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KG4odCgpKSxmdW5jdGlvbigpe3JldHVybiBuKG51bGwpfSk6bj8obi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBGKG4scil7dmFyIHU9ZCh0KyssNyk7cmV0dXJuIHoodS5fX0gscik/KHUuX19WPW4oKSx1Lmk9cix1Ll9faD1uLHUuX19WKTp1Ll9ffWZ1bmN0aW9uIFQobix0KXtyZXR1cm4gbz04LEYoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24gcShuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9ZCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIHgodCxyKXtuLnVzZURlYnVnVmFsdWUmJm4udXNlRGVidWdWYWx1ZShyP3IodCk6dCl9ZnVuY3Rpb24gUChuKXt2YXIgdT1kKHQrKywxMCksaT1oKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBWKCl7dmFyIG49ZCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGIoKXtmb3IodmFyIHQ7dD1mLnNoaWZ0KCk7KWlmKHQuX19QJiZ0Ll9fSCl0cnl7dC5fX0guX19oLmZvckVhY2goayksdC5fX0guX19oLmZvckVhY2godyksdC5fX0guX19oPVtdfWNhdGNoKHIpe3QuX19ILl9faD1bXSxuLl9fZShyLHQuX192KX19bi5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LG4uX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goayksaS5fX2guZm9yRWFjaCh3KSxpLl9faD1bXSkpLHU9cn0sbi5kaWZmZWQ9ZnVuY3Rpb24odCl7diYmdih0KTt2YXIgbz10Ll9fYztvJiZvLl9fSCYmKG8uX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKG8pJiZpPT09bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGopKGIpKSxvLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaSYmKG4uX19IPW4uaSksbi5fX1YhPT1jJiYobi5fXz1uLl9fViksbi5pPXZvaWQgMCxuLl9fVj1jfSkpLHU9cj1udWxsfSxuLl9fYz1mdW5jdGlvbih0LHIpe3Iuc29tZShmdW5jdGlvbih0KXt0cnl7dC5fX2guZm9yRWFjaChrKSx0Ll9faD10Ll9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fHcobil9KX1jYXRjaCh1KXtyLnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSxyPVtdLG4uX19lKHUsdC5fX3YpfX0pLGwmJmwodCxyKX0sbi51bm1vdW50PWZ1bmN0aW9uKHQpe20mJm0odCk7dmFyIHIsdT10Ll9fYzt1JiZ1Ll9fSCYmKHUuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7dHJ5e2sobil9Y2F0Y2gobil7cj1ufX0pLHUuX19IPXZvaWQgMCxyJiZuLl9fZShyLHUuX192KSl9O3ZhciBnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiBqKG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksZyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMTAwKTtnJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIGsobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gdyhuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24geihuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBCKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e1QgYXMgdXNlQ2FsbGJhY2sscSBhcyB1c2VDb250ZXh0LHggYXMgdXNlRGVidWdWYWx1ZSxwIGFzIHVzZUVmZmVjdCxQIGFzIHVzZUVycm9yQm91bmRhcnksViBhcyB1c2VJZCxBIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUseSBhcyB1c2VMYXlvdXRFZmZlY3QsRiBhcyB1c2VNZW1vLHMgYXMgdXNlUmVkdWNlcixfIGFzIHVzZVJlZixoIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtDb21wb25lbnQgYXMgbixjcmVhdGVFbGVtZW50IGFzIHQsb3B0aW9ucyBhcyBlLHRvQ2hpbGRBcnJheSBhcyByLEZyYWdtZW50IGFzIHUscmVuZGVyIGFzIG8saHlkcmF0ZSBhcyBpLGNyZWF0ZUNvbnRleHQgYXMgbCxjcmVhdGVSZWYgYXMgYyxjbG9uZUVsZW1lbnQgYXMgZn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7Q29tcG9uZW50LEZyYWdtZW50LGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlSWQgYXMgcyx1c2VSZWR1Y2VyIGFzIGgsdXNlRWZmZWN0IGFzIHYsdXNlTGF5b3V0RWZmZWN0IGFzIGQsdXNlUmVmIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyBtLHVzZU1lbW8gYXMgeSx1c2VDYWxsYmFjayBhcyBfLHVzZUNvbnRleHQgYXMgYix1c2VEZWJ1Z1ZhbHVlIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gQyhuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBFKG4sdCl7cmV0dXJuIG49PT10JiYoMCE9PW58fDEvbj09MS90KXx8biE9biYmdCE9dH1mdW5jdGlvbiB3KG4pe3RoaXMucHJvcHM9bn1mdW5jdGlvbiB4KG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZixyPXQ9PW4ucmVmO3JldHVybiFyJiZ0JiYodC5jYWxsP3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8IXI6Qyh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUuX19mPSEwLHV9KHcucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx3LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gQyh0aGlzLnByb3BzLG4pfHxDKHRoaXMuc3RhdGUsdCl9O3ZhciBSPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxSJiZSKG4pfTt2YXIgTj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gayhuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPU4sdC5yZW5kZXI9dCx0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEE9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxPPXttYXA6QSxmb3JFYWNoOkEsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LFQ9ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO1Qobix0LGUscil9O3ZhciBJPWUudW5tb3VudDtmdW5jdGlvbiBMKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEwobix0LGUpfSkpLG59ZnVuY3Rpb24gVShuLHQsZSl7cmV0dXJuIG4mJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFUobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5pbnNlcnRCZWZvcmUobi5fX2Usbi5fX2QpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gRCgpe3RoaXMuX191PTAsdGhpcy50PW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBGKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24gTShuKXt2YXIgZSxyLHU7ZnVuY3Rpb24gbyhvKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7cj1uLmRlZmF1bHR8fG59LGZ1bmN0aW9uKG4pe3U9bn0pLHUpdGhyb3cgdTtpZighcil0aHJvdyBlO3JldHVybiB0KHIsbyl9cmV0dXJuIG8uZGlzcGxheU5hbWU9XCJMYXp5XCIsby5fX2Y9ITAsb31mdW5jdGlvbiBWKCl7dGhpcy51PW51bGwsdGhpcy5vPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJnQuX19SJiZ0Ll9fUigpLHQmJiEwPT09bi5fX2gmJihuLnR5cGU9bnVsbCksSSYmSShuKX0sKEQucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci50JiYoci50PVtdKSxyLnQucHVzaChlKTt2YXIgdT1GKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHwobz0hMCxlLl9fUj1udWxsLHU/dShsKTpsKCkpfTtlLl9fUj1pO3ZhciBsPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VShuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci50LnBvcCgpOyl0LmZvcmNlVXBkYXRlKCl9fSxjPSEwPT09dC5fX2g7ci5fX3UrK3x8Y3x8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxELnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMudD1bXX0sRC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUwodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9faD1udWxsKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIFc9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4uby5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4uby5zaXplKSlmb3IoZT1uLnU7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLnU9ZT1lWzJdfX07ZnVuY3Rpb24gUChuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIGoobil7dmFyIGU9dGhpcyxyPW4uaTtlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUubCksZS5sPW51bGwsZS5pPW51bGx9LGUuaSYmZS5pIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLG4uX192PyhlLmx8fChlLmk9cixlLmw9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaS5yZW1vdmVDaGlsZChuKX19KSxvKHQoUCx7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLmwpKTplLmwmJmUuY29tcG9uZW50V2lsbFVubW91bnQoKX1mdW5jdGlvbiB6KG4sZSl7dmFyIHI9dChqLHtfX3Y6bixpOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oVi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9Rih0Ll9fdikscj10Lm8uZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksVyh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LFYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLnU9bnVsbCx0aGlzLm89bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5vLnNldCh0W2VdLHRoaXMudT1bMSwwLHRoaXMudV0pO3JldHVybiBuLmNoaWxkcmVufSxWLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Vi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7VyhuLGUsdCl9KX07dmFyIEI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEg9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFk9L1tBLVowLTldL2csJD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQscT1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBHKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIEoobix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIEs9ZS5ldmVudDtmdW5jdGlvbiBRKCl7fWZ1bmN0aW9uIFgoKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfWUuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIEsmJihuPUsobikpLG4ucGVyc2lzdD1RLG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9WCxuLmlzRGVmYXVsdFByZXZlbnRlZD1ubixuLm5hdGl2ZUV2ZW50PW59O3ZhciB0bixlbj17ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxybj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9O2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dO2lmKCEoXCJ2YWx1ZVwiPT09byYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWl8fCQmJlwiY2hpbGRyZW5cIj09PW8mJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PW98fFwiY2xhc3NOYW1lXCI9PT1vKSl7dmFyIGw9by50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1vJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP289XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PW8mJiEwPT09aT9pPVwiXCI6XCJvbmRvdWJsZWNsaWNrXCI9PT1sP289XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09bHx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8cSh0LnR5cGUpP1wib25mb2N1c1wiPT09bD9vPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWw/bz1cIm9uZm9jdXNvdXRcIjpaLnRlc3Qobyk/bz1sOi0xPT09ZS5pbmRleE9mKFwiLVwiKSYmSC50ZXN0KG8pP289by5yZXBsYWNlKFksXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09aSYmKGk9dm9pZCAwKTpsPW89XCJvbmlucHV0XCIsXCJvbmlucHV0XCI9PT1sJiZ1W289bF0mJihvPVwib25pbnB1dENhcHR1cmVcIiksdVtvXT1pfX1cInNlbGVjdFwiPT1lJiZ1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLFwic2VsZWN0XCI9PWUmJm51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsZW4pKToodC5jbGFzc05hbWUmJiF0LmNsYXNzfHx0LmNsYXNzJiZ0LmNsYXNzTmFtZSkmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9QixybiYmcm4obil9O3ZhciB1bj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXt1biYmdW4obiksdG49bi5fX2N9O3ZhciBvbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtvbiYmb24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSx0bj1udWxsfTt2YXIgbG49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiB0bi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfX19fSxjbj1cIjE3LjAuMlwiO2Z1bmN0aW9uIGZuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBhbihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1CfWZ1bmN0aW9uIHNuKG4pe3JldHVybiBhbihuKT9mLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIGRuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LHBuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LG1uPXU7ZnVuY3Rpb24geW4obil7bigpfWZ1bmN0aW9uIF9uKG4pe3JldHVybiBufWZ1bmN0aW9uIGJuKCl7cmV0dXJuWyExLHluXX12YXIgU249ZDtmdW5jdGlvbiBnbihuLHQpe3ZhciBlPXQoKSxyPWEoe2g6e19fOmUsdjp0fX0pLHU9clswXS5oLG89clsxXTtyZXR1cm4gZChmdW5jdGlvbigpe3UuX189ZSx1LnY9dCxFKHUuX18sdCgpKXx8byh7aDp1fSl9LFtuLGUsdF0pLHYoZnVuY3Rpb24oKXtyZXR1cm4gRSh1Ll9fLHUudigpKXx8byh7aDp1fSksbihmdW5jdGlvbigpe0UodS5fXyx1LnYoKSl8fG8oe2g6dX0pfSl9LFtuXSksZX12YXIgQ249e3VzZVN0YXRlOmEsdXNlSWQ6cyx1c2VSZWR1Y2VyOmgsdXNlRWZmZWN0OnYsdXNlTGF5b3V0RWZmZWN0OmQsdXNlSW5zZXJ0aW9uRWZmZWN0OlNuLHVzZVRyYW5zaXRpb246Ym4sdXNlRGVmZXJyZWRWYWx1ZTpfbix1c2VTeW5jRXh0ZXJuYWxTdG9yZTpnbixzdGFydFRyYW5zaXRpb246eW4sdXNlUmVmOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTptLHVzZU1lbW86eSx1c2VDYWxsYmFjazpfLHVzZUNvbnRleHQ6Yix1c2VEZWJ1Z1ZhbHVlOlMsdmVyc2lvbjpcIjE3LjAuMlwiLENoaWxkcmVuOk8scmVuZGVyOkcsaHlkcmF0ZTpKLHVubW91bnRDb21wb25lbnRBdE5vZGU6aG4sY3JlYXRlUG9ydGFsOnosY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OmZuLGNsb25lRWxlbWVudDpzbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmFuLGZpbmRET01Ob2RlOnZuLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6dyxtZW1vOngsZm9yd2FyZFJlZjprLGZsdXNoU3luYzpwbix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpkbixTdHJpY3RNb2RlOm1uLFN1c3BlbnNlOkQsU3VzcGVuc2VMaXN0OlYsbGF6eTpNLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmxufTtleHBvcnR7TyBhcyBDaGlsZHJlbix3IGFzIFB1cmVDb21wb25lbnQsbW4gYXMgU3RyaWN0TW9kZSxEIGFzIFN1c3BlbnNlLFYgYXMgU3VzcGVuc2VMaXN0LGxuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHNuIGFzIGNsb25lRWxlbWVudCxmbiBhcyBjcmVhdGVGYWN0b3J5LHogYXMgY3JlYXRlUG9ydGFsLENuIGFzIGRlZmF1bHQsdm4gYXMgZmluZERPTU5vZGUscG4gYXMgZmx1c2hTeW5jLGsgYXMgZm9yd2FyZFJlZixKIGFzIGh5ZHJhdGUsYW4gYXMgaXNWYWxpZEVsZW1lbnQsTSBhcyBsYXp5LHggYXMgbWVtbyxHIGFzIHJlbmRlcix5biBhcyBzdGFydFRyYW5zaXRpb24saG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxkbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyxfbiBhcyB1c2VEZWZlcnJlZFZhbHVlLFNuIGFzIHVzZUluc2VydGlvbkVmZmVjdCxnbiBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxibiBhcyB1c2VUcmFuc2l0aW9uLGNuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VHaWZ0T3BlbiA9IChkZWxheSA9IDEwMDApID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKVxuXG4gIGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgfSwgW2RlbGF5XSlcblxuICByZXR1cm4ge1xuICAgIGlzT3BlbixcbiAgICBvblRvZ2dsZVxuICB9XG59XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyByfWZyb21cInByZWFjdFwiO2V4cG9ydHtGcmFnbWVudH1mcm9tXCJwcmVhY3RcIjt2YXIgXz0wO2Z1bmN0aW9uIG8obyxlLG4sdCxmLGwpe3ZhciBzLHUsYT17fTtmb3IodSBpbiBlKVwicmVmXCI9PXU/cz1lW3VdOmFbdV09ZVt1XTt2YXIgaT17dHlwZTpvLHByb3BzOmEsa2V5Om4scmVmOnMsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2Q6dm9pZCAwLF9fYzpudWxsLF9faDpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1fLF9fc291cmNlOmYsX19zZWxmOmx9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihzPW8uZGVmYXVsdFByb3BzKSlmb3IodSBpbiBzKXZvaWQgMD09PWFbdV0mJihhW3VdPXNbdV0pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGkpLGl9ZXhwb3J0e28gYXMganN4LG8gYXMganN4REVWLG8gYXMganN4c307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc3hSdW50aW1lLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdwcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBTdGF0ZSA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSAoeyBjaGlsZHJlbiwgdmFsdWUgfSkgPT4ge1xuICByZXR1cm4gPFN0YXRlLlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvU3RhdGUuUHJvdmlkZXI+XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRlQ29udGV4dFxuIiwiaW1wb3J0IHsgQ29tcG9uZW50Q2hpbGQsIENvbnRhaW5lck5vZGUsIHJlbmRlciBhcyBwcmVhY3RSZW5kZXIgfSBmcm9tICdwcmVhY3QnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL1N0YXRlQ29udGV4dCdcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9ICh2Tm9kZTogQ29tcG9uZW50Q2hpbGQpID0+ICh0YXJnZXQ6IENvbnRhaW5lck5vZGUsIHN0YXRlPzogYW55KSA9PlxuICBwcmVhY3RSZW5kZXIoPFN0YXRlQ29udGV4dCB2YWx1ZT17c3RhdGV9Pnt2Tm9kZX08L1N0YXRlQ29udGV4dD4sIHRhcmdldCBhcyBIVE1MRWxlbWVudClcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vU3RhdGVDb250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VDdXJyZW50U3RhdGUgPSA8VFZhbHVlID0gdW5rbm93bj4oKSA9PiB1c2VDb250ZXh0PFRWYWx1ZT4oU3RhdGUpXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+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/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiXG5pbnRlcmZhY2UgSW5qZWN0TGlua09wdGlvbnMge1xuICByZWw6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdExpbmsgPShvcHRpb25zOiBJbmplY3RMaW5rT3B0aW9ucykgPT4ge1xuICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gbGluay5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG5cbiAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbn1cbiIsImltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSAnLi90eXBlcydcblxudHlwZSBWaXNpdG9yID0gQ2FsbGJhY2s8W1Byb3BlcnR5S2V5LCB1bmtub3duXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCgoZWwsIGluZGV4KSA9PiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCksIHZpc2l0b3IpKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5wdXQpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gaXRlcmF0b3IodmlzaXRvcihrZXksIHZhbHVlKSwgdmlzaXRvcilcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9IGFzIGFueSlcbiAgfVxuXG4gIHJldHVybiBpbnB1dFxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBsb2Rhc2hNZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UnXG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5VmFsdWUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+XG4gICF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBpc1ZhbHVlID0gPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgRXhjbHVkZTxULCBudWxsIHwgdW5kZWZpbmVkPiA9PiAhaXNFbXB0eVZhbHVlKHZhbHVlKVxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZFJ1bGUgPSAoc3RhdGU6IEFueU9iamVjdCA9IHt9KTogc3RhdGUgaXMgUnVsZSA9PlxuICB0eXBlb2Ygc3RhdGUgPT09ICdvYmplY3QnICYmIGlzVmFsdWUoc3RhdGUpICYmIGRldmljZXMuZXZlcnkoZGV2aWNlID0+IGRldmljZSBpbiBzdGF0ZSlcblxuZXhwb3J0IGNvbnN0IGdldFJ1bGVzID0gPFRTdGF0ZSBleHRlbmRzIEFueVN0YXRlLCBURGV2aWNlIGV4dGVuZHMgRGV2aWNlID0gJ2Rlc2t0b3AnPihcbiAgc3RhdGU6IFRTdGF0ZSxcbiAgZGV2aWNlOiBURGV2aWNlXG4pOiBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPiA9PiB7XG4gIGlmICghc3RhdGUpIHJldHVybiBzdGF0ZVxuXG4gIHJldHVybiBpdGVyYXRvcihzdGF0ZSwgKF9rZXksIHZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAoaXNWYWxpZFJ1bGUodmFsdWUpKSB7XG4gICAgICAvLyBjb25zdCBwcm94eVJ1bGVzID0geyAuLi52YWx1ZSB9XG4gICAgICAvL1xuICAgICAgLy8gZGV2aWNlcy5mb3JFYWNoKGRldmljZVByb3AgPT4ge1xuICAgICAgLy8gICBpZiAoZGV2aWNlUHJvcCAhPT0gZGV2aWNlKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHByb3h5UnVsZXNbZGV2aWNlUHJvcF1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICAgIC8vXG4gICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSwgcHJveHlSdWxlcyk7XG4gICAgICAvLyByZXR1cm4ge1xuICAgICAgLy8gICAuLi5wcm94eVJ1bGVzW2RldmljZV0sXG4gICAgICAvL1xuICAgICAgLy8gfVxuICAgICAgcmV0dXJuIHZhbHVlW2RldmljZV1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfSkgYXMgRXh0cmFjdFJ1bGVzPFRTdGF0ZSwgVERldmljZT5cbn1cbiIsImltcG9ydCB7IERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UnVsZXMgfSBmcm9tICcuLi9oZWxwZXJzL2dldERldmljZVN0YXRlJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuZXhwb3J0IGNvbnN0IHVzZUdldFJ1bGVzID0gPFRTdGF0ZSBleHRlbmRzIEFueVN0YXRlLCBURGV2aWNlIGV4dGVuZHMgRGV2aWNlPihzdGF0ZTogVFN0YXRlLCBkZXZpY2U6IFREZXZpY2UpID0+XG4gIGdldFJ1bGVzPFRTdGF0ZSwgVERldmljZT4oc3RhdGUsIGRldmljZSlcbiIsImltcG9ydCB7IEJSRUFLUE9JTlRTLCBEZXZpY2UgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgTXV0YWJsZVJlZiB9IGZyb20gJ3ByZWFjdC9ob29rcydcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICB0YXJnZXRSZWY6IE11dGFibGVSZWY8SFRNTERpdkVsZW1lbnQ+XG4gIC8qKlxuICAgKiBQcm9tbyDQstGB0YLRgNCw0LjQstCw0LXRgtGB0Y8g0LIg0YDQsNC30L3Ri9C1IERPTSDQuCDQvNGLINC90LUg0LfQvdCw0LXQvCDRgNCw0LfQvNC10YAg0LrQsNC60L7Qs9C+INC60L7QvdGC0LXQudC90LXRgNCwXG4gICAqINGP0LLQu9GP0LXRgtGB0Y8g0L3Rg9C20L3Ri9C8LiDQndCw0L/RgNC40LzQtdGAIEdpZnQqINC30LDQvdC40LzQsNC10YIg0LLRgdC10LPQviAzMHB4LCDQuCDQvdC10L7QsdGF0L7QtNC40LzRi9C5INC60L7QvdGC0LXQudC90LXRgFxuICAgKiDQvNC+0LbQtdGCINC90LDRhdC+0LTQuNGC0YzRgdGPINCz0L7RgNCw0LfQtNC+INCy0YvRiNC1LlxuICAgKi9cbiAgcGFyZW50S2V5Pzogc3RyaW5nXG4gIGJyZWFrcG9pbnRzPzogdHlwZW9mIEJSRUFLUE9JTlRTXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDb250YWluZXJEZXZpY2UgPSAoe1xuICB0YXJnZXRSZWYsXG4gIHBhcmVudEtleSA9ICdkZXZpY2UtY29udGFpbmVyJyxcbiAgYnJlYWtwb2ludHMgPSBCUkVBS1BPSU5UU1xufTogT3B0aW9ucykgPT4ge1xuICBjb25zdCBbZGV2aWNlLCBzZXREZXZpY2VdID0gdXNlU3RhdGU8RGV2aWNlPignZGVza3RvcCcpXG5cbiAgY29uc3QgY2hlY2tEZXZpY2UgPSAocGFyZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDBcbiAgICBjb25zdCBmaW5kRGV2aWNlID0gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpLmZpbmQoKFssIHZhbHVlXSkgPT4gdmFsdWUgPj0gcGFyZW50V2lkdGgpPy5bMF0gYXMgRGV2aWNlXG5cbiAgICBzZXREZXZpY2UoZmluZERldmljZSlcbiAgfVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRhcmdldFJlZi5jdXJyZW50LmNsb3Nlc3QoYFtkYXRhLSR7cGFyZW50S2V5fV1gKVxuXG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpKVxuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnRFbGVtZW50KVxuXG4gICAgICBjaGVja0RldmljZShwYXJlbnRFbGVtZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIGRldmljZVxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBkZXZpY2VzLCBGaXRPcHRpb24sIGhleFRvUmdiLCBpc0VtcHR5VmFsdWUsIGlzVmFsdWUsIHJnYlRvUmdiYSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tICdzcmMvcmVuZGVyRHJpdmVyJ1xuaW1wb3J0IHsgaW5qZWN0U3R5bGVSdWxlcywgU3R5bGVSdWxlcyB9IGZyb20gJ3NyYy91dGlscy9pbmplY3RTdHlsZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWxpZFN0eWxlS2V5IH0gZnJvbSAnLi9pc1ZhbGlkU3R5bGVLZXknXG5cbi8qKlxuICog0J/Qu9Cw0LPQuNC9INC/0YDQuNC80LXQvdGP0LXRgiDQv9GA0LDQstC40LvQsDog0YHRgtC40LvQuCwgaW5uZXJUZXh0IC4uLlxuICog0JXRgdC70Lgg0LrQvtC90YLQtdC90YLQsCDQvdC10YIsINGC0L4g0J3QvtC00LAg0YHQutGA0YvQstCw0LXRgtGB0Y9cbiAqL1xuXG50eXBlIEN1c3RvbVN0eWxlcyA9IFBhcnRpYWw8XG4gIE9taXQ8U3R5bGVSdWxlcywgJ2JvcmRlcldpZHRoJyB8ICdtaW5IZWlnaHQnIHwgJ21pbldpZHRoJyB8ICdmb250U2l6ZSc+ICYge1xuICAgIG1pbkhlaWdodDogbnVtYmVyXG4gICAgbWluV2lkdGg6IG51bWJlclxuICAgIGZvbnRTaXplOiBudW1iZXJcbiAgfVxuPlxuXG5kZWNsYXJlIG1vZHVsZSAnc3JjL3JlbmRlckRyaXZlcicge1xuICBpbnRlcmZhY2UgUmVuZGVyRHJpdmVyUnVsZSBleHRlbmRzIEN1c3RvbVN0eWxlcyB7XG4gICAgaW5uZXJIVE1MPzogc3RyaW5nXG4gICAgaW5uZXJUZXh0Pzogc3RyaW5nXG4gICAgY29ybmVyPzogbnVtYmVyXG4gICAgYmFja2dyb3VuZEZpdD86IEZpdE9wdGlvblxuICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk/OiBudW1iZXJcbiAgICBpc0JvbGQ/OiBib29sZWFuXG4gICAgaXNJdGFsaWM/OiBib29sZWFuXG4gICAgaXNUaHJvdWdoPzogYm9vbGVhblxuICAgICRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgfVxufVxuXG5jb25zdCB3cmFwVG8gPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciwgdW50aWw6ICclJyB8ICdweCcpID0+IGAke3ZhbHVlfSR7dW50aWx9YFxuXG5jb25zdCB0b1B4ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncHhfJylcbmNvbnN0IHRvUGVyY2VudCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnN0YXJ0c1dpdGgoJ3BlcmNlbnRfJylcblxuY29uc3QgZm9ybWF0UnVsZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICBsZXQgbmV3S2V5ID0ga2V5XG4gIGxldCBuZXdWYWx1ZSA9IHZhbHVlXG5cbiAgaWYgKHRvUHgobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdweF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgfVxuICBpZiAodG9QZXJjZW50KG5ld0tleSkpIHtcbiAgICBuZXdLZXkgPSBuZXdLZXkucmVwbGFjZSgncGVyY2VudF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJyUnKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXk6IG5ld0tleSxcbiAgICB2YWx1ZTogbmV3VmFsdWVcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX1RPX1BYID0gW1xuICAnYm9yZGVyV2lkdGgnLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyVG9wV2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnbWluSGVpZ2h0JyxcbiAgJ21pbldpZHRoJyxcbiAgJ21heFdpZHRoJyxcbiAgJ21heEhlaWdodCcsXG4gICdmb250U2l6ZScsXG4gICdoZWlnaHQnLFxuICAnd2lkdGgnLFxuICAnbGV0dGVyU3BhY2luZycsXG4gICdmb250U2l6ZScsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0JyxcbiAgJ3RvcCcsXG4gICdib3R0b20nLFxuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cbmV4cG9ydCBjb25zdCBwYXJzZVJ1bGVzID0gKHJ1bGVzOiBBbnlPYmplY3QsIGxheWVyPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhydWxlcylcblxuICBpZiAoa2V5cy5pbmNsdWRlcygnaW5uZXJIVE1MJykgfHwga2V5cy5pbmNsdWRlcygnaW5uZXJUZXh0JykpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmchIElubmVySFRNTCBhbmQgaW5uZXJUZXh0IGlzIGRlcHJlY2F0ZWQuIFVzZSBcImNoaWxkcmVuXCIgcHJvcGVydHkuYCwgbGF5ZXIpXG4gIH1cblxuICBpZiAodHlwZW9mIHJ1bGVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBydWxlc1xuICB9XG5cbiAgaWYgKCd0eXBvZ3JhcGh5JyBpbiBydWxlcyAmJiAnYWNjZW50VHlwb2dyYXBoeScgaW4gcnVsZXMpIHtcbiAgICBjb25zdCB0eXBvZ3JhcGh5ID0gcnVsZXMudHlwb2dyYXBoeVxuICAgIGNvbnN0IGFjY2VudFR5cG9ncmFwaHkgPSBydWxlcy5hY2NlbnRUeXBvZ3JhcGh5XG5cbiAgICBydWxlcyA9IHtcbiAgICAgIC4uLnJ1bGVzLFxuICAgICAgLi4udHlwb2dyYXBoeSxcbiAgICAgICctLWZvbnQtZmFtaWx5JzogYWNjZW50VHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICAgICAgJy0tYWNjZW50LWNvbG9yJzogYWNjZW50VHlwb2dyYXBoeS5jb2xvcixcbiAgICAgICdweF8tLWFjY2VudC1zaXplJzogYWNjZW50VHlwb2dyYXBoeS5mb250U2l6ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhydWxlcykucmVkdWNlKChhY2MsIFtwcm9wS2V5LCBwcm9wVmFsdWVdKSA9PiB7XG4gICAgaWYgKERFRkFVTFRfVE9fUFguaW5jbHVkZXMocHJvcEtleSkpIHtcbiAgICAgIHByb3BWYWx1ZSA9IHdyYXBUbyhwcm9wVmFsdWUsICdweCcpXG4gICAgfVxuXG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBmb3JtYXRSdWxlKHByb3BLZXksIHByb3BWYWx1ZSlcbiAgICBhY2Nba2V5XSA9IHZhbHVlXG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgYWNjLmlubmVySFRNTCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVyVGV4dCcpIHtcbiAgICAgIGFjYy5pbm5lclRleHQgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIGFjYy5jaGlsZHJlbiA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyAoaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJycpIDogdmFsdWVcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyB8fCBrZXkgPT09ICdpbm5lclRleHQnIHx8IGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjYy5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9IGVsc2UgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5LmluY2x1ZGVzKCdib3JkZXJXaWR0aCcpKSB7XG4gICAgICBhY2MuYm9yZGVyU3R5bGUgPSAnc29saWQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2Nvcm5lcicpIHtcbiAgICAgIGFjYy5ib3JkZXJSYWRpdXMgPSB3cmFwVG8odmFsdWUsICdweCcpXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRGaXQnKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZFNpemUgPSB2YWx1ZSBhcyBGaXRPcHRpb25cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEltYWdlJyAmJiBpc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgYWNjLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHt2YWx1ZX0pYFxuICAgICAgYWNjLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0J1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JyAmJiBpc1ZhbHVlKGFjYy5iYWNrZ3JvdW5kQ29sb3JPcGFjaXR5KSAmJiBpc1ZhbHVlKGFjYy5iYWNrZ3JvdW5kQ29sb3IpKSB7XG4gICAgICBjb25zdCByZ2IgPSBoZXhUb1JnYihhY2MuYmFja2dyb3VuZENvbG9yKVxuICAgICAgaWYgKHJnYikge1xuICAgICAgICBhY2MuYmFja2dyb3VuZENvbG9yID0gcmdiVG9SZ2JhKGByZ2IoJHtyZ2Iucn0sICR7cmdiLmd9LCAke3JnYi5ifSlgLCArYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkgLyAxMDApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzQm9sZCcpIHtcbiAgICAgIGFjYy5mb250V2VpZ2h0ID0gdmFsdWUgPyAnYm9sZCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNJdGFsaWMnKSB7XG4gICAgICBhY2MuZm9udFN0eWxlID0gdmFsdWUgPyAnaXRhbGljJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc1Rocm91Z2gnKSB7XG4gICAgICBhY2MudGV4dERlY29yYXRpb24gPSB2YWx1ZSA/ICdsaW5lLXRocm91Z2gnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCBydWxlcylcbn1cbiIsImltcG9ydCB7IHBhcnNlUnVsZXMgfSBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUnVsZXMnXG5pbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxuY29uc3QgaXNWYWxpZFJ1bGUgPSAocnVsZTogQW55T2JqZWN0KSA9PiB0eXBlb2YgcnVsZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocnVsZSkgJiYgJ3BhcmVudCcgaW4gcnVsZVxuXG5leHBvcnQgY29uc3QgdXNlUGFyc2VSdWxlcyA9IChzdGF0ZTogdW5rbm93bikgPT5cbiAgT2JqZWN0LmVudHJpZXMoc3RhdGUpLnJlZHVjZSgoYWNjLCBbbGF5ZXIsIHJ1bGVdKSA9PiB7XG4gICAgYWNjW2xheWVyXSA9IGlzVmFsaWRSdWxlKHJ1bGUpID8gcGFyc2VSdWxlcyh7IC4uLnN0YXRlW2xheWVyXSB9LCBsYXllcikgOiBydWxlXG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBjaGlsZHJlbjogc3RyaW5nXG59XG5cbmNvbnN0IERpc3BsYXlUZXh0OiBGQzxQcm9wcz4gPSAoeyBjaGlsZHJlbiwgLi4ucmVzdCB9KSA9PiB7XG4gIGNvbnN0IGZvcm1hdFZhbHVlID0gY2hpbGRyZW4/LnJlcGxhY2UoJ3NjcmlwdCcsICcnKT8ucmVwbGFjZSgve3soLio/KX19L2csIGA8c3Bhbj4kMTwvc3Bhbj5gKVxuXG4gIHJldHVybiA8ZGl2IHsuLi5yZXN0fSBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGZvcm1hdFZhbHVlIH19IC8+XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BsYXlUZXh0XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VUb2dnbGUgPSAoKSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICByZXR1cm4gW2lzT3BlbiwgKCkgPT4gc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXVxufVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5jb25zdCBDbG9zZUljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjQgMjQnPlxuICAgIDxwYXRoXG4gICAgICBkPSdNMTcuNjU5IDQuOTI5YTEgMSAwIDEgMSAxLjQxNCAxLjQxNEwxMy40MTYgMTJsNS42NTcgNS42NTdhMSAxIDAgMCAxLTEuNDE1IDEuNDE0bC01LjY1Ni01LjY1Ny01LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTQtMS40MTRMMTAuNTg3IDEyIDQuOTMxIDYuMzQzQTEgMSAwIDEgMSA2LjM0NSA0LjkzbDUuNjU3IDUuNjU3IDUuNjU2LTUuNjU3WidcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgQ2xvc2VJY29uXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IEdpZnRJY29uOiBGQyA9ICgpID0+IChcbiAgPHN2ZyB2aWV3Qm94PScwIDAgMTYgMTYnPlxuICAgIDxwYXRoXG4gICAgICBmaWxsPSdjdXJyZW50Q29sb3InXG4gICAgICBmaWxsUnVsZT0nZXZlbm9kZCdcbiAgICAgIGQ9J00yLjEzIDhIN3Y3LjMxSDMuMjJhMS4wOSAxLjA5IDAgMDEtMS4wOS0xLjA5ek05IDE1LjM0aDMuODFhMS4wOSAxLjA5IDAgMDAxLjA5LTEuMDlWOEg5em01LjgtOS45NHYxLjE5YS40OC40OCAwIDAxLS40OC40OEgxLjcxYS40OC40OCAwIDAxLS40OC0uNDhWNS40YzAtLjU5Ni40ODQtMS4wOCAxLjA4LTEuMDhINWEyLjQ4IDIuNDggMCAwMS0xLjQ3LTEuNjUgMS42MiAxLjYyIDAgMDEuMjYtMS40IDEuNTcgMS41NyAwIDAxMS0uNThjLjExLS4wMS4yMi0uMDEuMzMgMGEyLjUgMi41IDAgMDEyIDFBOSA5IDAgMDE4IDMuMjJhMTAuMzggMTAuMzggMCAwMS45MS0xLjU0IDIuNDkgMi40OSAwIDAxMS45My0xaC4zNmMuMzY5LjA2NS43MDIuMjYuOTQuNTUuMzEuNDA3LjQxNC45MzYuMjggMS40M2EyLjQ4IDIuNDggMCAwMS0xLjQ1IDEuNjRoMi43N2ExLjA4IDEuMDggMCAwMTEuMDMgMS4xek04LjY2IDRhOS44MSA5LjgxIDAgMDAxLjktLjU1IDEuNTIgMS41MiAwIDAwLjg4LTEgLjY4LjY4IDAgMDAtLjEtLjU5LjYuNiAwIDAwLS4zNC0uMjIuNTguNTggMCAwMC0uMTggMCAxLjUyIDEuNTIgMCAwMC0xLjE3LjYzQTkuMDYgOS4wNiAwIDAwOC42NiA0em0tMy4zMi0uNThBOS42MiA5LjYyIDAgMDA3LjI1IDRhOC41OSA4LjU5IDAgMDAtMS0xLjcyIDEuNTEgMS41MSAwIDAwLTEuMTgtLjYzaC0uMTNhLjY2LjY2IDAgMDAtLjM5LjIyLjY2LjY2IDAgMDAtLjA5LjU3Yy4xMy40NDMuNDUzLjgwNC44OC45OHonXG4gICAgPjwvcGF0aD5cbiAgPC9zdmc+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IEdpZnRJY29uXG4iLCJpbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnLi4vdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGlzVmFsdWUgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxudHlwZSBBbmltYXRpb25OYW1lID0gJ2ZhZGUnIHwgJ3B1bHNlJyB8ICd3aWdnbGUnIHwgJ2dyYWRpZW50J1xuXG5jb25zdCBhbmltYXRpb25zTWFwID0gKGFuaW1hdGlvbnM6IFJlY29yZDxBbmltYXRpb25OYW1lLCBzdHJpbmc+KSA9PiAoe1xuICBmYWRlOiBgJHthbmltYXRpb25zLmZhZGV9IDJzIGxpbmVhciBpbmZpbml0ZWAsXG4gIHB1bHNlOiBgJHthbmltYXRpb25zLnB1bHNlfSAuM3MgbGluZWFyIDBzIGluZmluaXRlIGFsdGVybmF0ZSBmb3J3YXJkc2AsXG4gIHdpZ2dsZTogYCR7YW5pbWF0aW9ucy53aWdnbGV9IDJzIGxpbmVhciBpbmZpbml0ZWAsXG4gIGdyYWRpZW50OiBgJHthbmltYXRpb25zLmdyYWRpZW50fSAzcyBlYXNlIGluZmluaXRlYCxcbn0pXG5cbmV4cG9ydCBjb25zdCB1c2VHaWZ0UnVsZXMgPSAoZGV2aWNlU3RhdGU6IHVua25vd24sIGFuaW1hdGlvbnM6IFJlY29yZDxBbmltYXRpb25OYW1lLCBzdHJpbmc+KSA9PiB7XG4gIGNvbnN0IGZ1bGxBbmltYXRpb25zID0gYW5pbWF0aW9uc01hcChhbmltYXRpb25zKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IGhhc0ljb24gPSBydWxlcz8uaWNvbj8uaGFzSWNvblxuXG4gIGNvbnN0IGFycm93UnVsZXMgPSB7XG4gICAgbGVmdDogYCR7KyhkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5sZWZ0IHx8IDApICogLTEgKyA4fXB4YCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BXaWR0aDogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyV2lkdGgsXG4gICAgYm9yZGVyVG9wQ29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlclRvcFN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckxlZnRXaWR0aDogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyV2lkdGgsXG4gICAgYm9yZGVyTGVmdENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCdcbiAgfVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBsZWZ0OiBydWxlcz8uY29udGFpbmVyPy5sZWZ0XG4gIH1cblxuICBjb25zdCBhbGxBbmltYXRpb25zID0gKHJ1bGVzPy5pY29uPy5hbmltYXRpb25zIHx8IFtdKVxuICAgIC5tYXAoKGFuaW1hdGlvbjogQW5pbWF0aW9uTmFtZSkgPT4gZnVsbEFuaW1hdGlvbnNbYW5pbWF0aW9uXSlcbiAgICAuam9pbignLCAnKVxuXG4gIGNvbnN0IGJhY2tncm91bmRTdHlsZXMgPVxuICAgIGlzVmFsdWUocnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3IpICYmIHJ1bGVzPy5pY29uPy5hbmltYXRpb25zLmluY2x1ZGVzKCdncmFkaWVudCcpXG4gICAgICA/IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KC05MGRlZywgJHtydWxlcy5pY29uPy5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGVzPy5pY29uPy5ncmFkaWVudENvbG9yfSAxMDAlKSAwJSAwJSAvIDQwMCUgNDAwJWAsXG4gICAgICAgICAgYmFja2dyb3VuZFNpemU6ICc0MDAlIDQwMCUnXG4gICAgICAgIH1cbiAgICAgIDoge31cblxuICBjb25zdCBpY29uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/Lmljb24gfHwge30sXG4gICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaGFzSWNvbixcbiAgICBhcnJvd1J1bGVzLFxuICAgIGJvZHlSdWxlcyxcbiAgICBpY29uUnVsZXNcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGJhY2tncm91bmRPcHRpb25zID0gWydiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZENvbG9yT3BhY2l0eScsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZEZpdCddXG5cbmV4cG9ydCBjb25zdCBzcGFjaW5nT3B0aW9ucyA9IFtcbiAgJ21hcmdpblRvcCcsXG4gICdtYXJnaW5Cb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAncGFkZGluZ0xlZnQnLFxuICAncGFkZGluZ1JpZ2h0J1xuXVxuXG5cbmV4cG9ydCBjb25zdCBub29wWWFNZXRyaWthID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgWWFNZWt0aWthIHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuZXhwb3J0IGNvbnN0IG5vb3BBZEZveCA9IChnb2FsOiBzdHJpbmcpID0+IGNvbnNvbGUubG9nKGBOb29wIEFkRm94IHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgaXNKc29uU2FtZSwgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgbm9vcEFkRm94LCBub29wWWFNZXRyaWthIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlTWV0cmljcyA9IChzdGF0ZTogdW5rbm93biwgbGF5ZXJOYW1lID0gJ3Jvb3QnKSA9PiB7XG4gIGNvbnN0IHNhdmVNZXRyaWNzID0gdXNlUmVmKClcbiAgY29uc3QgeWFSZWFjaEdvYWwgPSBzdGF0ZS55YVJlYWNoR29hbCB8fCBub29wWWFNZXRyaWthXG4gIGNvbnN0IGFkZm94UmVhY2hHb2FsID0gc3RhdGUuYWRmb3hSZWFjaEdvYWwgfHwgbm9vcEFkRm94XG4gIGNvbnN0IG1ldHJpY3MgPSBwaWNrKHN0YXRlW2xheWVyTmFtZV0sICd5YVNob3cnLCAneWFDbGljaycsICdhZGZveFNob3cnLCAnYWRmb3hDbGljaycpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzSnNvblNhbWUoc2F2ZU1ldHJpY3MuY3VycmVudCwgbWV0cmljcykpIHtcbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhU2hvdylcbiAgICAgIH1cbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94U2hvdylcbiAgICAgIH1cbiAgICB9XG4gICAgc2F2ZU1ldHJpY3MuY3VycmVudCA9IG1ldHJpY3NcbiAgfSwgW21ldHJpY3NdKVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG1ldHJpY3MueWFDbGljaykge1xuICAgICAgeWFSZWFjaEdvYWwobWV0cmljcy55YUNsaWNrKVxuICAgIH1cbiAgICBpZiAobWV0cmljcy5hZGZveENsaWNrKSB7XG4gICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94Q2xpY2spXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpbmplY3RMaW5rLCBpdGVyYXRvciB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjsgLy8gaHR0cHM6Ly9naXRodWIuY29tL0Rvd25sb2FkL3ByZWFjdC1oZWxtZXQvaXNzdWVzLzM0XG5cbmV4cG9ydCBjb25zdCB1c2VFeHRyYWN0Rm9udHMgPSAoc3RhdGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgZm9udHMgPSBuZXcgU2V0KFtdKVxuXG4gIGl0ZXJhdG9yKHN0YXRlLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdmb250RmFtaWx5Jykge1xuICAgICAgZm9udHMuYWRkKHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KVxuXG4gIGNvbnN0IGZvbnRMaW5rcyA9IHVzZU1lbW8oKCkgPT4gQXJyYXkuZnJvbShmb250cy52YWx1ZXMoKSkubWFwKGZvbnQgPT4gKHtcbiAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICBocmVmOiBgaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PSR7Zm9udH06MzAwLDQwMCw1MDAsNzAwJmRpc3BsYXk9c3dhcGBcbiAgfSkpLCBbZm9udHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZm9udExpbmtzLmZvckVhY2goKGxpbmspID0+IGluamVjdExpbmsobGluaykpXG4gIH0sIFtmb250TGlua3NdKVxufVxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcblxuY29uc3QgU2ltcGxlR2lmdDogRkM8U3RhdGU+ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IFtsZWdhbElzT3BlbiwgdG9nZ2xlTGVnYWxJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGU8U3RhdGU+KClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbihkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5kZWxheSlcbiAgY29uc3QgeyBoYXNJY29uLCBpY29uUnVsZXMsIGJvZHlSdWxlcywgYXJyb3dSdWxlcyB9ID0gdXNlR2lmdFJ1bGVzKGRldmljZVN0YXRlLCB7XG4gICAgZmFkZTogc3R5bGVzLmZhZGVpbixcbiAgICBwdWxzZTogc3R5bGVzLnB1bHNlLFxuICAgIHdpZ2dsZTogc3R5bGVzLndpZ2dsZSxcbiAgICBncmFkaWVudDogc3R5bGVzLmdyYWRpZW50XG4gIH0pXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gcmVmPXtyb290UmVmfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGEgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9IHRhcmdldD0nX2JsYW5rJyByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgICAgIHtydWxlcz8udGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5idXR0b24sIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5idXR0b25BbmltYXRlZF06IHJ1bGVzLmJ1dHRvbi5pc0FuaW1hdGVkXG4gICAgICAgICAgICB9KX0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBsZWdhbElzT3BlblxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBzdHlsZT17cnVsZXMubGVnYWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e3J1bGVzPy5sZWdhbD8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgIHtsZWdhbElzT3BlbiA/IHJ1bGVzPy5sZWdhbD8uYnV0dG9uT3BlblRleHQgOiBydWxlcz8ubGVnYWw/LmJ1dHRvbkhpZGVUZXh0fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVHaWZ0IC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5saW5lfSBzdHlsZT17cnVsZXMubGluZX0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5SW5uZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICA8RGlzcGxheVRleHQ+e3J1bGVzLnRleHQ/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGV4dH0+e3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzQ2FyZFxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXNDYXJkIGZyb20gJy4vY29tcG9uZW50cy9Cb251c0NhcmQnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5cbmNvbnN0IENvbXBsZXhHaWZ0ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnQsXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0gY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHtcbiAgICAgICAgICBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17Ym9keVJ1bGVzfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZEljb259PlxuICAgICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkVGl0bGV9PlxuICAgICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcblxuLy8gaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tIFwic3JjXCI7XG4vLyBpbXBvcnQgeyBpc0VtcHR5VmFsdWUsIGlzVmFsdWUgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbi8vXG5cbi8vXG4vLyBleHBvcnQgZGVmYXVsdCAoZW1pdHRlcjogRW1pdHRlclR5cGUpID0+IHtcbi8vICAgZW1pdHRlci5vbigncmVuZGVyTm9kZScsICh7IHJ1bGUsIGxheWVyIH0pID0+IHtcbi8vICAgICBpZiAoJyRhbmltYXRpb25zJyBpbiBydWxlKSB7XG4vLyAgICAgICBjb25zdCBhbGxBbmltYXRpb25zID0gcnVsZS4kYW5pbWF0aW9uc1xuLy8gICAgICAgICAubWFwKChhbmltYXRpb246IGtleW9mIHR5cGVvZiBhbmltYXRpb25zTWFwKSA9PiBhbmltYXRpb25zTWFwW2FuaW1hdGlvbl0pXG4vLyAgICAgICAgIC5qb2luKCcsICcpXG4vL1xuLy8gICAgICAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4vLyAgICAgICAgIGlzVmFsdWUocnVsZS4kZ3JhZGllbnRDb2xvcikgJiYgcnVsZS4kYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuLy8gICAgICAgICAgID8ge1xuLy8gICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZS5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGUuJGdyYWRpZW50Q29sb3J9IDEwMCUpYCxcbi8vICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICA6IHt9XG4vL1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb246IHtcbi8vICAgICAgICAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4vLyAgICAgICAgICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnaWNvbicgJiYgIWlzRW1wdHlWYWx1ZShydWxlLmhhc0ljb24pKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvblRhcmdldDoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdmbGV4JyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAndGl0bGUnKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaGVhZGVySWNvbjoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdibG9jaycgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2NvbnRhaW5lcicpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBib2R5OiB7XG4vLyAgICAgICAgICAgJGRlbGF5OiBydWxlLmRlbGF5LFxuLy8gICAgICAgICAgIGxlZnQ6IHJ1bGUubGVmdFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICBhcnJvdzoge1xuLy8gICAgICAgICAgIGxlZnQ6IGAkeysocnVsZS5sZWZ0IHx8IDApICogLTEgKyA4fWAsXG4vLyAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBydWxlLmJhY2tncm91bmRDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJUb3BDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vICAgfSlcbi8vIH1cbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChlbCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtlbH0+XG4gICAgICAgICAgICAgIDxMaW5lIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgIHtidXR0b25SdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge2xlZ2FsUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgc3BhY2luZ09wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IHN0eWxlPXtydWxlcy5oZWFkZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3BpY2socnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IE1hdGNoOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1zfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlYWd1ZX0gc3R5bGU9e3J1bGVzLmxlYWd1ZX0+e3J1bGVzLmxlYWd1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5uYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9IOKAlCB7cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tICdzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgnXG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9jb21wb25lbnRzL01hdGNoJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b25XcmFwcGVyLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uV3JhcHBlcj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5yb290LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5jb250ZW50LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IHRleHRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy50ZXh0LFxuICAgIHRleHRBbGlnbjogcnVsZXMucm9vdD8uYWxpZ25cbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfSBzdHlsZT17Y29udGVudFJ1bGVzfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8TWF0Y2ggLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3RleHRSdWxlc30+XG4gICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uSGVhZH0gc3R5bGU9e3J1bGVzLmJ1dHRvbkhlYWR9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbkhlYWQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGFyZ2V0fSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIGNvbnN0IHJvb3RSdWxlcyA9IG9taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZU9uZX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmSGVhZH0gc3R5bGU9e3J1bGVzLmNvZWZ9Plg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmVmFsdWV9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVh9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVUd299PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRCA9IDM3MDBcblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e2JhY2tncm91bmRSdWxlc30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNsaWRlfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGN1cnJlbnRTbGlkZSA9PT0gaW5kZXggPyBzdHlsZXNbY2hpbGQucm9vdD8uYW5pbWF0aW9uTmFtZSB8fCAnZmFkZS1pbi1vdXQnXSA6ICdub25lJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYCR7Y2hpbGQucm9vdD8uYW5pbWF0aW9uRHVyYXRpb259bXNgXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT57Z2V0Q2hpbGQoY2hpbGQubmFtZSl9PC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFdpZGVDYXJkIC8+KVxuIl0sIm5hbWVzIjpbImNsYXNzTmFtZXMiLCJpIiwiaW5uZXIiLCJvIiwibiIsInQiLCJ1IiwiQiIsInIiLCJmIiwiYyIsImUiLCJfIiwiRiIsInEiLCJ3IiwiZyIsImwiLCJ1c2VHaWZ0T3BlbiIsImRlbGF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwidXNlU3RhdGUiLCJ0aW1lclJlZiIsInVzZVJlZiIsIm9uVG9nZ2xlIiwiY2xlYXJUaW1lb3V0IiwiY3VycmVudCIsInByZXYiLCJ1c2VFZmZlY3QiLCJzZXRUaW1lb3V0IiwicyIsImEiLCJTdGF0ZSIsImNyZWF0ZUNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJjaGlsZHJlbiIsInZhbHVlIiwiX2pzeCIsIlByb3ZpZGVyIiwicmVuZGVyIiwidk5vZGUiLCJ0YXJnZXQiLCJzdGF0ZSIsInByZWFjdFJlbmRlciIsInVzZUN1cnJlbnRTdGF0ZSIsInVzZUNvbnRleHQiLCJsaXN0Q2FjaGVDbGVhciIsImVxIiwicmVxdWlyZSQkMCIsImFzc29jSW5kZXhPZiIsImxpc3RDYWNoZURlbGV0ZSIsImluZGV4IiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsIkxpc3RDYWNoZSIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwicm9vdCIsIlN5bWJvbCIsIm9iamVjdFByb3RvIiwiaGFzT3duUHJvcGVydHkiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJiYXNlR2V0VGFnIiwiaXNPYmplY3QiLCJmdW5jVGFnIiwiaXNGdW5jdGlvbiIsImNvcmVKc0RhdGEiLCJpc01hc2tlZCIsImZ1bmNQcm90byIsImZ1bmNUb1N0cmluZyIsInRvU291cmNlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJnZXROYXRpdmUiLCJNYXAiLCJuYXRpdmVDcmVhdGUiLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiSEFTSF9VTkRFRklORUQiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJIYXNoIiwibWFwQ2FjaGVDbGVhciIsImlzS2V5YWJsZSIsImdldE1hcERhdGEiLCJtYXBDYWNoZURlbGV0ZSIsIm1hcENhY2hlR2V0IiwibWFwQ2FjaGVIYXMiLCJtYXBDYWNoZVNldCIsIk1hcENhY2hlIiwic3RhY2tTZXQiLCJyZXF1aXJlJCQ1IiwiU3RhY2siLCJkZWZpbmVQcm9wZXJ0eSIsImJhc2VBc3NpZ25WYWx1ZSIsImFzc2lnbk1lcmdlVmFsdWUiLCJjcmVhdGVCYXNlRm9yIiwiYmFzZUZvciIsImNsb25lQnVmZmVyIiwiVWludDhBcnJheSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwib3ZlckFyZyIsImdldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsImJhc2VJc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzIiwiaXNBcnJheSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3QiLCJzdHViRmFsc2UiLCJpc0J1ZmZlciIsIm9iamVjdFRhZyIsImlzUGxhaW5PYmplY3QiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJpc1R5cGVkQXJyYXkiLCJzYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJjb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsImFycmF5TGlrZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJiYXNlS2V5c0luIiwia2V5c0luIiwidG9QbGFpbk9iamVjdCIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VNZXJnZSIsImlkZW50aXR5IiwiYXBwbHkiLCJvdmVyUmVzdCIsImNvbnN0YW50IiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJzZXRUb1N0cmluZyIsImJhc2VSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJjcmVhdGVBc3NpZ25lciIsImluamVjdExpbmsiLCJvcHRpb25zIiwiaGVhZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsaW5rIiwiY3JlYXRlRWxlbWVudCIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpdGVyYXRvciIsImlucHV0IiwidmlzaXRvciIsIkFycmF5IiwibWFwIiwiZWwiLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJpc1ZhbHVlIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJzZXQiLCJwYXRoIiwicGF0aEFycmF5IiwibWF0Y2giLCJsZW5ndGgiLCJoZXhUb1JnYiIsImhleCIsImNoYXJzIiwic2xpY2UiLCJzcGxpdCIsInZhbCIsImpvaW4iLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkUnVsZSIsImRldmljZSIsImdldFJ1bGVzIiwiX2tleSIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudCIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJmaW5kRGV2aWNlIiwiZmluZCIsInVzZUxheW91dEVmZmVjdCIsInBhcmVudEVsZW1lbnQiLCJjbG9zZXN0IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3cmFwVG8iLCJ1bnRpbCIsInRvUHgiLCJzdGFydHNXaXRoIiwidG9QZXJjZW50IiwiZm9ybWF0UnVsZSIsIm5ld0tleSIsIm5ld1ZhbHVlIiwiREVGQVVMVF9UT19QWCIsInBhcnNlUnVsZXMiLCJydWxlcyIsImxheWVyIiwia2V5cyIsImluY2x1ZGVzIiwid2FybiIsInR5cG9ncmFwaHkiLCJhY2NlbnRUeXBvZ3JhcGh5IiwiZm9udEZhbWlseSIsImNvbG9yIiwiZm9udFNpemUiLCJwcm9wS2V5IiwicHJvcFZhbHVlIiwiaW5uZXJIVE1MIiwiaW5uZXJUZXh0IiwiZGlzcGxheSIsImJvcmRlclN0eWxlIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZENvbG9yT3BhY2l0eSIsImJhY2tncm91bmRDb2xvciIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJ0ZXh0RGVjb3JhdGlvbiIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsIiwibGVnYWxPcGVuIiwibGVnYWxUZXh0IiwibGVnYWxCdXR0b24iLCJidXR0b25PcGVuVGV4dCIsImJ1dHRvbkhpZGVUZXh0IiwiQm9udXNDYXJkIiwidmFyaWFudDIiLCJ2YXJpYW50IiwibGluZSIsImJvZHlJbm5lciIsImJ1dHRvblRleHQiLCJDb21wbGV4R2lmdCIsInByb21vdGlvbiIsInRpdGxlIiwiaGVhZEljb24iLCJoZWFkVGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJCb251cyIsImhlYWRlciIsIndyYXBwZXIiLCJNYXRjaCIsInRlYW1zIiwibGVhZ3VlIiwibmFtZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwiY29udGVudCIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwidmFsdWVPbmUiLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJ2YWx1ZVgiLCJvZGRSZXZlcnNlIiwidmFsdWVUd28iLCJNYXRjaGVzT25lVHdvIiwidGl0bGVMYWJlbCIsInRpdGxlVmFsdWUiLCJ0ZWFtMU5hbWUiLCJ0ZWFtVmFsdWUiLCJ2YWx1ZTEiLCJ0ZWFtMk5hbWUiLCJ2YWx1ZTIiLCJ1c2VBbmltYXRlZExpc3QiLCJzbGlkZXMiLCJpdGVtc0NvdW50IiwiYW5pbWF0ZWRJZHgiLCJzZXRBbmltYXRlZElkeCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiZ29OZXh0IiwidGltZW91dCIsIkRFRkFVTFRfQU5JTUFUSU9OX1NQRUVEIiwiV2lkZUNhcmQiLCJnZXRDaGlsZCIsIm1hdGNoZXMiLCJtYXRjaGVzT25lVHdvIiwic2xpZGVzTGlzdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbGlkZSIsImFuaW1hdGlvbk5hbWUiLCJjdXJyZW50U2xpZGUiLCJzbGlkZVJ1bGVzIiwiYmFja2dyb3VuZFJ1bGVzIiwiaGFzQ3VzdG9tQmFja2dyb3VuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxHQUFDLFdBQVk7QUFHWixRQUFJLFNBQVMsQ0FBRSxFQUFDO0FBR2hCLGFBQVNBLGNBQWE7QUFDckIsVUFBSSxVQUFVLENBQUE7QUFFZCxlQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLFlBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLFlBQUksQ0FBQztBQUFLO0FBRVYsWUFBSSxVQUFVLE9BQU87QUFFckIsWUFBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQ2pELGtCQUFRLEtBQUssR0FBRztBQUFBLFFBQ2hCLFdBQVUsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUM5QixjQUFJLElBQUksUUFBUTtBQUNmLGdCQUFJQyxTQUFRRixZQUFXLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLGdCQUFJRSxRQUFPO0FBQ1Ysc0JBQVEsS0FBS0EsTUFBSztBQUFBLFlBQ2xCO0FBQUEsVUFDRDtBQUFBLFFBQ0wsV0FBYyxZQUFZLFVBQVU7QUFDaEMsY0FBSSxJQUFJLGFBQWEsT0FBTyxVQUFVLFlBQVksQ0FBQyxJQUFJLFNBQVMsU0FBUSxFQUFHLFNBQVMsZUFBZSxHQUFHO0FBQ3JHLG9CQUFRLEtBQUssSUFBSSxTQUFVLENBQUE7QUFDM0I7QUFBQSxVQUNBO0FBRUQsbUJBQVMsT0FBTyxLQUFLO0FBQ3BCLGdCQUFJLE9BQU8sS0FBSyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsR0FBRztBQUN0QyxzQkFBUSxLQUFLLEdBQUc7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVELGFBQU8sUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUN2QjtBQUVELFFBQXFDLE9BQU8sU0FBUztBQUNwRCxNQUFBRixZQUFXLFVBQVVBO0FBQ3JCLGFBQUEsVUFBaUJBO0FBQUEsSUFDbkIsT0FLUTtBQUNOLGFBQU8sYUFBYUE7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7OztBQzNEaUMsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFRyxNQUFFLEdBQUUsSUFBRSxDQUFBLEdBQUcsSUFBRSxJQUFHLElBQUVDLFFBQUUsS0FBSSxJQUFFQSxRQUFFLEtBQUksSUFBRUEsUUFBRSxRQUFPLElBQUVBLFFBQUUsS0FBSSxJQUFFQSxRQUFFO0FBQVEsU0FBUyxFQUFFQyxJQUFFQyxJQUFFO0FBQUNGLFVBQUUsT0FBS0EsUUFBRSxJQUFJLEdBQUVDLElBQUVGLE9BQUdHLEVBQUMsR0FBRUgsTUFBRTtBQUFFLE1BQUlGLEtBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxFQUFDLElBQUcsSUFBRyxLQUFJLENBQUUsRUFBQTtBQUFHLFNBQU9JLE1BQUdKLEdBQUUsR0FBRyxVQUFRQSxHQUFFLEdBQUcsS0FBSyxFQUFDLEtBQUksRUFBQyxDQUFDLEdBQUVBLEdBQUUsR0FBR0ksRUFBQztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxTQUFPRixNQUFFLEdBQUUsRUFBRUksS0FBRSxDQUFDO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRUQsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxNQUFHQSxHQUFFLElBQUUsR0FBRSxDQUFDQSxHQUFFLFFBQU1BLEdBQUUsS0FBRyxDQUFDRixLQUFFQSxHQUFFSyxFQUFDLElBQUVDLElBQUUsUUFBT0QsRUFBQyxHQUFFLFNBQVNGLElBQUU7QUFBQyxRQUFJQyxLQUFFRixHQUFFLE1BQUlBLEdBQUUsSUFBSSxDQUFDLElBQUVBLEdBQUUsR0FBRyxDQUFDLEdBQUVLLEtBQUVMLEdBQUUsRUFBRUUsSUFBRUQsRUFBQztBQUFFLElBQUFDLE9BQUlHLE9BQUlMLEdBQUUsTUFBSSxDQUFDSyxJQUFFTCxHQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsSUFBSSxTQUFTLENBQUUsQ0FBQTtBQUFBLEVBQUUsQ0FBQyxHQUFFQSxHQUFFLE1BQUksR0FBRSxDQUFDLEVBQUUsSUFBRztBQUFDLFFBQUlNLEtBQUUsU0FBU0wsSUFBRUMsSUFBRUcsSUFBRTtBQUFDLFVBQUcsQ0FBQ0wsR0FBRSxJQUFJO0FBQUksZUFBTTtBQUFHLFVBQUlHLEtBQUVILEdBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxTQUFTQyxJQUFFO0FBQUMs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LENBQUEsR0FBR0QsUUFBRSxJQUFJSSxJQUFFSCxHQUFFLEdBQUc7QUFBQSxNQUFDO0FBQUM7QUFBQ0QsUUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSyxLQUFHLEVBQUUsQ0FBQztBQUFDLEdBQUVBLFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxPQUFHLEVBQUUsQ0FBQyxHQUFFLElBQUU7QUFBRSxNQUFJSCxNQUFHLElBQUUsRUFBRSxLQUFLO0FBQUksRUFBQUEsT0FBSSxNQUFJLEtBQUdBLEdBQUUsTUFBSSxDQUFBLEdBQUcsRUFBRSxNQUFJLENBQUEsR0FBR0EsR0FBRSxHQUFHLFFBQVEsU0FBU0csSUFBRTtBQUFDLElBQUFBLEdBQUUsUUFBTUEsR0FBRSxLQUFHQSxHQUFFLE1BQUtBLEdBQUUsTUFBSSxHQUFFQSxHQUFFLE1BQUlBLEdBQUUsSUFBRTtBQUFBLEVBQU0sQ0FBQyxNQUFJSCxHQUFFLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxRQUFRYyxHQUFDLEdBQUVkLEdBQUUsTUFBSSxDQUFBLEtBQUssSUFBRTtBQUFDLEdBQUVHLFFBQUUsU0FBTyxTQUFTQyxJQUFFO0FBQUMsT0FBRyxFQUFFQSxFQUFDO0FBQUUsTUFBSUYsS0FBRUUsR0FBRTtBQUFJLEVBQUFGLE1BQUdBLEdBQUUsUUFBTUEsR0FBRSxJQUFJLElBQUksV0FBUyxNQUFJLEVBQUUsS0FBS0EsRUFBQyxLQUFHLE1BQUlDLFFBQUUsMkJBQXlCLElBQUVBLFFBQUUsMEJBQXdCLEdBQUcsQ0FBQyxJQUFHRCxHQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsUUFBTSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLFFBQU8sRUFBRSxNQUFJO0FBQUEsRUFBQyxDQUFDLElBQUcsSUFBRSxJQUFFO0FBQUksR0FBRUMsUUFBRSxNQUFJLFNBQVNDLElBQUVHLElBQUU7QUFBQyxFQUFBQSxHQUFFLEtBQUssU0FBU0gsSUFB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QU1OLE9BQUksRUFBRSxPQUFLTSxHQUFFLGFBQWEsRUFBRSxLQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUlBLE1BQUk7QUFBQztBQUFDLFNBQVMsSUFBRztBQUFDLE9BQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFJO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUUsR0FBRztBQUFJLFNBQU9BLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFJLENBQUM7QUFBQztBQUFxTCxTQUFTLElBQUc7QUFBQyxPQUFLLElBQUUsTUFBSyxLQUFLLElBQUU7QUFBSTtBQUFDTSxRQUFFLFVBQVEsU0FBUyxHQUFFO0FBQUMsTUFBSU4sS0FBRSxFQUFFO0FBQUksRUFBQUEsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUcsR0FBR0EsTUFBRyxTQUFLLEVBQUUsUUFBTSxFQUFFLE9BQUssT0FBTSxLQUFHLEVBQUUsQ0FBQztBQUFDLElBQUcsRUFBRSxZQUFVLElBQUlELGFBQUcsTUFBSSxTQUFTLEdBQUVDLElBQUU7QUFBQyxNQUFJTSxLQUFFTixHQUFFLEtBQUlHLEtBQUU7QUFBSyxVQUFNQSxHQUFFLE1BQUlBLEdBQUUsSUFBRSxDQUFFLElBQUVBLEdBQUUsRUFBRSxLQUFLRyxFQUFDO0FBQUUsTUFBSUwsS0FBRSxFQUFFRSxHQUFFLEdBQUcsR0FBRUwsS0FBRSxPQUFHRixLQUFFLFdBQVU7QUFBQyxJQUFBRSxPQUFJQSxLQUFFLE1BQUdRLEdBQUUsTUFBSSxNQUFLTCxLQUFFQSxHQUFFVyxFQUFDLElBQUVBLEdBQUM7QUFBQSxFQUFHO0FBQUUsRUFBQU4sR0FBRSxNQUFJVjtBQUFFLE1BQUlnQixLQUFFLFdBQVU7QUFBQyxRQUFHLENBQUMsRUFBRVQsR0FBRSxLQUFJO0FBQUMsVUFBR0EsR0FBRSxNQUFNLEtBQUk7QUFBQyxZQUFJSixLQUFFSSxHQUFFLE1BQU07QUFBSSxRQUFBQSxHQUFFLElBQUksSUFBSSxDQUFDLElBQUUsRUFBRUosSUFBRUEsR0FBRSxJQUFJLEtBQUlBLEdBQUUsSUFBSSxHQUFHO0FBQUEsTUFBQztBQUFDLFVBQUlDO0FBQUUsV0FBSUcsR0FBRSxTQUFTLEVBQUMsS0FBSUEsR0FBRSxNQUFJLEtBQUksQ0FBQyxHQUFFSCxLQUFFRyxHQUFFLEVBQUUsSUFBRztBQUFJLFFBQUFILEdBQUU7SUFBYTtBQUFBLEVBQUMsR0FBRUssS0FBRSxTQUFLTCxHQUFFO0FBQUksRUFBQUcsR0FBRSxTQUFPRSxNQUFHRixHQUFFLFNBQVMsRUFBQyxLQUFJQSxHQUFFLE1BQUlBLEdBQUUsSUFBSSxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUUsRUFBRSxLQUFLUCxJQUFFQSxFQUFDO0FBQUMsR0FBRSxFQUFFLFVBQVUsdUJBQXFCLFdBQVU7QUFBQyxPQUFLLElBQUUsQ0FBRTtBQUFBLEdBQUUsRUFBRSxVQUFVLFNBQU8sU0FBUyxHQUFFVSxJQUFFO0FBQUMsTUFBRyxLQUFLLEtBQUk7QUFBQyxRQUFHLEtBQUssSUFBSSxLQUFJO0FBQUMsVUFBSUgsS0FBRSxTQUFTLGNBQWMsS0FBSyxHQUFFTCxLQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRTtBQUFJLFdBQUssSUFBSSxJQUFJLENBQUMsSUFBRSxFQUFFLEtBQUssS0FBSUssSUFBRUwsR0FBRSxNQUFJQSxHQUFFLEdBQUc7QUFBQSxJQUFDO0FBQUMsU0FBSyxNQUFJO0FBQUEsRUFBSTtBQUFDLE1BQUlGLEtBQUVVLEdBQUUsT0FBS04sY0FBRUMsVUFBRSxNQUFLLEVBQUUsUUFBUTtBQUFFLFNBQU9MLE9BQUlBLEdBQUUsTUFBSSxPQUFNLENBQUNJLGNBQUVDLFVBQUUsTUFBS0ssR0FBRSxNQUFJLE9BQUssRUFBRSxRQUFRLEdBQUVWLEVBQUM7QUFBQztBQUFFLElBQUksSUFBRSxTQUFTLEdBQUVJLElBQUVNLElBQUU7QUFBQyxNQUFHLEVBQUVBLEdBQUUsQ0FBQyxNQUFJQSxHQUFFLENBQUMsS0FBRyxFQUFFLEVBQUUsT0FBT04sRUFBQyxHQUFFLEVBQUUsTUFBTSxnQkFBYyxRQUFNLEVBQUUsTUFBTSxZQUFZLENBQUMsS0FBRyxDQUFDLEVBQUUsRUFBRTtBQUFNLFNBQUlNLEtBQUUsRUFBRSxHQUFFQSxNQUFHO0FBQUMsYUFBS0EsR0FBRSxTQUFPO0FBQUcsUUFBQUEsR0FBRSxJQUFHLEVBQUk7QUFBQyxVQUFHQSxHQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDO0FBQUU7QUFBTSxRQUFFLElBQUVBLEtBQUVBLEdBQUUsQ0FBQztBQUFBLElBQUM7QUFBQztBQUFBLENBQW1wQixFQUFFLFlBQVUsSUFBSVAsYUFBRyxNQUFJLFNBQVMsR0FBRTtBQUFDLE1BQUlDLEtBQUUsTUFBS00sS0FBRSxFQUFFTixHQUFFLEdBQUcsR0FBRUcsS0FBRUgsR0FBRSxFQUFFLElBQUksQ0FBQztBQUFFLFNBQU9HLEdBQUUsQ0FBQyxLQUFJLFNBQVNGLElBQUU7QUFBQyxRQUFJSCxLQUFFLFdBQVU7QUFBQyxNQUFBRSxHQUFFLE1BQU0sZUFBYUcsR0FBRSxLQUFLRixFQUFDLEdBQUUsRUFBRUQsSUFBRSxHQUFFRyxFQUFDLEtBQUdGLEdBQUM7QUFBQSxJQUFFO0FBQUUsSUFBQUssS0FBRUEsR0FBRVIsRUFBQyxJQUFFQTtFQUFHO0FBQUMsR0FBRSxFQUFFLFVBQVUsU0FBTyxTQUFTLEdBQUU7QUFBQyxPQUFLLElBQUUsTUFBSyxLQUFLLElBQUUsb0JBQUk7QUFBSSxNQUFJRSxLQUFFRyxhQUFFLEVBQUUsUUFBUTtBQUFFLElBQUUsZUFBYSxRQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUdILEdBQUUsUUFBTztBQUFHLFdBQVFNLEtBQUVOLEdBQUUsUUFBT007QUFBSyxTQUFLLEVBQUUsSUFBSU4sR0FBRU0sRUFBQyxHQUFFLEtBQUssSUFBRSxDQUFDLEdBQUUsR0FBRSxLQUFLLENBQUMsQ0FBQztBQUFFLFNBQU8sRUFBRTtBQUFRLEdBQUUsRUFBRSxVQUFVLHFCQUFtQixFQUFFLFVBQVUsb0JBQWtCLFdBQVU7QUFBQyxNQUFJLElBQUU7QUFBSyxPQUFLLEVBQUUsUUFBUSxTQUFTTixJQUFFTSxJQUFFO0FBQUMsTUFBRSxHQUFFQSxJQUFFTixFQUFDO0FBQUEsRUFBQyxDQUFDO0FBQUM7QUFBRSxJQUFJLElBQUUsZUFBYSxPQUFPLFVBQVEsT0FBTyxPQUFLLE9BQU8sSUFBSSxlQUFlLEtBQUcsT0FBTSxJQUFFLDJSQUEwUixJQUFFLG9DQUFtQyxJQUFFLGFBQVksSUFBRSxlQUFhLE9BQU8sVUFBUyxJQUFFLFNBQVMsR0FBRTtBQUFDLFVBQU8sZUFBYSxPQUFPLFVBQVEsWUFBVSxPQUFPLE9BQU0sSUFBRyxnQkFBYyxjQUFjLEtBQUssQ0FBQztBQUFDO0FBQWdMRCxVQUFFLFVBQVUsbUJBQWlCLENBQUUsR0FBQyxDQUFDLHNCQUFxQiw2QkFBNEIscUJBQXFCLEVBQUUsUUFBUSxTQUFTQyxJQUFFO0FBQUMsU0FBTyxlQUFlRCxVQUFFLFdBQVVDLElBQUUsRUFBQyxjQUFhLE1BQUcsS0FBSSxXQUFVO0FBQUMsV0FBTyxLQUFLLFlBQVVBLEVBQUM7QUFBQSxFQUFDLEdBQUUsS0FBSSxTQUFTLEdBQUU7QUFBQyxXQUFPLGVBQWUsTUFBS0EsSUFBRSxFQUFDLGNBQWEsTUFBRyxVQUFTLE1BQUcsT0FBTSxFQUFDLENBQUM7QUFBQSxFQUFDLEVBQUMsQ0FBQztBQUFDLENBQUM7QUFBRSxJQUFJLElBQUVNLFFBQUU7QUFBTSxTQUFTLElBQUc7O0FBQUUsU0FBUyxJQUFHO0FBQUMsU0FBTyxLQUFLO0FBQVk7QUFBQyxTQUFTLEtBQUk7QUFBQyxTQUFPLEtBQUs7QUFBZ0I7QUFBQ0EsUUFBRSxRQUFNLFNBQVMsR0FBRTtBQUFDLFNBQU8sTUFBSSxJQUFFLEVBQUUsQ0FBQyxJQUFHLEVBQUUsVUFBUSxHQUFFLEVBQUUsdUJBQXFCLEdBQUUsRUFBRSxxQkFBbUIsSUFBRyxFQUFFLGNBQVk7QUFBQztBQUFLLElBQUksS0FBRyxFQUFDLFlBQVcsT0FBRyxjQUFhLE1BQUcsS0FBSSxXQUFVO0FBQUMsU0FBTyxLQUFLO0FBQUssRUFBQyxHQUFFLEtBQUdBLFFBQUU7QUFBTUEsUUFBRSxRQUFNLFNBQVMsR0FBRTtBQUFDLGNBQVUsT0FBTyxFQUFFLFFBQU0sU0FBU1AsSUFBRTtBQUFDLFFBQUlDLEtBQUVELEdBQUUsT0FBTU8sS0FBRVAsR0FBRSxNQUFLRSxLQUFFLENBQUU7QUFBQyxhQUFRSCxNQUFLRSxJQUFFO0FBQUMsVUFBSUosS0FBRUksR0FBRUYsRUFBQztBQUFFLFVBQUcsRUFBRSxZQUFVQSxNQUFHLGtCQUFpQkUsTUFBRyxRQUFNSixNQUFHLEtBQUcsZUFBYUUsTUFBRyxlQUFhUSxNQUFHLFlBQVVSLE1BQUcsZ0JBQWNBLEtBQUc7QUFBQyxZQUFJYyxLQUFFZCxHQUFFLFlBQWE7QUFBQywyQkFBaUJBLE1BQUcsV0FBVUUsTUFBRyxRQUFNQSxHQUFFLFFBQU1GLEtBQUUsVUFBUSxlQUFhQSxNQUFHLFNBQUtGLEtBQUVBLEtBQUUsS0FBRyxvQkFBa0JnQixLQUFFZCxLQUFFLGVBQWEsZUFBYWMsTUFBRyxZQUFVTixNQUFHLGVBQWFBLE1BQUcsRUFBRU4sR0FBRSxJQUFJLElBQUUsY0FBWVksS0FBRWQsS0FBRSxjQUFZLGFBQVdjLEtBQUVkLEtBQUUsZUFBYSxFQUFFLEtBQUtBLEVBQUMsSUFBRUEsS0FBRWMsS0FBRSxPQUFLTixHQUFFLFFBQVEsR0FBRyxLQUFHLEVBQUUsS0FBS1IsRUFBQyxJQUFFQSxLQUFFQSxHQUFFLFFBQVEsR0FBRSxLQUFLLEVBQUUsWUFBVyxJQUFHLFNBQU9GLE9BQUlBLEtBQUUsVUFBUWdCLEtBQUVkLEtBQUUsV0FBVSxjQUFZYyxNQUFHWCxHQUFFSCxLQUFFYyxFQUFDLE1BQUlkLEtBQUUsbUJBQWtCRyxHQUFFSCxFQUFDLElBQUVGO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQyxnQkFBVVUsTUFBR0wsR0FBRSxZQUFVLE1BQU0sUUFBUUEsR0FBRSxLQUFLLE1BQUlBLEdBQUUsUUFBTUUsYUFBRUgsR0FBRSxRQUFRLEVBQUUsUUFBUSxTQUFTRCxJQUFFO0FBQUMsTUFBQUEsR0FBRSxNQUFNLFdBQVMsTUFBSUUsR0FBRSxNQUFNLFFBQVFGLEdBQUUsTUFBTSxLQUFLO0FBQUEsSUFBQyxDQUFDLElBQUcsWUFBVU8sTUFBRyxRQUFNTCxHQUFFLGlCQUFlQSxHQUFFLFFBQU1FLGFBQUVILEdBQUUsUUFBUSxFQUFFLFFBQVEsU0FBU0QsSUFBRTtBQUFDLE1BQUFBLEdBQUUsTUFBTSxXQUFTRSxHQUFFLFdBQVMsTUFBSUEsR0FBRSxhQUFhLFFBQVFGLEdBQUUsTUFBTSxLQUFLLElBQUVFLEdBQUUsZ0JBQWNGLEdBQUUsTUFBTTtBQUFBLElBQUssQ0FBQyxJQUFHQyxHQUFFLFNBQU8sQ0FBQ0EsR0FBRSxhQUFXQyxHQUFFLFFBQU1ELEdBQUUsT0FBTSxPQUFPLGVBQWVDLElBQUUsYUFBWSxFQUFFLE1BQUlELEdBQUUsYUFBVyxDQUFDQSxHQUFFLFNBQU9BLEdBQUUsU0FBT0EsR0FBRSxlQUFhQyxHQUFFLFFBQU1BLEdBQUUsWUFBVUQsR0FBRSxZQUFXRCxHQUFFLFFBQU1FO0FBQUEsRUFBQyxFQUFFLENBQUMsR0FBRSxFQUFFLFdBQVMsR0FBRSxNQUFJLEdBQUcsQ0FBQztBQUFDO0FBQUUsSUFBSSxLQUFHSyxRQUFFO0FBQUlBLFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxRQUFJLEdBQUcsQ0FBQyxHQUFLLEVBQUU7QUFBRztBQUFFLElBQUksS0FBR0EsUUFBRTtBQUFPQSxRQUFFLFNBQU8sU0FBUyxHQUFFO0FBQUMsUUFBSSxHQUFHLENBQUM7QUFBRSxNQUFJTixLQUFFLEVBQUUsT0FBTU0sS0FBRSxFQUFFO0FBQUksVUFBTUEsTUFBRyxlQUFhLEVBQUUsUUFBTSxXQUFVTixNQUFHQSxHQUFFLFVBQVFNLEdBQUUsVUFBUUEsR0FBRSxRQUFNLFFBQU1OLEdBQUUsUUFBTSxLQUFHQSxHQUFFO0FBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRXY4T2EsTUFBQUEsY0FBY0EsQ0FBQ0MsUUFBUSxRQUFTO0FBQzNDLFFBQU0sQ0FBQ0MsUUFBUUMsU0FBUyxJQUFJQyxFQUFTLEtBQUs7QUFDcENDLFFBQUFBLFdBQVdDLElBQU8sSUFBSTtBQUU1QixRQUFNQyxXQUFXQSxNQUFNO0FBQ3JCQyxpQkFBYUgsU0FBU0ksT0FBTztBQUNuQkMsY0FBQUEsQ0FBQUEsU0FBUSxDQUFDQSxJQUFJO0FBQUEsRUFBQTtBQUd6QkMsSUFBVSxNQUFNO0FBQ0xGLGFBQUFBLFVBQVVHLFdBQVcsTUFBTTtBQUNsQ1QsZ0JBQVUsSUFBSTtBQUFBLE9BQ2JGLEtBQUs7QUFFRCxXQUFBLE1BQU1PLGFBQWFILFNBQVNJLE9BQU87QUFBQSxFQUFBLEdBQ3pDLENBQUNSLEtBQUssQ0FBQztBQUVILFNBQUE7QUFBQSxJQUNMQztBQUFBQSxJQUNBSztBQUFBQSxFQUFBQTtBQUVKO0FDdkI4RCxJQUFJLElBQUU7QUFBRSxTQUFTLEVBQUV0QixJQUFFUSxJQUFFLEdBQUVOLElBQUVJLElBQUVRLElBQUU7QUFBQyxNQUFJYyxJQUFFekIsSUFBRTBCLEtBQUUsQ0FBQTtBQUFHLE9BQUkxQixNQUFLSztBQUFFLGFBQU9MLEtBQUV5QixLQUFFcEIsR0FBRUwsRUFBQyxJQUFFMEIsR0FBRTFCLEVBQUMsSUFBRUssR0FBRUwsRUFBQztBQUFFLE1BQUlMLEtBQUUsRUFBQyxNQUFLRSxJQUFFLE9BQU02QixJQUFFLEtBQUksR0FBRSxLQUFJRCxJQUFFLEtBQUksTUFBSyxJQUFHLE1BQUssS0FBSSxHQUFFLEtBQUksTUFBSyxLQUFJLFFBQU8sS0FBSSxNQUFLLEtBQUksTUFBSyxhQUFZLFFBQU8sS0FBSSxFQUFFLEdBQUUsVUFBU3RCLElBQUUsUUFBT1EsR0FBQztBQUFFLE1BQUcsY0FBWSxPQUFPZCxPQUFJNEIsS0FBRTVCLEdBQUU7QUFBYyxTQUFJRyxNQUFLeUI7QUFBRSxpQkFBU0MsR0FBRTFCLEVBQUMsTUFBSTBCLEdBQUUxQixFQUFDLElBQUV5QixHQUFFekIsRUFBQztBQUFHLFNBQU9FLFFBQUUsU0FBT0EsUUFBRSxNQUFNUCxFQUFDLEdBQUVBO0FBQUM7QUNFdFksTUFBTWdDLFFBQVFDLGNBQWU7QUFFcEMsTUFBTUMsZUFBZUEsQ0FBQztBQUFBLEVBQUVDO0FBQUFBLEVBQVVDO0FBQU0sTUFBTTtBQUNyQ0MsU0FBQUEsRUFBQ0wsTUFBTU0sVUFBUTtBQUFBLElBQUNGO0FBQUFBLElBQWFEO0FBQUFBLEVBQUFBLENBQTRCO0FBQ2xFO0FDSGFJLE1BQUFBLFNBQVNBLENBQUNDLFVBQTBCLENBQUNDLFFBQXVCQyxVQUN2RUMsU0FBYU4sRUFBQ0gsY0FBWTtBQUFBLEVBQUNFLE9BQU9NO0FBQUFBLEVBQU1QLFVBQUVLO0FBQUssQ0FBQSxHQUFrQkMsTUFBc0I7QUNENUVHLE1BQUFBLGtCQUFrQixNQUF3QkMsSUFBbUJiLEtBQUs7QUNJL0UsU0FBU2MsbUJBQWlCO0FBQ3hCLE9BQUssV0FBVztBQUNoQixPQUFLLE9BQU87QUFDZDtBQUVBLElBQUEsa0JBQWlCQTtBQ29CakIsU0FBU0MsS0FBRyxPQUFPLE9BQU87QUFDeEIsU0FBTyxVQUFVLFNBQVUsVUFBVSxTQUFTLFVBQVU7QUFDMUQ7QUFFQSxJQUFBLE9BQWlCQTtBQ3BDakIsSUFBSUEsT0FBS0M7QUFVVCxTQUFTQyxlQUFhLE9BQU8sS0FBSztBQUNoQyxNQUFJLFNBQVMsTUFBTTtBQUNuQixTQUFPLFVBQVU7QUFDZixRQUFJRixLQUFHLE1BQU0sTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFDN0IsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0QsU0FBTztBQUNUO0FBRUEsSUFBQSxnQkFBaUJFO0FDcEJqQixJQUFJQSxpQkFBZUQ7QUFHbkIsSUFBSSxhQUFhLE1BQU07QUFHdkIsSUFBSSxTQUFTLFdBQVc7QUFXeEIsU0FBU0Usa0JBQWdCLEtBQUs7QUFDNUIsTUFBSSxPQUFPLEtBQUssVUFDWkMsU0FBUUYsZUFBYSxNQUFNLEdBQUc7QUFFbEMsTUFBSUUsU0FBUSxHQUFHO0FBQ2IsV0FBTztBQUFBLEVBQ1I7QUFDRCxNQUFJLFlBQVksS0FBSyxTQUFTO0FBQzlCLE1BQUlBLFVBQVMsV0FBVztBQUN0QixTQUFLLElBQUc7QUFBQSxFQUNaLE9BQVM7QUFDTCxXQUFPLEtBQUssTUFBTUEsUUFBTyxDQUFDO0FBQUEsRUFDM0I7QUFDRCxJQUFFLEtBQUs7QUFDUCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLG1CQUFpQkQ7QUNsQ2pCLElBQUlELGlCQUFlRDtBQVduQixTQUFTSSxlQUFhLEtBQUs7QUFDekIsTUFBSSxPQUFPLEtBQUssVUFDWkQsU0FBUUYsZUFBYSxNQUFNLEdBQUc7QUFFbEMsU0FBT0UsU0FBUSxJQUFJLFNBQVksS0FBS0EsTUFBSyxFQUFFLENBQUM7QUFDOUM7QUFFQSxJQUFBLGdCQUFpQkM7QUNsQmpCLElBQUlILGlCQUFlRDtBQVduQixTQUFTSyxlQUFhLEtBQUs7QUFDekIsU0FBT0osZUFBYSxLQUFLLFVBQVUsR0FBRyxJQUFJO0FBQzVDO0FBRUEsSUFBQSxnQkFBaUJJO0FDZmpCLElBQUksZUFBZUw7QUFZbkIsU0FBU00sZUFBYSxLQUFLLE9BQU87QUFDaEMsTUFBSSxPQUFPLEtBQUssVUFDWkgsU0FBUSxhQUFhLE1BQU0sR0FBRztBQUVsQyxNQUFJQSxTQUFRLEdBQUc7QUFDYixNQUFFLEtBQUs7QUFDUCxTQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLEVBQzFCLE9BQVM7QUFDTCxTQUFLQSxNQUFLLEVBQUUsQ0FBQyxJQUFJO0FBQUEsRUFDbEI7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLGdCQUFpQkc7QUN6QmpCLElBQUksaUJBQWlCTixpQkFDakIsa0JBQWtCTyxrQkFDbEIsZUFBZUMsZUFDZixlQUFlQyxlQUNmLGVBQWVDO0FBU25CLFNBQVNDLFlBQVUsU0FBUztBQUMxQixNQUFJUixTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLE9BQUssTUFBSztBQUNWLFNBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFFBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFNBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQzVCO0FBQ0g7QUFHQVEsWUFBVSxVQUFVLFFBQVE7QUFDNUJBLFlBQVUsVUFBVSxRQUFRLElBQUk7QUFDaENBLFlBQVUsVUFBVSxNQUFNO0FBQzFCQSxZQUFVLFVBQVUsTUFBTTtBQUMxQkEsWUFBVSxVQUFVLE1BQU07QUFFMUIsSUFBQSxhQUFpQkE7QUMvQmpCLElBQUlBLGNBQVlYO0FBU2hCLFNBQVNZLGVBQWE7QUFDcEIsT0FBSyxXQUFXLElBQUlEO0FBQ3BCLE9BQUssT0FBTztBQUNkO0FBRUEsSUFBQSxjQUFpQkM7QUNMakIsU0FBU0MsY0FBWSxLQUFLO0FBQ3hCLE1BQUksT0FBTyxLQUFLLFVBQ1osU0FBUyxLQUFLLFFBQVEsRUFBRSxHQUFHO0FBRS9CLE9BQUssT0FBTyxLQUFLO0FBQ2pCLFNBQU87QUFDVDtBQUVBLElBQUEsZUFBaUJBO0FDUmpCLFNBQVNDLFdBQVMsS0FBSztBQUNyQixTQUFPLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDOUI7QUFFQSxJQUFBLFlBQWlCQTtBQ0pqQixTQUFTQyxXQUFTLEtBQUs7QUFDckIsU0FBTyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCO0FBRUEsSUFBQSxZQUFpQkE7QUNaakIsSUFBSUMsZUFBYSxPQUFPQyxrQkFBVSxZQUFZQSxrQkFBVUEsZUFBTyxXQUFXLFVBQVVBO0FBRXBGLElBQUEsY0FBaUJEO0FDSGpCLElBQUksYUFBYWhCO0FBR2pCLElBQUksV0FBVyxPQUFPLFFBQVEsWUFBWSxRQUFRLEtBQUssV0FBVyxVQUFVO0FBRzVFLElBQUlrQixTQUFPLGNBQWMsWUFBWSxTQUFTLGFBQWEsRUFBQztBQUU1RCxJQUFBLFFBQWlCQTtBQ1JqQixJQUFJQSxTQUFPbEI7QUFHWCxJQUFJbUIsV0FBU0QsT0FBSztBQUVsQixJQUFBLFVBQWlCQztBQ0xqQixJQUFJQSxXQUFTbkI7QUFHYixJQUFJb0IsZ0JBQWMsT0FBTztBQUd6QixJQUFJQyxtQkFBaUJELGNBQVk7QUFPakMsSUFBSUUseUJBQXVCRixjQUFZO0FBR3ZDLElBQUlHLG1CQUFpQkosV0FBU0EsU0FBTyxjQUFjO0FBU25ELFNBQVNLLFlBQVUsT0FBTztBQUN4QixNQUFJLFFBQVFILGlCQUFlLEtBQUssT0FBT0UsZ0JBQWMsR0FDakQsTUFBTSxNQUFNQSxnQkFBYztBQUU5QixNQUFJO0FBQ0YsVUFBTUEsZ0JBQWMsSUFBSTtBQUN4QixRQUFJLFdBQVc7QUFBQSxFQUNuQixTQUFXN0QsSUFBUDtBQUFBLEVBQVk7QUFFZCxNQUFJLFNBQVM0RCx1QkFBcUIsS0FBSyxLQUFLO0FBQzVDLE1BQUksVUFBVTtBQUNaLFFBQUksT0FBTztBQUNULFlBQU1DLGdCQUFjLElBQUk7QUFBQSxJQUM5QixPQUFXO0FBQ0wsYUFBTyxNQUFNQSxnQkFBYztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsYUFBaUJDO0FDNUNqQixJQUFJSixnQkFBYyxPQUFPO0FBT3pCLElBQUksdUJBQXVCQSxjQUFZO0FBU3ZDLFNBQVNLLGlCQUFlLE9BQU87QUFDN0IsU0FBTyxxQkFBcUIsS0FBSyxLQUFLO0FBQ3hDO0FBRUEsSUFBQSxrQkFBaUJBO0FDckJqQixJQUFJTixXQUFTbkIsU0FDVCxZQUFZTyxZQUNaLGlCQUFpQkM7QUFHckIsSUFBSSxVQUFVLGlCQUNWLGVBQWU7QUFHbkIsSUFBSSxpQkFBaUJXLFdBQVNBLFNBQU8sY0FBYztBQVNuRCxTQUFTTyxhQUFXLE9BQU87QUFDekIsTUFBSSxTQUFTLE1BQU07QUFDakIsV0FBTyxVQUFVLFNBQVksZUFBZTtBQUFBLEVBQzdDO0FBQ0QsU0FBUSxrQkFBa0Isa0JBQWtCLE9BQU8sS0FBSyxJQUNwRCxVQUFVLEtBQUssSUFDZixlQUFlLEtBQUs7QUFDMUI7QUFFQSxJQUFBLGNBQWlCQTtBQ0ZqQixTQUFTQyxXQUFTLE9BQU87QUFDdkIsTUFBSSxPQUFPLE9BQU87QUFDbEIsU0FBTyxTQUFTLFNBQVMsUUFBUSxZQUFZLFFBQVE7QUFDdkQ7QUFFQSxJQUFBLGFBQWlCQTtBQzlCakIsSUFBSUQsZUFBYTFCLGFBQ2IyQixhQUFXcEI7QUFHZixJQUFJLFdBQVcsMEJBQ1hxQixZQUFVLHFCQUNWLFNBQVMsOEJBQ1QsV0FBVztBQW1CZixTQUFTQyxhQUFXLE9BQU87QUFDekIsTUFBSSxDQUFDRixXQUFTLEtBQUssR0FBRztBQUNwQixXQUFPO0FBQUEsRUFDUjtBQUdELE1BQUksTUFBTUQsYUFBVyxLQUFLO0FBQzFCLFNBQU8sT0FBT0UsYUFBVyxPQUFPLFVBQVUsT0FBTyxZQUFZLE9BQU87QUFDdEU7QUFFQSxJQUFBLGVBQWlCQztBQ3BDakIsSUFBSVgsU0FBT2xCO0FBR1gsSUFBSThCLGVBQWFaLE9BQUssb0JBQW9CO0FBRTFDLElBQUEsY0FBaUJZO0FDTGpCLElBQUksYUFBYTlCO0FBR2pCLElBQUksYUFBYyxXQUFXO0FBQzNCLE1BQUksTUFBTSxTQUFTLEtBQUssY0FBYyxXQUFXLFFBQVEsV0FBVyxLQUFLLFlBQVksRUFBRTtBQUN2RixTQUFPLE1BQU8sbUJBQW1CLE1BQU87QUFDMUMsRUFBQztBQVNELFNBQVMrQixXQUFTLE1BQU07QUFDdEIsU0FBTyxDQUFDLENBQUMsY0FBZSxjQUFjO0FBQ3hDO0FBRUEsSUFBQSxZQUFpQkE7QUNsQmpCLElBQUlDLGNBQVksU0FBUztBQUd6QixJQUFJQyxpQkFBZUQsWUFBVTtBQVM3QixTQUFTRSxXQUFTLE1BQU07QUFDdEIsTUFBSSxRQUFRLE1BQU07QUFDaEIsUUFBSTtBQUNGLGFBQU9ELGVBQWEsS0FBSyxJQUFJO0FBQUEsSUFDbkMsU0FBYXZFLElBQVA7QUFBQSxJQUFZO0FBQ2QsUUFBSTtBQUNGLGFBQVEsT0FBTztBQUFBLElBQ3JCLFNBQWFBLElBQVA7QUFBQSxJQUFZO0FBQUEsRUFDZjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsWUFBaUJ3RTtBQ3pCakIsSUFBSUwsZUFBYTdCLGNBQ2IsV0FBV08sV0FDWG9CLGFBQVduQixZQUNYLFdBQVdDO0FBTWYsSUFBSSxlQUFlO0FBR25CLElBQUksZUFBZTtBQUduQixJQUFJdUIsY0FBWSxTQUFTLFdBQ3JCWixnQkFBYyxPQUFPO0FBR3pCLElBQUlhLGlCQUFlRCxZQUFVO0FBRzdCLElBQUlYLG1CQUFpQkQsY0FBWTtBQUdqQyxJQUFJLGFBQWE7QUFBQSxFQUFPLE1BQ3RCYSxlQUFhLEtBQUtaLGdCQUFjLEVBQUUsUUFBUSxjQUFjLE1BQU0sRUFDN0QsUUFBUSwwREFBMEQsT0FBTyxJQUFJO0FBQ2hGO0FBVUEsU0FBU2MsZUFBYSxPQUFPO0FBQzNCLE1BQUksQ0FBQ1IsV0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEdBQUc7QUFDdkMsV0FBTztBQUFBLEVBQ1I7QUFDRCxNQUFJLFVBQVVFLGFBQVcsS0FBSyxJQUFJLGFBQWE7QUFDL0MsU0FBTyxRQUFRLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDckM7QUFFQSxJQUFBLGdCQUFpQk07QUN0Q2pCLFNBQVNDLFdBQVMsUUFBUSxLQUFLO0FBQzdCLFNBQU8sVUFBVSxPQUFPLFNBQVksT0FBTyxHQUFHO0FBQ2hEO0FBRUEsSUFBQSxZQUFpQkE7QUNaakIsSUFBSSxlQUFlcEMsZUFDZixXQUFXTztBQVVmLFNBQVM4QixZQUFVLFFBQVEsS0FBSztBQUM5QixNQUFJLFFBQVEsU0FBUyxRQUFRLEdBQUc7QUFDaEMsU0FBTyxhQUFhLEtBQUssSUFBSSxRQUFRO0FBQ3ZDO0FBRUEsSUFBQSxhQUFpQkE7QUNoQmpCLElBQUlBLGNBQVlyQyxZQUNaa0IsU0FBT1g7QUFHWCxJQUFJK0IsUUFBTUQsWUFBVW5CLFFBQU0sS0FBSztBQUUvQixJQUFBLE9BQWlCb0I7QUNOakIsSUFBSUQsY0FBWXJDO0FBR2hCLElBQUl1QyxpQkFBZUYsWUFBVSxRQUFRLFFBQVE7QUFFN0MsSUFBQSxnQkFBaUJFO0FDTGpCLElBQUlBLGlCQUFldkM7QUFTbkIsU0FBU3dDLGNBQVk7QUFDbkIsT0FBSyxXQUFXRCxpQkFBZUEsZUFBYSxJQUFJLElBQUksQ0FBQTtBQUNwRCxPQUFLLE9BQU87QUFDZDtBQUVBLElBQUEsYUFBaUJDO0FDSmpCLFNBQVNDLGFBQVcsS0FBSztBQUN2QixNQUFJLFNBQVMsS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLEtBQUssU0FBUyxHQUFHO0FBQ3RELE9BQUssUUFBUSxTQUFTLElBQUk7QUFDMUIsU0FBTztBQUNUO0FBRUEsSUFBQSxjQUFpQkE7QUNoQmpCLElBQUlGLGlCQUFldkM7QUFHbkIsSUFBSTBDLG1CQUFpQjtBQUdyQixJQUFJdEIsZ0JBQWMsT0FBTztBQUd6QixJQUFJQyxtQkFBaUJELGNBQVk7QUFXakMsU0FBU3VCLFVBQVEsS0FBSztBQUNwQixNQUFJLE9BQU8sS0FBSztBQUNoQixNQUFJSixnQkFBYztBQUNoQixRQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLFdBQU8sV0FBV0csbUJBQWlCLFNBQVk7QUFBQSxFQUNoRDtBQUNELFNBQU9yQixpQkFBZSxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssR0FBRyxJQUFJO0FBQ3REO0FBRUEsSUFBQSxXQUFpQnNCO0FDN0JqQixJQUFJSixpQkFBZXZDO0FBR25CLElBQUlvQixnQkFBYyxPQUFPO0FBR3pCLElBQUlDLG1CQUFpQkQsY0FBWTtBQVdqQyxTQUFTd0IsVUFBUSxLQUFLO0FBQ3BCLE1BQUksT0FBTyxLQUFLO0FBQ2hCLFNBQU9MLGlCQUFnQixLQUFLLEdBQUcsTUFBTSxTQUFhbEIsaUJBQWUsS0FBSyxNQUFNLEdBQUc7QUFDakY7QUFFQSxJQUFBLFdBQWlCdUI7QUN0QmpCLElBQUksZUFBZTVDO0FBR25CLElBQUksaUJBQWlCO0FBWXJCLFNBQVM2QyxVQUFRLEtBQUssT0FBTztBQUMzQixNQUFJLE9BQU8sS0FBSztBQUNoQixPQUFLLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ2pDLE9BQUssR0FBRyxJQUFLLGdCQUFnQixVQUFVLFNBQWEsaUJBQWlCO0FBQ3JFLFNBQU87QUFDVDtBQUVBLElBQUEsV0FBaUJBO0FDdEJqQixJQUFJLFlBQVk3QyxZQUNaLGFBQWFPLGFBQ2IsVUFBVUMsVUFDVixVQUFVQyxVQUNWLFVBQVVDO0FBU2QsU0FBU29DLE9BQUssU0FBUztBQUNyQixNQUFJM0MsU0FBUSxJQUNSLFNBQVMsV0FBVyxPQUFPLElBQUksUUFBUTtBQUUzQyxPQUFLLE1BQUs7QUFDVixTQUFPLEVBQUVBLFNBQVEsUUFBUTtBQUN2QixRQUFJLFFBQVEsUUFBUUEsTUFBSztBQUN6QixTQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUM1QjtBQUNIO0FBR0EyQyxPQUFLLFVBQVUsUUFBUTtBQUN2QkEsT0FBSyxVQUFVLFFBQVEsSUFBSTtBQUMzQkEsT0FBSyxVQUFVLE1BQU07QUFDckJBLE9BQUssVUFBVSxNQUFNO0FBQ3JCQSxPQUFLLFVBQVUsTUFBTTtBQUVyQixJQUFBLFFBQWlCQTtBQy9CakIsSUFBSSxPQUFPOUMsT0FDUFcsY0FBWUosWUFDWitCLFFBQU05QjtBQVNWLFNBQVN1QyxrQkFBZ0I7QUFDdkIsT0FBSyxPQUFPO0FBQ1osT0FBSyxXQUFXO0FBQUEsSUFDZCxRQUFRLElBQUk7QUFBQSxJQUNaLE9BQU8sS0FBS1QsU0FBTzNCO0FBQUFBLElBQ25CLFVBQVUsSUFBSTtBQUFBLEVBQ2xCO0FBQ0E7QUFFQSxJQUFBLGlCQUFpQm9DO0FDYmpCLFNBQVNDLFlBQVUsT0FBTztBQUN4QixNQUFJLE9BQU8sT0FBTztBQUNsQixTQUFRLFFBQVEsWUFBWSxRQUFRLFlBQVksUUFBUSxZQUFZLFFBQVEsWUFDdkUsVUFBVSxjQUNWLFVBQVU7QUFDakI7QUFFQSxJQUFBLGFBQWlCQTtBQ2RqQixJQUFJLFlBQVloRDtBQVVoQixTQUFTaUQsYUFBVyxLQUFLLEtBQUs7QUFDNUIsTUFBSSxPQUFPLElBQUk7QUFDZixTQUFPLFVBQVUsR0FBRyxJQUNoQixLQUFLLE9BQU8sT0FBTyxXQUFXLFdBQVcsTUFBTSxJQUMvQyxLQUFLO0FBQ1g7QUFFQSxJQUFBLGNBQWlCQTtBQ2pCakIsSUFBSUEsZUFBYWpEO0FBV2pCLFNBQVNrRCxpQkFBZSxLQUFLO0FBQzNCLE1BQUksU0FBU0QsYUFBVyxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUNoRCxPQUFLLFFBQVEsU0FBUyxJQUFJO0FBQzFCLFNBQU87QUFDVDtBQUVBLElBQUEsa0JBQWlCQztBQ2pCakIsSUFBSUQsZUFBYWpEO0FBV2pCLFNBQVNtRCxjQUFZLEtBQUs7QUFDeEIsU0FBT0YsYUFBVyxNQUFNLEdBQUcsRUFBRSxJQUFJLEdBQUc7QUFDdEM7QUFFQSxJQUFBLGVBQWlCRTtBQ2ZqQixJQUFJRixlQUFhakQ7QUFXakIsU0FBU29ELGNBQVksS0FBSztBQUN4QixTQUFPSCxhQUFXLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRztBQUN0QztBQUVBLElBQUEsZUFBaUJHO0FDZmpCLElBQUksYUFBYXBEO0FBWWpCLFNBQVNxRCxjQUFZLEtBQUssT0FBTztBQUMvQixNQUFJLE9BQU8sV0FBVyxNQUFNLEdBQUcsR0FDM0IsT0FBTyxLQUFLO0FBRWhCLE9BQUssSUFBSSxLQUFLLEtBQUs7QUFDbkIsT0FBSyxRQUFRLEtBQUssUUFBUSxPQUFPLElBQUk7QUFDckMsU0FBTztBQUNUO0FBRUEsSUFBQSxlQUFpQkE7QUNyQmpCLElBQUksZ0JBQWdCckQsZ0JBQ2hCLGlCQUFpQk8saUJBQ2pCLGNBQWNDLGNBQ2QsY0FBY0MsY0FDZCxjQUFjQztBQVNsQixTQUFTNEMsV0FBUyxTQUFTO0FBQ3pCLE1BQUluRCxTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLE9BQUssTUFBSztBQUNWLFNBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFFBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFNBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQzVCO0FBQ0g7QUFHQW1ELFdBQVMsVUFBVSxRQUFRO0FBQzNCQSxXQUFTLFVBQVUsUUFBUSxJQUFJO0FBQy9CQSxXQUFTLFVBQVUsTUFBTTtBQUN6QkEsV0FBUyxVQUFVLE1BQU07QUFDekJBLFdBQVMsVUFBVSxNQUFNO0FBRXpCLElBQUEsWUFBaUJBO0FDL0JqQixJQUFJM0MsY0FBWVgsWUFDWnNDLFFBQU0vQixNQUNOLFdBQVdDO0FBR2YsSUFBSSxtQkFBbUI7QUFZdkIsU0FBUytDLFdBQVMsS0FBSyxPQUFPO0FBQzVCLE1BQUksT0FBTyxLQUFLO0FBQ2hCLE1BQUksZ0JBQWdCNUMsYUFBVztBQUM3QixRQUFJLFFBQVEsS0FBSztBQUNqQixRQUFJLENBQUMyQixTQUFRLE1BQU0sU0FBUyxtQkFBbUIsR0FBSTtBQUNqRCxZQUFNLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUN2QixXQUFLLE9BQU8sRUFBRSxLQUFLO0FBQ25CLGFBQU87QUFBQSxJQUNSO0FBQ0QsV0FBTyxLQUFLLFdBQVcsSUFBSSxTQUFTLEtBQUs7QUFBQSxFQUMxQztBQUNELE9BQUssSUFBSSxLQUFLLEtBQUs7QUFDbkIsT0FBSyxPQUFPLEtBQUs7QUFDakIsU0FBTztBQUNUO0FBRUEsSUFBQSxZQUFpQmlCO0FDakNqQixJQUFJLFlBQVl2RCxZQUNaLGFBQWFPLGFBQ2IsY0FBY0MsY0FDZCxXQUFXQyxXQUNYLFdBQVdDLFdBQ1gsV0FBVzhDO0FBU2YsU0FBU0MsUUFBTSxTQUFTO0FBQ3RCLE1BQUksT0FBTyxLQUFLLFdBQVcsSUFBSSxVQUFVLE9BQU87QUFDaEQsT0FBSyxPQUFPLEtBQUs7QUFDbkI7QUFHQUEsUUFBTSxVQUFVLFFBQVE7QUFDeEJBLFFBQU0sVUFBVSxRQUFRLElBQUk7QUFDNUJBLFFBQU0sVUFBVSxNQUFNO0FBQ3RCQSxRQUFNLFVBQVUsTUFBTTtBQUN0QkEsUUFBTSxVQUFVLE1BQU07QUFFdEIsSUFBQSxTQUFpQkE7QUMxQmpCLElBQUksWUFBWXpEO0FBRWhCLElBQUkwRCxtQkFBa0IsV0FBVztBQUMvQixNQUFJO0FBQ0YsUUFBSSxPQUFPLFVBQVUsUUFBUSxnQkFBZ0I7QUFDN0MsU0FBSyxDQUFFLEdBQUUsSUFBSSxDQUFBLENBQUU7QUFDZixXQUFPO0FBQUEsRUFDWCxTQUFXaEcsSUFBUDtBQUFBLEVBQVk7QUFDaEIsRUFBQztBQUVELElBQUEsa0JBQWlCZ0c7QUNWakIsSUFBSUEsbUJBQWlCMUQ7QUFXckIsU0FBUzJELGtCQUFnQixRQUFRLEtBQUssT0FBTztBQUMzQyxNQUFJLE9BQU8sZUFBZUQsa0JBQWdCO0FBQ3hDQSxxQkFBZSxRQUFRLEtBQUs7QUFBQSxNQUMxQixnQkFBZ0I7QUFBQSxNQUNoQixjQUFjO0FBQUEsTUFDZCxTQUFTO0FBQUEsTUFDVCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLEVBQ0wsT0FBUztBQUNMLFdBQU8sR0FBRyxJQUFJO0FBQUEsRUFDZjtBQUNIO0FBRUEsSUFBQSxtQkFBaUJDO0FDeEJqQixJQUFJQSxvQkFBa0IzRCxrQkFDbEJELE9BQUtRO0FBV1QsU0FBU3FELG1CQUFpQixRQUFRLEtBQUssT0FBTztBQUM1QyxNQUFLLFVBQVUsVUFBYSxDQUFDN0QsS0FBRyxPQUFPLEdBQUcsR0FBRyxLQUFLLEtBQzdDLFVBQVUsVUFBYSxFQUFFLE9BQU8sU0FBVTtBQUM3QzRELHNCQUFnQixRQUFRLEtBQUssS0FBSztBQUFBLEVBQ25DO0FBQ0g7QUFFQSxJQUFBLG9CQUFpQkM7QUNaakIsU0FBU0MsZ0JBQWMsV0FBVztBQUNoQyxTQUFPLFNBQVMsUUFBUSxVQUFVLFVBQVU7QUFDMUMsUUFBSTFELFNBQVEsSUFDUixXQUFXLE9BQU8sTUFBTSxHQUN4QixRQUFRLFNBQVMsTUFBTSxHQUN2QixTQUFTLE1BQU07QUFFbkIsV0FBTyxVQUFVO0FBQ2YsVUFBSSxNQUFNLE1BQU0sWUFBWSxTQUFTLEVBQUVBLE1BQUs7QUFDNUMsVUFBSSxTQUFTLFNBQVMsR0FBRyxHQUFHLEtBQUssUUFBUSxNQUFNLE9BQU87QUFDcEQ7QUFBQSxNQUNEO0FBQUEsSUFDRjtBQUNELFdBQU87QUFBQSxFQUNYO0FBQ0E7QUFFQSxJQUFBLGlCQUFpQjBEO0FDeEJqQixJQUFJLGdCQUFnQjdEO0FBYXBCLElBQUk4RCxZQUFVLGNBQWE7QUFFM0IsSUFBQSxXQUFpQkE7Ozs7Ozs7Ozs7O0FDZmpCLE1BQUk1QyxRQUFPbEI7QUFHWCxNQUFJLGNBQTRDLFdBQVcsQ0FBQyxRQUFRLFlBQVk7QUFHaEYsTUFBSSxhQUFhLGVBQWUsUUFBNkIsVUFBVSxDQUFDLE9BQU8sWUFBWTtBQUczRixNQUFJLGdCQUFnQixjQUFjLFdBQVcsWUFBWTtBQUd6RCxNQUFJLFNBQVMsZ0JBQWdCa0IsTUFBSyxTQUFTLFFBQ3ZDLGNBQWMsU0FBUyxPQUFPLGNBQWM7QUFVaEQsV0FBUzZDLGFBQVksUUFBUSxRQUFRO0FBQ25DLFFBQUksUUFBUTtBQUNWLGFBQU8sT0FBTztJQUNmO0FBQ0QsUUFBSSxTQUFTLE9BQU8sUUFDaEIsU0FBUyxjQUFjLFlBQVksTUFBTSxJQUFJLElBQUksT0FBTyxZQUFZLE1BQU07QUFFOUUsV0FBTyxLQUFLLE1BQU07QUFDbEIsV0FBTztBQUFBLEVBQ1I7QUFFRCxTQUFBLFVBQWlCQTs7QUNsQ2pCLElBQUk3QyxTQUFPbEI7QUFHWCxJQUFJZ0UsZUFBYTlDLE9BQUs7QUFFdEIsSUFBQSxjQUFpQjhDO0FDTGpCLElBQUksYUFBYWhFO0FBU2pCLFNBQVNpRSxtQkFBaUIsYUFBYTtBQUNyQyxNQUFJLFNBQVMsSUFBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQy9ELE1BQUksV0FBVyxNQUFNLEVBQUUsSUFBSSxJQUFJLFdBQVcsV0FBVyxDQUFDO0FBQ3RELFNBQU87QUFDVDtBQUVBLElBQUEsb0JBQWlCQTtBQ2ZqQixJQUFJLG1CQUFtQmpFO0FBVXZCLFNBQVNrRSxrQkFBZ0IsWUFBWSxRQUFRO0FBQzNDLE1BQUksU0FBUyxTQUFTLGlCQUFpQixXQUFXLE1BQU0sSUFBSSxXQUFXO0FBQ3ZFLFNBQU8sSUFBSSxXQUFXLFlBQVksUUFBUSxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQ3BGO0FBRUEsSUFBQSxtQkFBaUJBO0FDUGpCLFNBQVNDLFlBQVUsUUFBUSxPQUFPO0FBQ2hDLE1BQUloRSxTQUFRLElBQ1IsU0FBUyxPQUFPO0FBRXBCLFlBQVUsUUFBUSxNQUFNLE1BQU07QUFDOUIsU0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsVUFBTUEsTUFBSyxJQUFJLE9BQU9BLE1BQUs7QUFBQSxFQUM1QjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsYUFBaUJnRTtBQ25CakIsSUFBSXhDLGFBQVczQjtBQUdmLElBQUksZUFBZSxPQUFPO0FBVTFCLElBQUlvRSxlQUFjLFdBQVc7QUFDM0IsV0FBUyxTQUFTO0FBQUEsRUFBRTtBQUNwQixTQUFPLFNBQVMsT0FBTztBQUNyQixRQUFJLENBQUN6QyxXQUFTLEtBQUssR0FBRztBQUNwQixhQUFPO0lBQ1I7QUFDRCxRQUFJLGNBQWM7QUFDaEIsYUFBTyxhQUFhLEtBQUs7QUFBQSxJQUMxQjtBQUNELFdBQU8sWUFBWTtBQUNuQixRQUFJLFNBQVMsSUFBSTtBQUNqQixXQUFPLFlBQVk7QUFDbkIsV0FBTztBQUFBLEVBQ1g7QUFDQSxFQUFDO0FBRUQsSUFBQSxjQUFpQnlDO0FDckJqQixTQUFTQyxVQUFRLE1BQU0sV0FBVztBQUNoQyxTQUFPLFNBQVMsS0FBSztBQUNuQixXQUFPLEtBQUssVUFBVSxHQUFHLENBQUM7QUFBQSxFQUM5QjtBQUNBO0FBRUEsSUFBQSxXQUFpQkE7QUNkakIsSUFBSSxVQUFVckU7QUFHZCxJQUFJc0UsaUJBQWUsUUFBUSxPQUFPLGdCQUFnQixNQUFNO0FBRXhELElBQUEsZ0JBQWlCQTtBQ0pqQixJQUFJbEQsZ0JBQWMsT0FBTztBQVN6QixTQUFTbUQsY0FBWSxPQUFPO0FBQzFCLE1BQUksT0FBTyxTQUFTLE1BQU0sYUFDdEIsUUFBUyxPQUFPLFFBQVEsY0FBYyxLQUFLLGFBQWNuRDtBQUU3RCxTQUFPLFVBQVU7QUFDbkI7QUFFQSxJQUFBLGVBQWlCbUQ7QUNqQmpCLElBQUksYUFBYXZFLGFBQ2JzRSxpQkFBZS9ELGVBQ2ZnRSxnQkFBYy9EO0FBU2xCLFNBQVNnRSxrQkFBZ0IsUUFBUTtBQUMvQixTQUFRLE9BQU8sT0FBTyxlQUFlLGNBQWMsQ0FBQ0QsY0FBWSxNQUFNLElBQ2xFLFdBQVdELGVBQWEsTUFBTSxDQUFDLElBQy9CO0FBQ047QUFFQSxJQUFBLG1CQUFpQkU7QUNPakIsU0FBU0MsZUFBYSxPQUFPO0FBQzNCLFNBQU8sU0FBUyxRQUFRLE9BQU8sU0FBUztBQUMxQztBQUVBLElBQUEsaUJBQWlCQTtBQzVCakIsSUFBSS9DLGVBQWExQixhQUNieUUsaUJBQWVsRTtBQUduQixJQUFJbUUsWUFBVTtBQVNkLFNBQVNDLGtCQUFnQixPQUFPO0FBQzlCLFNBQU9GLGVBQWEsS0FBSyxLQUFLL0MsYUFBVyxLQUFLLEtBQUtnRDtBQUNyRDtBQUVBLElBQUEsbUJBQWlCQztBQ2pCakIsSUFBSSxrQkFBa0IzRSxrQkFDbEJ5RSxpQkFBZWxFO0FBR25CLElBQUlhLGdCQUFjLE9BQU87QUFHekIsSUFBSUMsbUJBQWlCRCxjQUFZO0FBR2pDLElBQUksdUJBQXVCQSxjQUFZO0FBb0J2QyxJQUFJd0QsZ0JBQWMsZ0JBQWdCLFdBQVc7QUFBRSxTQUFPO0FBQVUsR0FBSSxJQUFJLGtCQUFrQixTQUFTLE9BQU87QUFDeEcsU0FBT0gsZUFBYSxLQUFLLEtBQUtwRCxpQkFBZSxLQUFLLE9BQU8sUUFBUSxLQUMvRCxDQUFDLHFCQUFxQixLQUFLLE9BQU8sUUFBUTtBQUM5QztBQUVBLElBQUEsZ0JBQWlCdUQ7QUNaakIsSUFBSUMsWUFBVSxNQUFNO0FBRXBCLElBQUEsWUFBaUJBO0FDeEJqQixJQUFJQyxxQkFBbUI7QUE0QnZCLFNBQVNDLFdBQVMsT0FBTztBQUN2QixTQUFPLE9BQU8sU0FBUyxZQUNyQixRQUFRLE1BQU0sUUFBUSxLQUFLLEtBQUssU0FBU0Q7QUFDN0M7QUFFQSxJQUFBLGFBQWlCQztBQ2xDakIsSUFBSWxELGVBQWE3QixjQUNiK0UsYUFBV3hFO0FBMkJmLFNBQVN5RSxjQUFZLE9BQU87QUFDMUIsU0FBTyxTQUFTLFFBQVFELFdBQVMsTUFBTSxNQUFNLEtBQUssQ0FBQ2xELGFBQVcsS0FBSztBQUNyRTtBQUVBLElBQUEsZ0JBQWlCbUQ7QUNoQ2pCLElBQUlBLGdCQUFjaEYsZUFDZHlFLGlCQUFlbEU7QUEyQm5CLFNBQVMwRSxvQkFBa0IsT0FBTztBQUNoQyxTQUFPUixlQUFhLEtBQUssS0FBS08sY0FBWSxLQUFLO0FBQ2pEO0FBRUEsSUFBQSxzQkFBaUJDOzs7Ozs7Ozs7O0FDbkJqQixTQUFTLFlBQVk7QUFDbkIsU0FBTztBQUNUO0FBRUEsSUFBQSxjQUFpQjtBQUFBO0FDakJqQixNQUFJL0QsUUFBT2xCLE9BQ1BrRixhQUFZM0U7QUFHaEIsTUFBSSxjQUE0QyxXQUFXLENBQUMsUUFBUSxZQUFZO0FBR2hGLE1BQUksYUFBYSxlQUFlLFFBQTZCLFVBQVUsQ0FBQyxPQUFPLFlBQVk7QUFHM0YsTUFBSSxnQkFBZ0IsY0FBYyxXQUFXLFlBQVk7QUFHekQsTUFBSSxTQUFTLGdCQUFnQlcsTUFBSyxTQUFTO0FBRzNDLE1BQUksaUJBQWlCLFNBQVMsT0FBTyxXQUFXO0FBbUJoRCxNQUFJaUUsWUFBVyxrQkFBa0JEO0FBRWpDLFNBQUEsVUFBaUJDOztBQ3JDakIsSUFBSXpELGVBQWExQixhQUNiLGVBQWVPLGVBQ2ZrRSxpQkFBZWpFO0FBR25CLElBQUk0RSxjQUFZO0FBR2hCLElBQUksWUFBWSxTQUFTLFdBQ3JCaEUsZ0JBQWMsT0FBTztBQUd6QixJQUFJLGVBQWUsVUFBVTtBQUc3QixJQUFJQyxtQkFBaUJELGNBQVk7QUFHakMsSUFBSSxtQkFBbUIsYUFBYSxLQUFLLE1BQU07QUE4Qi9DLFNBQVNpRSxnQkFBYyxPQUFPO0FBQzVCLE1BQUksQ0FBQ1osZUFBYSxLQUFLLEtBQUsvQyxhQUFXLEtBQUssS0FBSzBELGFBQVc7QUFDMUQsV0FBTztBQUFBLEVBQ1I7QUFDRCxNQUFJLFFBQVEsYUFBYSxLQUFLO0FBQzlCLE1BQUksVUFBVSxNQUFNO0FBQ2xCLFdBQU87QUFBQSxFQUNSO0FBQ0QsTUFBSSxPQUFPL0QsaUJBQWUsS0FBSyxPQUFPLGFBQWEsS0FBSyxNQUFNO0FBQzlELFNBQU8sT0FBTyxRQUFRLGNBQWMsZ0JBQWdCLFFBQ2xELGFBQWEsS0FBSyxJQUFJLEtBQUs7QUFDL0I7QUFFQSxJQUFBLGtCQUFpQmdFO0FDN0RqQixJQUFJLGFBQWFyRixhQUNiLFdBQVdPLFlBQ1gsZUFBZUM7QUFHbkIsSUFBSSxVQUFVLHNCQUNWLFdBQVcsa0JBQ1gsVUFBVSxvQkFDVixVQUFVLGlCQUNWLFdBQVcsa0JBQ1gsVUFBVSxxQkFDVixTQUFTLGdCQUNULFlBQVksbUJBQ1osWUFBWSxtQkFDWixZQUFZLG1CQUNaLFNBQVMsZ0JBQ1QsWUFBWSxtQkFDWixhQUFhO0FBRWpCLElBQUksaUJBQWlCLHdCQUNqQixjQUFjLHFCQUNkLGFBQWEseUJBQ2IsYUFBYSx5QkFDYixVQUFVLHNCQUNWLFdBQVcsdUJBQ1gsV0FBVyx1QkFDWCxXQUFXLHVCQUNYLGtCQUFrQiw4QkFDbEIsWUFBWSx3QkFDWixZQUFZO0FBR2hCLElBQUksaUJBQWlCLENBQUE7QUFDckIsZUFBZSxVQUFVLElBQUksZUFBZSxVQUFVLElBQ3RELGVBQWUsT0FBTyxJQUFJLGVBQWUsUUFBUSxJQUNqRCxlQUFlLFFBQVEsSUFBSSxlQUFlLFFBQVEsSUFDbEQsZUFBZSxlQUFlLElBQUksZUFBZSxTQUFTLElBQzFELGVBQWUsU0FBUyxJQUFJO0FBQzVCLGVBQWUsT0FBTyxJQUFJLGVBQWUsUUFBUSxJQUNqRCxlQUFlLGNBQWMsSUFBSSxlQUFlLE9BQU8sSUFDdkQsZUFBZSxXQUFXLElBQUksZUFBZSxPQUFPLElBQ3BELGVBQWUsUUFBUSxJQUFJLGVBQWUsT0FBTyxJQUNqRCxlQUFlLE1BQU0sSUFBSSxlQUFlLFNBQVMsSUFDakQsZUFBZSxTQUFTLElBQUksZUFBZSxTQUFTLElBQ3BELGVBQWUsTUFBTSxJQUFJLGVBQWUsU0FBUyxJQUNqRCxlQUFlLFVBQVUsSUFBSTtBQVM3QixTQUFTOEUsbUJBQWlCLE9BQU87QUFDL0IsU0FBTyxhQUFhLEtBQUssS0FDdkIsU0FBUyxNQUFNLE1BQU0sS0FBSyxDQUFDLENBQUMsZUFBZSxXQUFXLEtBQUssQ0FBQztBQUNoRTtBQUVBLElBQUEsb0JBQWlCQTtBQ3BEakIsU0FBU0MsWUFBVSxNQUFNO0FBQ3ZCLFNBQU8sU0FBUyxPQUFPO0FBQ3JCLFdBQU8sS0FBSyxLQUFLO0FBQUEsRUFDckI7QUFDQTtBQUVBLElBQUEsYUFBaUJBOzs7Ozs7Ozs7OztBQ2JqQixNQUFJdkUsY0FBYWhCO0FBR2pCLE1BQUksY0FBNEMsV0FBVyxDQUFDLFFBQVEsWUFBWTtBQUdoRixNQUFJLGFBQWEsZUFBZSxRQUE2QixVQUFVLENBQUMsT0FBTyxZQUFZO0FBRzNGLE1BQUksZ0JBQWdCLGNBQWMsV0FBVyxZQUFZO0FBR3pELE1BQUksY0FBYyxpQkFBaUJnQixZQUFXO0FBRzlDLE1BQUl3RSxZQUFZLFdBQVc7QUFDekIsUUFBSTtBQUVGLFVBQUksUUFBUSxjQUFjLFdBQVcsV0FBVyxXQUFXLFFBQVEsTUFBTSxFQUFFO0FBRTNFLFVBQUksT0FBTztBQUNULGVBQU87QUFBQSxNQUNSO0FBR0QsYUFBTyxlQUFlLFlBQVksV0FBVyxZQUFZLFFBQVEsTUFBTTtBQUFBLElBQzNFLFNBQVc5SCxJQUFQO0FBQUEsSUFBWTtBQUFBLEVBQ2YsRUFBQTtBQUVELFNBQUEsVUFBaUI4SDs7QUM3QmpCLElBQUksbUJBQW1CeEYsbUJBQ25CLFlBQVlPLFlBQ1osV0FBV0M7QUFHZixJQUFJLG1CQUFtQixZQUFZLFNBQVM7QUFtQjVDLElBQUlpRixpQkFBZSxtQkFBbUIsVUFBVSxnQkFBZ0IsSUFBSTtBQUVwRSxJQUFBLGlCQUFpQkE7QUNsQmpCLFNBQVNDLFVBQVEsUUFBUSxLQUFLO0FBQzVCLE1BQUksUUFBUSxpQkFBaUIsT0FBTyxPQUFPLEdBQUcsTUFBTSxZQUFZO0FBQzlEO0FBQUEsRUFDRDtBQUVELE1BQUksT0FBTyxhQUFhO0FBQ3RCO0FBQUEsRUFDRDtBQUVELFNBQU8sT0FBTyxHQUFHO0FBQ25CO0FBRUEsSUFBQSxXQUFpQkE7QUNwQmpCLElBQUkvQixvQkFBa0IzRCxrQkFDbEJELE9BQUtRO0FBR1QsSUFBSWEsZ0JBQWMsT0FBTztBQUd6QixJQUFJQyxtQkFBaUJELGNBQVk7QUFZakMsU0FBU3VFLGNBQVksUUFBUSxLQUFLLE9BQU87QUFDdkMsTUFBSSxXQUFXLE9BQU8sR0FBRztBQUN6QixNQUFJLEVBQUV0RSxpQkFBZSxLQUFLLFFBQVEsR0FBRyxLQUFLdEIsS0FBRyxVQUFVLEtBQUssTUFDdkQsVUFBVSxVQUFhLEVBQUUsT0FBTyxTQUFVO0FBQzdDNEQsc0JBQWdCLFFBQVEsS0FBSyxLQUFLO0FBQUEsRUFDbkM7QUFDSDtBQUVBLElBQUEsZUFBaUJnQztBQzNCakIsSUFBSSxjQUFjM0YsY0FDZCxrQkFBa0JPO0FBWXRCLFNBQVNxRixhQUFXLFFBQVEsT0FBTyxRQUFRLFlBQVk7QUFDckQsTUFBSSxRQUFRLENBQUM7QUFDYixhQUFXLFNBQVMsQ0FBQTtBQUVwQixNQUFJekYsU0FBUSxJQUNSLFNBQVMsTUFBTTtBQUVuQixTQUFPLEVBQUVBLFNBQVEsUUFBUTtBQUN2QixRQUFJLE1BQU0sTUFBTUEsTUFBSztBQUVyQixRQUFJLFdBQVcsYUFDWCxXQUFXLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLEtBQUssUUFBUSxNQUFNLElBQ3hEO0FBRUosUUFBSSxhQUFhLFFBQVc7QUFDMUIsaUJBQVcsT0FBTyxHQUFHO0FBQUEsSUFDdEI7QUFDRCxRQUFJLE9BQU87QUFDVCxzQkFBZ0IsUUFBUSxLQUFLLFFBQVE7QUFBQSxJQUMzQyxPQUFXO0FBQ0wsa0JBQVksUUFBUSxLQUFLLFFBQVE7QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLGNBQWlCeUY7QUM5QmpCLFNBQVNDLFlBQVUsR0FBRyxVQUFVO0FBQzlCLE1BQUkxRixTQUFRLElBQ1IsU0FBUyxNQUFNLENBQUM7QUFFcEIsU0FBTyxFQUFFQSxTQUFRLEdBQUc7QUFDbEIsV0FBT0EsTUFBSyxJQUFJLFNBQVNBLE1BQUs7QUFBQSxFQUMvQjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsYUFBaUIwRjtBQ2xCakIsSUFBSSxtQkFBbUI7QUFHdkIsSUFBSSxXQUFXO0FBVWYsU0FBU0MsVUFBUSxPQUFPLFFBQVE7QUFDOUIsTUFBSSxPQUFPLE9BQU87QUFDbEIsV0FBUyxVQUFVLE9BQU8sbUJBQW1CO0FBRTdDLFNBQU8sQ0FBQyxDQUFDLFdBQ04sUUFBUSxZQUNOLFFBQVEsWUFBWSxTQUFTLEtBQUssS0FBSyxPQUNyQyxRQUFRLE1BQU0sUUFBUSxLQUFLLEtBQUssUUFBUTtBQUNqRDtBQUVBLElBQUEsV0FBaUJBO0FDeEJqQixJQUFJLFlBQVk5RixZQUNaNEUsZ0JBQWNyRSxlQUNkc0UsWUFBVXJFLFdBQ1YyRSxhQUFXMUUsaUJBQ1hxRixZQUFVcEYsVUFDVitFLGlCQUFlakM7QUFHbkIsSUFBSXBDLGdCQUFjLE9BQU87QUFHekIsSUFBSUMsbUJBQWlCRCxjQUFZO0FBVWpDLFNBQVMyRSxnQkFBYyxPQUFPLFdBQVc7QUFDdkMsTUFBSSxRQUFRbEIsVUFBUSxLQUFLLEdBQ3JCLFFBQVEsQ0FBQyxTQUFTRCxjQUFZLEtBQUssR0FDbkMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTTyxXQUFTLEtBQUssR0FDM0MsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVU0sZUFBYSxLQUFLLEdBQzFELGNBQWMsU0FBUyxTQUFTLFVBQVUsUUFDMUMsU0FBUyxjQUFjLFVBQVUsTUFBTSxRQUFRLE1BQU0sSUFBSSxDQUFFLEdBQzNELFNBQVMsT0FBTztBQUVwQixXQUFTLE9BQU8sT0FBTztBQUNyQixTQUFLLGFBQWFwRSxpQkFBZSxLQUFLLE9BQU8sR0FBRyxNQUM1QyxFQUFFO0FBQUEsS0FFQyxPQUFPO0FBQUEsSUFFTixXQUFXLE9BQU8sWUFBWSxPQUFPO0FBQUEsSUFFckMsV0FBVyxPQUFPLFlBQVksT0FBTyxnQkFBZ0IsT0FBTztBQUFBLElBRTdEeUUsVUFBUSxLQUFLLE1BQU0sS0FDbEI7QUFDTixhQUFPLEtBQUssR0FBRztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsaUJBQWlCQztBQ3ZDakIsU0FBU0MsZUFBYSxRQUFRO0FBQzVCLE1BQUksU0FBUyxDQUFBO0FBQ2IsTUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBUyxPQUFPLE9BQU8sTUFBTSxHQUFHO0FBQzlCLGFBQU8sS0FBSyxHQUFHO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBQ0QsU0FBTztBQUNUO0FBRUEsSUFBQSxnQkFBaUJBO0FDbkJqQixJQUFJckUsYUFBVzNCLFlBQ1gsY0FBY08sY0FDZCxlQUFlQztBQUduQixJQUFJLGNBQWMsT0FBTztBQUd6QixJQUFJLGlCQUFpQixZQUFZO0FBU2pDLFNBQVN5RixhQUFXLFFBQVE7QUFDMUIsTUFBSSxDQUFDdEUsV0FBUyxNQUFNLEdBQUc7QUFDckIsV0FBTyxhQUFhLE1BQU07QUFBQSxFQUMzQjtBQUNELE1BQUksVUFBVSxZQUFZLE1BQU0sR0FDNUIsU0FBUyxDQUFBO0FBRWIsV0FBUyxPQUFPLFFBQVE7QUFDdEIsUUFBSSxFQUFFLE9BQU8sa0JBQWtCLFdBQVcsQ0FBQyxlQUFlLEtBQUssUUFBUSxHQUFHLEtBQUs7QUFDN0UsYUFBTyxLQUFLLEdBQUc7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLGNBQWlCc0U7QUNoQ2pCLElBQUksZ0JBQWdCakcsZ0JBQ2hCLGFBQWFPLGFBQ2J5RSxnQkFBY3hFO0FBeUJsQixTQUFTMEYsU0FBTyxRQUFRO0FBQ3RCLFNBQU9sQixjQUFZLE1BQU0sSUFBSSxjQUFjLFFBQVEsSUFBSSxJQUFJLFdBQVcsTUFBTTtBQUM5RTtBQUVBLElBQUEsV0FBaUJrQjtBQy9CakIsSUFBSSxhQUFhbEcsYUFDYmtHLFdBQVMzRjtBQTBCYixTQUFTNEYsZ0JBQWMsT0FBTztBQUM1QixTQUFPLFdBQVcsT0FBT0QsU0FBTyxLQUFLLENBQUM7QUFDeEM7QUFFQSxJQUFBLGtCQUFpQkM7QUMvQmpCLElBQUl2QyxxQkFBbUI1RCxtQkFDbkIsY0FBY08scUJBQ2Qsa0JBQWtCQyxrQkFDbEIsWUFBWUMsWUFDWixrQkFBa0JDLGtCQUNsQixjQUFjOEMsZUFDZCxVQUFVNEMsV0FDVixvQkFBb0JDLHFCQUNwQixXQUFXQyxpQkFDWCxhQUFhQyxjQUNiNUUsYUFBVzZFLFlBQ1gsZ0JBQWdCQyxpQkFDaEIsZUFBZUMsZ0JBQ2ZoQixZQUFVaUIsVUFDVixnQkFBZ0JDO0FBaUJwQixTQUFTQyxnQkFBYyxRQUFRLFFBQVEsS0FBSyxVQUFVLFdBQVcsWUFBWSxPQUFPO0FBQ2xGLE1BQUksV0FBV25CLFVBQVEsUUFBUSxHQUFHLEdBQzlCLFdBQVdBLFVBQVEsUUFBUSxHQUFHLEdBQzlCLFVBQVUsTUFBTSxJQUFJLFFBQVE7QUFFaEMsTUFBSSxTQUFTO0FBQ1g5Qix1QkFBaUIsUUFBUSxLQUFLLE9BQU87QUFDckM7QUFBQSxFQUNEO0FBQ0QsTUFBSSxXQUFXLGFBQ1gsV0FBVyxVQUFVLFVBQVcsTUFBTSxJQUFLLFFBQVEsUUFBUSxLQUFLLElBQ2hFO0FBRUosTUFBSSxXQUFXLGFBQWE7QUFFNUIsTUFBSSxVQUFVO0FBQ1osUUFBSSxRQUFRLFFBQVEsUUFBUSxHQUN4QixTQUFTLENBQUMsU0FBUyxTQUFTLFFBQVEsR0FDcEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLGFBQWEsUUFBUTtBQUV4RCxlQUFXO0FBQ1gsUUFBSSxTQUFTLFVBQVUsU0FBUztBQUM5QixVQUFJLFFBQVEsUUFBUSxHQUFHO0FBQ3JCLG1CQUFXO0FBQUEsTUFDWixXQUNRLGtCQUFrQixRQUFRLEdBQUc7QUFDcEMsbUJBQVcsVUFBVSxRQUFRO0FBQUEsTUFDOUIsV0FDUSxRQUFRO0FBQ2YsbUJBQVc7QUFDWCxtQkFBVyxZQUFZLFVBQVUsSUFBSTtBQUFBLE1BQ3RDLFdBQ1EsU0FBUztBQUNoQixtQkFBVztBQUNYLG1CQUFXLGdCQUFnQixVQUFVLElBQUk7QUFBQSxNQUMxQyxPQUNJO0FBQ0gsbUJBQVcsQ0FBQTtBQUFBLE1BQ1o7QUFBQSxJQUNGLFdBQ1EsY0FBYyxRQUFRLEtBQUssWUFBWSxRQUFRLEdBQUc7QUFDekQsaUJBQVc7QUFDWCxVQUFJLFlBQVksUUFBUSxHQUFHO0FBQ3pCLG1CQUFXLGNBQWMsUUFBUTtBQUFBLE1BQ2xDLFdBQ1EsQ0FBQ2pDLFdBQVMsUUFBUSxLQUFLLFdBQVcsUUFBUSxHQUFHO0FBQ3BELG1CQUFXLGdCQUFnQixRQUFRO0FBQUEsTUFDcEM7QUFBQSxJQUNGLE9BQ0k7QUFDSCxpQkFBVztBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0QsTUFBSSxVQUFVO0FBRVosVUFBTSxJQUFJLFVBQVUsUUFBUTtBQUM1QixjQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksS0FBSztBQUN6RCxVQUFNLFFBQVEsRUFBRSxRQUFRO0FBQUEsRUFDekI7QUFDRGlDLHFCQUFpQixRQUFRLEtBQUssUUFBUTtBQUN4QztBQUVBLElBQUEsaUJBQWlCaUQ7QUM3RmpCLElBQUksUUFBUTdHLFFBQ1IsbUJBQW1CTyxtQkFDbkIsVUFBVUMsVUFDVixnQkFBZ0JDLGdCQUNoQmtCLGFBQVdqQixZQUNYLFNBQVM4QyxVQUNULFVBQVU0QztBQWFkLFNBQVNVLFlBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxPQUFPO0FBQzlELE1BQUksV0FBVyxRQUFRO0FBQ3JCO0FBQUEsRUFDRDtBQUNELFVBQVEsUUFBUSxTQUFTLFVBQVUsS0FBSztBQUN0QyxjQUFVLFFBQVEsSUFBSTtBQUN0QixRQUFJbkYsV0FBUyxRQUFRLEdBQUc7QUFDdEIsb0JBQWMsUUFBUSxRQUFRLEtBQUssVUFBVW1GLGFBQVcsWUFBWSxLQUFLO0FBQUEsSUFDMUUsT0FDSTtBQUNILFVBQUksV0FBVyxhQUNYLFdBQVcsUUFBUSxRQUFRLEdBQUcsR0FBRyxVQUFXLE1BQU0sSUFBSyxRQUFRLFFBQVEsS0FBSyxJQUM1RTtBQUVKLFVBQUksYUFBYSxRQUFXO0FBQzFCLG1CQUFXO0FBQUEsTUFDWjtBQUNELHVCQUFpQixRQUFRLEtBQUssUUFBUTtBQUFBLElBQ3ZDO0FBQUEsRUFDRixHQUFFLE1BQU07QUFDWDtBQUVBLElBQUEsYUFBaUJBO0FDekJqQixTQUFTQyxXQUFTLE9BQU87QUFDdkIsU0FBTztBQUNUO0FBRUEsSUFBQSxhQUFpQkE7QUNWakIsU0FBU0MsUUFBTSxNQUFNLFNBQVMsTUFBTTtBQUNsQyxVQUFRLEtBQUssUUFBTTtBQUFBLElBQ2pCLEtBQUs7QUFBRyxhQUFPLEtBQUssS0FBSyxPQUFPO0FBQUEsSUFDaEMsS0FBSztBQUFHLGFBQU8sS0FBSyxLQUFLLFNBQVMsS0FBSyxDQUFDLENBQUM7QUFBQSxJQUN6QyxLQUFLO0FBQUcsYUFBTyxLQUFLLEtBQUssU0FBUyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUFBLElBQ2xELEtBQUs7QUFBRyxhQUFPLEtBQUssS0FBSyxTQUFTLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDNUQ7QUFDRCxTQUFPLEtBQUssTUFBTSxTQUFTLElBQUk7QUFDakM7QUFFQSxJQUFBLFNBQWlCQTtBQ3BCakIsSUFBSSxRQUFRaEg7QUFHWixJQUFJLFlBQVksS0FBSztBQVdyQixTQUFTaUgsV0FBUyxNQUFNLE9BQU8sV0FBVztBQUN4QyxVQUFRLFVBQVUsVUFBVSxTQUFhLEtBQUssU0FBUyxJQUFLLE9BQU8sQ0FBQztBQUNwRSxTQUFPLFdBQVc7QUFDaEIsUUFBSSxPQUFPLFdBQ1A5RyxTQUFRLElBQ1IsU0FBUyxVQUFVLEtBQUssU0FBUyxPQUFPLENBQUMsR0FDekMsUUFBUSxNQUFNLE1BQU07QUFFeEIsV0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsWUFBTUEsTUFBSyxJQUFJLEtBQUssUUFBUUEsTUFBSztBQUFBLElBQ2xDO0FBQ0QsSUFBQUEsU0FBUTtBQUNSLFFBQUksWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUMvQixXQUFPLEVBQUVBLFNBQVEsT0FBTztBQUN0QixnQkFBVUEsTUFBSyxJQUFJLEtBQUtBLE1BQUs7QUFBQSxJQUM5QjtBQUNELGNBQVUsS0FBSyxJQUFJLFVBQVUsS0FBSztBQUNsQyxXQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUN0QztBQUNBO0FBRUEsSUFBQSxZQUFpQjhHO0FDaEJqQixTQUFTQyxXQUFTLE9BQU87QUFDdkIsU0FBTyxXQUFXO0FBQ2hCLFdBQU87QUFBQSxFQUNYO0FBQ0E7QUFFQSxJQUFBLGFBQWlCQTtBQ3pCakIsSUFBSSxXQUFXbEgsWUFDWCxpQkFBaUJPLGlCQUNqQndHLGFBQVd2RztBQVVmLElBQUkyRyxvQkFBa0IsQ0FBQyxpQkFBaUJKLGFBQVcsU0FBUyxNQUFNLFFBQVE7QUFDeEUsU0FBTyxlQUFlLE1BQU0sWUFBWTtBQUFBLElBQ3RDLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFNBQVMsU0FBUyxNQUFNO0FBQUEsSUFDeEIsWUFBWTtBQUFBLEVBQ2hCLENBQUc7QUFDSDtBQUVBLElBQUEsbUJBQWlCSTtBQ3BCakIsSUFBSSxZQUFZLEtBQ1osV0FBVztBQUdmLElBQUksWUFBWSxLQUFLO0FBV3JCLFNBQVNDLFdBQVMsTUFBTTtBQUN0QixNQUFJLFFBQVEsR0FDUixhQUFhO0FBRWpCLFNBQU8sV0FBVztBQUNoQixRQUFJLFFBQVEsVUFBVyxHQUNuQixZQUFZLFlBQVksUUFBUTtBQUVwQyxpQkFBYTtBQUNiLFFBQUksWUFBWSxHQUFHO0FBQ2pCLFVBQUksRUFBRSxTQUFTLFdBQVc7QUFDeEIsZUFBTyxVQUFVLENBQUM7QUFBQSxNQUNuQjtBQUFBLElBQ1AsT0FBVztBQUNMLGNBQVE7QUFBQSxJQUNUO0FBQ0QsV0FBTyxLQUFLLE1BQU0sUUFBVyxTQUFTO0FBQUEsRUFDMUM7QUFDQTtBQUVBLElBQUEsWUFBaUJBO0FDcENqQixJQUFJLGtCQUFrQnBILGtCQUNsQixXQUFXTztBQVVmLElBQUk4RyxnQkFBYyxTQUFTLGVBQWU7QUFFMUMsSUFBQSxlQUFpQkE7QUNiakIsSUFBSSxXQUFXckgsWUFDWCxXQUFXTyxXQUNYLGNBQWNDO0FBVWxCLFNBQVM4RyxXQUFTLE1BQU0sT0FBTztBQUM3QixTQUFPLFlBQVksU0FBUyxNQUFNLE9BQU8sUUFBUSxHQUFHLE9BQU8sRUFBRTtBQUMvRDtBQUVBLElBQUEsWUFBaUJBO0FDaEJqQixJQUFJLEtBQUt0SCxNQUNMLGNBQWNPLGVBQ2QsVUFBVUMsVUFDVixXQUFXQztBQVlmLFNBQVM4RyxpQkFBZSxPQUFPcEgsUUFBTyxRQUFRO0FBQzVDLE1BQUksQ0FBQyxTQUFTLE1BQU0sR0FBRztBQUNyQixXQUFPO0FBQUEsRUFDUjtBQUNELE1BQUksT0FBTyxPQUFPQTtBQUNsQixNQUFJLFFBQVEsV0FDSCxZQUFZLE1BQU0sS0FBSyxRQUFRQSxRQUFPLE9BQU8sTUFBTSxJQUNuRCxRQUFRLFlBQVlBLFVBQVMsUUFDaEM7QUFDSixXQUFPLEdBQUcsT0FBT0EsTUFBSyxHQUFHLEtBQUs7QUFBQSxFQUMvQjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsa0JBQWlCb0g7QUM3QmpCLElBQUksV0FBV3ZILFdBQ1gsaUJBQWlCTztBQVNyQixTQUFTaUgsaUJBQWUsVUFBVTtBQUNoQyxTQUFPLFNBQVMsU0FBUyxRQUFRLFNBQVM7QUFDeEMsUUFBSXJILFNBQVEsSUFDUixTQUFTLFFBQVEsUUFDakIsYUFBYSxTQUFTLElBQUksUUFBUSxTQUFTLENBQUMsSUFBSSxRQUNoRCxRQUFRLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSTtBQUV0QyxpQkFBYyxTQUFTLFNBQVMsS0FBSyxPQUFPLGNBQWMsY0FDckQsVUFBVSxjQUNYO0FBRUosUUFBSSxTQUFTLGVBQWUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQzFELG1CQUFhLFNBQVMsSUFBSSxTQUFZO0FBQ3RDLGVBQVM7QUFBQSxJQUNWO0FBQ0QsYUFBUyxPQUFPLE1BQU07QUFDdEIsV0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsVUFBSSxTQUFTLFFBQVFBLE1BQUs7QUFDMUIsVUFBSSxRQUFRO0FBQ1YsaUJBQVMsUUFBUSxRQUFRQSxRQUFPLFVBQVU7QUFBQSxNQUMzQztBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsRUFDWCxDQUFHO0FBQ0g7QUFFQSxJQUFBLGtCQUFpQnFIO0FDcENqQixJQUFJLFlBQVl4SCxZQUNaLGlCQUFpQk87QUFpQ1QsZUFBZSxTQUFTLFFBQVEsUUFBUSxVQUFVO0FBQzVELFlBQVUsUUFBUSxRQUFRLFFBQVE7QUFDcEMsQ0FBQztBQzlCWWtILE1BQUFBLGFBQVlBLENBQUNDLGFBQStCO0FBQ3ZELFFBQU1DLFFBQU9DLFNBQVNDLHFCQUFxQixNQUFNLEVBQUUsQ0FBQztBQUM5Q0MsUUFBQUEsT0FBT0YsU0FBU0csY0FBYyxNQUFNO0FBRTFDQyxTQUFPQyxRQUFRUCxRQUFPLEVBQUVRLFFBQVEsQ0FBQyxDQUFDQyxLQUFLL0ksS0FBSyxNQUFNMEksS0FBS00sYUFBYUQsS0FBSy9JLEtBQUssQ0FBQztBQUUvRXVJLEVBQUFBLE1BQUtVLFlBQVlQLElBQUk7QUFDdkI7QUNUYVEsTUFBQUEsV0FBV0EsQ0FBQ0MsT0FBZ0JDLFlBQTBCO0FBQzdEQyxNQUFBQSxNQUFNNUQsUUFBUTBELEtBQUssR0FBRztBQUNqQkEsV0FBQUEsTUFBTUcsSUFBSSxDQUFDQyxJQUFJeEksV0FBVW1JLFNBQVNFLFFBQVFySSxRQUFPd0ksRUFBRSxHQUFHSCxPQUFPLENBQUM7QUFBQSxFQUN2RTtBQUVJLE1BQUEsT0FBT0QsVUFBVSxZQUFZQSxPQUFPO0FBQy9CUCxXQUFBQSxPQUFPQyxRQUFRTSxLQUFLLEVBQUVLLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDVixLQUFLL0ksS0FBSyxNQUFNO0FBQ3pEeUosVUFBSVYsR0FBRyxJQUFJRyxTQUFTRSxRQUFRTCxLQUFLL0ksS0FBSyxHQUFHb0osT0FBTztBQUV6Q0ssYUFBQUE7QUFBQUEsSUFDVCxHQUFHLENBQVUsQ0FBQTtBQUFBLEVBQ2Y7QUFFT04sU0FBQUE7QUFDVDtBQ2ZPLE1BQU1PLGVBQWVBLENBQUMxSixVQUMzQixDQUFDQSxVQUFVQSxVQUFVLFFBQVFBLFVBQVUySjtBQUNsQyxNQUFNQyxVQUFVLENBQUk1SixVQUFvRCxDQUFDMEosYUFBYTFKLEtBQUs7QUFVckY2SixNQUFBQSxPQUFPLENBQTJCQyxRQUFnQkMsVUFBNEI7QUFDekYsU0FBT0EsTUFBTVAsT0FBTyxDQUFDUSxRQUFRQyxTQUFTO0FBQzdCQSxXQUFBQSxJQUFJLElBQUlILElBQUlHLElBQUk7QUFDaEJELFdBQUFBO0FBQUFBLEVBQ1QsR0FBRyxDQUFVLENBQUE7QUFDZjtBQUVnQkUsU0FBQUEsS0FBOENKLFFBQVdDLE9BQThCO0FBQ3JHLFFBQU1DLFNBQVM7QUFBQSxJQUFFLEdBQUdGO0FBQUFBLEVBQUFBO0FBQ3BCQyxRQUFNakIsUUFBUW1CLENBQVEsU0FBQTtBQUNwQixXQUFPRCxPQUFPQyxJQUFJO0FBQUEsRUFBQSxDQUNuQjtBQUNNRCxTQUFBQTtBQUNUO0FBVU8sTUFBTUcsTUFBTUEsQ0FBQ0wsS0FBZ0JNLE1BQWNwSyxVQUFtQjtBQUM3RHFLLFFBQUFBLFlBQWFoQixNQUFNNUQsUUFBUTJFLElBQUksSUFBSUEsT0FBT0EsS0FBS0UsTUFBTSxhQUFhO0FBRXhFLFNBQU9ELFVBQVViLE9BQU8sQ0FBQ0MsS0FBS1YsS0FBS25MLE9BQU07QUFDbkM2TCxRQUFBQSxJQUFJVixHQUFHLE1BQU1ZO0FBQWVaLFVBQUFBLEdBQUcsSUFBSTtBQUNuQ25MLFFBQUFBLE9BQU15TSxVQUFVRSxTQUFTO0FBQUdkLFVBQUlWLEdBQUcsSUFBSS9JO0FBQzNDLFdBQU95SixJQUFJVixHQUFHO0FBQUEsS0FDYmUsR0FBRztBQUNSO0FBRWFVLE1BQUFBLFdBQVdBLENBQUNDLFFBQWdCO0FBQ2pDQyxRQUFBQSxRQUFRRCxJQUFJRSxNQUFNLENBQUM7QUFFckJELE1BQUFBLE1BQU1ILFdBQVcsR0FBRztBQUNoQkcsVUFBQUEsTUFDSEUsTUFBTSxFQUFFLEVBQ1J0QixJQUFJdUIsQ0FBUSxRQUFBLEdBQUVBLE1BQU1BLEtBQUssRUFDekJDLEtBQUssRUFBRTtBQUFBLEVBQ1o7QUFFTWQsUUFBQUEsU0FBUyw0Q0FBNENlLEtBQUtOLEdBQUc7QUFFbkUsU0FBT1QsU0FDSDtBQUFBLElBQ0U3TCxHQUFHNk0sU0FBU2hCLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFBQSxJQUN6QnJMLEdBQUdxTSxTQUFTaEIsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLElBQ3pCaUIsR0FBR0QsU0FBU2hCLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFBQSxFQUUzQkwsSUFBQUE7QUFDTjtBQUVhdUIsTUFBQUEsYUFBYUEsSUFBSUMsV0FBc0I7QUFDbEQsU0FBT0EsT0FBTzdCLElBQUl0SixDQUFBQSxVQUFTb0wsS0FBS0MsVUFBVXJMLEtBQUssQ0FBQyxFQUFFc0wsTUFBTSxDQUFDVCxLQUFLdE0sSUFBR2dOLFFBQVFWLFFBQVFVLElBQUksQ0FBQyxDQUFDO0FBQ3pGO0FBRU8sTUFBTUMsWUFBWUEsQ0FBQ0MsS0FBYUMsUUFBUSxNQUFjRCxJQUFJRSxRQUFRLEtBQU0sS0FBSUQsUUFBUSxFQUFFQyxRQUFRLE9BQU8sTUFBTTtBQUkzRyxNQUFNQyxVQUFVLENBQUMsV0FBVyxVQUFVLFVBQVUsUUFBUTtBQUV4RCxNQUFNQyxjQUFjO0FBQUEsRUFDekJDLFFBQVE7QUFBQSxFQUNSQyxRQUFRO0FBQUEsRUFDUkMsUUFBUTtBQUFBLEVBQ1JDLFNBQVM7QUFDWDtBQ2pGQSxNQUFNQyxnQkFBY0EsQ0FBQzVMLFFBQW1CLENBQUEsTUFDdEMsT0FBT0EsVUFBVSxZQUFZc0osUUFBUXRKLEtBQUssS0FBS3NMLFFBQVFOLE1BQU1hLENBQUFBLFdBQVVBLFVBQVU3TCxLQUFLO0FBRTNFOEwsTUFBQUEsV0FBVyxDQUN0QjlMLE9BQ0E2TCxXQUNrQztBQUNsQyxNQUFJLENBQUM3TDtBQUFjQSxXQUFBQTtBQUVuQixTQUFPNEksU0FBUzVJLE9BQU8sQ0FBQytMLE1BQU1yTSxVQUFlO0FBQ3ZDa00sUUFBQUEsY0FBWWxNLEtBQUssR0FBRztBQWN0QixhQUFPQSxNQUFNbU0sTUFBTTtBQUFBLElBQ3JCO0FBRU9uTSxXQUFBQTtBQUFBQSxFQUFBQSxDQUNSO0FBQ0g7QUM1Qk8sTUFBTXNNLGNBQWMsQ0FBa0RoTSxPQUFlNkwsV0FDMUZDLFNBQTBCOUwsT0FBTzZMLE1BQU07QUNVbEMsTUFBTUkscUJBQXFCQSxDQUFDO0FBQUEsRUFDakNDO0FBQUFBLEVBQ0FDLFlBQVk7QUFBQSxFQUNaQyxjQUFjYjtBQUNQLE1BQU07QUFDYixRQUFNLENBQUNNLFFBQVFRLFNBQVMsSUFBSTFOLEVBQWlCLFNBQVM7QUFFaEQyTixRQUFBQSxjQUFjQSxDQUFDQyxXQUF3Qjs7QUFDM0MsVUFBTUMsY0FBY0QsT0FBT0Usc0JBQXVCLEVBQUNDLFNBQVM7QUFDNUQsVUFBTUMsY0FBYXJFLFlBQU9DLFFBQVE2RCxXQUFXLEVBQUVRLEtBQUssQ0FBQyxDQUFHbE4sRUFBQUEsS0FBSyxNQUFNQSxTQUFTOE0sV0FBVyxNQUFwRWxFLG1CQUF3RTtBQUUzRitELGNBQVVNLFVBQVU7QUFBQSxFQUFBO0FBR3RCRSxJQUFnQixNQUFNO0FBQ3BCLFVBQU1DLGdCQUFnQlosVUFBVWxOLFFBQVErTixRQUFTLFNBQVFaLFlBQVk7QUFFckUsUUFBSVcsZUFBZTtBQUNqQixZQUFNRSxpQkFBaUIsSUFBSUMsZUFBZSxNQUFNWCxZQUFZUSxhQUFhLENBQUM7QUFDMUVFLHFCQUFlRSxRQUFRSixhQUFhO0FBRXBDUixrQkFBWVEsYUFBYTtBQUFBLElBQzNCO0FBQUEsRUFDRixHQUFHLENBQUUsQ0FBQTtBQUVFakIsU0FBQUE7QUFDVDtBQ1RBLE1BQU1zQixTQUFTQSxDQUFDek4sT0FBd0IwTixVQUF1QixHQUFFMU4sUUFBUTBOO0FBRXpFLE1BQU1DLE9BQU9BLENBQUM1RSxRQUFnQkEsSUFBSTZFLFdBQVcsS0FBSztBQUNsRCxNQUFNQyxZQUFZQSxDQUFDOUUsUUFBZ0JBLElBQUk2RSxXQUFXLFVBQVU7QUFFNUQsTUFBTUUsYUFBYUEsQ0FBQy9FLEtBQWEvSSxVQUEyQjtBQUMxRCxNQUFJK04sU0FBU2hGO0FBQ2IsTUFBSWlGLFdBQVdoTztBQUVYMk4sTUFBQUEsS0FBS0ksTUFBTSxHQUFHO0FBQ1BBLGFBQUFBLE9BQU9wQyxRQUFRLE9BQU8sRUFBRTtBQUN0QjhCLGVBQUFBLE9BQU96TixPQUFPLElBQUk7QUFBQSxFQUMvQjtBQUNJNk4sTUFBQUEsVUFBVUUsTUFBTSxHQUFHO0FBQ1pBLGFBQUFBLE9BQU9wQyxRQUFRLFlBQVksRUFBRTtBQUMzQjhCLGVBQUFBLE9BQU96TixPQUFPLEdBQUc7QUFBQSxFQUM5QjtBQUVPLFNBQUE7QUFBQSxJQUNMK0ksS0FBS2dGO0FBQUFBLElBQ0wvTixPQUFPZ087QUFBQUEsRUFBQUE7QUFFWDtBQUVBLE1BQU1DLGdCQUFnQixDQUNwQixlQUNBLG1CQUNBLG9CQUNBLGtCQUNBLHFCQUNBLGFBQ0EsWUFDQSxZQUNBLGFBQ0EsWUFDQSxVQUNBLFNBQ0EsaUJBQ0EsWUFDQSxRQUNBLFNBQ0EsT0FDQSxVQUNBLGFBQ0EsZ0JBQ0EsY0FDQSxlQUNBLGNBQ0EsaUJBQ0EsZUFDQSxjQUFjO0FBR0hDLE1BQUFBLGFBQWFBLENBQUNDLE9BQWtCQyxVQUFtQjtBQUN4REMsUUFBQUEsT0FBT3pGLE9BQU95RixLQUFLRixLQUFLO0FBRTlCLE1BQUlFLEtBQUtDLFNBQVMsV0FBVyxLQUFLRCxLQUFLQyxTQUFTLFdBQVcsR0FBRztBQUNwREMsWUFBQUEsS0FBTSw0RUFBMkVILEtBQUs7QUFBQSxFQUNoRztBQUVJLE1BQUEsT0FBT0QsVUFBVSxVQUFVO0FBQ3RCQSxXQUFBQTtBQUFBQSxFQUNUO0FBRUksTUFBQSxnQkFBZ0JBLFNBQVMsc0JBQXNCQSxPQUFPO0FBQ3hELFVBQU1LLGFBQWFMLE1BQU1LO0FBQ3pCLFVBQU1DLG1CQUFtQk4sTUFBTU07QUFFdkIsWUFBQTtBQUFBLE1BQ04sR0FBR047QUFBQUEsTUFDSCxHQUFHSztBQUFBQSxNQUNILGlCQUFpQkMsaUJBQWlCQztBQUFBQSxNQUNsQyxrQkFBa0JELGlCQUFpQkU7QUFBQUEsTUFDbkMsb0JBQW9CRixpQkFBaUJHO0FBQUFBLElBQUFBO0FBQUFBLEVBRXpDO0FBRU9oRyxTQUFBQSxPQUFPQyxRQUFRc0YsS0FBSyxFQUFFM0UsT0FBTyxDQUFDQyxLQUFLLENBQUNvRixTQUFTQyxTQUFTLE1BQU07QUFDN0RiLFFBQUFBLGNBQWNLLFNBQVNPLE9BQU8sR0FBRztBQUN2QnBCLGtCQUFBQSxPQUFPcUIsV0FBVyxJQUFJO0FBQUEsSUFDcEM7QUFFTSxVQUFBO0FBQUEsTUFBRS9GO0FBQUFBLE1BQUsvSTtBQUFBQSxJQUFBQSxJQUFVOE4sV0FBV2UsU0FBU0MsU0FBUztBQUNwRHJGLFFBQUlWLEdBQUcsSUFBSS9JO0FBRVgsUUFBSStJLFFBQVEsYUFBYTtBQUN2QlUsVUFBSXNGLFlBQVluRixRQUFRNUosS0FBSyxJQUFLLEdBQUVBLFVBQVU7QUFBQSxJQUNoRDtBQUVBLFFBQUkrSSxRQUFRLGFBQWE7QUFDdkJVLFVBQUl1RixZQUFZcEYsUUFBUTVKLEtBQUssSUFBSyxHQUFFQSxVQUFVO0FBQUEsSUFDaEQ7QUFFQSxRQUFJK0ksUUFBUSxZQUFZO0FBQ2xCaEosVUFBQUEsV0FBVyxPQUFPQyxVQUFVLFdBQVk0SixRQUFRNUosS0FBSyxJQUFLLEdBQUVBLFVBQVUsS0FBTUE7QUFBQUEsSUFDbEY7QUFFQSxRQUFJK0ksUUFBUSxlQUFlQSxRQUFRLGVBQWVBLFFBQVEsWUFBWTtBQUNwRSxVQUFJLE9BQU8vSSxVQUFVLFlBQVlBLE1BQU11SyxXQUFXLEdBQUc7QUFDbkRkLFlBQUl3RixVQUFVO0FBQUEsTUFBQSxXQUNMdkYsYUFBYTFKLEtBQUssR0FBRztBQUM5QnlKLFlBQUl3RixVQUFVO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUlsRyxRQUFBQSxJQUFJdUYsU0FBUyxhQUFhLEdBQUc7QUFDL0I3RSxVQUFJeUYsY0FBYztBQUFBLElBQ3BCO0FBRUEsUUFBSW5HLFFBQVEsVUFBVTtBQUNoQm9HLFVBQUFBLGVBQWUxQixPQUFPek4sT0FBTyxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJK0ksUUFBUSxpQkFBaUI7QUFDM0JVLFVBQUkyRixpQkFBaUJwUDtBQUFBQSxJQUN2QjtBQUVBLFFBQUkrSSxRQUFRLHFCQUFxQmEsUUFBUTVKLEtBQUssR0FBRztBQUMvQ3lKLFVBQUk0RixrQkFBbUIsT0FBTXJQO0FBQzdCeUosVUFBSTZGLG1CQUFtQjtBQUFBLElBQ3pCO0FBRUl2RyxRQUFBQSxRQUFRLDRCQUE0QmEsUUFBUUgsSUFBSThGLHNCQUFzQixLQUFLM0YsUUFBUUgsSUFBSStGLGVBQWUsR0FBRztBQUNyRy9ELFlBQUFBLE1BQU1qQixTQUFTZixJQUFJK0YsZUFBZTtBQUN4QyxVQUFJL0QsS0FBSztBQUNQaEMsWUFBSStGLGtCQUFrQmhFLFVBQVcsT0FBTUMsSUFBSXROLE1BQU1zTixJQUFJOU0sTUFBTThNLElBQUlSLE1BQU0sQ0FBQ3hCLElBQUk4Rix5QkFBeUIsR0FBRztBQUFBLE1BQ3hHO0FBQUEsSUFDRjtBQUVBLFFBQUl4RyxRQUFRLFVBQVU7QUFDaEIwRyxVQUFBQSxhQUFhelAsUUFBUSxTQUFTO0FBQUEsSUFDcEM7QUFFQSxRQUFJK0ksUUFBUSxZQUFZO0FBQ2xCMkcsVUFBQUEsWUFBWTFQLFFBQVEsV0FBVztBQUFBLElBQ3JDO0FBRUEsUUFBSStJLFFBQVEsYUFBYTtBQUNuQjRHLFVBQUFBLGlCQUFpQjNQLFFBQVEsaUJBQWlCO0FBQUEsSUFDaEQ7QUFFT3lKLFdBQUFBO0FBQUFBLEtBQ04wRSxLQUFLO0FBQ1Y7QUM1S0EsTUFBTWpDLGNBQWNBLENBQUMwRCxTQUFvQixPQUFPQSxTQUFTLFlBQVksQ0FBQ3ZHLE1BQU01RCxRQUFRbUssSUFBSSxLQUFLLFlBQVlBO0FBRWxHLE1BQU1DLGdCQUFnQkEsQ0FBQ3ZQLFVBQzVCc0ksT0FBT0MsUUFBUXZJLEtBQUssRUFBRWtKLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDMkUsT0FBT3dCLElBQUksTUFBTTtBQUNuRG5HLE1BQUkyRSxLQUFLLElBQUlsQyxZQUFZMEQsSUFBSSxJQUFJMUIsV0FBVztBQUFBLElBQUUsR0FBRzVOLE1BQU04TixLQUFLO0FBQUEsRUFBQSxHQUFLQSxLQUFLLElBQUl3QjtBQUVuRW5HLFNBQUFBO0FBQ1QsR0FBRyxFQUFFO0FDSlAsTUFBTXFHLGNBQXlCQSxDQUFDO0FBQUEsRUFBRS9QO0FBQUFBLEVBQVUsR0FBR2dRO0FBQUssTUFBTTs7QUFDbERDLFFBQUFBLGVBQWNqUSwwQ0FBVTRMLFFBQVEsVUFBVSxRQUE1QjVMLG1CQUFpQzRMLFFBQVEsY0FBZTtBQUU1RSxTQUFPMUwsRUFBQSxPQUFBO0FBQUEsSUFBQSxHQUFTOFA7QUFBQUEsSUFBTUUseUJBQXlCO0FBQUEsTUFBRUMsUUFBUUY7QUFBQUEsSUFBWTtBQUFBLEVBQUEsQ0FBSztBQUM1RTtBQ1JPLE1BQU1HLFlBQVlBLE1BQU07QUFDN0IsUUFBTSxDQUFDcFIsUUFBUUMsU0FBUyxJQUFJQyxFQUFTLEtBQUs7QUFFMUMsU0FBTyxDQUFDRixRQUFRLE1BQU1DLFVBQVVPLENBQVEsU0FBQSxDQUFDQSxJQUFJLENBQUM7QUFDaEQ7QUNKQSxNQUFNNlEsWUFBZ0JBLE1BQ3BCblEsRUFBQSxPQUFBO0FBQUEsRUFBS29RLE9BQU07QUFBQSxFQUE2QnJELE9BQU07QUFBQSxFQUFLc0QsUUFBTztBQUFBLEVBQUtDLFNBQVE7QUFBQSxFQUFXeFEsVUFDaEZFLEVBQUEsUUFBQTtBQUFBLElBQ0V1USxHQUFFO0FBQUEsSUFDRkMsTUFBSztBQUFBLEVBQUEsQ0FBYztBQUNiLENBRVg7QUNQRCxNQUFNQyxXQUFlQSxNQUNuQnpRLEVBQUEsT0FBQTtBQUFBLEVBQUtzUSxTQUFRO0FBQUEsRUFBV3hRLFVBQ3RCRSxFQUFBLFFBQUE7QUFBQSxJQUNFd1EsTUFBSztBQUFBLElBQ0xFLFVBQVM7QUFBQSxJQUNUSCxHQUFFO0FBQUEsRUFBQSxDQUErdEI7QUFDM3RCLENBRVg7QUNMRCxNQUFNSSxnQkFBZ0JBLENBQUNDLGdCQUErQztBQUFBLEVBQ3BFQyxNQUFPLEdBQUVELFdBQVdDO0FBQUFBLEVBQ3BCQyxPQUFRLEdBQUVGLFdBQVdFO0FBQUFBLEVBQ3JCQyxRQUFTLEdBQUVILFdBQVdHO0FBQUFBLEVBQ3RCQyxVQUFXLEdBQUVKLFdBQVdJO0FBQzFCO0FBRWFDLE1BQUFBLGVBQWVBLENBQUNDLGFBQXNCTixlQUE4Qzs7QUFDekZPLFFBQUFBLGlCQUFpQlIsY0FBY0MsVUFBVTtBQUN6QzFDLFFBQUFBLFFBQVEwQixjQUFjc0IsV0FBVztBQUNqQ0UsUUFBQUEsV0FBVWxELG9DQUFPbUQsU0FBUG5ELG1CQUFha0Q7QUFFN0IsUUFBTUUsYUFBYTtBQUFBLElBQ2pCQyxNQUFPLEdBQUUsSUFBRUwsZ0RBQWFNLGNBQWJOLG1CQUF3QkssU0FBUSxLQUFLLEtBQUs7QUFBQSxJQUNyRGhDLGtCQUFpQnJCLG9DQUFPc0QsY0FBUHRELG1CQUFrQnFCO0FBQUFBLElBQ25Da0MsaUJBQWdCdkQsb0NBQU9zRCxjQUFQdEQsbUJBQWtCd0Q7QUFBQUEsSUFDbENDLGlCQUFnQnpELG9DQUFPc0QsY0FBUHRELG1CQUFrQjBEO0FBQUFBLElBQ2xDQyxnQkFBZ0I7QUFBQSxJQUNoQkMsa0JBQWlCNUQsb0NBQU9zRCxjQUFQdEQsbUJBQWtCd0Q7QUFBQUEsSUFDbkNLLGtCQUFpQjdELG9DQUFPc0QsY0FBUHRELG1CQUFrQjBEO0FBQUFBLElBQ25DSSxpQkFBaUI7QUFBQSxFQUFBO0FBR25CLFFBQU1DLFlBQVk7QUFBQSxJQUNoQlYsT0FBTXJELG9DQUFPc0QsY0FBUHRELG1CQUFrQnFEO0FBQUFBLEVBQUFBO0FBRzFCLFFBQU1XLG1CQUFpQmhFLG9DQUFPbUQsU0FBUG5ELG1CQUFhMEMsZUFBYyxDQUFBLEdBQy9DdkgsSUFBSSxDQUFDOEksY0FBNkJoQixlQUFlZ0IsU0FBUyxDQUFDLEVBQzNEdEgsS0FBSyxJQUFJO0FBRU51SCxRQUFBQSxtQkFDSnpJLFNBQVF1RSxvQ0FBT21ELFNBQVBuRCxtQkFBYW1FLGFBQWEsT0FBS25FLG9DQUFPbUQsU0FBUG5ELG1CQUFhMEMsV0FBV3ZDLFNBQVMsZUFDcEU7QUFBQSxJQUNFaUUsWUFBYSw0QkFBMEJwRSxXQUFNbUQsU0FBTm5ELG1CQUFZcUIsd0JBQXVCckIsb0NBQU9tRCxTQUFQbkQsbUJBQWFtRTtBQUFBQSxJQUN2RmxELGdCQUFnQjtBQUFBLE1BRWxCO0FBRU4sUUFBTW9ELFlBQVk7QUFBQSxJQUNoQixJQUFHckUsK0JBQU9tRCxTQUFRLENBQUM7QUFBQSxJQUNuQmMsV0FBV0Q7QUFBQUEsSUFDWCxHQUFHRTtBQUFBQSxFQUFBQTtBQUdFLFNBQUE7QUFBQSxJQUNMaEI7QUFBQUEsSUFDQUU7QUFBQUEsSUFDQVc7QUFBQUEsSUFDQU07QUFBQUEsRUFBQUE7QUFFSjtBQ3hETyxNQUFNQyxvQkFBb0IsQ0FBQyxtQkFBbUIsMEJBQTBCLG1CQUFtQixlQUFlO0FBRXBHQyxNQUFBQSxpQkFBaUIsQ0FDNUIsYUFDQSxnQkFDQSxjQUNBLGVBQ0EsY0FDQSxpQkFDQSxlQUNBLGNBQWM7QUFJVCxNQUFNQyxnQkFBZ0JBLENBQUNDLFNBQWlCQyxRQUFRQyxJQUFLLDhCQUE2QkYsTUFBTTtBQUN4RixNQUFNRyxZQUFZQSxDQUFDSCxTQUFpQkMsUUFBUUMsSUFBSywwQkFBeUJGLE1BQU07QUNYaEYsTUFBTUksYUFBYUEsQ0FBQzFTLE9BQWdCMlMsWUFBWSxXQUFXO0FBQ2hFLFFBQU1DLGNBQWMvVDtBQUNkZ1UsUUFBQUEsY0FBYzdTLE1BQU02UyxlQUFlUjtBQUNuQ1MsUUFBQUEsaUJBQWlCOVMsTUFBTThTLGtCQUFrQkw7QUFDekNNLFFBQUFBLFVBQVV4SixLQUFLdkosTUFBTTJTLFNBQVMsR0FBRyxVQUFVLFdBQVcsYUFBYSxZQUFZO0FBRXJGelQsSUFBVSxNQUFNO0FBQ2QsUUFBSSxDQUFDMEwsV0FBV2dJLFlBQVk1VCxTQUFTK1QsT0FBTyxHQUFHO0FBQzdDLFVBQUlBLFFBQVFDLFFBQVE7QUFDbEJILG9CQUFZRSxRQUFRQyxNQUFNO0FBQUEsTUFDNUI7QUFDQSxVQUFJRCxRQUFRQyxRQUFRO0FBQ2xCRix1QkFBZUMsUUFBUUUsU0FBUztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUNBTCxnQkFBWTVULFVBQVUrVDtBQUFBQSxFQUFBQSxHQUNyQixDQUFDQSxPQUFPLENBQUM7QUFFWixTQUFPLE1BQU07QUFDWCxRQUFJQSxRQUFRRyxTQUFTO0FBQ25CTCxrQkFBWUUsUUFBUUcsT0FBTztBQUFBLElBQzdCO0FBQ0EsUUFBSUgsUUFBUUksWUFBWTtBQUN0QkwscUJBQWVDLFFBQVFJLFVBQVU7QUFBQSxJQUNuQztBQUFBLEVBQUE7QUFFSjtBQzNCYUMsTUFBQUEsa0JBQWtCQSxDQUFDcFQsVUFBbUI7QUFDakQsUUFBTXFULFFBQVEsb0JBQUlDLElBQUksQ0FBQSxDQUFFO0FBRWZ0VCxXQUFBQSxPQUFPLENBQUN5SSxLQUFLL0ksVUFBVTtBQUM5QixRQUFJK0ksUUFBUSxjQUFjO0FBQ3hCNEssWUFBTUUsSUFBSTdULEtBQUs7QUFBQSxJQUNqQjtBQUVPQSxXQUFBQTtBQUFBQSxFQUFBQSxDQUNSO0FBRUs4VCxRQUFBQSxZQUFZQyxJQUFRLE1BQU0xSyxNQUFNMkssS0FBS0wsTUFBTXhJLFFBQVEsRUFBRTdCLElBQUkySyxDQUFTLFVBQUE7QUFBQSxJQUN0RUMsS0FBSztBQUFBLElBQ0xDLE1BQU8sMkNBQTBDRjtBQUFBQSxFQUFBQSxFQUNqRCxHQUFHLENBQUNOLEtBQUssQ0FBQztBQUVablUsSUFBVSxNQUFNO0FBQ2RzVSxjQUFVaEwsUUFBU0osQ0FBQUEsU0FBU0wsV0FBV0ssSUFBSSxDQUFDO0FBQUEsRUFBQSxHQUMzQyxDQUFDb0wsU0FBUyxDQUFDO0FBQ2hCO0FDSEEsTUFBTU0sYUFBd0JBLE1BQU07O0FBQzVCQyxRQUFBQSxVQUFVbFYsSUFBTyxJQUFJO0FBQzNCLFFBQU0sQ0FBQ21WLGFBQWFDLGlCQUFpQixJQUFJcEUsVUFBVztBQUNwRCxRQUFNN1AsUUFBUUU7QUFDZCxRQUFNMkwsU0FBU0ksbUJBQW1CO0FBQUEsSUFBRUMsV0FBVzZIO0FBQUFBLEVBQUFBLENBQVM7QUFDbERsRCxRQUFBQSxjQUFjN0UsWUFBWWhNLE9BQU82TCxNQUFNO0FBQ3ZDZ0MsUUFBQUEsUUFBUTBCLGNBQWNzQixXQUFXO0FBQ2pDcUQsUUFBQUEsVUFBVXhCLFdBQVc3QixXQUFXO0FBQ2hDLFFBQUE7QUFBQSxJQUFFcFM7QUFBQUEsSUFBUUs7QUFBQUEsRUFBYVAsSUFBQUEsYUFBWXNTLGdEQUFhTSxjQUFiTixtQkFBd0JyUyxLQUFLO0FBQ2hFLFFBQUE7QUFBQSxJQUFFdVM7QUFBQUEsSUFBU21CO0FBQUFBLElBQVdOO0FBQUFBLElBQVdYO0FBQUFBLEVBQUFBLElBQWVMLGFBQWFDLGFBQWE7QUFBQSxJQUM5RUwsTUFBTTJELFNBQU9DO0FBQUFBLElBQ2IzRCxPQUFPMEQsU0FBTzFEO0FBQUFBLElBQ2RDLFFBQVF5RCxTQUFPekQ7QUFBQUEsSUFDZkMsVUFBVXdELFNBQU94RDtBQUFBQSxFQUFBQSxDQUNsQjtBQUNEeUMsa0JBQWdCdkMsV0FBVztBQUUzQixTQUNFd0QsRUFBQSxPQUFBO0FBQUEsSUFBS0MsV0FBV0gsU0FBTzNTO0FBQUFBLElBQU0rUyxLQUFLUjtBQUFBQSxJQUFRdFUsV0FDeENFLEVBQUEsT0FBQTtBQUFBLE1BQUsyVSxXQUFXSCxTQUFPbkQ7QUFBQUEsTUFBTXdELE9BQU90QztBQUFBQSxNQUFXZ0MsU0FBU3BWO0FBQUFBLE1BQVNXLFVBQzlEc1IsV0FDQ3BSLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPTTtBQUFBQSxRQUFXaFYsVUFDaENFLEVBQUN5USxVQUFRLEVBQUE7QUFBQSxNQUFBLENBQUc7QUFBQSxJQUFBLENBRWYsR0FFSGlFLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdqWCxXQUFXOFcsU0FBT08sTUFBTTtBQUFBLFFBQUUsQ0FBQ1AsU0FBT1EsUUFBUSxHQUFHbFc7QUFBQUEsTUFBQUEsQ0FBUTtBQUFBLE1BQUcrVixPQUFPNUM7QUFBQUEsTUFBVW5TLFdBQ3ZGRSxFQUFBLE9BQUE7QUFBQSxRQUFLMlUsV0FBV0gsU0FBT1M7QUFBQUEsUUFBT0osT0FBT3ZEO0FBQUFBLE1BQUFBLENBQVcsR0FDaER0UixFQUFBLE9BQUE7QUFBQSxRQUFLMlUsV0FBV0gsU0FBT1U7QUFBQUEsUUFBT0wsT0FBTzNHLE1BQU1nSDtBQUFBQSxRQUFPWCxTQUFTcFY7QUFBQUEsUUFBU1csVUFDbEVFLEVBQUNtUSxXQUFTLEVBQUE7QUFBQSxNQUFBLENBQUcsR0FFZnVFLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9oRDtBQUFBQSxRQUFXcUQsT0FBTzNHLE1BQU1zRDtBQUFBQSxRQUFVMVIsV0FDdkQ0VSxFQUFBLEtBQUE7QUFBQSxVQUFHUixPQUFNaEcsV0FBTXJNLFNBQU5xTSxtQkFBWWlIO0FBQUFBLFVBQU8vVSxRQUFPO0FBQUEsVUFBUzZULEtBQUk7QUFBQSxVQUErQk07QUFBQUEsVUFBaUJ6VSxXQUM5RjRVLEVBQUEsT0FBQTtBQUFBLFlBQUtDLFdBQVdILFNBQU81VztBQUFBQSxZQUFNa0MsV0FDM0JFLEVBQUEsT0FBQTtBQUFBLGNBQUsyVSxXQUFXSCxTQUFPWTtBQUFBQSxjQUFNUCxPQUFPM0csTUFBTWtIO0FBQUFBLFlBQUFBLENBQVksR0FDdERwVixFQUFDNlAsYUFBVztBQUFBLGNBQUM4RSxXQUFXSCxTQUFPYTtBQUFBQSxjQUFNUixPQUFPM0csTUFBTW1IO0FBQUFBLGNBQUt2VixXQUNwRG9PLG9DQUFPbUgsU0FBUG5ILG1CQUFhcE87QUFBQUEsWUFBQUEsQ0FDRixDQUFBO0FBQUEsVUFBQSxDQUFBLEdBRWhCRSxFQUFBLE9BQUE7QUFBQSxZQUFLMlUsV0FBV2pYLFdBQVc4VyxTQUFPYyxRQUFRO0FBQUEsY0FDeEMsQ0FBQ2QsU0FBT2UsY0FBYyxHQUFHckgsTUFBTW9ILE9BQU9FO0FBQUFBLFlBQUFBLENBQ3ZDO0FBQUEsWUFBR1gsT0FBTzNHLE1BQU1vSDtBQUFBQSxZQUFPeFYsV0FDckJvTyxXQUFNb0gsV0FBTnBILG1CQUFjcE87QUFBQUEsVUFBQUEsQ0FDWCxDQUFBO0FBQUEsUUFBQSxDQUFBLEdBRVJFLEVBQUEsT0FBQTtBQUFBLFVBQ0UyVSxXQUFXalgsV0FBVzhXLFNBQU9pQixPQUFPO0FBQUEsWUFDbEMsQ0FBQ2pCLFNBQU9rQixTQUFTLEdBQUdyQjtBQUFBQSxVQUFBQSxDQUNyQjtBQUFBLFVBQ0RRLE9BQU8zRyxNQUFNdUg7QUFBQUEsVUFBTTNWLFVBRW5CNFUsRUFBQSxRQUFBO0FBQUEsWUFBTUMsV0FBV0gsU0FBT21CO0FBQUFBLFlBQVU3VixXQUNoQ0UsRUFBQSxRQUFBO0FBQUEsY0FBQUYsV0FBT29PLG9DQUFPdUgsVUFBUHZILG1CQUFjcE87QUFBQUEsWUFBQUEsQ0FBUSxHQUM3QkUsRUFBQSxRQUFBO0FBQUEsY0FBTTJVLFdBQVdILFNBQU9vQjtBQUFBQSxjQUFhckIsU0FBU0Q7QUFBQUEsY0FBa0J4VSxVQUM3RHVVLGVBQWNuRyxvQ0FBT3VILFVBQVB2SCxtQkFBYzJILGtCQUFpQjNILG9DQUFPdUgsVUFBUHZILG1CQUFjNEg7QUFBQUEsWUFBQUEsQ0FDdkQsQ0FBQTtBQUFBLFVBQUEsQ0FBQTtBQUFBLFFBQUEsQ0FFTCxDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDRjtBQUVWO0FBRUEsTUFBZTVWLFVBQUFBLE9BQU9GLEVBQUNtVSxlQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0VwQyxNQUFNNEIsY0FBZ0JBLE1BQU07O0FBQzFCLFFBQU0xVixRQUFRRTtBQUNSMk4sUUFBQUEsUUFBUTBCLGNBQWN2UCxLQUFLO0FBQzNCa1UsUUFBQUEsVUFBVXhCLFdBQVcxUyxLQUFLO0FBRWhDLFNBQ0VxVSxFQUFBLEtBQUE7QUFBQSxJQUNFUixPQUFNaEcsV0FBTXJNLFNBQU5xTSxtQkFBWWlIO0FBQUFBLElBQ2xCL1UsUUFBTztBQUFBLElBQ1A2VCxLQUFJO0FBQUEsSUFDSlUsV0FBV2pYLFdBQVc4VyxTQUFPM1MsTUFBTTtBQUFBLE1BQ2pDLENBQUMyUyxTQUFPd0IsUUFBUSxLQUFHOUgsV0FBTXJNLFNBQU5xTSxtQkFBWStILGFBQVk7QUFBQSxJQUFBLENBQzVDO0FBQUEsSUFDRHBCLE9BQU8zRyxNQUFNck07QUFBQUEsSUFDYjBTO0FBQUFBLElBQWlCelUsV0FFakI0VSxFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXSCxTQUFPTztBQUFBQSxNQUFLalYsV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPMEI7QUFBQUEsUUFBTXJCLE9BQU8zRyxNQUFNZ0k7QUFBQUEsTUFBQUEsQ0FBSyxHQUMvQ3hCLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU8yQjtBQUFBQSxRQUFVclcsV0FDL0JFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPWTtBQUFBQSxVQUFNUCxPQUFPM0csTUFBTWtIO0FBQUFBLFFBQUFBLENBQUssR0FDL0NwVixFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT2E7QUFBQUEsVUFBTVIsT0FBTzNHLE1BQU1tSDtBQUFBQSxVQUFLdlYsVUFDN0NFLEVBQUM2UCxhQUFXO0FBQUEsWUFBQS9QLFdBQUVvTyxXQUFNbUgsU0FBTm5ILG1CQUFZcE87QUFBQUEsVUFBQUEsQ0FBUTtBQUFBLFFBQUEsQ0FDOUIsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUdSNFUsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT2M7QUFBQUEsUUFBUVQsT0FBTzNHLE1BQU1vSDtBQUFBQSxRQUFPeFYsV0FDakRFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPWTtBQUFBQSxVQUFNUCxPQUFPM0csTUFBTWtIO0FBQUFBLFFBQUFBLENBQUssR0FDL0NwVixFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBTzRCO0FBQUFBLFVBQVd0VyxXQUFFb08sV0FBTW9ILFdBQU5wSCxtQkFBY3BPO0FBQUFBLFFBQUFBLENBQWUsQ0FBQTtBQUFBLE1BQUEsQ0FDN0QsQ0FBQTtBQUFBLElBQUEsQ0FBQSxHQUVSRSxFQUFBLE9BQUE7QUFBQSxNQUFLMlUsV0FBV0gsU0FBT2lCO0FBQUFBLE1BQU9aLE9BQU8zRyxNQUFNdUg7QUFBQUEsTUFBTTNWLFdBQzlDb08sV0FBTXVILFVBQU52SCxtQkFBYXBPO0FBQUFBLElBQUFBLENBQ1YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FDMUJBLE1BQU11VyxjQUFjQSxNQUFNOztBQUNsQmpDLFFBQUFBLFVBQVVsVixJQUFPLElBQUk7QUFDckIsUUFBQTtBQUFBLElBQUVKO0FBQUFBLElBQVFLO0FBQUFBLE1BQWFQLFlBQWE7QUFDMUMsUUFBTXlCLFFBQVFFO0FBQ2QsUUFBTTJMLFNBQVNJLG1CQUFtQjtBQUFBLElBQUVDLFdBQVc2SDtBQUFBQSxFQUFBQSxDQUFTO0FBQ2xEbEQsUUFBQUEsY0FBYzdFLFlBQVloTSxPQUFPNkwsTUFBTTtBQUN2Q2dDLFFBQUFBLFFBQVEwQixjQUFjc0IsV0FBVztBQUN2Q3VDLGtCQUFnQnZDLFdBQVc7QUFDckIsUUFBQTtBQUFBLElBQUVFO0FBQUFBLElBQVNtQjtBQUFBQSxJQUFXTjtBQUFBQSxJQUFXWDtBQUFBQSxFQUFBQSxJQUFlTCxhQUFhQyxhQUFhO0FBQUEsSUFDOUVMLE1BQU0yRCxTQUFPQztBQUFBQSxJQUNiM0QsT0FBTzBELFNBQU8xRDtBQUFBQSxJQUNkQyxRQUFReUQsU0FBT3pEO0FBQUFBLElBQ2ZDLFVBQVV3RCxTQUFPeEQ7QUFBQUEsRUFBQUEsQ0FDbEI7QUFFRCxTQUNFMEQsRUFBQSxPQUFBO0FBQUEsSUFBS0UsS0FBS1I7QUFBQUEsSUFBU08sV0FBV0gsU0FBTzNTO0FBQUFBLElBQUsvQixXQUN4Q0UsRUFBQSxPQUFBO0FBQUEsTUFBSzJVLFdBQVdILFNBQU9uRDtBQUFBQSxNQUFNd0QsT0FBT3RDO0FBQUFBLE1BQVdnQyxTQUFTcFY7QUFBQUEsTUFBU1csVUFDOURzUixXQUNDcFIsRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU9NO0FBQUFBLFFBQVdoVixVQUNoQ0UsRUFBQ3lRLFVBQVEsRUFBQTtBQUFBLE1BQUEsQ0FBRztBQUFBLElBQUEsQ0FFZixHQUVIaUUsRUFBQSxPQUFBO0FBQUEsTUFDRUMsV0FBV2pYLFdBQVc4VyxTQUFPTyxNQUFNO0FBQUEsUUFDakMsQ0FBQ1AsU0FBT1EsUUFBUSxHQUFHbFc7QUFBQUEsTUFBQUEsQ0FDcEI7QUFBQSxNQUNEK1YsT0FBTzVDO0FBQUFBLE1BQVVuUyxXQUVqQkUsRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU9TO0FBQUFBLFFBQU9KLE9BQU92RDtBQUFBQSxNQUFBQSxDQUFXLEdBQ2hEb0QsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT2hEO0FBQUFBLFFBQVdxRCxPQUFPM0csTUFBTXNEO0FBQUFBLFFBQVUxUixXQUN2REUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU9VO0FBQUFBLFVBQU9MLE9BQU8zRyxNQUFNZ0g7QUFBQUEsVUFBT1gsU0FBU3BWO0FBQUFBLFVBQVNXLFVBQ2xFRSxFQUFDbVEsV0FBUyxFQUFBO0FBQUEsUUFBQSxDQUFHLEdBRWZuUSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBTzhCO0FBQUFBLFVBQVd6QixPQUFPM0csTUFBTW9JO0FBQUFBLFVBQVV4VyxXQUN0RG9PLFdBQU1vSSxjQUFOcEksbUJBQWlCcE87QUFBQUEsUUFBQUEsQ0FBUSxHQUU1QjRVLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILFNBQU9sTTtBQUFBQSxVQUFNdU0sT0FBTzNHLE1BQU1xSTtBQUFBQSxVQUFNelcsV0FDOUNFLEVBQUEsT0FBQTtBQUFBLFlBQUsyVSxXQUFXSCxTQUFPZ0M7QUFBQUEsWUFBUzFXLFVBQzlCRSxFQUFDeVEsVUFBUSxFQUFBO0FBQUEsVUFBQSxDQUFHLEdBRWR6USxFQUFBLE9BQUE7QUFBQSxZQUFLMlUsV0FBV0gsU0FBT2lDO0FBQUFBLFlBQVUzVyxXQUM5Qm9PLFdBQU1xSSxVQUFOckksbUJBQWFwTztBQUFBQSxVQUFBQSxDQUNWLENBQUE7QUFBQSxRQUFBLENBQUEsR0FHUkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU81VztBQUFBQSxVQUFNa0MsV0FDekJvTyxNQUFNcE8sWUFBWSxDQUFBLEdBQUl1SixJQUFJcU4sQ0FBQUEsVUFDMUIxVyxFQUFDSCxjQUFZO0FBQUEsWUFBQ0UsT0FBTzJXO0FBQUFBLFlBQU01VyxVQUN6QkUsRUFBQytWLGFBQVMsRUFBQTtBQUFBLFVBQUEsQ0FFYixDQUFBO0FBQUEsUUFBQSxDQUNHLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRixDQUFBO0FBQUEsRUFBQSxDQUNGO0FBRVY7QUFFQSxNQUFlN1YsVUFBQUEsT0FBT0YsRUFBQ3FXLGdCQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3RXhCTSxNQUFBQSx3QkFBd0JBLENBQUNDLGNBQ3BDQSxZQUFZO0FBQUEsRUFBRXJGLE1BQU07QUFBQSxFQUFjc0YsUUFBUTtBQUFBLEVBQVVDLE9BQU87QUFBVyxFQUFFRixTQUFTLElBQUlBOzs7OztBQ0t2RixNQUFNRyxPQUFXQSxNQUFNOztBQUNyQixRQUFNMVcsUUFBUUU7QUFDUjJOLFFBQUFBLFFBQVEwQixjQUFjdlAsS0FBSztBQUVqQyxTQUNFTCxFQUFBLE9BQUE7QUFBQSxJQUFLMlUsV0FBV0gsU0FBTzNTO0FBQUFBLElBQU1nVCxPQUFPM0csTUFBTXJNO0FBQUFBLElBQUsvQixVQUM3Q0UsRUFBQzZQLGFBQVc7QUFBQSxNQUFBL1AsV0FBRW9PLG9DQUFPck0sU0FBUHFNLG1CQUFhcE87QUFBQUEsSUFBQUEsQ0FBUTtBQUFBLEVBQUEsQ0FDL0I7QUFFVjtBQ0FBLE1BQU1rWCxnQkFBa0JBLE1BQU07O0FBQ3RCNUMsUUFBQUEsVUFBVWxWLElBQU8sSUFBSTtBQUMzQixRQUFNZ04sU0FBU0ksbUJBQW1CO0FBQUEsSUFBRUMsV0FBVzZIO0FBQUFBLEVBQUFBLENBQVM7QUFDeEQsUUFBTS9ULFFBQVFFO0FBQ1IyUSxRQUFBQSxjQUFjN0UsWUFBWWhNLE9BQU82TCxNQUFNO0FBQ3ZDcUksUUFBQUEsVUFBVXhCLFdBQVc3QixXQUFXO0FBRXRDaEgsTUFBSWdILGFBQWEseUJBQXdCQSxnREFBYW9FLFdBQWJwRSxtQkFBcUJuRSxLQUFLO0FBQ25FN0MsTUFBSWdILGFBQWEsd0JBQXVCQSxnREFBYXVFLFVBQWJ2RSxtQkFBb0JuRSxLQUFLO0FBQzNEbUIsUUFBQUEsUUFBUTBCLGNBQWNzQixXQUFXO0FBR3ZDLFFBQU1lLFlBQVk7QUFBQSxJQUNoQmdGLFlBQVlOLHVCQUFzQnpJLFdBQU1yTSxTQUFOcU0sbUJBQVlnSixLQUFLO0FBQUEsRUFBQTtBQUdyRCxRQUFNQyxjQUFjO0FBQUEsSUFDbEIsR0FBR2pKLCtCQUFPb0g7QUFBQUEsSUFDVjhCLGdCQUFnQlQsdUJBQXNCekksV0FBTXJNLFNBQU5xTSxtQkFBWTBJLFNBQVM7QUFBQSxFQUFBO0FBRzdELFFBQU1TLGFBQWE7QUFBQSxJQUNqQixHQUFHbkosK0JBQU91SDtBQUFBQSxJQUNWMkIsZ0JBQWdCVCx1QkFBc0J6SSxXQUFNck0sU0FBTnFNLG1CQUFZMEksU0FBUztBQUFBLEVBQUE7QUFHN0QsU0FDRTVXLEVBQUEsS0FBQTtBQUFBLElBQ0U0VSxLQUFLUjtBQUFBQSxJQUNMRixPQUFNaEcsV0FBTXJNLFNBQU5xTSxtQkFBWWlIO0FBQUFBLElBQ2xCL1UsUUFBTztBQUFBLElBQ1A2VCxLQUFJO0FBQUEsSUFDSlUsV0FBV2pYLFdBQVc4VyxTQUFPM1MsTUFBTTtBQUFBLE1BQ2pDLENBQUMyUyxTQUFPeEksT0FBTyxHQUFHRSxXQUFXO0FBQUEsTUFDN0IsQ0FBQ3NJLFNBQU8xSSxNQUFNLEdBQUdJLFdBQVc7QUFBQSxNQUM1QixDQUFDc0ksU0FBT3pJLE1BQU0sR0FBR0csV0FBVztBQUFBLElBQUEsQ0FDN0I7QUFBQSxJQUNEMkksT0FBTzNHLE1BQU1yTTtBQUFBQSxJQUNiMFM7QUFBQUEsSUFBaUJ6VSxVQUVqQjRVLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU9PO0FBQUFBLE1BQU1GLE9BQU81QztBQUFBQSxNQUFVblMsV0FDNUNFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPWTtBQUFBQSxRQUFNUCxPQUFPM0csTUFBTWtIO0FBQUFBLE1BQUFBLENBQUssR0FDL0NwVixFQUFBLE9BQUE7QUFBQSxRQUFLMlUsV0FBV0gsU0FBT2E7QUFBQUEsUUFBS3ZWLFlBQ3hCb08sK0JBQU9wTyxhQUFZLENBQUEsR0FBSXVKLElBQUlDLENBQUFBLE9BQzNCdEosRUFBQ0gsY0FBWTtBQUFBLFVBQUNFLE9BQU91SjtBQUFBQSxVQUFHeEosVUFDdEJFLEVBQUMrVyxNQUFJLEVBQUE7QUFBQSxRQUFBLENBRVIsQ0FBQTtBQUFBLE1BQUEsQ0FBQyxHQUVKL1csRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU9jO0FBQUFBLFFBQVFULE9BQU9zQztBQUFBQSxRQUFZclgsVUFDL0NxWCwyQ0FBYXJYO0FBQUFBLE1BQUFBLENBQVEsR0FFeEJFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPaUI7QUFBQUEsUUFBT1osT0FBT3dDO0FBQUFBLFFBQVd2WCxVQUM3Q3VYLHlDQUFZdlg7QUFBQUEsTUFBQUEsQ0FDVCxDQUFBO0FBQUEsSUFBQSxDQUFBO0FBQUEsRUFBQSxDQUVOO0FBRVI7QUFFQSxNQUFlSSxVQUFBQSxPQUFPRixFQUFDZ1gsa0JBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRXJDLE1BQU1NLFVBQVlBLE1BQU07O0FBQ3RCLFFBQU1qWCxRQUFRRTtBQUNSMk4sUUFBQUEsUUFBUTBCLGNBQWN2UCxLQUFLO0FBQzNCNkwsUUFBQUEsVUFBUzdMLCtCQUFPNkwsV0FBVTtBQUMxQnFJLFFBQUFBLFVBQVV4QixXQUFXMVMsS0FBSztBQUdoQyxTQUNFcVUsRUFBQSxLQUFBO0FBQUEsSUFDRVIsT0FBTWhHLFdBQU1yTSxTQUFOcU0sbUJBQVlpSDtBQUFBQSxJQUNsQi9VLFFBQU87QUFBQSxJQUNQNlQsS0FBSTtBQUFBLElBQ0pVLFdBQVdqWCxXQUFXOFcsU0FBTzNTLE1BQU07QUFBQSxNQUNqQyxDQUFDMlMsU0FBT3hJLE9BQU8sR0FBR0UsV0FBVztBQUFBLElBQUEsQ0FDOUI7QUFBQSxJQUNEMkksT0FBTzVLLEtBQUtpRSxNQUFNck0sTUFBTSxHQUFHNFEsY0FBYztBQUFBLElBQ3pDOEI7QUFBQUEsSUFBaUJ6VSxXQUVqQkUsRUFBQSxPQUFBO0FBQUEsTUFBSzJVLFdBQVdILFNBQU8rQztBQUFBQSxNQUFRMUMsT0FBTzNHLE1BQU1xSjtBQUFBQSxNQUFPelgsVUFDakRFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPWTtBQUFBQSxRQUFNUCxPQUFPM0csTUFBTWtIO0FBQUFBLE1BQUFBLENBQUs7QUFBQSxJQUFBLENBQUcsR0FFcERWLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU9oRDtBQUFBQSxNQUFXcUQsT0FBT2pMLEtBQUtzRSxNQUFNck0sTUFBTSxHQUFHNFEsY0FBYztBQUFBLE1BQUUzUyxXQUMzRTRVLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9PO0FBQUFBLFFBQUtqVixXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU9ZO0FBQUFBLFFBQUFBLENBQVksR0FDbkNwVixFQUFDNlAsYUFBVztBQUFBLFVBQUM4RSxXQUFXSCxTQUFPYTtBQUFBQSxVQUFNUixPQUFPM0csTUFBTW1IO0FBQUFBLFVBQUt2VixXQUNwRG9PLFdBQU1tSCxTQUFObkgsbUJBQVlwTztBQUFBQSxRQUFBQSxDQUNELENBQUE7QUFBQSxNQUFBLENBQUEsR0FFaEI0VSxFQUFBLE9BQUE7QUFBQSxRQUFBNVUsV0FDRUUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU9jO0FBQUFBLFVBQVFULE9BQU8zRyxNQUFNb0g7QUFBQUEsVUFBT3hWLFdBQ2hEb08sV0FBTW9ILFdBQU5wSCxtQkFBY3BPO0FBQUFBLFFBQUFBLENBQVEsR0FFekJFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPaUI7QUFBQUEsVUFBT1osT0FBTzNHLE1BQU11SDtBQUFBQSxVQUFNM1YsV0FDOUNvTyxXQUFNdUgsVUFBTnZILG1CQUFhcE87QUFBQUEsUUFBQUEsQ0FDVixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FDcENBLE1BQU1rWCxnQkFBa0JBLE1BQU07O0FBQ3RCNUMsUUFBQUEsVUFBVWxWLElBQU8sSUFBSTtBQUMzQixRQUFNZ04sU0FBU0ksbUJBQW1CO0FBQUEsSUFBRUMsV0FBVzZIO0FBQUFBLEVBQUFBLENBQVM7QUFDeEQsUUFBTS9ULFFBQVFFO0FBQ1IyUSxRQUFBQSxjQUFjN0UsWUFBWWhNLE9BQU82TCxNQUFNO0FBQ3ZDZ0MsUUFBQUEsUUFBUTBCLGNBQWNzQixXQUFXO0FBQ3ZDdUMsa0JBQWdCdkMsV0FBVztBQUUzQixTQUNFd0QsRUFBQSxPQUFBO0FBQUEsSUFDRUUsS0FBS1I7QUFBQUEsSUFDTE8sV0FBV2pYLFdBQVc4VyxTQUFPM1MsTUFBTTtBQUFBLE1BQ2pDLENBQUMyUyxTQUFPeEksT0FBTyxHQUFHRSxXQUFXO0FBQUEsSUFBQSxDQUM5QjtBQUFBLElBQ0QySSxPQUFPM0csTUFBTXJNO0FBQUFBLElBQUsvQixXQUVsQkUsRUFBQSxPQUFBO0FBQUEsTUFBSzJVLFdBQVdILFNBQU8rQjtBQUFBQSxNQUFPMUIsT0FBTzNHLE1BQU1xSTtBQUFBQSxNQUFNelcsV0FDOUNvTyxXQUFNcUksVUFBTnJJLG1CQUFhcE87QUFBQUEsSUFBQUEsQ0FBUSxHQUV4QkUsRUFBQSxPQUFBO0FBQUEsTUFBSzJVLFdBQVdILFNBQU9nRDtBQUFBQSxNQUFRMVgsV0FDM0JvTyxNQUFNcE8sWUFBWSxDQUFBLEdBQUl1SixJQUFJcU4sQ0FBQUEsVUFDMUIxVyxFQUFDSCxjQUFZO0FBQUEsUUFBQ0UsT0FBTztBQUFBLFVBQUUsR0FBRzJXO0FBQUFBLFVBQU94SztBQUFBQSxRQUFPO0FBQUEsUUFBRXBNLFVBQ3hDRSxFQUFDc1gsU0FBSyxFQUFBO0FBQUEsTUFBQSxDQUVULENBQUE7QUFBQSxJQUFBLENBQ0csQ0FBQTtBQUFBLEVBQUEsQ0FDRjtBQUVWO0FBRUEsTUFBZXBYLFVBQUFBLE9BQU9GLEVBQUNnWCxrQkFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDckMsTUFBTVMsUUFBWUEsTUFBTTs7QUFDdEIsUUFBTXBYLFFBQVFFO0FBQ1IyTixRQUFBQSxRQUFRMEIsY0FBY3ZQLEtBQUs7QUFDM0I2TCxRQUFBQSxVQUFTN0wsK0JBQU82TCxXQUFVO0FBRWhDLFNBQ0V3SSxFQUFBLE9BQUE7QUFBQSxJQUFLQyxXQUFXalgsV0FBVzhXLFNBQU8zUyxNQUFNO0FBQUEsTUFDdEMsQ0FBQzJTLFNBQU94SSxPQUFPLEdBQUdFLFdBQVc7QUFBQSxJQUFBLENBQzlCO0FBQUEsSUFBRXBNLFdBQ0Q0VSxFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXSCxTQUFPakQ7QUFBQUEsTUFBS3pSLFdBQzFCNFUsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT2tEO0FBQUFBLFFBQU01WCxXQUMzQkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU9ZO0FBQUFBLFFBQUFBLENBQUssR0FDNUJwVixFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT1k7QUFBQUEsUUFBQUEsQ0FBUSxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRWpDVixFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPTztBQUFBQSxRQUFLalYsV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPbUQ7QUFBQUEsVUFBUTlDLE9BQU8zRyxNQUFNeUo7QUFBQUEsVUFBTzdYLFdBQUVvTyxXQUFNeUosV0FBTnpKLG1CQUFjcE87QUFBQUEsUUFBQUEsQ0FBUSxHQUMzRTRVLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILFNBQU9vRDtBQUFBQSxVQUFNL0MsT0FBTzNHLE1BQU13SjtBQUFBQSxVQUFNNVgsVUFBQSxFQUFFb08sV0FBTXdKLFVBQU54SixtQkFBYTJKLE9BQUssUUFBSzNKLFdBQU13SixVQUFOeEosbUJBQWE0SixLQUFLO0FBQUEsUUFBQSxDQUFPLENBQUE7QUFBQSxNQUFBLENBQzlGLENBQUE7QUFBQSxJQUFBLENBQUEsR0FFUnBELEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU9zQztBQUFBQSxNQUFNaFgsV0FDM0I0VSxFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPdUQ7QUFBQUEsUUFBS2pZLFdBQzFCRSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT3dEO0FBQUFBLFFBQUFBLENBQVMsR0FDaENoWSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT3lEO0FBQUFBLFVBQVVwRCxPQUFPM0csTUFBTXdKO0FBQUFBLFVBQU01WCxXQUFFb08sV0FBTXdKLFVBQU54SixtQkFBYTJKO0FBQUFBLFFBQUFBLENBQVksQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUdqRm5ELEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU8wRDtBQUFBQSxRQUFJcFksV0FDekJFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPMkQ7QUFBQUEsVUFBVXRELE9BQU8zRyxNQUFNaUs7QUFBQUEsVUFBU3JZLFdBQUVvTyxXQUFNaUssYUFBTmpLLG1CQUFnQnBPO0FBQUFBLFFBQUFBLENBQVEsR0FDakZFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPNEQ7QUFBQUEsVUFBVXZELE9BQU8zRyxNQUFNa0s7QUFBQUEsVUFBU3RZLFdBQUVvTyxXQUFNa0ssYUFBTmxLLG1CQUFnQnBPO0FBQUFBLFFBQUFBLENBQWUsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUcxRjRVLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU91RDtBQUFBQSxRQUFLalksV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPd0Q7QUFBQUEsUUFBQUEsQ0FBUyxHQUNoQ2hZLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPeUQ7QUFBQUEsVUFBVXBELE9BQU8zRyxNQUFNd0o7QUFBQUEsVUFBTTVYLFdBQUVvTyxXQUFNd0osVUFBTnhKLG1CQUFhNEo7QUFBQUEsUUFBQUEsQ0FBWSxDQUFBO0FBQUEsTUFBQSxDQUMzRSxDQUFBO0FBQUEsSUFBQSxDQUNGLENBQUE7QUFBQSxFQUFBLENBQ0Y7QUFFVjtBQzVCQSxNQUFNZCxjQUFrQkEsTUFBTTs7QUFDdEI1QyxRQUFBQSxVQUFVbFYsSUFBTyxJQUFJO0FBQzNCLFFBQU1nTixTQUFTSSxtQkFBbUI7QUFBQSxJQUFFQyxXQUFXNkg7QUFBQUEsRUFBQUEsQ0FBUztBQUN4RCxRQUFNL1QsUUFBUUU7QUFDUjJRLFFBQUFBLGNBQWM3RSxZQUFZaE0sT0FBTzZMLE1BQU07QUFDN0NoQyxNQUFJZ0gsYUFBYSxnQ0FBK0JBLGdEQUFhbUgsa0JBQWJuSCxtQkFBNEJuRSxLQUFLO0FBQ2pGN0MsTUFBSWdILGFBQWEsd0JBQXVCQSxnREFBYXVFLFVBQWJ2RSxtQkFBb0JuRSxLQUFLO0FBQzNEbUIsUUFBQUEsUUFBUTBCLGNBQWNzQixXQUFXO0FBQ2pDcUQsUUFBQUEsVUFBVXhCLFdBQVc3QixXQUFXO0FBRXRDLFFBQU1lLFlBQVk7QUFBQSxJQUNoQixHQUFHL0QsTUFBTXJNO0FBQUFBLElBQ1RvVixZQUFZTix1QkFBc0J6SSxXQUFNck0sU0FBTnFNLG1CQUFZZ0osS0FBSztBQUFBLEVBQUE7QUFHckQsUUFBTW9CLGVBQWU7QUFBQSxJQUNuQixHQUFHcEssTUFBTXFLO0FBQUFBLElBQ1R0QixZQUFZTix1QkFBc0J6SSxXQUFNck0sU0FBTnFNLG1CQUFZZ0osS0FBSztBQUFBLEVBQUE7QUFHckQsUUFBTXNCLFlBQVk7QUFBQSxJQUNoQixHQUFHdEssTUFBTW1IO0FBQUFBLElBQ1R1QixZQUFXMUksV0FBTXJNLFNBQU5xTSxtQkFBWWdKO0FBQUFBLEVBQUFBO0FBR3pCLFFBQU1DLGNBQWM7QUFBQSxJQUNsQixHQUFHakosK0JBQU9vSDtBQUFBQSxJQUNWOEIsZ0JBQWdCVCx1QkFBc0J6SSxXQUFNck0sU0FBTnFNLG1CQUFZMEksU0FBUztBQUFBLEVBQUE7QUFHN0QsUUFBTVMsYUFBYTtBQUFBLElBQ2pCLEdBQUduSiwrQkFBT3VIO0FBQUFBLElBQ1YyQixnQkFBZ0JULHVCQUFzQnpJLFdBQU1yTSxTQUFOcU0sbUJBQVkwSSxTQUFTO0FBQUEsRUFBQTtBQUc3RCxTQUNFNVcsRUFBQSxLQUFBO0FBQUEsSUFDRTRVLEtBQUtSO0FBQUFBLElBQ0xGLE9BQU1oRyxXQUFNck0sU0FBTnFNLG1CQUFZaUg7QUFBQUEsSUFDbEIvVSxRQUFPO0FBQUEsSUFDUDZULEtBQUk7QUFBQSxJQUNKVSxXQUFXalgsV0FBVzhXLFNBQU8zUyxNQUFNO0FBQUEsTUFDakMsQ0FBQzJTLFNBQU94SSxPQUFPLEdBQUdFLFdBQVc7QUFBQSxNQUM3QixDQUFDc0ksU0FBT3pJLE1BQU0sR0FBR0csV0FBVztBQUFBLE1BQzVCLENBQUNzSSxTQUFPMUksTUFBTSxHQUFHSSxXQUFXO0FBQUEsSUFBQSxDQUM3QjtBQUFBLElBQ0RxSTtBQUFBQSxJQUFpQnpVLFVBRWpCNFUsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsU0FBT087QUFBQUEsTUFBTUYsT0FBTzVDO0FBQUFBLE1BQVVuUyxXQUM1QzRVLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9sTTtBQUFBQSxRQUFLeEksV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPK0I7QUFBQUEsVUFBTzFCLE9BQU8zRyxNQUFNcUk7QUFBQUEsVUFBTXpXLFdBQzlDb08sV0FBTXFJLFVBQU5ySSxtQkFBYXBPO0FBQUFBLFFBQUFBLENBQVEsR0FFeEJFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPWTtBQUFBQSxVQUFNUCxPQUFPM0csTUFBTWtIO0FBQUFBLFFBQUFBLENBQVEsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVwRHBWLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPZ0Q7QUFBQUEsUUFBUzNDLE9BQU95RDtBQUFBQSxRQUFheFksV0FDaERvTyxNQUFNcE8sWUFBWSxDQUFBLEdBQUl1SixJQUFJcU4sQ0FBQUEsVUFDMUIxVyxFQUFDSCxjQUFZO0FBQUEsVUFBQ0UsT0FBTztBQUFBLFlBQUUsR0FBRzJXO0FBQUFBLFlBQU94SztBQUFBQSxVQUFPO0FBQUEsVUFBRXBNLFVBQ3hDRSxFQUFDeVgsT0FBSyxFQUFBO0FBQUEsUUFBQSxDQUVULENBQUE7QUFBQSxNQUFBLENBQ0csR0FFTnpYLEVBQUM2UCxhQUFXO0FBQUEsUUFBQzhFLFdBQVdILFNBQU9hO0FBQUFBLFFBQU1SLE9BQU8yRDtBQUFBQSxRQUFVMVksV0FDbkRvTyxXQUFNbUgsU0FBTm5ILG1CQUFZcE87QUFBQUEsTUFBQUEsQ0FBUSxHQUV2QjRVLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9jO0FBQUFBLFFBQVFULE9BQU8zRyxNQUFNbUs7QUFBQUEsUUFBY3ZZLFdBQ3hERSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT2lFO0FBQUFBLFVBQVk1RCxPQUFPM0csTUFBTXVLO0FBQUFBLFVBQVczWSxXQUN4RG9PLFdBQU11SyxlQUFOdkssbUJBQWtCcE87QUFBQUEsUUFBQUEsQ0FBUSxHQUU3QkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU9rRTtBQUFBQSxVQUFjN0QsT0FBT3NDO0FBQUFBLFVBQVlyWCxXQUNyRG9PLFdBQU1vSCxXQUFOcEgsbUJBQWNwTztBQUFBQSxRQUFBQSxDQUNYLENBQUE7QUFBQSxNQUFBLENBQUEsR0FFUkUsRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU9pQjtBQUFBQSxRQUFPWixPQUFPd0M7QUFBQUEsUUFBV3ZYLFdBQzdDb08sV0FBTXVILFVBQU52SCxtQkFBYXBPO0FBQUFBLE1BQUFBLENBQ1YsQ0FBQTtBQUFBLElBQUEsQ0FBQTtBQUFBLEVBQUEsQ0FFTjtBQUVSO0FBRUEsTUFBZUksVUFBQUEsT0FBT0YsRUFBQ2dYLGdCQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUZyQyxNQUFNTSxRQUFZQSxNQUFNOztBQUN0QixRQUFNalgsUUFBUUU7QUFDUjJOLFFBQUFBLFFBQVEwQixjQUFjdlAsS0FBSztBQUNqQyxRQUFNLENBQUN2QixRQUFRNlosWUFBWSxJQUFJekksVUFBVztBQUNwQ3FFLFFBQUFBLFVBQVV4QixXQUFXMVMsS0FBSztBQUVoQyxTQUNFcVUsRUFBQSxPQUFBO0FBQUEsSUFBS0MsV0FBV0gsU0FBTzNTO0FBQUFBLElBQU1nVCxPQUFPM0csTUFBTXJNO0FBQUFBLElBQUsvQixXQUM3Q0UsRUFBQSxPQUFBO0FBQUEsTUFBSzJVLFdBQVdILFNBQU9sQztBQUFBQSxNQUFZdUMsT0FBTzNHLE1BQU1vRTtBQUFBQSxJQUFBQSxDQUFXLEdBQzNEb0MsRUFBQSxLQUFBO0FBQUEsTUFDRVIsT0FBTWhHLFdBQU1yTSxTQUFOcU0sbUJBQVlpSDtBQUFBQSxNQUNsQi9VLFFBQU87QUFBQSxNQUNQNlQsS0FBSTtBQUFBLE1BQ0pVLFdBQVdILFNBQU9PO0FBQUFBLE1BQ2xCUjtBQUFBQSxNQUFpQnpVLFdBRWpCNFUsRUFBQSxPQUFBO0FBQUEsUUFBQTVVLFdBQ0VFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxTQUFPb0U7QUFBQUEsVUFBVS9ELE9BQU8zRyxNQUFNMEs7QUFBQUEsVUFBUzlZLFdBQ3BEb08sV0FBTTBLLGFBQU4xSyxtQkFBZ0JwTztBQUFBQSxRQUFBQSxDQUFRLEdBRTNCRSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT3FFO0FBQUFBLFVBQVdoRSxPQUFPM0csTUFBTTJLO0FBQUFBLFVBQVUvWSxXQUN0RG9PLFdBQU0ySyxjQUFOM0ssbUJBQWlCcE87QUFBQUEsUUFBQUEsQ0FBUSxHQUU1QkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU9zRTtBQUFBQSxVQUFVaFosVUFBQTtBQUFBLFFBQUEsQ0FBYyxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRWpERSxFQUFBLE9BQUE7QUFBQSxRQUFLMlUsV0FBV0gsU0FBT2M7QUFBQUEsUUFBUVQsT0FBTzNHLE1BQU1vSDtBQUFBQSxRQUFPeFYsV0FDaERvTyxXQUFNb0gsV0FBTnBILG1CQUFjcE87QUFBQUEsTUFBQUEsQ0FDWCxDQUFBO0FBQUEsSUFBQSxDQUFBLEdBRVJFLEVBQUEsT0FBQTtBQUFBLE1BQ0UyVSxXQUFXalgsV0FBVzhXLFNBQU9pQixPQUFPO0FBQUEsUUFDbEMsQ0FBQ2pCLFNBQU9rQixTQUFTLEdBQUc1VztBQUFBQSxNQUFBQSxDQUNyQjtBQUFBLE1BQ0QrVixPQUFPM0csTUFBTTZLO0FBQUFBLE1BQVVqWixVQUV2QjRVLEVBQUEsUUFBQTtBQUFBLFFBQU1DLFdBQVdILFNBQU9tQjtBQUFBQSxRQUFVN1YsV0FDaENFLEVBQUEsUUFBQTtBQUFBLFVBQUFGLFdBQU9vTyxXQUFNNkssY0FBTjdLLG1CQUFpQnBPO0FBQUFBLFFBQUFBLENBQVEsR0FDaENFLEVBQUEsUUFBQTtBQUFBLFVBQU0yVSxXQUFXSCxTQUFPb0I7QUFBQUEsVUFBYWYsT0FBTzNHLE1BQU04SztBQUFBQSxVQUFpQnpFLFNBQVNvRTtBQUFBQSxVQUFhN1ksVUFDdEZoQixVQUFTb1AsV0FBTThLLG9CQUFOOUssbUJBQXVCK0ssWUFBVy9LLFdBQU04SyxvQkFBTjlLLG1CQUF1QmdMO0FBQUFBLFFBQUFBLENBQzlELENBQUE7QUFBQSxNQUFBLENBQUE7QUFBQSxJQUFBLENBRUwsQ0FBQTtBQUFBLEVBQUEsQ0FDRjtBQUVWO0FDNUNBLE1BQU1uRCxZQUFnQkEsTUFBTTtBQUNwQjNCLFFBQUFBLFVBQVVsVixJQUFPLElBQUk7QUFDM0IsUUFBTW1CLFFBQVFFO0FBQ2QsUUFBTTJMLFNBQVM7QUFDVGdGLFFBQUFBLGNBQWM3RSxZQUFZaE0sT0FBTzZMLE1BQU07QUFDdkNnQyxRQUFBQSxRQUFRMEIsY0FBY3NCLFdBQVc7QUFFdkMsU0FDRWxSLEVBQUEsT0FBQTtBQUFBLElBQUs0VSxLQUFLUjtBQUFBQSxJQUFRdFUsWUFDZG9PLCtCQUFPcE8sYUFBWSxDQUFBLEdBQUl1SixJQUFJcU4sQ0FBQUEsVUFDM0IxVyxFQUFDSCxjQUFZO0FBQUEsTUFBQ0UsT0FBTzJXO0FBQUFBLE1BQU01VyxVQUN6QkUsRUFBQ3NYLE9BQUssRUFBQTtBQUFBLElBQUEsQ0FFVCxDQUFBO0FBQUEsRUFBQSxDQUNHO0FBRVY7QUFFQSxNQUFlcFgsVUFBQUEsT0FBT0YsRUFBQytWLGNBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCbkMsTUFBTW9ELE9BQVdBLE1BQU07O0FBQ3JCLFFBQU05WSxRQUFRRTtBQUNSMk4sUUFBQUEsUUFBUTBCLGNBQWN2UCxLQUFLO0FBRWpDLFNBQ0VMLEVBQUEsT0FBQTtBQUFBLElBQ0UyVSxXQUFXalgsV0FBVzhXLFNBQU8zUyxNQUFNO0FBQUEsTUFDakMsQ0FBQzJTLFNBQU94SSxPQUFPLElBQUczTCwrQkFBTzZMLFlBQVc7QUFBQSxJQUFBLENBQ3JDO0FBQUEsSUFDRDJJLE9BQU81SyxLQUFLaUUsTUFBTXJNLE1BQU0sR0FBRzJRLGlCQUFpQjtBQUFBLElBQUUxUyxXQUU3Q29PLFdBQU1yTSxTQUFOcU0sbUJBQVlwTztBQUFBQSxFQUFBQSxDQUNUO0FBRVY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkQSxNQUFNc1osVUFBY0EsTUFBTTs7QUFDeEIsUUFBTS9ZLFFBQVFFO0FBQ1IyTixRQUFBQSxRQUFRMEIsY0FBY3ZQLEtBQUs7QUFFakMsUUFBTWdaLFlBQVlwUCxLQUFLaUUsTUFBTXJNLE1BQU0sR0FBRzJRLGlCQUFpQjtBQUV2RCxTQUNFa0MsRUFBQSxPQUFBO0FBQUEsSUFBS0MsV0FBV0gsU0FBTzNTO0FBQUFBLElBQUsvQixXQUMxQjRVLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU8wRDtBQUFBQSxNQUFJcFksV0FDekJFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPOEU7QUFBQUEsUUFBU3pFLE9BQU93RTtBQUFBQSxNQUFBQSxDQUFVLEdBQ2pEclosRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU8yRDtBQUFBQSxRQUFVdEQsT0FBT3dFO0FBQUFBLFFBQVV2WixXQUFFb08sV0FBTXJNLFNBQU5xTSxtQkFBWXFMO0FBQUFBLE1BQUFBLENBQWUsQ0FBQTtBQUFBLElBQUEsQ0FBQSxHQUVqRjdFLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU9nRjtBQUFBQSxNQUFLMVosV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPaUY7QUFBQUEsUUFBVTVFLE9BQU8zRyxNQUFNc0w7QUFBQUEsUUFBSzFaLFVBQUE7QUFBQSxNQUFBLENBQUEsR0FDbkRFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPa0Y7QUFBQUEsUUFBVzdFLE9BQU93RTtBQUFBQSxRQUFVdlosV0FBRW9PLFdBQU1yTSxTQUFOcU0sbUJBQVl5TDtBQUFBQSxNQUFBQSxDQUFhLENBQUE7QUFBQSxJQUFBLENBQUEsR0FFaEZqRixFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXalgsV0FBVzhXLFNBQU8wRCxLQUFLMUQsU0FBT29GLFVBQVU7QUFBQSxNQUFFOVosV0FDeERFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPOEU7QUFBQUEsUUFBU3pFLE9BQU93RTtBQUFBQSxNQUFBQSxDQUFVLEdBQ2pEclosRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU8yRDtBQUFBQSxRQUFVdEQsT0FBT3dFO0FBQUFBLFFBQVV2WixXQUFFb08sV0FBTXJNLFNBQU5xTSxtQkFBWTJMO0FBQUFBLE1BQUFBLENBQWUsQ0FBQTtBQUFBLElBQUEsQ0FDM0UsQ0FBQTtBQUFBLEVBQUEsQ0FDRjtBQUVWOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEJBLE1BQU1DLGdCQUFvQkEsTUFBTTtBQUM5QixRQUFNelosUUFBUUU7QUFDUjJOLFFBQUFBLFFBQVEwQixjQUFjdlAsS0FBSztBQUVqQyxTQUNFcVUsRUFBQSxPQUFBO0FBQUEsSUFDRUMsV0FBV2pYLFdBQVc4VyxPQUFPM1MsTUFBTTtBQUFBLE1BQ2pDLENBQUMyUyxPQUFPeEksT0FBTyxJQUFHM0wsK0JBQU82TCxZQUFXO0FBQUEsTUFDcEMsQ0FBQ3NJLE9BQU96SSxNQUFNLElBQUcxTCwrQkFBTzZMLFlBQVc7QUFBQSxNQUNuQyxDQUFDc0ksT0FBTzFJLE1BQU0sSUFBR3pMLCtCQUFPNkwsWUFBVztBQUFBLElBQUEsQ0FDcEM7QUFBQSxJQUNEMkksT0FBTzVLLEtBQUtpRSxNQUFNck0sTUFBTSxHQUFHMlEsaUJBQWlCO0FBQUEsSUFBRTFTLFdBRTlDNFUsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsT0FBTytCO0FBQUFBLE1BQU16VyxXQUMzQkUsRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILE9BQU91RjtBQUFBQSxRQUFZbEYsT0FBTzNHLE1BQU02TDtBQUFBQSxRQUFXamEsVUFDeERvTyxNQUFNNkwsV0FBV2phO0FBQUFBLE1BQUFBLENBQVEsR0FFNUJFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxPQUFPd0Y7QUFBQUEsUUFBWW5GLE9BQU8zRyxNQUFNOEw7QUFBQUEsUUFBV2xhLFVBQ3hEb08sTUFBTThMLFdBQVdsYTtBQUFBQSxNQUFBQSxDQUNkLENBQUE7QUFBQSxJQUFBLENBQUEsR0FFUjRVLEVBQUEsT0FBQTtBQUFBLE1BQUE1VSxXQUNFNFUsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsT0FBT3VEO0FBQUFBLFFBQUtqWSxXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILE9BQU93RDtBQUFBQSxVQUFVbkQsT0FBTzNHLE1BQU1rSDtBQUFBQSxRQUFBQSxDQUFLLEdBQ25EcFYsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILE9BQU95RDtBQUFBQSxVQUFVcEQsT0FBTzNHLE1BQU0rSjtBQUFBQSxVQUFTblksVUFDcERvTyxNQUFNK0wsVUFBVW5hO0FBQUFBLFFBQUFBLENBQVEsR0FFM0JFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxPQUFPMEY7QUFBQUEsVUFBV3JGLE9BQU8zRyxNQUFNbk87QUFBQUEsVUFBTUQsVUFDbERvTyxNQUFNaU0sT0FBT3JhO0FBQUFBLFFBQUFBLENBQ1YsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVSNFUsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsT0FBT3VEO0FBQUFBLFFBQUtqWSxXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILE9BQU93RDtBQUFBQSxVQUFVbkQsT0FBTzNHLE1BQU1rSDtBQUFBQSxRQUFBQSxDQUFLLEdBQ25EcFYsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILE9BQU95RDtBQUFBQSxVQUFVcEQsT0FBTzNHLE1BQU0rSjtBQUFBQSxVQUFTblksVUFDcERvTyxNQUFNa00sVUFBVXRhO0FBQUFBLFFBQUFBLENBQVEsR0FFM0JFLEVBQUEsT0FBQTtBQUFBLFVBQUsyVSxXQUFXSCxPQUFPMEY7QUFBQUEsVUFBV3JGLE9BQU8zRyxNQUFNbk87QUFBQUEsVUFBTUQsVUFDbERvTyxNQUFNbU0sT0FBT3ZhO0FBQUFBLFFBQUFBLENBQ1YsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNGLENBQUE7QUFBQSxFQUFBLENBQ0Y7QUFFVjtBQzdDQSxNQUFNd2Esa0JBQWtCQSxDQUFDQyxTQUFrQixPQUFPOztBQUNoRCxRQUFNQyxhQUFhRCxPQUFPalE7QUFDMUIsUUFBTSxDQUFDbVEsYUFBYUMsY0FBYyxJQUFJMWIsRUFBaUIsQ0FBQztBQUN4RCxRQUFNMmIscUJBQW9CSixZQUFPRSxlQUFlLENBQUMsTUFBdkJGLG1CQUEwQkk7QUFFcERwYixJQUFVLE1BQU07QUFDZCxVQUFNcWIsU0FBU0EsTUFBTTtBQUNuQkYscUJBQWU1WixDQUFTQSxXQUFBO0FBQ3RCLFlBQUlBLFNBQVEsSUFBSTBaO0FBQVksaUJBQU8xWixTQUFRO0FBQ3BDLGVBQUE7QUFBQSxNQUFBLENBQ1I7QUFBQSxJQUFBO0FBR0crWixVQUFBQSxVQUFVcmIsV0FBV29iLFFBQVFELGlCQUFpQjtBQUU3QyxXQUFBLE1BQU12YixhQUFheWIsT0FBTztBQUFBLEtBQ2hDLENBQUNILGdCQUFnQkYsWUFBWUcsbUJBQW1CRixXQUFXLENBQUM7QUFFeERBLFNBQUFBO0FBQ1Q7QUNSQSxNQUFNSywwQkFBMEI7QUFFaEMsTUFBTUMsV0FBZUEsTUFBTTs7QUFDbkIzRyxRQUFBQSxVQUFVbFYsSUFBTyxJQUFJO0FBQzNCLFFBQU1tQixRQUFRRTtBQUNkLFFBQU0yTCxTQUFTSSxtQkFBbUI7QUFBQSxJQUFFQyxXQUFXNkg7QUFBQUEsRUFBQUEsQ0FBUztBQUNsRGxELFFBQUFBLGNBQWM3RSxZQUFZaE0sT0FBTzZMLE1BQU07QUFDdkNnQyxRQUFBQSxRQUFRMEIsY0FBY3NCLFdBQVc7QUFDakNxRCxRQUFBQSxVQUFVeEIsV0FBVzdCLFdBQVc7QUFFaEM4SixRQUFBQSxXQUFXQSxDQUFDcEQsV0FDZjtBQUFBLElBQ0N2QyxNQUFNclYsRUFBQ21aLE1BQU8sRUFBQTtBQUFBLElBQ2Q4QixTQUFTamIsRUFBQ29aLFNBQVUsRUFBQTtBQUFBLElBQ3BCOEIsZUFBZWxiLEVBQUM4WixlQUFhLEVBQUE7QUFBQSxLQUM3QmxDLEtBQUk7QUFFRnVELFFBQUFBLGNBQWNqTixNQUFNcE8sWUFBWSxDQUFBLEdBQUlzYixPQUFPQyxPQUFPLEVBQUVoUyxJQUFJaVMsQ0FBVUEsV0FBQTs7QUFBQTtBQUFBLE1BQ3RFLEdBQUdBO0FBQUFBLE1BQ0hDLGdCQUFlRCxNQUFBQSxVQUFBQSxnQkFBQUEsT0FBT3paLFNBQVB5WixnQkFBQUEsSUFBYUM7QUFBQUEsTUFDNUJaLHFCQUFtQlcsTUFBQUEsVUFBQUEsZ0JBQUFBLE9BQU96WixTQUFQeVosZ0JBQUFBLElBQWFYLHNCQUFxQkc7QUFBQUEsSUFDckQ7QUFBQSxHQUFBO0FBRUlVLFFBQUFBLGVBQWVsQixnQkFBZ0JhLFVBQVU7QUFDL0MsUUFBTU0sYUFBYTdMLGNBQWN1TCxXQUFXSyxZQUFZLEtBQUssQ0FBRSxDQUFBO0FBRS9ELFFBQU1FLG9CQUFrQkQsOENBQVk1WixTQUFaNFosbUJBQWtCRSx1QkFDdEMvUixNQUFLNlIseUNBQVk1WixTQUFRLENBQUksR0FBQSxHQUFHMlEsaUJBQWlCLElBQ2pENUksS0FBS3NFLE1BQU1vRSxZQUFZLEdBQUdFLGlCQUFpQjtBQUUvQyxTQUNFa0MsRUFBQSxLQUFBO0FBQUEsSUFDRUUsS0FBS1I7QUFBQUEsSUFDTEYsT0FBTWhHLFdBQU1yTSxTQUFOcU0sbUJBQVlpSDtBQUFBQSxJQUNsQi9VLFFBQU87QUFBQSxJQUNQNlQsS0FBSTtBQUFBLElBQ0pVLFdBQVdqWCxXQUFXOFcsU0FBTzNTLE1BQU07QUFBQSxNQUNqQyxDQUFDMlMsU0FBT3hJLE9BQU8sR0FBR0UsV0FBVztBQUFBLE1BQzdCLENBQUNzSSxTQUFPekksTUFBTSxHQUFHRyxXQUFXO0FBQUEsTUFDNUIsQ0FBQ3NJLFNBQU8xSSxNQUFNLEdBQUdJLFdBQVc7QUFBQSxNQUM1QixDQUFDc0ksU0FBT3dCLFFBQVEsS0FBRzlILFdBQU1yTSxTQUFOcU0sbUJBQVkrSCxhQUFZO0FBQUEsSUFBQSxDQUM1QztBQUFBLElBQ0RwQixPQUFPM0csTUFBTXJNO0FBQUFBLElBQ2IwUztBQUFBQSxJQUFpQnpVLFdBRWpCRSxFQUFBLE9BQUE7QUFBQSxNQUFLMlUsV0FBV0gsU0FBT2xDO0FBQUFBLE1BQVl1QyxPQUFPNkc7QUFBQUEsSUFBQUEsQ0FBZ0IsR0FDMUQxYixFQUFBLE9BQUE7QUFBQSxNQUFLMlUsV0FBV0gsU0FBTzhCO0FBQUFBLE1BQVd6QixPQUFPM0csTUFBTW9JO0FBQUFBLE1BQVV4VyxXQUN0RG9PLFdBQU1vSSxjQUFOcEksbUJBQWlCcE87QUFBQUEsSUFBQUEsQ0FBUSxHQUc1QjRVLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU8rRDtBQUFBQSxNQUFRelksV0FDN0JFLEVBQUEsT0FBQTtBQUFBLFFBQUsyVSxXQUFXSCxTQUFPakQ7QUFBQUEsUUFBS3pSLFVBQzFCRSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT1k7QUFBQUEsVUFBTVAsT0FBTzNHLE1BQU1rSDtBQUFBQSxRQUFBQSxDQUFLO0FBQUEsTUFBQSxDQUFHLEdBRXBEcFYsRUFBQSxPQUFBO0FBQUEsUUFBSzJVLFdBQVdILFNBQU9xQztBQUFBQSxRQUFPL1csV0FDMUJvTyxNQUFNcE8sWUFBWSxDQUFBLEdBQUl1SixJQUFJLENBQUNxTixPQUFPNVY7O0FBQ2xDZCxtQkFBQSxPQUFBO0FBQUEsWUFDRTJVLFdBQVdILFNBQU84RztBQUFBQSxZQUNsQnpHLE9BQU87QUFBQSxjQUNMMEcsZUFBZUMsaUJBQWlCMWEsU0FBUTBULFdBQU9rQyxNQUFBQSxNQUFNN1UsU0FBTjZVLGdCQUFBQSxJQUFZNkUsa0JBQWlCLGFBQWEsSUFBSTtBQUFBLGNBQzdGWixtQkFBb0IsSUFBRWpFLE1BQUFBLE1BQU03VSxTQUFONlUsZ0JBQUFBLElBQVlpRTtBQUFBQSxZQUNwQztBQUFBLFlBQUU3YSxVQUVGRSxFQUFDSCxjQUFZO0FBQUEsY0FBQ0UsT0FBTztBQUFBLGdCQUFFLEdBQUcyVztBQUFBQSxnQkFBT3hLO0FBQUFBLGNBQU87QUFBQSxjQUFFcE0sVUFBRWtiLFNBQVN0RSxNQUFNa0IsSUFBSTtBQUFBLFlBQUEsQ0FBQztBQUFBLFVBQUEsQ0FFbkU7QUFBQSxTQUFBO0FBQUEsTUFBQSxDQUFDLEdBRUpsRCxFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPc0M7QUFBQUEsUUFBTWhYLFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxVQUFLMlUsV0FBV0gsU0FBT1k7QUFBQUEsVUFBTVAsT0FBTzNHLE1BQU1rSDtBQUFBQSxRQUFBQSxDQUFLLEdBRS9DcFYsRUFBQSxPQUFBO0FBQUEsVUFBSzJVLFdBQVdILFNBQU82RDtBQUFBQSxVQUFjdlksVUFDbkM0VSxFQUFBLE9BQUE7QUFBQSxZQUFLQyxXQUFXSCxTQUFPYztBQUFBQSxZQUFRVCxPQUFPM0csTUFBTW9IO0FBQUFBLFlBQU94VixXQUNqREUsRUFBQSxPQUFBO0FBQUEsY0FBSzJVLFdBQVdILFNBQU9ZO0FBQUFBLGNBQU1QLE9BQU8zRyxNQUFNa0g7QUFBQUEsWUFBQUEsQ0FBSyxJQUM5Q2xILFdBQU1vSCxXQUFOcEgsbUJBQWNwTyxRQUFRO0FBQUEsVUFBQSxDQUFBO0FBQUEsUUFBQSxDQUVyQixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FBRUEsTUFBZUksUUFBQUEsT0FBT0YsRUFBQythLGFBQVc7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDQsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM119
|