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