easy 24.1.1 → 24.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/.aiignore +12 -0
  2. package/.swcrc +4 -3
  3. package/example.js +672 -2711
  4. package/lib/bounds.js +50 -116
  5. package/lib/constants.js +23 -23
  6. package/lib/document.js +48 -97
  7. package/lib/element/body.js +7 -131
  8. package/lib/element/button.js +5 -129
  9. package/lib/element/checkbox.js +13 -160
  10. package/lib/element/input.js +7 -131
  11. package/lib/element/link.js +10 -156
  12. package/lib/element/select.js +6 -130
  13. package/lib/element/textarea.js +7 -131
  14. package/lib/element.js +245 -481
  15. package/lib/eventTypes.js +60 -60
  16. package/lib/example/preamble.js +2 -2
  17. package/lib/example/view/div.js +20 -169
  18. package/lib/example/view.js +9 -152
  19. package/lib/example.js +4 -4
  20. package/lib/index.js +22 -22
  21. package/lib/mixins/click.js +10 -10
  22. package/lib/mixins/customEvent.js +41 -84
  23. package/lib/mixins/element.js +28 -34
  24. package/lib/mixins/event.js +45 -50
  25. package/lib/mixins/focus.js +13 -13
  26. package/lib/mixins/fullScreen.js +11 -11
  27. package/lib/mixins/input.js +12 -12
  28. package/lib/mixins/jsx.js +42 -48
  29. package/lib/mixins/key.js +8 -8
  30. package/lib/mixins/mouse.js +14 -14
  31. package/lib/mixins/resize.js +6 -6
  32. package/lib/mixins/scroll.js +13 -13
  33. package/lib/mixins/selection.js +15 -15
  34. package/lib/mixins/state.js +6 -6
  35. package/lib/mixins/touch.js +10 -10
  36. package/lib/mouseButtons.js +8 -8
  37. package/lib/offset.js +14 -47
  38. package/lib/react.js +17 -31
  39. package/lib/textElement.js +61 -129
  40. package/lib/utilities/array.js +8 -38
  41. package/lib/utilities/async.js +5 -5
  42. package/lib/utilities/dom.js +17 -19
  43. package/lib/utilities/element.js +22 -44
  44. package/lib/utilities/elements.js +7 -11
  45. package/lib/utilities/name.js +2 -2
  46. package/lib/utilities/object.js +17 -47
  47. package/lib/utilities/string.js +3 -3
  48. package/lib/window.js +55 -152
  49. package/package.json +1 -1
package/lib/element.js CHANGED
@@ -8,480 +8,254 @@ Object.defineProperty(exports, "default", {
8
8
  return Element;
9
9
  }
10
10
  });
11
- var _offset = /*#__PURE__*/ _interop_require_default(require("./offset"));
12
- var _bounds = /*#__PURE__*/ _interop_require_default(require("./bounds"));
13
- var _jsx = /*#__PURE__*/ _interop_require_default(require("./mixins/jsx"));
14
- var _key = /*#__PURE__*/ _interop_require_default(require("./mixins/key"));
15
- var _state = /*#__PURE__*/ _interop_require_default(require("./mixins/state"));
16
- var _event = /*#__PURE__*/ _interop_require_default(require("./mixins/event"));
17
- var _mouse = /*#__PURE__*/ _interop_require_default(require("./mixins/mouse"));
18
- var _click = /*#__PURE__*/ _interop_require_default(require("./mixins/click"));
19
- var _touch = /*#__PURE__*/ _interop_require_default(require("./mixins/touch"));
20
- var _scroll = /*#__PURE__*/ _interop_require_default(require("./mixins/scroll"));
21
- var _resize = /*#__PURE__*/ _interop_require_default(require("./mixins/resize"));
22
- var _element = /*#__PURE__*/ _interop_require_default(require("./mixins/element"));
23
- var _fullScreen = /*#__PURE__*/ _interop_require_default(require("./mixins/fullScreen"));
24
- var _customEvent = /*#__PURE__*/ _interop_require_default(require("./mixins/customEvent"));
25
- var _array = require("./utilities/array");
26
- var _object = require("./utilities/object");
27
- var _name = require("./utilities/name");
28
- var _element1 = require("./utilities/element");
29
- var _constants = require("./constants");
30
- function _array_like_to_array(arr, len) {
31
- if (len == null || len > arr.length) len = arr.length;
32
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
33
- return arr2;
34
- }
35
- function _array_without_holes(arr) {
36
- if (Array.isArray(arr)) return _array_like_to_array(arr);
37
- }
38
- function _class_call_check(instance, Constructor) {
39
- if (!(instance instanceof Constructor)) {
40
- throw new TypeError("Cannot call a class as a function");
41
- }
42
- }
43
- function _defineProperties(target, props) {
44
- for(var i = 0; i < props.length; i++){
45
- var descriptor = props[i];
46
- descriptor.enumerable = descriptor.enumerable || false;
47
- descriptor.configurable = true;
48
- if ("value" in descriptor) descriptor.writable = true;
49
- Object.defineProperty(target, descriptor.key, descriptor);
50
- }
51
- }
52
- function _create_class(Constructor, protoProps, staticProps) {
53
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
54
- if (staticProps) _defineProperties(Constructor, staticProps);
55
- return Constructor;
56
- }
11
+ const _offset = /*#__PURE__*/ _interop_require_default(require("./offset"));
12
+ const _bounds = /*#__PURE__*/ _interop_require_default(require("./bounds"));
13
+ const _jsx = /*#__PURE__*/ _interop_require_default(require("./mixins/jsx"));
14
+ const _key = /*#__PURE__*/ _interop_require_default(require("./mixins/key"));
15
+ const _state = /*#__PURE__*/ _interop_require_default(require("./mixins/state"));
16
+ const _event = /*#__PURE__*/ _interop_require_default(require("./mixins/event"));
17
+ const _mouse = /*#__PURE__*/ _interop_require_default(require("./mixins/mouse"));
18
+ const _click = /*#__PURE__*/ _interop_require_default(require("./mixins/click"));
19
+ const _touch = /*#__PURE__*/ _interop_require_default(require("./mixins/touch"));
20
+ const _scroll = /*#__PURE__*/ _interop_require_default(require("./mixins/scroll"));
21
+ const _resize = /*#__PURE__*/ _interop_require_default(require("./mixins/resize"));
22
+ const _element = /*#__PURE__*/ _interop_require_default(require("./mixins/element"));
23
+ const _fullScreen = /*#__PURE__*/ _interop_require_default(require("./mixins/fullScreen"));
24
+ const _customEvent = /*#__PURE__*/ _interop_require_default(require("./mixins/customEvent"));
25
+ const _array = require("./utilities/array");
26
+ const _object = require("./utilities/object");
27
+ const _name = require("./utilities/name");
28
+ const _element1 = require("./utilities/element");
29
+ const _constants = require("./constants");
57
30
  function _interop_require_default(obj) {
58
31
  return obj && obj.__esModule ? obj : {
59
32
  default: obj
60
33
  };
61
34
  }
62
- function _iterable_to_array(iter) {
63
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
64
- }
65
- function _non_iterable_spread() {
66
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
67
- }
68
- function _to_consumable_array(arr) {
69
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
70
- }
71
- function _type_of(obj) {
72
- "@swc/helpers - typeof";
73
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
74
- }
75
- function _unsupported_iterable_to_array(o, minLen) {
76
- if (!o) return;
77
- if (typeof o === "string") return _array_like_to_array(o, minLen);
78
- var n = Object.prototype.toString.call(o).slice(8, -1);
79
- if (n === "Object" && o.constructor) n = o.constructor.name;
80
- if (n === "Map" || n === "Set") return Array.from(n);
81
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
82
- }
83
- var Element = /*#__PURE__*/ function() {
84
- function Element(selector) {
85
- _class_call_check(this, Element);
35
+ class Element {
36
+ constructor(selector){
86
37
  if (selector !== null) {
87
- var element = this, domElement = document.querySelector(selector);
38
+ const element = this, domElement = document.querySelector(selector);
88
39
  (0, _element1.constructElement)(element, domElement);
89
40
  }
90
41
  }
91
- _create_class(Element, [
92
- {
93
- key: "getDOMElement",
94
- value: function getDOMElement() {
95
- return this.domElement;
96
- }
97
- },
98
- {
99
- key: "getOffset",
100
- value: function getOffset() {
101
- var offset = _offset.default.fromDOMElement(this.domElement);
102
- return offset;
103
- }
104
- },
105
- {
106
- key: "getBounds",
107
- value: function getBounds() {
108
- var bounds = _bounds.default.fromDOMElement(this.domElement);
109
- return bounds;
110
- }
111
- },
112
- {
113
- key: "getWidth",
114
- value: function getWidth() {
115
- return this.domElement.offsetWidth;
116
- } ///
117
- },
118
- {
119
- key: "getHeight",
120
- value: function getHeight() {
121
- return this.domElement.offsetHeight;
122
- } ///
123
- },
124
- {
125
- key: "getInnerWidth",
126
- value: function getInnerWidth() {
127
- return this.domElement.clientWidth;
128
- } ///
129
- },
130
- {
131
- key: "getInnerHeight",
132
- value: function getInnerHeight() {
133
- return this.domElement.clientHeight;
134
- } ///
135
- },
136
- {
137
- key: "setWidth",
138
- value: function setWidth(width) {
139
- width = "".concat(width, "px"); ///
140
- this.style(_constants.WIDTH, width);
141
- }
142
- },
143
- {
144
- key: "setHeight",
145
- value: function setHeight(height) {
146
- height = "".concat(height, "px"); ///
147
- this.style(_constants.HEIGHT, height);
148
- }
149
- },
150
- {
151
- key: "hasAttribute",
152
- value: function hasAttribute(name) {
153
- return this.domElement.hasAttribute(name);
154
- }
155
- },
156
- {
157
- key: "getAttribute",
158
- value: function getAttribute(name) {
159
- return this.domElement.getAttribute(name);
160
- }
161
- },
162
- {
163
- key: "setAttribute",
164
- value: function setAttribute(name, value) {
165
- this.domElement.setAttribute(name, value);
166
- }
167
- },
168
- {
169
- key: "clearAttribute",
170
- value: function clearAttribute(name) {
171
- this.domElement.removeAttribute(name);
172
- }
173
- },
174
- {
175
- key: "addAttribute",
176
- value: function addAttribute(name, value) {
177
- this.setAttribute(name, value);
178
- }
179
- },
180
- {
181
- key: "removeAttribute",
182
- value: function removeAttribute(name) {
183
- this.clearAttribute(name);
184
- }
185
- },
186
- {
187
- key: "hasClass",
188
- value: function hasClass(className) {
189
- return this.domElement.classList.contains(className);
190
- }
191
- },
192
- {
193
- key: "setClass",
194
- value: function setClass(className) {
195
- this.domElement.className = className;
196
- }
197
- },
198
- {
199
- key: "addClass",
200
- value: function addClass(className) {
201
- this.domElement.classList.add(className);
202
- }
203
- },
204
- {
205
- key: "removeClass",
206
- value: function removeClass(className) {
207
- this.domElement.classList.remove(className);
208
- }
209
- },
210
- {
211
- key: "toggleClass",
212
- value: function toggleClass(className) {
213
- this.domElement.classList.toggle(className);
214
- }
215
- },
216
- {
217
- key: "removeAllClasses",
218
- value: function removeAllClasses() {
219
- this.domElement.className = _constants.EMPTY_STRING;
220
- }
221
- },
222
- {
223
- key: "addTo",
224
- value: function addTo(parentElement) {
225
- parentElement.add(this);
226
- }
227
- },
228
- {
229
- key: "appendTo",
230
- value: function appendTo(parentElement) {
231
- parentElement.append(this);
232
- }
233
- },
234
- {
235
- key: "prependTo",
236
- value: function prependTo(parentElement) {
237
- parentElement.prepend(this);
238
- }
239
- },
240
- {
241
- key: "removeFrom",
242
- value: function removeFrom(parentElement) {
243
- parentElement.remove(this);
244
- }
245
- },
246
- {
247
- key: "insert",
248
- value: function insert(element) {
249
- this.append(element);
250
- }
251
- },
252
- {
253
- key: "add",
254
- value: function add(element) {
255
- this.append(element);
256
- }
257
- },
258
- {
259
- key: "remove",
260
- value: function remove(element) {
261
- if (element) {
262
- element.remove();
263
- return;
264
- }
265
- this.domElement.remove();
266
- }
267
- },
268
- {
269
- key: "prepend",
270
- value: function prepend(element) {
271
- var domElement = element.domElement, referenceDOMElement = this.domElement.firstChild; ///
272
- this.domElement.insertBefore(domElement, referenceDOMElement);
273
- }
274
- },
275
- {
276
- key: "append",
277
- value: function append(element) {
278
- var domElement = element.domElement, referenceDOMElement = null; ///
279
- this.domElement.insertBefore(domElement, referenceDOMElement);
280
- }
281
- },
282
- {
283
- key: "insertBefore",
284
- value: function insertBefore(siblingElement) {
285
- var parentDOMNode = siblingElement.domElement.parentNode, referenceDOMElement = siblingElement.domElement; ///
286
- parentDOMNode.insertBefore(this.domElement, referenceDOMElement);
287
- }
288
- },
289
- {
290
- key: "insertAfter",
291
- value: function insertAfter(siblingElement) {
292
- var parentDOMNode = siblingElement.domElement.parentNode, referenceDOMElement = siblingElement.domElement.nextSibling; ///
293
- parentDOMNode.insertBefore(this.domElement, referenceDOMElement);
294
- }
295
- },
296
- {
297
- key: "mount",
298
- value: function mount(element) {
299
- this.add(element);
300
- (0, _element1.mountElement)(element);
301
- }
302
- },
303
- {
304
- key: "unmount",
305
- value: function unmount(element) {
306
- (0, _element1.unmountElement)(element);
307
- this.remove(element);
308
- }
309
- },
310
- {
311
- key: "mountBefore",
312
- value: function mountBefore(siblingElement) {
313
- this.insertBefore(siblingElement);
314
- var element = this; ///
315
- (0, _element1.mountElement)(element);
316
- }
317
- },
318
- {
319
- key: "mountAfter",
320
- value: function mountAfter(siblingElement) {
321
- this.insertAfter(siblingElement);
322
- var element = this; ///
323
- (0, _element1.mountElement)(element);
324
- }
325
- },
326
- {
327
- key: "show",
328
- value: function show() {
329
- var displayStyle = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : _constants.BLOCK;
330
- this.display(displayStyle);
331
- }
332
- },
333
- {
334
- key: "hide",
335
- value: function hide() {
336
- this.style(_constants.DISPLAY, _constants.NONE);
337
- }
338
- },
339
- {
340
- key: "display",
341
- value: function display(display) {
342
- this.style(_constants.DISPLAY, display);
343
- }
344
- },
345
- {
346
- key: "enable",
347
- value: function enable() {
348
- this.clearAttribute(_constants.DISABLED);
349
- }
350
- },
351
- {
352
- key: "disable",
353
- value: function disable() {
354
- this.setAttribute(_constants.DISABLED, _constants.DISABLED);
355
- }
356
- },
357
- {
358
- key: "isEnabled",
359
- value: function isEnabled() {
360
- var disabled = this.isDisabled(), enabled = !disabled;
361
- return enabled;
362
- }
363
- },
364
- {
365
- key: "isDisabled",
366
- value: function isDisabled() {
367
- var disabled = this.hasAttribute(_constants.DISABLED);
368
- return disabled;
369
- }
370
- },
371
- {
372
- key: "isDisplayed",
373
- value: function isDisplayed() {
374
- var display = this.css(_constants.DISPLAY), displayed = display !== _constants.NONE;
375
- return displayed;
376
- }
377
- },
378
- {
379
- key: "isShowing",
380
- value: function isShowing() {
381
- var displayed = this.isDisplayed(), showing = displayed; ///
382
- return showing;
383
- }
384
- },
385
- {
386
- key: "isHidden",
387
- value: function isHidden() {
388
- var displayed = this.isDisplayed(), hidden = !displayed;
389
- return hidden;
390
- }
391
- },
392
- {
393
- key: "style",
394
- value: function style(name) {
395
- var value = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
396
- if (value !== null) {
397
- this.domElement.style[name] = value;
398
- return;
399
- }
400
- var style = this.domElement.style[name];
401
- return style;
402
- }
403
- },
404
- {
405
- key: "html",
406
- value: function html() {
407
- var html = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;
408
- if (html !== null) {
409
- var innerHTML = html; ///
410
- this.domElement.innerHTML = innerHTML;
411
- return;
412
- }
413
- var innerHTML1 = this.domElement.innerHTML;
414
- html = innerHTML1; ///
415
- return html;
416
- }
417
- },
418
- {
419
- key: "css",
420
- value: function css() {
421
- var _this = this;
422
- var css = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;
423
- if (css === null) {
424
- css = {};
425
- var computedStyles = getComputedStyle(this.domElement); ///
426
- for(var index = 0; index < computedStyles.length; index++){
427
- var computedStyle = computedStyles[index], name = computedStyle, value = computedStyles.getPropertyValue(name); ///
428
- css[name] = value;
429
- }
430
- } else if ((typeof css === "undefined" ? "undefined" : _type_of(css)) === _constants.STRING) {
431
- var name1 = css; ///
432
- var computedStyles1 = getComputedStyle(this.domElement), value1 = computedStyles1.getPropertyValue(name1); ///
433
- css = value1; ///
434
- } else {
435
- var names = Object.keys(css); ///
436
- names.forEach(function(name) {
437
- var value = css[name];
438
- _this.style(name, value);
439
- });
440
- }
441
- return css;
442
- }
443
- },
444
- {
445
- key: "destroy",
446
- value: function destroy() {
447
- var element = this; ///
448
- (0, _element1.destroyElement)(element);
449
- }
42
+ getDOMElement() {
43
+ return this.domElement;
44
+ }
45
+ getOffset() {
46
+ const offset = _offset.default.fromDOMElement(this.domElement);
47
+ return offset;
48
+ }
49
+ getBounds() {
50
+ const bounds = _bounds.default.fromDOMElement(this.domElement);
51
+ return bounds;
52
+ }
53
+ getWidth() {
54
+ return this.domElement.offsetWidth;
55
+ }
56
+ getHeight() {
57
+ return this.domElement.offsetHeight;
58
+ }
59
+ getInnerWidth() {
60
+ return this.domElement.clientWidth;
61
+ }
62
+ getInnerHeight() {
63
+ return this.domElement.clientHeight;
64
+ }
65
+ setWidth(width) {
66
+ width = `${width}px`; ///
67
+ this.style(_constants.WIDTH, width);
68
+ }
69
+ setHeight(height) {
70
+ height = `${height}px`; ///
71
+ this.style(_constants.HEIGHT, height);
72
+ }
73
+ hasAttribute(name) {
74
+ return this.domElement.hasAttribute(name);
75
+ }
76
+ getAttribute(name) {
77
+ return this.domElement.getAttribute(name);
78
+ }
79
+ setAttribute(name, value) {
80
+ this.domElement.setAttribute(name, value);
81
+ }
82
+ clearAttribute(name) {
83
+ this.domElement.removeAttribute(name);
84
+ }
85
+ addAttribute(name, value) {
86
+ this.setAttribute(name, value);
87
+ }
88
+ removeAttribute(name) {
89
+ this.clearAttribute(name);
90
+ }
91
+ hasClass(className) {
92
+ return this.domElement.classList.contains(className);
93
+ }
94
+ setClass(className) {
95
+ this.domElement.className = className;
96
+ }
97
+ addClass(className) {
98
+ this.domElement.classList.add(className);
99
+ }
100
+ removeClass(className) {
101
+ this.domElement.classList.remove(className);
102
+ }
103
+ toggleClass(className) {
104
+ this.domElement.classList.toggle(className);
105
+ }
106
+ removeAllClasses() {
107
+ this.domElement.className = _constants.EMPTY_STRING;
108
+ }
109
+ addTo(parentElement) {
110
+ parentElement.add(this);
111
+ }
112
+ appendTo(parentElement) {
113
+ parentElement.append(this);
114
+ }
115
+ prependTo(parentElement) {
116
+ parentElement.prepend(this);
117
+ }
118
+ removeFrom(parentElement) {
119
+ parentElement.remove(this);
120
+ }
121
+ insert(element) {
122
+ this.append(element);
123
+ }
124
+ add(element) {
125
+ this.append(element);
126
+ }
127
+ remove(element) {
128
+ if (element) {
129
+ element.remove();
130
+ return;
450
131
  }
451
- ], [
452
- {
453
- key: "fromClass",
454
- value: function fromClass(Class, properties) {
455
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
456
- remainingArguments[_key - 2] = arguments[_key];
457
- }
458
- var tagName = Class.tagName, element = elementFromTagName.apply(void 0, [
459
- Class,
460
- tagName
461
- ].concat(_to_consumable_array(remainingArguments))), defaultProperties = defaultPropertiesFromClass(Class), ignoredProperties = ignoredPropertiesFromClass(Class);
462
- element.applyProperties(properties, defaultProperties, ignoredProperties);
463
- element.initialise && element.initialise(); ///
464
- return element;
465
- }
466
- },
467
- {
468
- key: "fromTagName",
469
- value: function fromTagName(tagName, properties) {
470
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
471
- remainingArguments[_key - 2] = arguments[_key];
472
- }
473
- var Class = Element, element = elementFromTagName.apply(void 0, [
474
- Class,
475
- tagName
476
- ].concat(_to_consumable_array(remainingArguments))), defaultProperties = {}, ignoredProperties = []; ///
477
- element.applyProperties(properties, defaultProperties, ignoredProperties);
478
- element.initialise && element.initialise(); ///
479
- return element;
480
- }
132
+ this.domElement.remove();
133
+ }
134
+ prepend(element) {
135
+ const domElement = element.domElement, referenceDOMElement = this.domElement.firstChild; ///
136
+ this.domElement.insertBefore(domElement, referenceDOMElement);
137
+ }
138
+ append(element) {
139
+ const domElement = element.domElement, referenceDOMElement = null; ///
140
+ this.domElement.insertBefore(domElement, referenceDOMElement);
141
+ }
142
+ insertBefore(siblingElement) {
143
+ const parentDOMNode = siblingElement.domElement.parentNode, referenceDOMElement = siblingElement.domElement; ///
144
+ parentDOMNode.insertBefore(this.domElement, referenceDOMElement);
145
+ }
146
+ insertAfter(siblingElement) {
147
+ const parentDOMNode = siblingElement.domElement.parentNode, referenceDOMElement = siblingElement.domElement.nextSibling; ///
148
+ parentDOMNode.insertBefore(this.domElement, referenceDOMElement);
149
+ }
150
+ mount(element) {
151
+ this.add(element);
152
+ (0, _element1.mountElement)(element);
153
+ }
154
+ unmount(element) {
155
+ (0, _element1.unmountElement)(element);
156
+ this.remove(element);
157
+ }
158
+ mountBefore(siblingElement) {
159
+ this.insertBefore(siblingElement);
160
+ const element = this; ///
161
+ (0, _element1.mountElement)(element);
162
+ }
163
+ mountAfter(siblingElement) {
164
+ this.insertAfter(siblingElement);
165
+ const element = this; ///
166
+ (0, _element1.mountElement)(element);
167
+ }
168
+ show(displayStyle = _constants.BLOCK) {
169
+ this.display(displayStyle);
170
+ }
171
+ hide() {
172
+ this.style(_constants.DISPLAY, _constants.NONE);
173
+ }
174
+ display(display) {
175
+ this.style(_constants.DISPLAY, display);
176
+ }
177
+ enable() {
178
+ this.clearAttribute(_constants.DISABLED);
179
+ }
180
+ disable() {
181
+ this.setAttribute(_constants.DISABLED, _constants.DISABLED);
182
+ }
183
+ isEnabled() {
184
+ const disabled = this.isDisabled(), enabled = !disabled;
185
+ return enabled;
186
+ }
187
+ isDisabled() {
188
+ const disabled = this.hasAttribute(_constants.DISABLED);
189
+ return disabled;
190
+ }
191
+ isDisplayed() {
192
+ const display = this.css(_constants.DISPLAY), displayed = display !== _constants.NONE;
193
+ return displayed;
194
+ }
195
+ isShowing() {
196
+ const displayed = this.isDisplayed(), showing = displayed; ///
197
+ return showing;
198
+ }
199
+ isHidden() {
200
+ const displayed = this.isDisplayed(), hidden = !displayed;
201
+ return hidden;
202
+ }
203
+ style(name, value = null) {
204
+ if (value !== null) {
205
+ this.domElement.style[name] = value;
206
+ return;
207
+ }
208
+ const style = this.domElement.style[name];
209
+ return style;
210
+ }
211
+ html(html = null) {
212
+ if (html !== null) {
213
+ const innerHTML = html; ///
214
+ this.domElement.innerHTML = innerHTML;
215
+ return;
481
216
  }
482
- ]);
483
- return Element;
484
- }();
217
+ const innerHTML = this.domElement.innerHTML;
218
+ html = innerHTML; ///
219
+ return html;
220
+ }
221
+ css(css = null) {
222
+ if (css === null) {
223
+ css = {};
224
+ const computedStyles = getComputedStyle(this.domElement); ///
225
+ for(let index = 0; index < computedStyles.length; index++){
226
+ const computedStyle = computedStyles[index], name = computedStyle, value = computedStyles.getPropertyValue(name); ///
227
+ css[name] = value;
228
+ }
229
+ } else if (typeof css === _constants.STRING) {
230
+ let name = css; ///
231
+ const computedStyles = getComputedStyle(this.domElement), value = computedStyles.getPropertyValue(name); ///
232
+ css = value; ///
233
+ } else {
234
+ const names = Object.keys(css); ///
235
+ names.forEach((name)=>{
236
+ const value = css[name];
237
+ this.style(name, value);
238
+ });
239
+ }
240
+ return css;
241
+ }
242
+ destroy() {
243
+ const element = this; ///
244
+ (0, _element1.destroyElement)(element);
245
+ }
246
+ static fromClass(Class, properties, ...remainingArguments) {
247
+ const { tagName } = Class, element = elementFromTagName(Class, tagName, ...remainingArguments), defaultProperties = defaultPropertiesFromClass(Class), ignoredProperties = ignoredPropertiesFromClass(Class);
248
+ element.applyProperties(properties, defaultProperties, ignoredProperties);
249
+ element.initialise && element.initialise(); ///
250
+ return element;
251
+ }
252
+ static fromTagName(tagName, properties, ...remainingArguments) {
253
+ const Class = Element, element = elementFromTagName(Class, tagName, ...remainingArguments), defaultProperties = {}, ignoredProperties = []; ///
254
+ element.applyProperties(properties, defaultProperties, ignoredProperties);
255
+ element.initialise && element.initialise(); ///
256
+ return element;
257
+ }
258
+ }
485
259
  Object.assign(Element.prototype, _jsx.default);
486
260
  Object.assign(Element.prototype, _key.default);
487
261
  Object.assign(Element.prototype, _mouse.default);
@@ -494,44 +268,34 @@ Object.assign(Element.prototype, _resize.default);
494
268
  Object.assign(Element.prototype, _element.default);
495
269
  Object.assign(Element.prototype, _fullScreen.default);
496
270
  Object.assign(Element.prototype, _customEvent.default);
497
- function elementFromTagName(Class, tagName) {
498
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
499
- remainingArguments[_key - 2] = arguments[_key];
500
- }
501
- var _Function_prototype_bind;
502
- var selector = null, element = new ((_Function_prototype_bind = Function.prototype.bind).call.apply(_Function_prototype_bind, [
503
- Class,
504
- null,
505
- selector
506
- ].concat(_to_consumable_array(remainingArguments)))), domElement = (0, _name.isSVGTagName)(tagName) ? document.createElementNS(_constants.SVG_NAMESPACE_URI, tagName) : document.createElement(tagName);
271
+ function elementFromTagName(Class, tagName, ...remainingArguments) {
272
+ const selector = null, element = new (Function.prototype.bind.call(Class, null, selector, ...remainingArguments)), domElement = (0, _name.isSVGTagName)(tagName) ? document.createElementNS(_constants.SVG_NAMESPACE_URI, tagName) : document.createElement(tagName);
507
273
  (0, _element1.constructElement)(element, domElement);
508
274
  return element;
509
275
  }
510
- function defaultPropertiesFromClass(Class) {
511
- var defaultProperties = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
276
+ function defaultPropertiesFromClass(Class, defaultProperties = {}) {
512
277
  if (Class.hasOwnProperty(_constants.DEFAULT_PROPERTIES)) {
513
278
  defaultProperties = (0, _object.combine)(defaultProperties, Class[_constants.DEFAULT_PROPERTIES]);
514
279
  }
515
- var superClass = Object.getPrototypeOf(Class); ///
280
+ const superClass = Object.getPrototypeOf(Class); ///
516
281
  if (superClass !== null) {
517
282
  defaultProperties = defaultPropertiesFromClass(superClass, defaultProperties);
518
283
  }
519
284
  return defaultProperties;
520
285
  }
521
- function ignoredPropertiesFromClass(Class) {
522
- var ignoredProperties = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
286
+ function ignoredPropertiesFromClass(Class, ignoredProperties = []) {
523
287
  if (Class.hasOwnProperty(_constants.IGNORED_PROPERTIES)) {
524
- ignoredProperties = (0, _array.augment)(ignoredProperties, Class[_constants.IGNORED_PROPERTIES], function(ignoredProperty) {
288
+ ignoredProperties = (0, _array.augment)(ignoredProperties, Class[_constants.IGNORED_PROPERTIES], (ignoredProperty)=>{
525
289
  if (!ignoredProperties.includes(ignoredProperty)) {
526
290
  return true;
527
291
  }
528
292
  });
529
293
  }
530
- var superClass = Object.getPrototypeOf(Class);
294
+ const superClass = Object.getPrototypeOf(Class);
531
295
  if (superClass !== null) {
532
296
  ignoredProperties = ignoredPropertiesFromClass(superClass, ignoredProperties);
533
297
  }
534
298
  return ignoredProperties;
535
299
  }
536
300
 
537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBqc3hNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2pzeFwiO1xuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgc3RhdGVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3N0YXRlXCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgdG91Y2hNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3RvdWNoXCI7XG5pbXBvcnQgc2Nyb2xsTWl4aW5zIGZyb20gXCIuL21peGlucy9zY3JvbGxcIjtcbmltcG9ydCByZXNpemVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Jlc2l6ZVwiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcbmltcG9ydCBmdWxsU2NyZWVuTWl4aW5zIGZyb20gXCIuL21peGlucy9mdWxsU2NyZWVuXCI7XG5pbXBvcnQgY3VzdG9tRXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2N1c3RvbUV2ZW50XCI7XG5cbmltcG9ydCB7IGF1Z21lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwiLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgY29uc3RydWN0RWxlbWVudCwgZGVzdHJveUVsZW1lbnQsIG1vdW50RWxlbWVudCwgdW5tb3VudEVsZW1lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgTk9ORSxcbiAgICAgICAgIEJMT0NLLFxuICAgICAgICAgV0lEVEgsXG4gICAgICAgICBTVFJJTkcsXG4gICAgICAgICBIRUlHSFQsXG4gICAgICAgICBESVNQTEFZLFxuICAgICAgICAgRElTQUJMRUQsXG4gICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICBTVkdfTkFNRVNQQUNFX1VSSSxcbiAgICAgICAgIERFRkFVTFRfUFJPUEVSVElFUyxcbiAgICAgICAgIElHTk9SRURfUFJPUEVSVElFUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IpIHtcbiAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPXRoaXMsICAvLy9cbiAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgY29uc3RydWN0RWxlbWVudChlbGVtZW50LCBkb21FbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRET01FbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnQ7XG4gIH1cblxuICBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gT2Zmc2V0LmZyb21ET01FbGVtZW50KHRoaXMuZG9tRWxlbWVudCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IEJvdW5kcy5mcm9tRE9NRWxlbWVudCh0aGlzLmRvbUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lm9mZnNldFdpZHRoOyB9ICAvLy9cblxuICBnZXRIZWlnaHQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0SGVpZ2h0OyB9ICAvLy9cblxuICBnZXRJbm5lcldpZHRoKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoOyB9IC8vL1xuXG4gIGdldElubmVySGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodDsgfSAvLy9cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoV0lEVEgsIHdpZHRoKTtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7IH1cblxuICBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG4gIGFkZENsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9XG5cbiAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuICB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUFsbENsYXNzZXMoKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBFTVBUWV9TVFJJTkc7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIHJlbW92ZUZyb20ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnJlbW92ZSh0aGlzKTsgfVxuXG4gIGluc2VydChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgYWRkKGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICByZW1vdmUoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICByZWZlcmVuY2VET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LmZpcnN0Q2hpbGQ7ICAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgcmVmZXJlbmNlRE9NRWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQsXG4gICAgICAgICAgcmVmZXJlbmNlRE9NRWxlbWVudCA9IG51bGw7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lmluc2VydEJlZm9yZShkb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsIC8vL1xuICAgICAgICAgIHJlZmVyZW5jZURPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50OyAgLy8vXG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHJlZmVyZW5jZURPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5uZXh0U2libGluZzsgIC8vL1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KGVsZW1lbnQpIHtcbiAgICB0aGlzLmFkZChlbGVtZW50KTtcblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIHVubW91bnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBtb3VudEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICB0aGlzLmluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHNob3coZGlzcGxheVN0eWxlID0gQkxPQ0spIHsgdGhpcy5kaXNwbGF5KGRpc3BsYXlTdHlsZSk7IH1cblxuICBoaWRlKCkgeyB0aGlzLnN0eWxlKERJU1BMQVksIE5PTkUpOyB9XG5cbiAgZGlzcGxheShkaXNwbGF5KSB7IHRoaXMuc3R5bGUoRElTUExBWSwgZGlzcGxheSk7IH1cblxuICBlbmFibGUoKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUoRElTQUJMRUQpOyB9XG5cbiAgZGlzYWJsZSgpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoRElTQUJMRUQsIERJU0FCTEVEKTsgfVxuXG4gIGlzRW5hYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpLFxuICAgICAgICAgIGVuYWJsZWQgPSAhZGlzYWJsZWQ7XG5cbiAgICByZXR1cm4gZW5hYmxlZDtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmhhc0F0dHJpYnV0ZShESVNBQkxFRCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cbiAgXG4gIGlzRGlzcGxheWVkKCkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB0aGlzLmNzcyhESVNQTEFZKSxcbiAgICAgICAgICBkaXNwbGF5ZWQgPSAoZGlzcGxheSAhPT0gTk9ORSk7XG4gICAgXG4gICAgcmV0dXJuIGRpc3BsYXllZDtcbiAgfVxuXG4gIGlzU2hvd2luZygpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgc2hvd2luZyA9IGRpc3BsYXllZDsgIC8vL1xuXG4gICAgcmV0dXJuIHNob3dpbmc7XG4gIH1cblxuICBpc0hpZGRlbigpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgaGlkZGVuID0gIWRpc3BsYXllZDtcblxuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICBzdHlsZShuYW1lLCB2YWx1ZSA9IG51bGwpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZVtuYW1lXSA9IHZhbHVlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV07XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBodG1sKGh0bWwgPSBudWxsKSB7XG4gICAgaWYgKGh0bWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGlubmVySFRNTCA9IGh0bWw7IC8vL1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIVE1MXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbm5lckhUTUwgPSB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNzcyhjc3MgPSBudWxsKSB7XG4gICAgaWYgKGNzcyA9PT0gbnVsbCkge1xuICAgICAgY3NzID0ge307XG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpOyAvLy9cblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZXNbaW5kZXhdLFxuICAgICAgICAgICAgICBuYW1lID0gY29tcHV0ZWRTdHlsZSwgIC8vL1xuICAgICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICAgIGNzc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNzcyA9PT0gU1RSSU5HKSB7XG4gICAgICBsZXQgbmFtZSA9IGNzczsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLCAvLy9cbiAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsgLy8vXG5cbiAgICAgIGNzcyA9IHZhbHVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoY3NzKTsgLy8vXG5cbiAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjc3NbbmFtZV07XG5cbiAgICAgICAgdGhpcy5zdHlsZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBkZXN0cm95RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdGFnTmFtZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKTtcblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSBFbGVtZW50LCAgLy8vXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IHt9LCAvLy9cbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IFtdOyAvLy9cblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwganN4TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzdGF0ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCB0b3VjaE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgcmVzaXplTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGVsZW1lbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZnVsbFNjcmVlbk1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBjdXN0b21FdmVudE1peGlucyk7XG5cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gbnVsbCxcbiAgICAgICAgZWxlbWVudCA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChDbGFzcywgbnVsbCwgc2VsZWN0b3IsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykpLFxuICAgICAgICBkb21FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0VfVVJJLCB0YWdOYW1lKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICBjb25zdHJ1Y3RFbGVtZW50KGVsZW1lbnQsIGRvbUVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoREVGQVVMVF9QUk9QRVJUSUVTKSkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gY29tYmluZShkZWZhdWx0UHJvcGVydGllcywgQ2xhc3NbREVGQVVMVF9QUk9QRVJUSUVTXSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTsgIC8vL1xuXG4gIGlmIChzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhzdXBlckNsYXNzLCBkZWZhdWx0UHJvcGVydGllcyk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBpZ25vcmVkUHJvcGVydGllcyA9IFtdKSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShJR05PUkVEX1BST1BFUlRJRVMpKSB7XG4gICAgaWdub3JlZFByb3BlcnRpZXMgPSBhdWdtZW50KGlnbm9yZWRQcm9wZXJ0aWVzLCBDbGFzc1tJR05PUkVEX1BST1BFUlRJRVNdLCAoaWdub3JlZFByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAoIWlnbm9yZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGlnbm9yZWRQcm9wZXJ0eSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgaWdub3JlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGlnbm9yZWRQcm9wZXJ0aWVzO1xufVxuIl0sIm5hbWVzIjpbIkVsZW1lbnQiLCJzZWxlY3RvciIsImVsZW1lbnQiLCJkb21FbGVtZW50IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY29uc3RydWN0RWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJnZXRPZmZzZXQiLCJvZmZzZXQiLCJPZmZzZXQiLCJmcm9tRE9NRWxlbWVudCIsImdldEJvdW5kcyIsImJvdW5kcyIsIkJvdW5kcyIsImdldFdpZHRoIiwib2Zmc2V0V2lkdGgiLCJnZXRIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJnZXRJbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJnZXRJbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsInNldFdpZHRoIiwid2lkdGgiLCJzdHlsZSIsIldJRFRIIiwic2V0SGVpZ2h0IiwiaGVpZ2h0IiwiSEVJR0hUIiwiaGFzQXR0cmlidXRlIiwibmFtZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInZhbHVlIiwiY2xlYXJBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJhZGRBdHRyaWJ1dGUiLCJoYXNDbGFzcyIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwic2V0Q2xhc3MiLCJhZGRDbGFzcyIsImFkZCIsInJlbW92ZUNsYXNzIiwicmVtb3ZlIiwidG9nZ2xlQ2xhc3MiLCJ0b2dnbGUiLCJyZW1vdmVBbGxDbGFzc2VzIiwiRU1QVFlfU1RSSU5HIiwiYWRkVG8iLCJwYXJlbnRFbGVtZW50IiwiYXBwZW5kVG8iLCJhcHBlbmQiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwicmVtb3ZlRnJvbSIsImluc2VydCIsInJlZmVyZW5jZURPTUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwic2libGluZ0VsZW1lbnQiLCJwYXJlbnRET01Ob2RlIiwicGFyZW50Tm9kZSIsImluc2VydEFmdGVyIiwibmV4dFNpYmxpbmciLCJtb3VudCIsIm1vdW50RWxlbWVudCIsInVubW91bnQiLCJ1bm1vdW50RWxlbWVudCIsIm1vdW50QmVmb3JlIiwibW91bnRBZnRlciIsInNob3ciLCJkaXNwbGF5U3R5bGUiLCJCTE9DSyIsImRpc3BsYXkiLCJoaWRlIiwiRElTUExBWSIsIk5PTkUiLCJlbmFibGUiLCJESVNBQkxFRCIsImRpc2FibGUiLCJpc0VuYWJsZWQiLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJlbmFibGVkIiwiaXNEaXNwbGF5ZWQiLCJjc3MiLCJkaXNwbGF5ZWQiLCJpc1Nob3dpbmciLCJzaG93aW5nIiwiaXNIaWRkZW4iLCJoaWRkZW4iLCJodG1sIiwiaW5uZXJIVE1MIiwiY29tcHV0ZWRTdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwiaW5kZXgiLCJsZW5ndGgiLCJjb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsIlNUUklORyIsIm5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJkZXN0cm95IiwiZGVzdHJveUVsZW1lbnQiLCJmcm9tQ2xhc3MiLCJDbGFzcyIsInByb3BlcnRpZXMiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJ0YWdOYW1lIiwiZWxlbWVudEZyb21UYWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MiLCJhcHBseVByb3BlcnRpZXMiLCJpbml0aWFsaXNlIiwiZnJvbVRhZ05hbWUiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJqc3hNaXhpbnMiLCJrZXlNaXhpbnMiLCJtb3VzZU1peGlucyIsImNsaWNrTWl4aW5zIiwic3RhdGVNaXhpbnMiLCJldmVudE1peGlucyIsInRvdWNoTWl4aW5zIiwic2Nyb2xsTWl4aW5zIiwicmVzaXplTWl4aW5zIiwiZWxlbWVudE1peGlucyIsImZ1bGxTY3JlZW5NaXhpbnMiLCJjdXN0b21FdmVudE1peGlucyIsIkZ1bmN0aW9uIiwiYmluZCIsImNhbGwiLCJpc1NWR1RhZ05hbWUiLCJjcmVhdGVFbGVtZW50TlMiLCJTVkdfTkFNRVNQQUNFX1VSSSIsImNyZWF0ZUVsZW1lbnQiLCJoYXNPd25Qcm9wZXJ0eSIsIkRFRkFVTFRfUFJPUEVSVElFUyIsImNvbWJpbmUiLCJzdXBlckNsYXNzIiwiZ2V0UHJvdG90eXBlT2YiLCJJR05PUkVEX1BST1BFUlRJRVMiLCJhdWdtZW50IiwiaWdub3JlZFByb3BlcnR5IiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBaUNxQkE7Ozs2REEvQkY7NkRBQ0E7MERBQ0c7MERBQ0E7NERBQ0U7NERBQ0E7NERBQ0E7NERBQ0E7NERBQ0E7NkRBQ0M7NkRBQ0E7OERBQ0M7aUVBQ0c7a0VBQ0M7cUJBRU47c0JBQ0E7b0JBQ0s7d0JBQ2tEO3lCQVc1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXBCLElBQUEsQUFBTUEsd0JBQU47YUFBTUEsUUFDUEMsUUFBUTtnQ0FEREQ7UUFFakIsSUFBSUMsYUFBYSxNQUFNO1lBQ3JCLElBQU1DLFVBQVMsSUFBSSxFQUNiQyxhQUFhQyxTQUFTQyxhQUFhLENBQUNKO1lBRTFDSyxJQUFBQSwwQkFBZ0IsRUFBQ0osU0FBU0M7UUFDNUI7O2tCQVBpQkg7O1lBVW5CTyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNKLFVBQVU7WUFDeEI7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsU0FBU0MsZUFBTSxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDUixVQUFVO2dCQUVwRCxPQUFPTTtZQUNUOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLFNBQVNDLGVBQU0s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
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBqc3hNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2pzeFwiO1xuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgc3RhdGVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3N0YXRlXCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgdG91Y2hNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3RvdWNoXCI7XG5pbXBvcnQgc2Nyb2xsTWl4aW5zIGZyb20gXCIuL21peGlucy9zY3JvbGxcIjtcbmltcG9ydCByZXNpemVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Jlc2l6ZVwiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcbmltcG9ydCBmdWxsU2NyZWVuTWl4aW5zIGZyb20gXCIuL21peGlucy9mdWxsU2NyZWVuXCI7XG5pbXBvcnQgY3VzdG9tRXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2N1c3RvbUV2ZW50XCI7XG5cbmltcG9ydCB7IGF1Z21lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwiLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgY29uc3RydWN0RWxlbWVudCwgZGVzdHJveUVsZW1lbnQsIG1vdW50RWxlbWVudCwgdW5tb3VudEVsZW1lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgTk9ORSxcbiAgICAgICAgIEJMT0NLLFxuICAgICAgICAgV0lEVEgsXG4gICAgICAgICBTVFJJTkcsXG4gICAgICAgICBIRUlHSFQsXG4gICAgICAgICBESVNQTEFZLFxuICAgICAgICAgRElTQUJMRUQsXG4gICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICBTVkdfTkFNRVNQQUNFX1VSSSxcbiAgICAgICAgIERFRkFVTFRfUFJPUEVSVElFUyxcbiAgICAgICAgIElHTk9SRURfUFJPUEVSVElFUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IpIHtcbiAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPXRoaXMsICAvLy9cbiAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgY29uc3RydWN0RWxlbWVudChlbGVtZW50LCBkb21FbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRET01FbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnQ7XG4gIH1cblxuICBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gT2Zmc2V0LmZyb21ET01FbGVtZW50KHRoaXMuZG9tRWxlbWVudCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IEJvdW5kcy5mcm9tRE9NRWxlbWVudCh0aGlzLmRvbUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lm9mZnNldFdpZHRoOyB9ICAvLy9cblxuICBnZXRIZWlnaHQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0SGVpZ2h0OyB9ICAvLy9cblxuICBnZXRJbm5lcldpZHRoKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoOyB9IC8vL1xuXG4gIGdldElubmVySGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodDsgfSAvLy9cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoV0lEVEgsIHdpZHRoKTtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7IH1cblxuICBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG4gIGFkZENsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9XG5cbiAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuICB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUFsbENsYXNzZXMoKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBFTVBUWV9TVFJJTkc7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIHJlbW92ZUZyb20ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnJlbW92ZSh0aGlzKTsgfVxuXG4gIGluc2VydChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgYWRkKGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICByZW1vdmUoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICByZWZlcmVuY2VET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LmZpcnN0Q2hpbGQ7ICAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgcmVmZXJlbmNlRE9NRWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQsXG4gICAgICAgICAgcmVmZXJlbmNlRE9NRWxlbWVudCA9IG51bGw7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lmluc2VydEJlZm9yZShkb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsIC8vL1xuICAgICAgICAgIHJlZmVyZW5jZURPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50OyAgLy8vXG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHJlZmVyZW5jZURPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5uZXh0U2libGluZzsgIC8vL1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KGVsZW1lbnQpIHtcbiAgICB0aGlzLmFkZChlbGVtZW50KTtcblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIHVubW91bnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBtb3VudEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICB0aGlzLmluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHNob3coZGlzcGxheVN0eWxlID0gQkxPQ0spIHsgdGhpcy5kaXNwbGF5KGRpc3BsYXlTdHlsZSk7IH1cblxuICBoaWRlKCkgeyB0aGlzLnN0eWxlKERJU1BMQVksIE5PTkUpOyB9XG5cbiAgZGlzcGxheShkaXNwbGF5KSB7IHRoaXMuc3R5bGUoRElTUExBWSwgZGlzcGxheSk7IH1cblxuICBlbmFibGUoKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUoRElTQUJMRUQpOyB9XG5cbiAgZGlzYWJsZSgpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoRElTQUJMRUQsIERJU0FCTEVEKTsgfVxuXG4gIGlzRW5hYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpLFxuICAgICAgICAgIGVuYWJsZWQgPSAhZGlzYWJsZWQ7XG5cbiAgICByZXR1cm4gZW5hYmxlZDtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmhhc0F0dHJpYnV0ZShESVNBQkxFRCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cbiAgXG4gIGlzRGlzcGxheWVkKCkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB0aGlzLmNzcyhESVNQTEFZKSxcbiAgICAgICAgICBkaXNwbGF5ZWQgPSAoZGlzcGxheSAhPT0gTk9ORSk7XG4gICAgXG4gICAgcmV0dXJuIGRpc3BsYXllZDtcbiAgfVxuXG4gIGlzU2hvd2luZygpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgc2hvd2luZyA9IGRpc3BsYXllZDsgIC8vL1xuXG4gICAgcmV0dXJuIHNob3dpbmc7XG4gIH1cblxuICBpc0hpZGRlbigpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgaGlkZGVuID0gIWRpc3BsYXllZDtcblxuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICBzdHlsZShuYW1lLCB2YWx1ZSA9IG51bGwpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZVtuYW1lXSA9IHZhbHVlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV07XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBodG1sKGh0bWwgPSBudWxsKSB7XG4gICAgaWYgKGh0bWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGlubmVySFRNTCA9IGh0bWw7IC8vL1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIVE1MXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbm5lckhUTUwgPSB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNzcyhjc3MgPSBudWxsKSB7XG4gICAgaWYgKGNzcyA9PT0gbnVsbCkge1xuICAgICAgY3NzID0ge307XG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpOyAvLy9cblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZXNbaW5kZXhdLFxuICAgICAgICAgICAgICBuYW1lID0gY29tcHV0ZWRTdHlsZSwgIC8vL1xuICAgICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICAgIGNzc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNzcyA9PT0gU1RSSU5HKSB7XG4gICAgICBsZXQgbmFtZSA9IGNzczsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLCAvLy9cbiAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsgLy8vXG5cbiAgICAgIGNzcyA9IHZhbHVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoY3NzKTsgLy8vXG5cbiAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjc3NbbmFtZV07XG5cbiAgICAgICAgdGhpcy5zdHlsZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBkZXN0cm95RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdGFnTmFtZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKTtcblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSBFbGVtZW50LCAgLy8vXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IHt9LCAvLy9cbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IFtdOyAvLy9cblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwganN4TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzdGF0ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCB0b3VjaE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgcmVzaXplTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGVsZW1lbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZnVsbFNjcmVlbk1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBjdXN0b21FdmVudE1peGlucyk7XG5cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gbnVsbCxcbiAgICAgICAgZWxlbWVudCA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChDbGFzcywgbnVsbCwgc2VsZWN0b3IsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykpLFxuICAgICAgICBkb21FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0VfVVJJLCB0YWdOYW1lKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICBjb25zdHJ1Y3RFbGVtZW50KGVsZW1lbnQsIGRvbUVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoREVGQVVMVF9QUk9QRVJUSUVTKSkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gY29tYmluZShkZWZhdWx0UHJvcGVydGllcywgQ2xhc3NbREVGQVVMVF9QUk9QRVJUSUVTXSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTsgIC8vL1xuXG4gIGlmIChzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhzdXBlckNsYXNzLCBkZWZhdWx0UHJvcGVydGllcyk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBpZ25vcmVkUHJvcGVydGllcyA9IFtdKSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShJR05PUkVEX1BST1BFUlRJRVMpKSB7XG4gICAgaWdub3JlZFByb3BlcnRpZXMgPSBhdWdtZW50KGlnbm9yZWRQcm9wZXJ0aWVzLCBDbGFzc1tJR05PUkVEX1BST1BFUlRJRVNdLCAoaWdub3JlZFByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAoIWlnbm9yZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGlnbm9yZWRQcm9wZXJ0eSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgaWdub3JlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGlnbm9yZWRQcm9wZXJ0aWVzO1xufVxuIl0sIm5hbWVzIjpbIkVsZW1lbnQiLCJzZWxlY3RvciIsImVsZW1lbnQiLCJkb21FbGVtZW50IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY29uc3RydWN0RWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJnZXRPZmZzZXQiLCJvZmZzZXQiLCJPZmZzZXQiLCJmcm9tRE9NRWxlbWVudCIsImdldEJvdW5kcyIsImJvdW5kcyIsIkJvdW5kcyIsImdldFdpZHRoIiwib2Zmc2V0V2lkdGgiLCJnZXRIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJnZXRJbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJnZXRJbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsInNldFdpZHRoIiwid2lkdGgiLCJzdHlsZSIsIldJRFRIIiwic2V0SGVpZ2h0IiwiaGVpZ2h0IiwiSEVJR0hUIiwiaGFzQXR0cmlidXRlIiwibmFtZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInZhbHVlIiwiY2xlYXJBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJhZGRBdHRyaWJ1dGUiLCJoYXNDbGFzcyIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwic2V0Q2xhc3MiLCJhZGRDbGFzcyIsImFkZCIsInJlbW92ZUNsYXNzIiwicmVtb3ZlIiwidG9nZ2xlQ2xhc3MiLCJ0b2dnbGUiLCJyZW1vdmVBbGxDbGFzc2VzIiwiRU1QVFlfU1RSSU5HIiwiYWRkVG8iLCJwYXJlbnRFbGVtZW50IiwiYXBwZW5kVG8iLCJhcHBlbmQiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwicmVtb3ZlRnJvbSIsImluc2VydCIsInJlZmVyZW5jZURPTUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwic2libGluZ0VsZW1lbnQiLCJwYXJlbnRET01Ob2RlIiwicGFyZW50Tm9kZSIsImluc2VydEFmdGVyIiwibmV4dFNpYmxpbmciLCJtb3VudCIsIm1vdW50RWxlbWVudCIsInVubW91bnQiLCJ1bm1vdW50RWxlbWVudCIsIm1vdW50QmVmb3JlIiwibW91bnRBZnRlciIsInNob3ciLCJkaXNwbGF5U3R5bGUiLCJCTE9DSyIsImRpc3BsYXkiLCJoaWRlIiwiRElTUExBWSIsIk5PTkUiLCJlbmFibGUiLCJESVNBQkxFRCIsImRpc2FibGUiLCJpc0VuYWJsZWQiLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJlbmFibGVkIiwiaXNEaXNwbGF5ZWQiLCJjc3MiLCJkaXNwbGF5ZWQiLCJpc1Nob3dpbmciLCJzaG93aW5nIiwiaXNIaWRkZW4iLCJoaWRkZW4iLCJodG1sIiwiaW5uZXJIVE1MIiwiY29tcHV0ZWRTdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwiaW5kZXgiLCJsZW5ndGgiLCJjb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsIlNUUklORyIsIm5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJkZXN0cm95IiwiZGVzdHJveUVsZW1lbnQiLCJmcm9tQ2xhc3MiLCJDbGFzcyIsInByb3BlcnRpZXMiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJ0YWdOYW1lIiwiZWxlbWVudEZyb21UYWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MiLCJhcHBseVByb3BlcnRpZXMiLCJpbml0aWFsaXNlIiwiZnJvbVRhZ05hbWUiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJqc3hNaXhpbnMiLCJrZXlNaXhpbnMiLCJtb3VzZU1peGlucyIsImNsaWNrTWl4aW5zIiwic3RhdGVNaXhpbnMiLCJldmVudE1peGlucyIsInRvdWNoTWl4aW5zIiwic2Nyb2xsTWl4aW5zIiwicmVzaXplTWl4aW5zIiwiZWxlbWVudE1peGlucyIsImZ1bGxTY3JlZW5NaXhpbnMiLCJjdXN0b21FdmVudE1peGlucyIsIkZ1bmN0aW9uIiwiYmluZCIsImNhbGwiLCJpc1NWR1RhZ05hbWUiLCJjcmVhdGVFbGVtZW50TlMiLCJTVkdfTkFNRVNQQUNFX1VSSSIsImNyZWF0ZUVsZW1lbnQiLCJoYXNPd25Qcm9wZXJ0eSIsIkRFRkFVTFRfUFJPUEVSVElFUyIsImNvbWJpbmUiLCJzdXBlckNsYXNzIiwiZ2V0UHJvdG90eXBlT2YiLCJJR05PUkVEX1BST1BFUlRJRVMiLCJhdWdtZW50IiwiaWdub3JlZFByb3BlcnR5IiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlDQTs7O2VBQXFCQTs7OytEQS9CRjsrREFDQTs0REFDRzs0REFDQTs4REFDRTs4REFDQTs4REFDQTs4REFDQTs4REFDQTsrREFDQzsrREFDQTtnRUFDQzttRUFDRztvRUFDQzt1QkFFTjt3QkFDQTtzQkFDSzswQkFDa0Q7MkJBVzVDOzs7Ozs7QUFFcEIsTUFBTUE7SUFDbkIsWUFBWUMsUUFBUSxDQUFFO1FBQ3BCLElBQUlBLGFBQWEsTUFBTTtZQUNyQixNQUFNQyxVQUFTLElBQUksRUFDYkMsYUFBYUMsU0FBU0MsYUFBYSxDQUFDSjtZQUUxQ0ssSUFBQUEsMEJBQWdCLEVBQUNKLFNBQVNDO1FBQzVCO0lBQ0Y7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNKLFVBQVU7SUFDeEI7SUFFQUssWUFBWTtRQUNWLE1BQU1DLFNBQVNDLGVBQU0sQ0FBQ0MsY0FBYyxDQUFDLElBQUksQ0FBQ1IsVUFBVTtRQUVwRCxPQUFPTTtJQUNUO0lBRUFHLFlBQVk7UUFDVixNQUFNQyxTQUFTQyxlQUFNLENBQUNILGNBQWMsQ0FBQyxJQUFJLENBQUNSLFVBQVU7UUFFcEQsT0FBT1U7SUFDVDtJQUVBRSxXQUFXO1FBQUUsT0FBTyxJQUFJLENBQUNaLFVBQVUsQ0FBQ2EsV0FBVztJQUFFO0lBRWpEQyxZQUFZO1FBQUUsT0FBTyxJQUFJLENBQUNkLFVBQVUsQ0FBQ2UsWUFBWTtJQUFFO0lBRW5EQyxnQkFBZ0I7UUFBRSxPQUFPLElBQUksQ0FBQ2hCLFVBQVUsQ0FBQ2lCLFdBQVc7SUFBRTtJQUV0REMsaUJBQWlCO1FBQUUsT0FBTyxJQUFJLENBQUNsQixVQUFVLENBQUNtQixZQUFZO0lBQUU7SUFFeERDLFNBQVNDLEtBQUssRUFBRTtRQUNkQSxRQUFRLEdBQUdBLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRztRQUV6QixJQUFJLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQUssRUFBRUY7SUFDcEI7SUFFQUcsVUFBVUMsTUFBTSxFQUFFO1FBQ2hCQSxTQUFTLEdBQUdBLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRztRQUUzQixJQUFJLENBQUNILEtBQUssQ0FBQ0ksaUJBQU0sRUFBRUQ7SUFDckI7SUFFQUUsYUFBYUMsSUFBSSxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM1QixVQUFVLENBQUMyQixZQUFZLENBQUNDO0lBQU87SUFFaEVDLGFBQWFELElBQUksRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDNUIsVUFBVSxDQUFDNkIsWUFBWSxDQUFDRDtJQUFPO0lBRWhFRSxhQUFhRixJQUFJLEVBQUVHLEtBQUssRUFBRTtRQUFFLElBQUksQ0FBQy9CLFVBQVUsQ0FBQzhCLFlBQVksQ0FBQ0YsTUFBTUc7SUFBUTtJQUV2RUMsZUFBZUosSUFBSSxFQUFFO1FBQUUsSUFBSSxDQUFDNUIsVUFBVSxDQUFDaUMsZUFBZSxDQUFDTDtJQUFPO0lBRTlETSxhQUFhTixJQUFJLEVBQUVHLEtBQUssRUFBRTtRQUFFLElBQUksQ0FBQ0QsWUFBWSxDQUFDRixNQUFNRztJQUFRO0lBRTVERSxnQkFBZ0JMLElBQUksRUFBRTtRQUFFLElBQUksQ0FBQ0ksY0FBYyxDQUFDSjtJQUFPO0lBRW5ETyxTQUFTQyxTQUFTLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQ3BDLFVBQVUsQ0FBQ3FDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDRjtJQUFZO0lBRTVFRyxTQUFTSCxTQUFTLEVBQUU7UUFBRSxJQUFJLENBQUNwQyxVQUFVLENBQUNvQyxTQUFTLEdBQUdBO0lBQVc7SUFFN0RJLFNBQVNKLFNBQVMsRUFBRTtRQUFFLElBQUksQ0FBQ3BDLFVBQVUsQ0FBQ3FDLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDTDtJQUFZO0lBRWhFTSxZQUFZTixTQUFTLEVBQUU7UUFBRSxJQUFJLENBQUNwQyxVQUFVLENBQUNxQyxTQUFTLENBQUNNLE1BQU0sQ0FBQ1A7SUFBWTtJQUV0RVEsWUFBWVIsU0FBUyxFQUFFO1FBQUUsSUFBSSxDQUFDcEMsVUFBVSxDQUFDcUMsU0FBUyxDQUFDUSxNQUFNLENBQUNUO0lBQVk7SUFFdEVVLG1CQUFtQjtRQUFFLElBQUksQ0FBQzlDLFVBQVUsQ0FBQ29DLFNBQVMsR0FBR1csdUJBQVk7SUFBRTtJQUUvREMsTUFBTUMsYUFBYSxFQUFFO1FBQUVBLGNBQWNSLEdBQUcsQ0FBQyxJQUFJO0lBQUc7SUFFaERTLFNBQVNELGFBQWEsRUFBRTtRQUFFQSxjQUFjRSxNQUFNLENBQUMsSUFBSTtJQUFHO0lBRXREQyxVQUFVSCxhQUFhLEVBQUU7UUFBRUEsY0FBY0ksT0FBTyxDQUFDLElBQUk7SUFBRztJQUV4REMsV0FBV0wsYUFBYSxFQUFFO1FBQUVBLGNBQWNOLE1BQU0sQ0FBQyxJQUFJO0lBQUc7SUFFeERZLE9BQU94RCxPQUFPLEVBQUU7UUFBRSxJQUFJLENBQUNvRCxNQUFNLENBQUNwRDtJQUFVO0lBRXhDMEMsSUFBSTFDLE9BQU8sRUFBRTtRQUFFLElBQUksQ0FBQ29ELE1BQU0sQ0FBQ3BEO0lBQVU7SUFFckM0QyxPQUFPNUMsT0FBTyxFQUFFO1FBQ2QsSUFBSUEsU0FBUztZQUNYQSxRQUFRNEMsTUFBTTtZQUVkO1FBQ0Y7UUFFQSxJQUFJLENBQUMzQyxVQUFVLENBQUMyQyxNQUFNO0lBQ3hCO0lBRUFVLFFBQVF0RCxPQUFPLEVBQUU7UUFDZixNQUFNQyxhQUFhRCxRQUFRQyxVQUFVLEVBQy9Cd0Qsc0JBQXNCLElBQUksQ0FBQ3hELFVBQVUsQ0FBQ3lELFVBQVUsRUFBRyxHQUFHO1FBRTVELElBQUksQ0FBQ3pELFVBQVUsQ0FBQzBELFlBQVksQ0FBQzFELFlBQVl3RDtJQUMzQztJQUVBTCxPQUFPcEQsT0FBTyxFQUFFO1FBQ2QsTUFBTUMsYUFBYUQsUUFBUUMsVUFBVSxFQUMvQndELHNCQUFzQixNQUFNLEdBQUc7UUFFckMsSUFBSSxDQUFDeEQsVUFBVSxDQUFDMEQsWUFBWSxDQUFDMUQsWUFBWXdEO0lBQzNDO0lBRUFFLGFBQWFDLGNBQWMsRUFBRTtRQUMzQixNQUFNQyxnQkFBZ0JELGVBQWUzRCxVQUFVLENBQUM2RCxVQUFVLEVBQ3BETCxzQkFBc0JHLGVBQWUzRCxVQUFVLEVBQUcsR0FBRztRQUUzRDRELGNBQWNGLFlBQVksQ0FBQyxJQUFJLENBQUMxRCxVQUFVLEVBQUV3RDtJQUM5QztJQUVBTSxZQUFZSCxjQUFjLEVBQUU7UUFDMUIsTUFBTUMsZ0JBQWdCRCxlQUFlM0QsVUFBVSxDQUFDNkQsVUFBVSxFQUNwREwsc0JBQXNCRyxlQUFlM0QsVUFBVSxDQUFDK0QsV0FBVyxFQUFHLEdBQUc7UUFFdkVILGNBQWNGLFlBQVksQ0FBQyxJQUFJLENBQUMxRCxVQUFVLEVBQUV3RDtJQUM5QztJQUVBUSxNQUFNakUsT0FBTyxFQUFFO1FBQ2IsSUFBSSxDQUFDMEMsR0FBRyxDQUFDMUM7UUFFVGtFLElBQUFBLHNCQUFZLEVBQUNsRTtJQUNmO0lBRUFtRSxRQUFRbkUsT0FBTyxFQUFFO1FBQ2ZvRSxJQUFBQSx3QkFBYyxFQUFDcEU7UUFFZixJQUFJLENBQUM0QyxNQUFNLENBQUM1QztJQUNkO0lBRUFxRSxZQUFZVCxjQUFjLEVBQUU7UUFDMUIsSUFBSSxDQUFDRCxZQUFZLENBQUNDO1FBRWxCLE1BQU01RCxVQUFVLElBQUksRUFBRSxHQUFHO1FBRXpCa0UsSUFBQUEsc0JBQVksRUFBQ2xFO0lBQ2Y7SUFFQXNFLFdBQVdWLGNBQWMsRUFBRTtRQUN6QixJQUFJLENBQUNHLFdBQVcsQ0FBQ0g7UUFFakIsTUFBTTVELFVBQVUsSUFBSSxFQUFFLEdBQUc7UUFFekJrRSxJQUFBQSxzQkFBWSxFQUFDbEU7SUFDZjtJQUVBdUUsS0FBS0MsZUFBZUMsZ0JBQUssRUFBRTtRQUFFLElBQUksQ0FBQ0MsT0FBTyxDQUFDRjtJQUFlO0lBRXpERyxPQUFPO1FBQUUsSUFBSSxDQUFDcEQsS0FBSyxDQUFDcUQsa0JBQU8sRUFBRUMsZUFBSTtJQUFHO0lBRXBDSCxRQUFRQSxPQUFPLEVBQUU7UUFBRSxJQUFJLENBQUNuRCxLQUFLLENBQUNxRCxrQkFBTyxFQUFFRjtJQUFVO0lBRWpESSxTQUFTO1FBQUUsSUFBSSxDQUFDN0MsY0FBYyxDQUFDOEMsbUJBQVE7SUFBRztJQUUxQ0MsVUFBVTtRQUFFLElBQUksQ0FBQ2pELFlBQVksQ0FBQ2dELG1CQUFRLEVBQUVBLG1CQUFRO0lBQUc7SUFFbkRFLFlBQVk7UUFDVixNQUFNQyxXQUFXLElBQUksQ0FBQ0MsVUFBVSxJQUMxQkMsVUFBVSxDQUFDRjtRQUVqQixPQUFPRTtJQUNUO0lBRUFELGFBQWE7UUFDWCxNQUFNRCxXQUFXLElBQUksQ0FBQ3RELFlBQVksQ0FBQ21ELG1CQUFRO1FBRTNDLE9BQU9HO0lBQ1Q7SUFFQUcsY0FBYztRQUNaLE1BQU1YLFVBQVUsSUFBSSxDQUFDWSxHQUFHLENBQUNWLGtCQUFPLEdBQzFCVyxZQUFhYixZQUFZRyxlQUFJO1FBRW5DLE9BQU9VO0lBQ1Q7SUFFQUMsWUFBWTtRQUNWLE1BQU1ELFlBQVksSUFBSSxDQUFDRixXQUFXLElBQzVCSSxVQUFVRixXQUFZLEdBQUc7UUFFL0IsT0FBT0U7SUFDVDtJQUVBQyxXQUFXO1FBQ1QsTUFBTUgsWUFBWSxJQUFJLENBQUNGLFdBQVcsSUFDNUJNLFNBQVMsQ0FBQ0o7UUFFaEIsT0FBT0k7SUFDVDtJQUVBcEUsTUFBTU0sSUFBSSxFQUFFRyxRQUFRLElBQUksRUFBRTtRQUN4QixJQUFJQSxVQUFVLE1BQU07WUFDbEIsSUFBSSxDQUFDL0IsVUFBVSxDQUFDc0IsS0FBSyxDQUFDTSxLQUFLLEdBQUdHO1lBRTlCO1FBQ0Y7UUFFQSxNQUFNVCxRQUFRLElBQUksQ0FBQ3RCLFVBQVUsQ0FBQ3NCLEtBQUssQ0FBQ00sS0FBSztRQUV6QyxPQUFPTjtJQUNUO0lBRUFxRSxLQUFLQSxPQUFPLElBQUksRUFBRTtRQUNoQixJQUFJQSxTQUFTLE1BQU07WUFDakIsTUFBTUMsWUFBWUQsTUFBTSxHQUFHO1lBRTNCLElBQUksQ0FBQzNGLFVBQVUsQ0FBQzRGLFNBQVMsR0FBR0E7WUFFNUI7UUFDRjtRQUVBLE1BQU1BLFlBQVksSUFBSSxDQUFDNUYsVUFBVSxDQUFDNEYsU0FBUztRQUUzQ0QsT0FBT0MsV0FBVyxHQUFHO1FBRXJCLE9BQU9EO0lBQ1Q7SUFFQU4sSUFBSUEsTUFBTSxJQUFJLEVBQUU7UUFDZCxJQUFJQSxRQUFRLE1BQU07WUFDaEJBLE1BQU0sQ0FBQztZQUVQLE1BQU1RLGlCQUFpQkMsaUJBQWlCLElBQUksQ0FBQzlGLFVBQVUsR0FBRyxHQUFHO1lBRTdELElBQUssSUFBSStGLFFBQVEsR0FBR0EsUUFBUUYsZUFBZUcsTUFBTSxFQUFFRCxRQUFTO2dCQUMxRCxNQUFNRSxnQkFBZ0JKLGNBQWMsQ0FBQ0UsTUFBTSxFQUNyQ25FLE9BQU9xRSxlQUNQbEUsUUFBUThELGVBQWVLLGdCQUFnQixDQUFDdEUsT0FBTyxHQUFHO2dCQUV4RHlELEdBQUcsQ0FBQ3pELEtBQUssR0FBR0c7WUFDZDtRQUNGLE9BQU8sSUFBSSxPQUFPc0QsUUFBUWMsaUJBQU0sRUFBRTtZQUNoQyxJQUFJdkUsT0FBT3lELEtBQUssR0FBRztZQUVuQixNQUFNUSxpQkFBaUJDLGlCQUFpQixJQUFJLENBQUM5RixVQUFVLEdBQ2pEK0IsUUFBUThELGVBQWVLLGdCQUFnQixDQUFDdEUsT0FBTyxHQUFHO1lBRXhEeUQsTUFBTXRELE9BQVEsR0FBRztRQUNuQixPQUFPO1lBQ0wsTUFBTXFFLFFBQVFDLE9BQU9DLElBQUksQ0FBQ2pCLE1BQU0sR0FBRztZQUVuQ2UsTUFBTUcsT0FBTyxDQUFDLENBQUMzRTtnQkFDYixNQUFNRyxRQUFRc0QsR0FBRyxDQUFDekQsS0FBSztnQkFFdkIsSUFBSSxDQUFDTixLQUFLLENBQUNNLE1BQU1HO1lBQ25CO1FBQ0Y7UUFFQSxPQUFPc0Q7SUFDVDtJQUVBbUIsVUFBVTtRQUNSLE1BQU16RyxVQUFVLElBQUksRUFBRSxHQUFHO1FBRXpCMEcsSUFBQUEsd0JBQWMsRUFBQzFHO0lBQ2pCO0lBRUEsT0FBTzJHLFVBQVVDLEtBQUssRUFBRUMsVUFBVSxFQUFFLEdBQUdDLGtCQUFrQixFQUFFO1FBQ3pELE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdILE9BQ2Q1RyxVQUFVZ0gsbUJBQW1CSixPQUFPRyxZQUFZRCxxQkFDaERHLG9CQUFvQkMsMkJBQTJCTixRQUMvQ08sb0JBQW9CQywyQkFBMkJSO1FBRXJENUcsUUFBUXFILGVBQWUsQ0FBQ1IsWUFBWUksbUJBQW1CRTtRQUV2RG5ILFFBQVFzSCxVQUFVLElBQUl0SCxRQUFRc0gsVUFBVSxJQUFJLEdBQUc7UUFFL0MsT0FBT3RIO0lBQ1Q7SUFFQSxPQUFPdUgsWUFBWVIsT0FBTyxFQUFFRixVQUFVLEVBQUUsR0FBR0Msa0JBQWtCLEVBQUU7UUFDN0QsTUFBTUYsUUFBUTlHLFNBQ1JFLFVBQVVnSCxtQkFBbUJKLE9BQU9HLFlBQVlELHFCQUNoREcsb0JBQW9CLENBQUMsR0FDckJFLG9CQUFvQixFQUFFLEVBQUUsR0FBRztRQUVqQ25ILFFBQVFxSCxlQUFlLENBQUNSLFlBQVlJLG1CQUFtQkU7UUFFdkRuSCxRQUFRc0gsVUFBVSxJQUFJdEgsUUFBUXNILFVBQVUsSUFBSSxHQUFHO1FBRS9DLE9BQU90SDtJQUNUO0FBQ0Y7QUFFQXNHLE9BQU9rQixNQUFNLENBQUMxSCxRQUFRMkgsU0FBUyxFQUFFQyxZQUFTO0FBQzFDcEIsT0FBT2tCLE1BQU0sQ0FBQzFILFFBQVEySCxTQUFTLEVBQUVFLFlBQVM7QUFDMUNyQixPQUFPa0IsTUFBTSxDQUFDMUgsUUFBUTJILFNBQVMsRUFBRUcsY0FBVztBQUM1Q3RCLE9BQU9rQixNQUFNLENBQUMxSCxRQUFRMkgsU0FBUyxFQUFFSSxjQUFXO0FBQzVDdkIsT0FBT2tCLE1BQU0sQ0FBQzFILFFBQVEySCxTQUFTLEVBQUVLLGNBQVc7QUFDNUN4QixPQUFPa0IsTUFBTSxDQUFDMUgsUUFBUTJILFNBQVMsRUFBRU0sY0FBVztBQUM1Q3pCLE9BQU9rQixNQUFNLENBQUMxSCxRQUFRMkgsU0FBUyxFQUFFTyxjQUFXO0FBQzVDMUIsT0FBT2tCLE1BQU0sQ0FBQzFILFFBQVEySCxTQUFTLEVBQUVRLGVBQVk7QUFDN0MzQixPQUFPa0IsTUFBTSxDQUFDMUgsUUFBUTJILFNBQVMsRUFBRVMsZUFBWTtBQUM3QzVCLE9BQU9rQixNQUFNLENBQUMxSCxRQUFRMkgsU0FBUyxFQUFFVSxnQkFBYTtBQUM5QzdCLE9BQU9rQixNQUFNLENBQUMxSCxRQUFRMkgsU0FBUyxFQUFFVyxtQkFBZ0I7QUFDakQ5QixPQUFPa0IsTUFBTSxDQUFDMUgsUUFBUTJILFNBQVMsRUFBRVksb0JBQWlCO0FBRWxELFNBQVNyQixtQkFBbUJKLEtBQUssRUFBRUcsT0FBTyxFQUFFLEdBQUdELGtCQUFrQjtJQUMvRCxNQUFNL0csV0FBVyxNQUNYQyxVQUFVLElBQUtzSSxDQUFBQSxTQUFTYixTQUFTLENBQUNjLElBQUksQ0FBQ0MsSUFBSSxDQUFDNUIsT0FBTyxNQUFNN0csYUFBYStHLG1CQUFrQixHQUN4RjdHLGFBQWF3SSxJQUFBQSxrQkFBWSxFQUFDMUIsV0FDWDdHLFNBQVN3SSxlQUFlLENBQUNDLDRCQUFpQixFQUFFNUIsV0FDMUM3RyxTQUFTMEksYUFBYSxDQUFDN0I7SUFFOUMzRyxJQUFBQSwwQkFBZ0IsRUFBQ0osU0FBU0M7SUFFMUIsT0FBT0Q7QUFDVDtBQUVBLFNBQVNrSCwyQkFBMkJOLEtBQUssRUFBRUssb0JBQW9CLENBQUMsQ0FBQztJQUMvRCxJQUFJTCxNQUFNaUMsY0FBYyxDQUFDQyw2QkFBa0IsR0FBRztRQUM1QzdCLG9CQUFvQjhCLElBQUFBLGVBQU8sRUFBQzlCLG1CQUFtQkwsS0FBSyxDQUFDa0MsNkJBQWtCLENBQUM7SUFDMUU7SUFFQSxNQUFNRSxhQUFhMUMsT0FBTzJDLGNBQWMsQ0FBQ3JDLFFBQVMsR0FBRztJQUVyRCxJQUFJb0MsZUFBZSxNQUFNO1FBQ3ZCL0Isb0JBQW9CQywyQkFBMkI4QixZQUFZL0I7SUFDN0Q7SUFFQSxPQUFPQTtBQUNUO0FBRUEsU0FBU0csMkJBQTJCUixLQUFLLEVBQUVPLG9CQUFvQixFQUFFO0lBQy9ELElBQUlQLE1BQU1pQyxjQUFjLENBQUNLLDZCQUFrQixHQUFHO1FBQzVDL0Isb0JBQW9CZ0MsSUFBQUEsY0FBTyxFQUFDaEMsbUJBQW1CUCxLQUFLLENBQUNzQyw2QkFBa0IsQ0FBQyxFQUFFLENBQUNFO1lBQ3pFLElBQUksQ0FBQ2pDLGtCQUFrQmtDLFFBQVEsQ0FBQ0Qsa0JBQWtCO2dCQUNoRCxPQUFPO1lBQ1Q7UUFDRjtJQUNGO0lBRUEsTUFBTUosYUFBYTFDLE9BQU8yQyxjQUFjLENBQUNyQztJQUV6QyxJQUFJb0MsZUFBZSxNQUFNO1FBQ3ZCN0Isb0JBQW9CQywyQkFBMkI0QixZQUFZN0I7SUFDN0Q7SUFFQSxPQUFPQTtBQUNUIn0=