PageSourceSearch

https://panahospital.com/assets/js/webflow.js?v=1.0.2&m=1746534124

js panahospital.com collected 2026-10-01 06:59:25 UTC 1,651,332 bytes, 20,297 lines download raw bytes

1
2/*!
3 * Webflow: Front-end site library
4 * @license MIT
5 * Inline scripts may access the api using an async handler:
6 *   var Webflow = Webflow || [];
7 *   Webflow.push(readyFunction);
8 */
9
10(() => { // webpackBootstrap
11var __webpack_modules__ = ({
12"1361": (function (module) {
13/**
14 * https://github.com/gre/bezier-easing
15 * BezierEasing - use bezier curve for transition easing function
16 * by Gaëtan Renaudeau 2014 - 2015 – MIT License
17 */
18
19// These values are established by empiricism with tests (tradeoff: performance VS precision)
20var NEWTON_ITERATIONS = 4;
21var NEWTON_MIN_SLOPE = 0.001;
22var SUBDIVISION_PRECISION = 0.0000001;
23var SUBDIVISION_MAX_ITERATIONS = 10;
24
25var kSplineTableSize = 11;
26var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
27
28var float32ArraySupported = typeof Float32Array === 'function';
29
30function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }
31function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }
32function C (aA1)      { return 3.0 * aA1; }
33
34// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
35function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }
36
37// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
38function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }
39
40function binarySubdivide (aX, aA, aB, mX1, mX2) {
41  var currentX, currentT, i = 0;
42  do {
43    currentT = aA + (aB - aA) / 2.0;
44    currentX = calcBezier(currentT, mX1, mX2) - aX;
45    if (currentX > 0.0) {
46      aB = currentT;
47    } else {
48      aA = currentT;
49    }
50  } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
51  return currentT;
52}
53
54function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {
55 for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
56   var currentSlope = getSlope(aGuessT, mX1, mX2);
57   if (currentSlope === 0.0) {
58     return aGuessT;
59   }
60   var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
61   aGuessT -= currentX / currentSlope;
62 }
63 return aGuessT;
64}
65
66module.exports = function bezier (mX1, mY1, mX2, mY2) {
67  if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {
68    throw new Error('bezier x values must be in [0, 1] range');
69  }
70
71  // Precompute samples table
72  var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
73  if (mX1 !== mY1 || mX2 !== mY2) {
74    for (var i = 0; i < kSplineTableSize; ++i) {
75      sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
76    }
77  }
78
79  function getTForX (aX) {
80    var intervalStart = 0.0;
81    var currentSample = 1;
82    var lastSample = kSplineTableSize - 1;
83
84    for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
85      intervalStart += kSampleStepSize;
86    }
87    --currentSample;
88
89    // Interpolate to provide an initial guess for t
90    var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
91    var guessForT = intervalStart + dist * kSampleStepSize;
92
93    var initialSlope = getSlope(guessForT, mX1, mX2);
94    if (initialSlope >= NEWTON_MIN_SLOPE) {
95      return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
96    } else if (initialSlope === 0.0) {
97      return guessForT;
98    } else {
99      return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
100    }
101  }
102
103  return function BezierEasing (x) {
104    if (mX1 === mY1 && mX2 === mY2) {
105      return x; // linear
106    }
107    // Because JavaScript number are imprecise, we should guarantee the extremes are right.
108    if (x === 0) {
109      return 0;
110    }
111    if (x === 1) {
112      return 1;
113    }
114    return calcBezier(getTForX(x), mY1, mY2);
115  };
116};
117
118
119}),
120"8172": (function (module, __unused_webpack_exports, __webpack_require__) {
121var getNative = __webpack_require__(440),
122    root = __webpack_require__(5238);
123
124/* Built-in method references that are verified to be native. */
125var DataView = getNative(root, 'DataView');
126
127module.exports = DataView;
128
129
130}),
131"1796": (function (module, __unused_webpack_exports, __webpack_require__) {
132var hashClear = __webpack_require__(7322),
133    hashDelete = __webpack_require__(2937),
134    hashGet = __webpack_require__(207),
135    hashHas = __webpack_require__(2165),
136    hashSet = __webpack_require__(7523);
137
138/**
139 * Creates a hash object.
140 *
141 * @private
142 * @constructor
143 * @param {Array} [entries] The key-value pairs to cache.
144 */
145function Hash(entries) {
146  var index = -1,
147      length = entries == null ? 0 : entries.length;
148
149  this.clear();
150  while (++index < length) {
151    var entry = entries[index];
152    this.set(entry[0], entry[1]);
153  }
154}
155
156// Add methods to `Hash`.
157Hash.prototype.clear = hashClear;
158Hash.prototype['delete'] = hashDelete;
159Hash.prototype.get = hashGet;
160Hash.prototype.has = hashHas;
161Hash.prototype.set = hashSet;
162
163module.exports = Hash;
164
165
166}),
167"4281": (function (module, __unused_webpack_exports, __webpack_require__) {
168var baseCreate = __webpack_require__(5940),
169    baseLodash = __webpack_require__(4382);
170
171/** Used as references for the maximum length and index of an array. */
172var MAX_ARRAY_LENGTH = 4294967295;
173
174/**
175 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
176 *
177 * @private
178 * @constructor
179 * @param {*} value The value to wrap.
180 */
181function LazyWrapper(value) {
182  this.__wrapped__ = value;
183  this.__actions__ = [];
184  this.__dir__ = 1;
185  this.__filtered__ = false;
vendor: 4,320 bytes, lines 186-353
186  this.__iteratees__ = [];
187  this.__takeCount__ = MAX_ARRAY_LENGTH;
188  this.__views__ = [];
189}
190
191// Ensure `LazyWrapper` is an instance of `baseLodash`.
192LazyWrapper.prototype = baseCreate(baseLodash.prototype);
193LazyWrapper.prototype.constructor = LazyWrapper;
194
195module.exports = LazyWrapper;
196
197
198}),
199"283": (function (module, __unused_webpack_exports, __webpack_require__) {
200var listCacheClear = __webpack_require__(7435),
201    listCacheDelete = __webpack_require__(8438),
202    listCacheGet = __webpack_require__(3067),
203    listCacheHas = __webpack_require__(9679),
204    listCacheSet = __webpack_require__(2426);
205
206/**
207 * Creates an list cache object.
208 *
209 * @private
210 * @constructor
211 * @param {Array} [entries] The key-value pairs to cache.
212 */
213function ListCache(entries) {
214  var index = -1,
215      length = entries == null ? 0 : entries.length;
216
217  this.clear();
218  while (++index < length) {
219    var entry = entries[index];
220    this.set(entry[0], entry[1]);
221  }
222}
223
224// Add methods to `ListCache`.
225ListCache.prototype.clear = listCacheClear;
226ListCache.prototype['delete'] = listCacheDelete;
227ListCache.prototype.get = listCacheGet;
228ListCache.prototype.has = listCacheHas;
229ListCache.prototype.set = listCacheSet;
230
231module.exports = ListCache;
232
233
234}),
235"9675": (function (module, __unused_webpack_exports, __webpack_require__) {
236var baseCreate = __webpack_require__(5940),
237    baseLodash = __webpack_require__(4382);
238
239/**
240 * The base constructor for creating `lodash` wrapper objects.
241 *
242 * @private
243 * @param {*} value The value to wrap.
244 * @param {boolean} [chainAll] Enable explicit method chain sequences.
245 */
246function LodashWrapper(value, chainAll) {
247  this.__wrapped__ = value;
248  this.__actions__ = [];
249  this.__chain__ = !!chainAll;
250  this.__index__ = 0;
251  this.__values__ = undefined;
252}
253
254LodashWrapper.prototype = baseCreate(baseLodash.prototype);
255LodashWrapper.prototype.constructor = LodashWrapper;
256
257module.exports = LodashWrapper;
258
259
260}),
261"9036": (function (module, __unused_webpack_exports, __webpack_require__) {
262var getNative = __webpack_require__(440),
263    root = __webpack_require__(5238);
264
265/* Built-in method references that are verified to be native. */
266var Map = getNative(root, 'Map');
267
268module.exports = Map;
269
270
271}),
272"4544": (function (module, __unused_webpack_exports, __webpack_require__) {
273var mapCacheClear = __webpack_require__(6409),
274    mapCacheDelete = __webpack_require__(5335),
275    mapCacheGet = __webpack_require__(5601),
276    mapCacheHas = __webpack_require__(1533),
277    mapCacheSet = __webpack_require__(151);
278
279/**
280 * Creates a map cache object to store key-value pairs.
281 *
282 * @private
283 * @constructor
284 * @param {Array} [entries] The key-value pairs to cache.
285 */
286function MapCache(entries) {
287  var index = -1,
288      length = entries == null ? 0 : entries.length;
289
290  this.clear();
291  while (++index < length) {
292    var entry = entries[index];
293    this.set(entry[0], entry[1]);
294  }
295}
296
297// Add methods to `MapCache`.
298MapCache.prototype.clear = mapCacheClear;
299MapCache.prototype['delete'] = mapCacheDelete;
300MapCache.prototype.get = mapCacheGet;
301MapCache.prototype.has = mapCacheHas;
302MapCache.prototype.set = mapCacheSet;
303
304module.exports = MapCache;
305
306
307}),
308"44": (function (module, __unused_webpack_exports, __webpack_require__) {
309var getNative = __webpack_require__(440),
310    root = __webpack_require__(5238);
311
312/* Built-in method references that are verified to be native. */
313var Promise = getNative(root, 'Promise');
314
315module.exports = Promise;
316
317
318}),
319"6656": (function (module, __unused_webpack_exports, __webpack_require__) {
320var getNative = __webpack_require__(440),
321    root = __webpack_require__(5238);
322
323/* Built-in method references that are verified to be native. */
324var Set = getNative(root, 'Set');
325
326module.exports = Set;
327
328
329}),
330"3290": (function (module, __unused_webpack_exports, __webpack_require__) {
331var MapCache = __webpack_require__(4544),
332    setCacheAdd = __webpack_require__(1760),
333    setCacheHas = __webpack_require__(5484);
334
335/**
336 *
337 * Creates an array cache object to store unique values.
338 *
339 * @private
340 * @constructor
341 * @param {Array} [values] The values to cache.
342 */
343function SetCache(values) {
344  var index = -1,
345      length = values == null ? 0 : values.length;
346
347  this.__data__ = new MapCache;
348  while (++index < length) {
349    this.add(values[index]);
350  }
351}
352
353// Add methods to `SetCache`.
vendor: 9,670 bytes, lines 354-718
354SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
355SetCache.prototype.has = setCacheHas;
356
357module.exports = SetCache;
358
359
360}),
361"1902": (function (module, __unused_webpack_exports, __webpack_require__) {
362var ListCache = __webpack_require__(283),
363    stackClear = __webpack_require__(6063),
364    stackDelete = __webpack_require__(7727),
365    stackGet = __webpack_require__(3281),
366    stackHas = __webpack_require__(6667),
367    stackSet = __webpack_require__(1270);
368
369/**
370 * Creates a stack cache object to store key-value pairs.
371 *
372 * @private
373 * @constructor
374 * @param {Array} [entries] The key-value pairs to cache.
375 */
376function Stack(entries) {
377  var data = this.__data__ = new ListCache(entries);
378  this.size = data.size;
379}
380
381// Add methods to `Stack`.
382Stack.prototype.clear = stackClear;
383Stack.prototype['delete'] = stackDelete;
384Stack.prototype.get = stackGet;
385Stack.prototype.has = stackHas;
386Stack.prototype.set = stackSet;
387
388module.exports = Stack;
389
390
391}),
392"4886": (function (module, __unused_webpack_exports, __webpack_require__) {
393var root = __webpack_require__(5238);
394
395/** Built-in value references. */
396var Symbol = root.Symbol;
397
398module.exports = Symbol;
399
400
401}),
402"8965": (function (module, __unused_webpack_exports, __webpack_require__) {
403var root = __webpack_require__(5238);
404
405/** Built-in value references. */
406var Uint8Array = root.Uint8Array;
407
408module.exports = Uint8Array;
409
410
411}),
412"3283": (function (module, __unused_webpack_exports, __webpack_require__) {
413var getNative = __webpack_require__(440),
414    root = __webpack_require__(5238);
415
416/* Built-in method references that are verified to be native. */
417var WeakMap = getNative(root, 'WeakMap');
418
419module.exports = WeakMap;
420
421
422}),
423"9198": (function (module) {
424/**
425 * A faster alternative to `Function#apply`, this function invokes `func`
426 * with the `this` binding of `thisArg` and the arguments of `args`.
427 *
428 * @private
429 * @param {Function} func The function to invoke.
430 * @param {*} thisArg The `this` binding of `func`.
431 * @param {Array} args The arguments to invoke `func` with.
432 * @returns {*} Returns the result of `func`.
433 */
434function apply(func, thisArg, args) {
435  switch (args.length) {
436    case 0: return func.call(thisArg);
437    case 1: return func.call(thisArg, args[0]);
438    case 2: return func.call(thisArg, args[0], args[1]);
439    case 3: return func.call(thisArg, args[0], args[1], args[2]);
440  }
441  return func.apply(thisArg, args);
442}
443
444module.exports = apply;
445
446
447}),
448"4970": (function (module) {
449/**
450 * A specialized version of `_.forEach` for arrays without support for
451 * iteratee shorthands.
452 *
453 * @private
454 * @param {Array} [array] The array to iterate over.
455 * @param {Function} iteratee The function invoked per iteration.
456 * @returns {Array} Returns `array`.
457 */
458function arrayEach(array, iteratee) {
459  var index = -1,
460      length = array == null ? 0 : array.length;
461
462  while (++index < length) {
463    if (iteratee(array[index], index, array) === false) {
464      break;
465    }
466  }
467  return array;
468}
469
470module.exports = arrayEach;
471
472
473}),
474"2654": (function (module) {
475/**
476 * A specialized version of `_.filter` for arrays without support for
477 * iteratee shorthands.
478 *
479 * @private
480 * @param {Array} [array] The array to iterate over.
481 * @param {Function} predicate The function invoked per iteration.
482 * @returns {Array} Returns the new filtered array.
483 */
484function arrayFilter(array, predicate) {
485  var index = -1,
486      length = array == null ? 0 : array.length,
487      resIndex = 0,
488      result = [];
489
490  while (++index < length) {
491    var value = array[index];
492    if (predicate(value, index, array)) {
493      result[resIndex++] = value;
494    }
495  }
496  return result;
497}
498
499module.exports = arrayFilter;
500
501
502}),
503"4979": (function (module, __unused_webpack_exports, __webpack_require__) {
504var baseTimes = __webpack_require__(1682),
505    isArguments = __webpack_require__(9732),
506    isArray = __webpack_require__(6377),
507    isBuffer = __webpack_require__(6018),
508    isIndex = __webpack_require__(9251),
509    isTypedArray = __webpack_require__(8586);
510
511/** Used for built-in method references. */
512var objectProto = Object.prototype;
513
514/** Used to check objects for own properties. */
515var hasOwnProperty = objectProto.hasOwnProperty;
516
517/**
518 * Creates an array of the enumerable property names of the array-like `value`.
519 *
520 * @private
521 * @param {*} value The value to query.
522 * @param {boolean} inherited Specify returning inherited property names.
523 * @returns {Array} Returns the array of property names.
524 */
525function arrayLikeKeys(value, inherited) {
526  var isArr = isArray(value),
527      isArg = !isArr && isArguments(value),
528      isBuff = !isArr && !isArg && isBuffer(value),
529      isType = !isArr && !isArg && !isBuff && isTypedArray(value),
530      skipIndexes = isArr || isArg || isBuff || isType,
531      result = skipIndexes ? baseTimes(value.length, String) : [],
532      length = result.length;
533
534  for (var key in value) {
535    if ((inherited || hasOwnProperty.call(value, key)) &&
536        !(skipIndexes && (
537           // Safari 9 has enumerable `arguments.length` in strict mode.
538           key == 'length' ||
539           // Node.js 0.10 has enumerable non-index properties on buffers.
540           (isBuff && (key == 'offset' || key == 'parent')) ||
541           // PhantomJS 2 has enumerable non-index properties on typed arrays.
542           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
543           // Skip index properties.
544           isIndex(key, length)
545        ))) {
546      result.push(key);
547    }
548  }
549  return result;
550}
551
552module.exports = arrayLikeKeys;
553
554
555}),
556"1098": (function (module) {
557/**
558 * A specialized version of `_.map` for arrays without support for iteratee
559 * shorthands.
560 *
561 * @private
562 * @param {Array} [array] The array to iterate over.
563 * @param {Function} iteratee The function invoked per iteration.
564 * @returns {Array} Returns the new mapped array.
565 */
566function arrayMap(array, iteratee) {
567  var index = -1,
568      length = array == null ? 0 : array.length,
569      result = Array(length);
570
571  while (++index < length) {
572    result[index] = iteratee(array[index], index, array);
573  }
574  return result;
575}
576
577module.exports = arrayMap;
578
579
580}),
581"5741": (function (module) {
582/**
583 * Appends the elements of `values` to `array`.
584 *
585 * @private
586 * @param {Array} array The array to modify.
587 * @param {Array} values The values to append.
588 * @returns {Array} Returns `array`.
589 */
590function arrayPush(array, values) {
591  var index = -1,
592      length = values.length,
593      offset = array.length;
594
595  while (++index < length) {
596    array[offset + index] = values[index];
597  }
598  return array;
599}
600
601module.exports = arrayPush;
602
603
604}),
605"2607": (function (module) {
606/**
607 * A specialized version of `_.reduce` for arrays without support for
608 * iteratee shorthands.
609 *
610 * @private
611 * @param {Array} [array] The array to iterate over.
612 * @param {Function} iteratee The function invoked per iteration.
613 * @param {*} [accumulator] The initial value.
614 * @param {boolean} [initAccum] Specify using the first element of `array` as
615 *  the initial value.
616 * @returns {*} Returns the accumulated value.
617 */
618function arrayReduce(array, iteratee, accumulator, initAccum) {
619  var index = -1,
620      length = array == null ? 0 : array.length;
621
622  if (initAccum && length) {
623    accumulator = array[++index];
624  }
625  while (++index < length) {
626    accumulator = iteratee(accumulator, array[index], index, array);
627  }
628  return accumulator;
629}
630
631module.exports = arrayReduce;
632
633
634}),
635"3955": (function (module) {
636/**
637 * A specialized version of `_.some` for arrays without support for iteratee
638 * shorthands.
639 *
640 * @private
641 * @param {Array} [array] The array to iterate over.
642 * @param {Function} predicate The function invoked per iteration.
643 * @returns {boolean} Returns `true` if any element passes the predicate check,
644 *  else `false`.
645 */
646function arraySome(array, predicate) {
647  var index = -1,
648      length = array == null ? 0 : array.length;
649
650  while (++index < length) {
651    if (predicate(array[index], index, array)) {
652      return true;
653    }
654  }
655  return false;
656}
657
658module.exports = arraySome;
659
660
661}),
662"609": (function (module, __unused_webpack_exports, __webpack_require__) {
663var baseProperty = __webpack_require__(2726);
664
665/**
666 * Gets the size of an ASCII `string`.
667 *
668 * @private
669 * @param {string} string The string inspect.
670 * @returns {number} Returns the string size.
671 */
672var asciiSize = baseProperty('length');
673
674module.exports = asciiSize;
675
676
677}),
678"3615": (function (module, __unused_webpack_exports, __webpack_require__) {
679var baseAssignValue = __webpack_require__(2676),
680    eq = __webpack_require__(4071);
681
682/** Used for built-in method references. */
683var objectProto = Object.prototype;
684
685/** Used to check objects for own properties. */
686var hasOwnProperty = objectProto.hasOwnProperty;
687
688/**
689 * Assigns `value` to `key` of `object` if the existing value is not equivalent
690 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
691 * for equality comparisons.
692 *
693 * @private
694 * @param {Object} object The object to modify.
695 * @param {string} key The key of the property to assign.
696 * @param {*} value The value to assign.
697 */
698function assignValue(object, key, value) {
699  var objValue = object[key];
700  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
701      (value === undefined && !(key in object))) {
702    baseAssignValue(object, key, value);
703  }
704}
705
706module.exports = assignValue;
707
708
709}),
710"8357": (function (module, __unused_webpack_exports, __webpack_require__) {
711var eq = __webpack_require__(4071);
712
713/**
714 * Gets the index at which the `key` is found in `array` of key-value pairs.
715 *
716 * @private
717 * @param {Array} array The array to inspect.
718 * @param {*}
vendor: 4,369 bytes, lines 718-883
718 key The key to search for.
719 * @returns {number} Returns the index of the matched value, else `-1`.
720 */
721function assocIndexOf(array, key) {
722  var length = array.length;
723  while (length--) {
724    if (eq(array[length][0], key)) {
725      return length;
726    }
727  }
728  return -1;
729}
730
731module.exports = assocIndexOf;
732
733
734}),
735"2676": (function (module, __unused_webpack_exports, __webpack_require__) {
736var defineProperty = __webpack_require__(9833);
737
738/**
739 * The base implementation of `assignValue` and `assignMergeValue` without
740 * value checks.
741 *
742 * @private
743 * @param {Object} object The object to modify.
744 * @param {string} key The key of the property to assign.
745 * @param {*} value The value to assign.
746 */
747function baseAssignValue(object, key, value) {
748  if (key == '__proto__' && defineProperty) {
749    defineProperty(object, key, {
750      'configurable': true,
751      'enumerable': true,
752      'value': value,
753      'writable': true
754    });
755  } else {
756    object[key] = value;
757  }
758}
759
760module.exports = baseAssignValue;
761
762
763}),
764"2009": (function (module) {
765/**
766 * The base implementation of `_.clamp` which doesn't coerce arguments.
767 *
768 * @private
769 * @param {number} number The number to clamp.
770 * @param {number} [lower] The lower bound.
771 * @param {number} upper The upper bound.
772 * @returns {number} Returns the clamped number.
773 */
774function baseClamp(number, lower, upper) {
775  if (number === number) {
776    if (upper !== undefined) {
777      number = number <= upper ? number : upper;
778    }
779    if (lower !== undefined) {
780      number = number >= lower ? number : lower;
781    }
782  }
783  return number;
784}
785
786module.exports = baseClamp;
787
788
789}),
790"5940": (function (module, __unused_webpack_exports, __webpack_require__) {
791var isObject = __webpack_require__(8532);
792
793/** Built-in value references. */
794var objectCreate = Object.create;
795
796/**
797 * The base implementation of `_.create` without support for assigning
798 * properties to the created object.
799 *
800 * @private
801 * @param {Object} proto The object to inherit from.
802 * @returns {Object} Returns the new object.
803 */
804var baseCreate = (function() {
805  function object() {}
806  return function(proto) {
807    if (!isObject(proto)) {
808      return {};
809    }
810    if (objectCreate) {
811      return objectCreate(proto);
812    }
813    object.prototype = proto;
814    var result = new object;
815    object.prototype = undefined;
816    return result;
817  };
818}());
819
820module.exports = baseCreate;
821
822
823}),
824"8264": (function (module, __unused_webpack_exports, __webpack_require__) {
825var baseForOwn = __webpack_require__(3406),
826    createBaseEach = __webpack_require__(2679);
827
828/**
829 * The base implementation of `_.forEach` without support for iteratee shorthands.
830 *
831 * @private
832 * @param {Array|Object} collection The collection to iterate over.
833 * @param {Function} iteratee The function invoked per iteration.
834 * @returns {Array|Object} Returns `collection`.
835 */
836var baseEach = createBaseEach(baseForOwn);
837
838module.exports = baseEach;
839
840
841}),
842"2056": (function (module) {
843/**
844 * The base implementation of `_.findIndex` and `_.findLastIndex` without
845 * support for iteratee shorthands.
846 *
847 * @private
848 * @param {Array} array The array to inspect.
849 * @param {Function} predicate The function invoked per iteration.
850 * @param {number} fromIndex The index to search from.
851 * @param {boolean} [fromRight] Specify iterating from right to left.
852 * @returns {number} Returns the index of the matched value, else `-1`.
853 */
854function baseFindIndex(array, predicate, fromIndex, fromRight) {
855  var length = array.length,
856      index = fromIndex + (fromRight ? 1 : -1);
857
858  while ((fromRight ? index-- : ++index < length)) {
859    if (predicate(array[index], index, array)) {
860      return index;
861    }
862  }
863  return -1;
864}
865
866module.exports = baseFindIndex;
867
868
869}),
870"5265": (function (module, __unused_webpack_exports, __webpack_require__) {
871var arrayPush = __webpack_require__(5741),
872    isFlattenable = __webpack_require__(1668);
873
874/**
875 * The base implementation of `_.flatten` with support for restricting flattening.
876 *
877 * @private
878 * @param {Array} array The array to flatten.
879 * @param {number} depth The maximum recursion depth.
880 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
881 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
882 * @param {Array} [result=[]] The initial result value.
883 * @returns {Array} Returns the new flattened array.
vendor: 10,608 bytes, lines 884-1227
884 */
885function baseFlatten(array, depth, predicate, isStrict, result) {
886  var index = -1,
887      length = array.length;
888
889  predicate || (predicate = isFlattenable);
890  result || (result = []);
891
892  while (++index < length) {
893    var value = array[index];
894    if (depth > 0 && predicate(value)) {
895      if (depth > 1) {
896        // Recursively flatten arrays (susceptible to call stack limits).
897        baseFlatten(value, depth - 1, predicate, isStrict, result);
898      } else {
899        arrayPush(result, value);
900      }
901    } else if (!isStrict) {
902      result[result.length] = value;
903    }
904  }
905  return result;
906}
907
908module.exports = baseFlatten;
909
910
911}),
912"1": (function (module, __unused_webpack_exports, __webpack_require__) {
913var createBaseFor = __webpack_require__(132);
914
915/**
916 * The base implementation of `baseForOwn` which iterates over `object`
917 * properties returned by `keysFunc` and invokes `iteratee` for each property.
918 * Iteratee functions may exit iteration early by explicitly returning `false`.
919 *
920 * @private
921 * @param {Object} object The object to iterate over.
922 * @param {Function} iteratee The function invoked per iteration.
923 * @param {Function} keysFunc The function to get the keys of `object`.
924 * @returns {Object} Returns `object`.
925 */
926var baseFor = createBaseFor();
927
928module.exports = baseFor;
929
930
931}),
932"3406": (function (module, __unused_webpack_exports, __webpack_require__) {
933var baseFor = __webpack_require__(1),
934    keys = __webpack_require__(7361);
935
936/**
937 * The base implementation of `_.forOwn` without support for iteratee shorthands.
938 *
939 * @private
940 * @param {Object} object The object to iterate over.
941 * @param {Function} iteratee The function invoked per iteration.
942 * @returns {Object} Returns `object`.
943 */
944function baseForOwn(object, iteratee) {
945  return object && baseFor(object, iteratee, keys);
946}
947
948module.exports = baseForOwn;
949
950
951}),
952"1957": (function (module, __unused_webpack_exports, __webpack_require__) {
953var castPath = __webpack_require__(3835),
954    toKey = __webpack_require__(8481);
955
956/**
957 * The base implementation of `_.get` without support for default values.
958 *
959 * @private
960 * @param {Object} object The object to query.
961 * @param {Array|string} path The path of the property to get.
962 * @returns {*} Returns the resolved value.
963 */
964function baseGet(object, path) {
965  path = castPath(path, object);
966
967  var index = 0,
968      length = path.length;
969
970  while (object != null && index < length) {
971    object = object[toKey(path[index++])];
972  }
973  return (index && index == length) ? object : undefined;
974}
975
976module.exports = baseGet;
977
978
979}),
980"7743": (function (module, __unused_webpack_exports, __webpack_require__) {
981var arrayPush = __webpack_require__(5741),
982    isArray = __webpack_require__(6377);
983
984/**
985 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
986 * `keysFunc` and `symbolsFunc` to get the enumerable property names and
987 * symbols of `object`.
988 *
989 * @private
990 * @param {Object} object The object to query.
991 * @param {Function} keysFunc The function to get the keys of `object`.
992 * @param {Function} symbolsFunc The function to get the symbols of `object`.
993 * @returns {Array} Returns the array of property names and symbols.
994 */
995function baseGetAllKeys(object, keysFunc, symbolsFunc) {
996  var result = keysFunc(object);
997  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
998}
999
1000module.exports = baseGetAllKeys;
1001
1002
1003}),
1004"3757": (function (module, __unused_webpack_exports, __webpack_require__) {
1005var Symbol = __webpack_require__(4886),
1006    getRawTag = __webpack_require__(5118),
1007    objectToString = __webpack_require__(7070);
1008
1009/** `Object#toString` result references. */
1010var nullTag = '[object Null]',
1011    undefinedTag = '[object Undefined]';
1012
1013/** Built-in value references. */
1014var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
1015
1016/**
1017 * The base implementation of `getTag` without fallbacks for buggy environments.
1018 *
1019 * @private
1020 * @param {*} value The value to query.
1021 * @returns {string} Returns the `toStringTag`.
1022 */
1023function baseGetTag(value) {
1024  if (value == null) {
1025    return value === undefined ? undefinedTag : nullTag;
1026  }
1027  return (symToStringTag && symToStringTag in Object(value))
1028    ? getRawTag(value)
1029    : objectToString(value);
1030}
1031
1032module.exports = baseGetTag;
1033
1034
1035}),
1036"6993": (function (module) {
1037/**
1038 * The base implementation of `_.hasIn` without support for deep paths.
1039 *
1040 * @private
1041 * @param {Object} [object] The object to query.
1042 * @param {Array|string} key The key to check.
1043 * @returns {boolean} Returns `true` if `key` exists, else `false`.
1044 */
1045function baseHasIn(object, key) {
1046  return object != null && key in Object(object);
1047}
1048
1049module.exports = baseHasIn;
1050
1051
1052}),
1053"841": (function (module, __unused_webpack_exports, __webpack_require__) {
1054var baseGetTag = __webpack_require__(3757),
1055    isObjectLike = __webpack_require__(7013);
1056
1057/** `Object#toString` result references. */
1058var argsTag = '[object Arguments]';
1059
1060/**
1061 * The base implementation of `_.isArguments`.
1062 *
1063 * @private
1064 * @param {*} value The value to check.
1065 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
1066 */
1067function baseIsArguments(value) {
1068  return isObjectLike(value) && baseGetTag(value) == argsTag;
1069}
1070
1071module.exports = baseIsArguments;
1072
1073
1074}),
1075"5447": (function (module, __unused_webpack_exports, __webpack_require__) {
1076var baseIsEqualDeep = __webpack_require__(906),
1077    isObjectLike = __webpack_require__(7013);
1078
1079/**
1080 * The base implementation of `_.isEqual` which supports partial comparisons
1081 * and tracks traversed objects.
1082 *
1083 * @private
1084 * @param {*} value The value to compare.
1085 * @param {*} other The other value to compare.
1086 * @param {boolean} bitmask The bitmask flags.
1087 *  1 - Unordered comparison
1088 *  2 - Partial comparison
1089 * @param {Function} [customizer] The function to customize comparisons.
1090 * @param {Object} [stack] Tracks traversed `value` and `other` objects.
1091 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
1092 */
1093function baseIsEqual(value, other, bitmask, customizer, stack) {
1094  if (value === other) {
1095    return true;
1096  }
1097  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
1098    return value !== value && other !== other;
1099  }
1100  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
1101}
1102
1103module.exports = baseIsEqual;
1104
1105
1106}),
1107"906": (function (module, __unused_webpack_exports, __webpack_require__) {
1108var Stack = __webpack_require__(1902),
1109    equalArrays = __webpack_require__(4476),
1110    equalByTag = __webpack_require__(9027),
1111    equalObjects = __webpack_require__(8714),
1112    getTag = __webpack_require__(9937),
1113    isArray = __webpack_require__(6377),
1114    isBuffer = __webpack_require__(6018),
1115    isTypedArray = __webpack_require__(8586);
1116
1117/** Used to compose bitmasks for value comparisons. */
1118var COMPARE_PARTIAL_FLAG = 1;
1119
1120/** `Object#toString` result references. */
1121var argsTag = '[object Arguments]',
1122    arrayTag = '[object Array]',
1123    objectTag = '[object Object]';
1124
1125/** Used for built-in method references. */
1126var objectProto = Object.prototype;
1127
1128/** Used to check objects for own properties. */
1129var hasOwnProperty = objectProto.hasOwnProperty;
1130
1131/**
1132 * A specialized version of `baseIsEqual` for arrays and objects which performs
1133 * deep comparisons and tracks traversed objects enabling objects with circular
1134 * references to be compared.
1135 *
1136 * @private
1137 * @param {Object} object The object to compare.
1138 * @param {Object} other The other object to compare.
1139 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1140 * @param {Function} customizer The function to customize comparisons.
1141 * @param {Function} equalFunc The function to determine equivalents of values.
1142 * @param {Object} [stack] Tracks traversed `object` and `other` objects.
1143 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1144 */
1145function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
1146  var objIsArr = isArray(object),
1147      othIsArr = isArray(other),
1148      objTag = objIsArr ? arrayTag : getTag(object),
1149      othTag = othIsArr ? arrayTag : getTag(other);
1150
1151  objTag = objTag == argsTag ? objectTag : objTag;
1152  othTag = othTag == argsTag ? objectTag : othTag;
1153
1154  var objIsObj = objTag == objectTag,
1155      othIsObj = othTag == objectTag,
1156      isSameTag = objTag == othTag;
1157
1158  if (isSameTag && isBuffer(object)) {
1159    if (!isBuffer(other)) {
1160      return false;
1161    }
1162    objIsArr = true;
1163    objIsObj = false;
1164  }
1165  if (isSameTag && !objIsObj) {
1166    stack || (stack = new Stack);
1167    return (objIsArr || isTypedArray(object))
1168      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
1169      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
1170  }
1171  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
1172    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
1173        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
1174
1175    if (objIsWrapped || othIsWrapped) {
1176      var objUnwrapped = objIsWrapped ? object.value() : object,
1177          othUnwrapped = othIsWrapped ? other.value() : other;
1178
1179      stack || (stack = new Stack);
1180      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
1181    }
1182  }
1183  if (!isSameTag) {
1184    return false;
1185  }
1186  stack || (stack = new Stack);
1187  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
1188}
1189
1190module.exports = baseIsEqualDeep;
1191
1192
1193}),
1194"7293": (function (module, __unused_webpack_exports, __webpack_require__) {
1195var Stack = __webpack_require__(1902),
1196    baseIsEqual = __webpack_require__(5447);
1197
1198/** Used to compose bitmasks for value comparisons. */
1199var COMPARE_PARTIAL_FLAG = 1,
1200    COMPARE_UNORDERED_FLAG = 2;
1201
1202/**
1203 * The base implementation of `_.isMatch` without support for iteratee shorthands.
1204 *
1205 * @private
1206 * @param {Object} object The object to inspect.
1207 * @param {Object} source The object of property values to match.
1208 * @param {Array} matchData The property names, values, and compare flags to match.
1209 * @param {Function} [customizer] The function to customize comparisons.
1210 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
1211 */
1212function baseIsMatch(object, source, matchData, customizer) {
1213  var index = matchData.length,
1214      length = index,
1215      noCustomizer = !customizer;
1216
1217  if (object == null) {
1218    return !length;
1219  }
1220  object = Object(object);
1221  while (index--) {
1222    var data = matchData[index];
1223    if ((noCustomizer && data[2])
1224          ? data[1] !== object[data[0]]
1225          : !(data[0] in object)
1226        ) {
1227      return false;
vendor: 4,122 bytes, lines 1228-1357
1228    }
1229  }
1230  while (++index < length) {
1231    data = matchData[index];
1232    var key = data[0],
1233        objValue = object[key],
1234        srcValue = data[1];
1235
1236    if (noCustomizer && data[2]) {
1237      if (objValue === undefined && !(key in object)) {
1238        return false;
1239      }
1240    } else {
1241      var stack = new Stack;
1242      if (customizer) {
1243        var result = customizer(objValue, srcValue, key, object, source, stack);
1244      }
1245      if (!(result === undefined
1246            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
1247            : result
1248          )) {
1249        return false;
1250      }
1251    }
1252  }
1253  return true;
1254}
1255
1256module.exports = baseIsMatch;
1257
1258
1259}),
1260"692": (function (module, __unused_webpack_exports, __webpack_require__) {
1261var isFunction = __webpack_require__(6644),
1262    isMasked = __webpack_require__(3417),
1263    isObject = __webpack_require__(8532),
1264    toSource = __webpack_require__(1473);
1265
1266/**
1267 * Used to match `RegExp`
1268 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
1269 */
1270var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
1271
1272/** Used to detect host constructors (Safari). */
1273var reIsHostCtor = /^\[object .+?Constructor\]$/;
1274
1275/** Used for built-in method references. */
1276var funcProto = Function.prototype,
1277    objectProto = Object.prototype;
1278
1279/** Used to resolve the decompiled source of functions. */
1280var funcToString = funcProto.toString;
1281
1282/** Used to check objects for own properties. */
1283var hasOwnProperty = objectProto.hasOwnProperty;
1284
1285/** Used to detect if a method is native. */
1286var reIsNative = RegExp('^' +
1287  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
1288  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
1289);
1290
1291/**
1292 * The base implementation of `_.isNative` without bad shim checks.
1293 *
1294 * @private
1295 * @param {*} value The value to check.
1296 * @returns {boolean} Returns `true` if `value` is a native function,
1297 *  else `false`.
1298 */
1299function baseIsNative(value) {
1300  if (!isObject(value) || isMasked(value)) {
1301    return false;
1302  }
1303  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
1304  return pattern.test(toSource(value));
1305}
1306
1307module.exports = baseIsNative;
1308
1309
1310}),
1311"2195": (function (module, __unused_webpack_exports, __webpack_require__) {
1312var baseGetTag = __webpack_require__(3757),
1313    isLength = __webpack_require__(7924),
1314    isObjectLike = __webpack_require__(7013);
1315
1316/** `Object#toString` result references. */
1317var argsTag = '[object Arguments]',
1318    arrayTag = '[object Array]',
1319    boolTag = '[object Boolean]',
1320    dateTag = '[object Date]',
1321    errorTag = '[object Error]',
1322    funcTag = '[object Function]',
1323    mapTag = '[object Map]',
1324    numberTag = '[object Number]',
1325    objectTag = '[object Object]',
1326    regexpTag = '[object RegExp]',
1327    setTag = '[object Set]',
1328    stringTag = '[object String]',
1329    weakMapTag = '[object WeakMap]';
1330
1331var arrayBufferTag = '[object ArrayBuffer]',
1332    dataViewTag = '[object DataView]',
1333    float32Tag = '[object Float32Array]',
1334    float64Tag = '[object Float64Array]',
1335    int8Tag = '[object Int8Array]',
1336    int16Tag = '[object Int16Array]',
1337    int32Tag = '[object Int32Array]',
1338    uint8Tag = '[object Uint8Array]',
1339    uint8ClampedTag = '[object Uint8ClampedArray]',
1340    uint16Tag = '[object Uint16Array]',
1341    uint32Tag = '[object Uint32Array]';
1342
1343/** Used to identify `toStringTag` values of typed arrays. */
1344var typedArrayTags = {};
1345typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
1346typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
1347typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
1348typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
1349typedArrayTags[uint32Tag] = true;
1350typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
1351typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
1352typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
1353typedArrayTags[errorTag] = typedArrayTags[funcTag] =
1354typedArrayTags[mapTag] = typedArrayTags[numberTag] =
1355typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
1356typedArrayTags[setTag] = typedArrayTags[stringTag] =
1357typedArrayTags[weakMapTag] = false;
vendor: 10,353 bytes, lines 1358-1739
1358
1359/**
1360 * The base implementation of `_.isTypedArray` without Node.js optimizations.
1361 *
1362 * @private
1363 * @param {*} value The value to check.
1364 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
1365 */
1366function baseIsTypedArray(value) {
1367  return isObjectLike(value) &&
1368    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
1369}
1370
1371module.exports = baseIsTypedArray;
1372
1373
1374}),
1375"5462": (function (module, __unused_webpack_exports, __webpack_require__) {
1376var baseMatches = __webpack_require__(6358),
1377    baseMatchesProperty = __webpack_require__(4503),
1378    identity = __webpack_require__(1622),
1379    isArray = __webpack_require__(6377),
1380    property = __webpack_require__(8303);
1381
1382/**
1383 * The base implementation of `_.iteratee`.
1384 *
1385 * @private
1386 * @param {*} [value=_.identity] The value to convert to an iteratee.
1387 * @returns {Function} Returns the iteratee.
1388 */
1389function baseIteratee(value) {
1390  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
1391  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
1392  if (typeof value == 'function') {
1393    return value;
1394  }
1395  if (value == null) {
1396    return identity;
1397  }
1398  if (typeof value == 'object') {
1399    return isArray(value)
1400      ? baseMatchesProperty(value[0], value[1])
1401      : baseMatches(value);
1402  }
1403  return property(value);
1404}
1405
1406module.exports = baseIteratee;
1407
1408
1409}),
1410"7407": (function (module, __unused_webpack_exports, __webpack_require__) {
1411var isPrototype = __webpack_require__(8857),
1412    nativeKeys = __webpack_require__(2440);
1413
1414/** Used for built-in method references. */
1415var objectProto = Object.prototype;
1416
1417/** Used to check objects for own properties. */
1418var hasOwnProperty = objectProto.hasOwnProperty;
1419
1420/**
1421 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
1422 *
1423 * @private
1424 * @param {Object} object The object to query.
1425 * @returns {Array} Returns the array of property names.
1426 */
1427function baseKeys(object) {
1428  if (!isPrototype(object)) {
1429    return nativeKeys(object);
1430  }
1431  var result = [];
1432  for (var key in Object(object)) {
1433    if (hasOwnProperty.call(object, key) && key != 'constructor') {
1434      result.push(key);
1435    }
1436  }
1437  return result;
1438}
1439
1440module.exports = baseKeys;
1441
1442
1443}),
1444"9237": (function (module, __unused_webpack_exports, __webpack_require__) {
1445var isObject = __webpack_require__(8532),
1446    isPrototype = __webpack_require__(8857),
1447    nativeKeysIn = __webpack_require__(1308);
1448
1449/** Used for built-in method references. */
1450var objectProto = Object.prototype;
1451
1452/** Used to check objects for own properties. */
1453var hasOwnProperty = objectProto.hasOwnProperty;
1454
1455/**
1456 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
1457 *
1458 * @private
1459 * @param {Object} object The object to query.
1460 * @returns {Array} Returns the array of property names.
1461 */
1462function baseKeysIn(object) {
1463  if (!isObject(object)) {
1464    return nativeKeysIn(object);
1465  }
1466  var isProto = isPrototype(object),
1467      result = [];
1468
1469  for (var key in object) {
1470    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
1471      result.push(key);
1472    }
1473  }
1474  return result;
1475}
1476
1477module.exports = baseKeysIn;
1478
1479
1480}),
1481"4382": (function (module) {
1482/**
1483 * The function whose prototype chain sequence wrappers inherit from.
1484 *
1485 * @private
1486 */
1487function baseLodash() {
1488  // No operation performed.
1489}
1490
1491module.exports = baseLodash;
1492
1493
1494}),
1495"6358": (function (module, __unused_webpack_exports, __webpack_require__) {
1496var baseIsMatch = __webpack_require__(7293),
1497    getMatchData = __webpack_require__(7145),
1498    matchesStrictComparable = __webpack_require__(4167);
1499
1500/**
1501 * The base implementation of `_.matches` which doesn't clone `source`.
1502 *
1503 * @private
1504 * @param {Object} source The object of property values to match.
1505 * @returns {Function} Returns the new spec function.
1506 */
1507function baseMatches(source) {
1508  var matchData = getMatchData(source);
1509  if (matchData.length == 1 && matchData[0][2]) {
1510    return matchesStrictComparable(matchData[0][0], matchData[0][1]);
1511  }
1512  return function(object) {
1513    return object === source || baseIsMatch(object, source, matchData);
1514  };
1515}
1516
1517module.exports = baseMatches;
1518
1519
1520}),
1521"4503": (function (module, __unused_webpack_exports, __webpack_require__) {
1522var baseIsEqual = __webpack_require__(5447),
1523    get = __webpack_require__(4738),
1524    hasIn = __webpack_require__(9290),
1525    isKey = __webpack_require__(7074),
1526    isStrictComparable = __webpack_require__(1542),
1527    matchesStrictComparable = __webpack_require__(4167),
1528    toKey = __webpack_require__(8481);
1529
1530/** Used to compose bitmasks for value comparisons. */
1531var COMPARE_PARTIAL_FLAG = 1,
1532    COMPARE_UNORDERED_FLAG = 2;
1533
1534/**
1535 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
1536 *
1537 * @private
1538 * @param {string} path The path of the property to get.
1539 * @param {*} srcValue The value to match.
1540 * @returns {Function} Returns the new spec function.
1541 */
1542function baseMatchesProperty(path, srcValue) {
1543  if (isKey(path) && isStrictComparable(srcValue)) {
1544    return matchesStrictComparable(toKey(path), srcValue);
1545  }
1546  return function(object) {
1547    var objValue = get(object, path);
1548    return (objValue === undefined && objValue === srcValue)
1549      ? hasIn(object, path)
1550      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
1551  };
1552}
1553
1554module.exports = baseMatchesProperty;
1555
1556
1557}),
1558"7100": (function (module, __unused_webpack_exports, __webpack_require__) {
1559var baseGet = __webpack_require__(1957),
1560    baseSet = __webpack_require__(5495),
1561    castPath = __webpack_require__(3835);
1562
1563/**
1564 * The base implementation of  `_.pickBy` without support for iteratee shorthands.
1565 *
1566 * @private
1567 * @param {Object} object The source object.
1568 * @param {string[]} paths The property paths to pick.
1569 * @param {Function} predicate The function invoked per property.
1570 * @returns {Object} Returns the new object.
1571 */
1572function basePickBy(object, paths, predicate) {
1573  var index = -1,
1574      length = paths.length,
1575      result = {};
1576
1577  while (++index < length) {
1578    var path = paths[index],
1579        value = baseGet(object, path);
1580
1581    if (predicate(value, path)) {
1582      baseSet(result, castPath(path, object), value);
1583    }
1584  }
1585  return result;
1586}
1587
1588module.exports = basePickBy;
1589
1590
1591}),
1592"2726": (function (module) {
1593/**
1594 * The base implementation of `_.property` without support for deep paths.
1595 *
1596 * @private
1597 * @param {string} key The key of the property to get.
1598 * @returns {Function} Returns the new accessor function.
1599 */
1600function baseProperty(key) {
1601  return function(object) {
1602    return object == null ? undefined : object[key];
1603  };
1604}
1605
1606module.exports = baseProperty;
1607
1608
1609}),
1610"1374": (function (module, __unused_webpack_exports, __webpack_require__) {
1611var baseGet = __webpack_require__(1957);
1612
1613/**
1614 * A specialized version of `baseProperty` which supports deep paths.
1615 *
1616 * @private
1617 * @param {Array|string} path The path of the property to get.
1618 * @returns {Function} Returns the new accessor function.
1619 */
1620function basePropertyDeep(path) {
1621  return function(object) {
1622    return baseGet(object, path);
1623  };
1624}
1625
1626module.exports = basePropertyDeep;
1627
1628
1629}),
1630"9864": (function (module) {
1631/**
1632 * The base implementation of `_.reduce` and `_.reduceRight`, without support
1633 * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
1634 *
1635 * @private
1636 * @param {Array|Object} collection The collection to iterate over.
1637 * @param {Function} iteratee The function invoked per iteration.
1638 * @param {*} accumulator The initial value.
1639 * @param {boolean} initAccum Specify using the first or last element of
1640 *  `collection` as the initial value.
1641 * @param {Function} eachFunc The function to iterate over `collection`.
1642 * @returns {*} Returns the accumulated value.
1643 */
1644function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
1645  eachFunc(collection, function(value, index, collection) {
1646    accumulator = initAccum
1647      ? (initAccum = false, value)
1648      : iteratee(accumulator, value, index, collection);
1649  });
1650  return accumulator;
1651}
1652
1653module.exports = baseReduce;
1654
1655
1656}),
1657"5495": (function (module, __unused_webpack_exports, __webpack_require__) {
1658var assignValue = __webpack_require__(3615),
1659    castPath = __webpack_require__(3835),
1660    isIndex = __webpack_require__(9251),
1661    isObject = __webpack_require__(8532),
1662    toKey = __webpack_require__(8481);
1663
1664/**
1665 * The base implementation of `_.set`.
1666 *
1667 * @private
1668 * @param {Object} object The object to modify.
1669 * @param {Array|string} path The path of the property to set.
1670 * @param {*} value The value to set.
1671 * @param {Function} [customizer] The function to customize path creation.
1672 * @returns {Object} Returns `object`.
1673 */
1674function baseSet(object, path, value, customizer) {
1675  if (!isObject(object)) {
1676    return object;
1677  }
1678  path = castPath(path, object);
1679
1680  var index = -1,
1681      length = path.length,
1682      lastIndex = length - 1,
1683      nested = object;
1684
1685  while (nested != null && ++index < length) {
1686    var key = toKey(path[index]),
1687        newValue = value;
1688
1689    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
1690      return object;
1691    }
1692
1693    if (index != lastIndex) {
1694      var objValue = nested[key];
1695      newValue = customizer ? customizer(objValue, key, nested) : undefined;
1696      if (newValue === undefined) {
1697        newValue = isObject(objValue)
1698          ? objValue
1699          : (isIndex(path[index + 1]) ? [] : {});
1700      }
1701    }
1702    assignValue(nested, key, newValue);
1703    nested = nested[key];
1704  }
1705  return object;
1706}
1707
1708module.exports = baseSet;
1709
1710
1711}),
1712"2422": (function (module, __unused_webpack_exports, __webpack_require__) {
1713var constant = __webpack_require__(5055),
1714    defineProperty = __webpack_require__(9833),
1715    identity = __webpack_require__(1622);
1716
1717/**
1718 * The base implementation of `setToString` without support for hot loop shorting.
1719 *
1720 * @private
1721 * @param {Function} func The function to modify.
1722 * @param {Function} string The `toString` result.
1723 * @returns {Function} Returns `func`.
1724 */
1725var baseSetToString = !defineProperty ? identity : function(func, string) {
1726  return defineProperty(func, 'toString', {
1727    'configurable': true,
1728    'enumerable': false,
1729    'value': constant(string),
1730    'writable': true
1731  });
1732};
1733
1734module.exports = baseSetToString;
1735
1736
1737}),
1738"1682": (function (module) {
1739/**
1740 * The base implementation of `_.times` without support for iteratee shorthands
1741 * or max array length checks.
1742 *
1743 * @private
1744 * @param {number} n The number of times to invoke `iteratee`.
1745 * @param {Function} iteratee The function invoked per iteration.
1746 * @returns {Array} Returns the array of results.
1747 */
1748function baseTimes(n, iteratee) {
1749  var index = -1,
1750      result = Array(n);
1751
1752  while (++index < n) {
1753    result[index] = iteratee(index);
1754  }
1755  return result;
1756}
1757
1758module.exports = baseTimes;
1759
1760
1761}),
1762"9653": (function (module, __unused_webpack_exports, __webpack_require__) {
1763var Symbol = __webpack_require__(4886),
1764    arrayMap = __webpack_require__(1098),
1765    isArray = __webpack_require__(6377),
1766    isSymbol = __webpack_require__(1359);
1767
1768/** Used as references for various `Number` constants. */
1769var INFINITY = 1 / 0;
1770
1771/** Used to convert symbols to primitives and strings. */
1772var symbolProto = Symbol ? Symbol.prototype : undefined,
1773    symbolToString = symbolProto ? symbolProto.toString : undefined;
1774
1775/**
1776 * The base implementation of `_.toString` which doesn't convert nullish
1777 * values to empty strings.
1778 *
1779 * @private
1780 * @param {*} value The value to process.
1781 * @returns {string} Returns the string.
1782 */
1783function baseToString(value) {
1784  // Exit early for strings to avoid a performance hit in some environments.
1785  if (typeof value == 'string') {
1786    return value;
1787  }
1788  if (isArray(value)) {
1789    // Recursively convert values (susceptible to call stack limits).
1790    return arrayMap(value, baseToString) + '';
1791  }
1792  if (isSymbol(value)) {
1793    return symbolToString ? symbolToString.call(value) : '';
1794  }
1795  var result = (value + '');
1796  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
1797}
1798
1799module.exports = baseToString;
1800
1801
1802}),
1803"1072": (function (module, __unused_webpack_exports, __webpack_require__) {
1804var trimmedEndIndex = __webpack_require__(3230);
1805
1806/** Used to match leading whitespace. */
1807var reTrimStart = /^\s+/;
1808
1809/**
1810 * The base implementation of `_.trim`.
1811 *
1812 * @private
1813 * @param {string} string The string to trim.
1814 * @returns {string} Returns the trimmed string.
1815 */
1816function baseTrim(string) {
1817  return string
1818    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
1819    : string;
1820}
1821
1822module.exports = baseTrim;
1823
1824
1825}),
1826"7509": (function (module) {
1827/**
1828 * The base implementation of `_.unary` without support for storing metadata.
1829 *
1830 * @private
1831 * @param {Function} func The function to cap arguments for.
1832 * @returns {Function} Returns the new capped function.
1833 */
1834function baseUnary(func) {
1835  return function(value) {
1836    return func(value);
1837  };
1838}
1839
1840module.exports = baseUnary;
1841
1842
1843}),
1844"2471": (function (module) {
1845/**
1846 * Checks if a `cache` value for `key` exists.
1847 *
1848 * @private
1849 * @param {Object} cache The cache to query.
1850 * @param {string} key The key of the entry to check.
1851 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
1852 */
1853function cacheHas(cache, key) {
1854  return cache.has(key);
1855}
1856
1857module.exports = cacheHas;
1858
1859
1860}),
1861"8269": (function (module, __unused_webpack_exports, __webpack_require__) {
1862var identity = __webpack_require__(1622);
1863
1864/**
1865 * Casts `value` to `identity` if it's not a function.
1866 *
1867 * @private
1868 * @param {*} value The value to inspect.
1869 * @returns {Function} Returns cast function.
1870 */
1871function castFunction(value) {
1872  return typeof value == 'function' ? value : identity;
1873}
1874
1875module.exports = castFunction;
1876
1877
1878}),
1879"3835": (function (module, __unused_webpack_exports, __webpack_require__) {
1880var isArray = __webpack_require__(6377),
1881    isKey = __webpack_require__(7074),
1882    stringToPath = __webpack_require__(8997),
1883    toString = __webpack_require__(6214);
1884
1885/**
1886 * Casts `value` to a path array if it's not one.
1887 *
1888 * @private
1889 * @param {*} value The value to inspect.
1890 * @param {Object} [object] The object to query keys on.
1891 * @returns {Array} Returns the cast property path array.
1892 */
1893function castPath(value, object) {
1894  if (isArray(value)) {
1895    return value;
1896  }
1897  return isKey(value, object) ? [value] : stringToPath(toString(value));
1898}
1899
1900module.exports = castPath;
1901
1902
1903}),
1904"8606": (function (module) {
1905/**
1906 * Copies the values of `source` to `array`.
1907 *
1908 * @private
1909 * @param {Array} source The array to copy values from.
1910 * @param {Array} [array=[]] The array to copy values to.
1911 * @returns {Array} Returns `array`.
1912 */
1913function copyArray(source, array) {
1914  var index = -1,
1915      length = source.length;
1916
1917  array || (array = Array(length));
1918  while (++index < length) {
1919    array[index] = source[index];
1920  }
1921  return array;
1922}
1923
1924module.exports = copyArray;
1925
1926
1927}),
1928"5772": (function (module, __unused_webpack_exports, __webpack_require__) {
1929var root = __webpack_require__(5238);
1930
1931/** Used to detect overreaching core-js shims. */
vendor: 11,888 bytes, lines 1932-2326
1932var coreJsData = root['__core-js_shared__'];
1933
1934module.exports = coreJsData;
1935
1936
1937}),
1938"2679": (function (module, __unused_webpack_exports, __webpack_require__) {
1939var isArrayLike = __webpack_require__(508);
1940
1941/**
1942 * Creates a `baseEach` or `baseEachRight` function.
1943 *
1944 * @private
1945 * @param {Function} eachFunc The function to iterate over a collection.
1946 * @param {boolean} [fromRight] Specify iterating from right to left.
1947 * @returns {Function} Returns the new base function.
1948 */
1949function createBaseEach(eachFunc, fromRight) {
1950  return function(collection, iteratee) {
1951    if (collection == null) {
1952      return collection;
1953    }
1954    if (!isArrayLike(collection)) {
1955      return eachFunc(collection, iteratee);
1956    }
1957    var length = collection.length,
1958        index = fromRight ? length : -1,
1959        iterable = Object(collection);
1960
1961    while ((fromRight ? index-- : ++index < length)) {
1962      if (iteratee(iterable[index], index, iterable) === false) {
1963        break;
1964      }
1965    }
1966    return collection;
1967  };
1968}
1969
1970module.exports = createBaseEach;
1971
1972
1973}),
1974"132": (function (module) {
1975/**
1976 * Creates a base function for methods like `_.forIn` and `_.forOwn`.
1977 *
1978 * @private
1979 * @param {boolean} [fromRight] Specify iterating from right to left.
1980 * @returns {Function} Returns the new base function.
1981 */
1982function createBaseFor(fromRight) {
1983  return function(object, iteratee, keysFunc) {
1984    var index = -1,
1985        iterable = Object(object),
1986        props = keysFunc(object),
1987        length = props.length;
1988
1989    while (length--) {
1990      var key = props[fromRight ? length : ++index];
1991      if (iteratee(iterable[key], key, iterable) === false) {
1992        break;
1993      }
1994    }
1995    return object;
1996  };
1997}
1998
1999module.exports = createBaseFor;
2000
2001
2002}),
2003"727": (function (module, __unused_webpack_exports, __webpack_require__) {
2004var baseIteratee = __webpack_require__(5462),
2005    isArrayLike = __webpack_require__(508),
2006    keys = __webpack_require__(7361);
2007
2008/**
2009 * Creates a `_.find` or `_.findLast` function.
2010 *
2011 * @private
2012 * @param {Function} findIndexFunc The function to find the collection index.
2013 * @returns {Function} Returns the new find function.
2014 */
2015function createFind(findIndexFunc) {
2016  return function(collection, predicate, fromIndex) {
2017    var iterable = Object(collection);
2018    if (!isArrayLike(collection)) {
2019      var iteratee = baseIteratee(predicate, 3);
2020      collection = keys(collection);
2021      predicate = function(key) { return iteratee(iterable[key], key, iterable); };
2022    }
2023    var index = findIndexFunc(collection, predicate, fromIndex);
2024    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
2025  };
2026}
2027
2028module.exports = createFind;
2029
2030
2031}),
2032"914": (function (module, __unused_webpack_exports, __webpack_require__) {
2033var LodashWrapper = __webpack_require__(9675),
2034    flatRest = __webpack_require__(4502),
2035    getData = __webpack_require__(6007),
2036    getFuncName = __webpack_require__(195),
2037    isArray = __webpack_require__(6377),
2038    isLaziable = __webpack_require__(6252);
2039
2040/** Error message constants. */
2041var FUNC_ERROR_TEXT = 'Expected a function';
2042
2043/** Used to compose bitmasks for function metadata. */
2044var WRAP_CURRY_FLAG = 8,
2045    WRAP_PARTIAL_FLAG = 32,
2046    WRAP_ARY_FLAG = 128,
2047    WRAP_REARG_FLAG = 256;
2048
2049/**
2050 * Creates a `_.flow` or `_.flowRight` function.
2051 *
2052 * @private
2053 * @param {boolean} [fromRight] Specify iterating from right to left.
2054 * @returns {Function} Returns the new flow function.
2055 */
2056function createFlow(fromRight) {
2057  return flatRest(function(funcs) {
2058    var length = funcs.length,
2059        index = length,
2060        prereq = LodashWrapper.prototype.thru;
2061
2062    if (fromRight) {
2063      funcs.reverse();
2064    }
2065    while (index--) {
2066      var func = funcs[index];
2067      if (typeof func != 'function') {
2068        throw new TypeError(FUNC_ERROR_TEXT);
2069      }
2070      if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
2071        var wrapper = new LodashWrapper([], true);
2072      }
2073    }
2074    index = wrapper ? index : length;
2075    while (++index < length) {
2076      func = funcs[index];
2077
2078      var funcName = getFuncName(func),
2079          data = funcName == 'wrapper' ? getData(func) : undefined;
2080
2081      if (data && isLaziable(data[0]) &&
2082            data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
2083            !data[4].length && data[9] == 1
2084          ) {
2085        wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
2086      } else {
2087        wrapper = (func.length == 1 && isLaziable(func))
2088          ? wrapper[funcName]()
2089          : wrapper.thru(func);
2090      }
2091    }
2092    return function() {
2093      var args = arguments,
2094          value = args[0];
2095
2096      if (wrapper && args.length == 1 && isArray(value)) {
2097        return wrapper.plant(value).value();
2098      }
2099      var index = 0,
2100          result = length ? funcs[index].apply(this, args) : value;
2101
2102      while (++index < length) {
2103        result = funcs[index].call(this, result);
2104      }
2105      return result;
2106    };
2107  });
2108}
2109
2110module.exports = createFlow;
2111
2112
2113}),
2114"9833": (function (module, __unused_webpack_exports, __webpack_require__) {
2115var getNative = __webpack_require__(440);
2116
2117var defineProperty = (function() {
2118  try {
2119    var func = getNative(Object, 'defineProperty');
2120    func({}, '', {});
2121    return func;
2122  } catch (e) {}
2123}());
2124
2125module.exports = defineProperty;
2126
2127
2128}),
2129"4476": (function (module, __unused_webpack_exports, __webpack_require__) {
2130var SetCache = __webpack_require__(3290),
2131    arraySome = __webpack_require__(3955),
2132    cacheHas = __webpack_require__(2471);
2133
2134/** Used to compose bitmasks for value comparisons. */
2135var COMPARE_PARTIAL_FLAG = 1,
2136    COMPARE_UNORDERED_FLAG = 2;
2137
2138/**
2139 * A specialized version of `baseIsEqualDeep` for arrays with support for
2140 * partial deep comparisons.
2141 *
2142 * @private
2143 * @param {Array} array The array to compare.
2144 * @param {Array} other The other array to compare.
2145 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
2146 * @param {Function} customizer The function to customize comparisons.
2147 * @param {Function} equalFunc The function to determine equivalents of values.
2148 * @param {Object} stack Tracks traversed `array` and `other` objects.
2149 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
2150 */
2151function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
2152  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
2153      arrLength = array.length,
2154      othLength = other.length;
2155
2156  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
2157    return false;
2158  }
2159  // Check that cyclic values are equal.
2160  var arrStacked = stack.get(array);
2161  var othStacked = stack.get(other);
2162  if (arrStacked && othStacked) {
2163    return arrStacked == other && othStacked == array;
2164  }
2165  var index = -1,
2166      result = true,
2167      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
2168
2169  stack.set(array, other);
2170  stack.set(other, array);
2171
2172  // Ignore non-index properties.
2173  while (++index < arrLength) {
2174    var arrValue = array[index],
2175        othValue = other[index];
2176
2177    if (customizer) {
2178      var compared = isPartial
2179        ? customizer(othValue, arrValue, index, other, array, stack)
2180        : customizer(arrValue, othValue, index, array, other, stack);
2181    }
2182    if (compared !== undefined) {
2183      if (compared) {
2184        continue;
2185      }
2186      result = false;
2187      break;
2188    }
2189    // Recursively compare arrays (susceptible to call stack limits).
2190    if (seen) {
2191      if (!arraySome(other, function(othValue, othIndex) {
2192            if (!cacheHas(seen, othIndex) &&
2193                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
2194              return seen.push(othIndex);
2195            }
2196          })) {
2197        result = false;
2198        break;
2199      }
2200    } else if (!(
2201          arrValue === othValue ||
2202            equalFunc(arrValue, othValue, bitmask, customizer, stack)
2203        )) {
2204      result = false;
2205      break;
2206    }
2207  }
2208  stack['delete'](array);
2209  stack['delete'](other);
2210  return result;
2211}
2212
2213module.exports = equalArrays;
2214
2215
2216}),
2217"9027": (function (module, __unused_webpack_exports, __webpack_require__) {
2218var Symbol = __webpack_require__(4886),
2219    Uint8Array = __webpack_require__(8965),
2220    eq = __webpack_require__(4071),
2221    equalArrays = __webpack_require__(4476),
2222    mapToArray = __webpack_require__(7170),
2223    setToArray = __webpack_require__(2779);
2224
2225/** Used to compose bitmasks for value comparisons. */
2226var COMPARE_PARTIAL_FLAG = 1,
2227    COMPARE_UNORDERED_FLAG = 2;
2228
2229/** `Object#toString` result references. */
2230var boolTag = '[object Boolean]',
2231    dateTag = '[object Date]',
2232    errorTag = '[object Error]',
2233    mapTag = '[object Map]',
2234    numberTag = '[object Number]',
2235    regexpTag = '[object RegExp]',
2236    setTag = '[object Set]',
2237    stringTag = '[object String]',
2238    symbolTag = '[object Symbol]';
2239
2240var arrayBufferTag = '[object ArrayBuffer]',
2241    dataViewTag = '[object DataView]';
2242
2243/** Used to convert symbols to primitives and strings. */
2244var symbolProto = Symbol ? Symbol.prototype : undefined,
2245    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
2246
2247/**
2248 * A specialized version of `baseIsEqualDeep` for comparing objects of
2249 * the same `toStringTag`.
2250 *
2251 * **Note:** This function only supports comparing values with tags of
2252 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
2253 *
2254 * @private
2255 * @param {Object} object The object to compare.
2256 * @param {Object} other The other object to compare.
2257 * @param {string} tag The `toStringTag` of the objects to compare.
2258 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
2259 * @param {Function} customizer The function to customize comparisons.
2260 * @param {Function} equalFunc The function to determine equivalents of values.
2261 * @param {Object} stack Tracks traversed `object` and `other` objects.
2262 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
2263 */
2264function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
2265  switch (tag) {
2266    case dataViewTag:
2267      if ((object.byteLength != other.byteLength) ||
2268          (object.byteOffset != other.byteOffset)) {
2269        return false;
2270      }
2271      object = object.buffer;
2272      other = other.buffer;
2273
2274    case arrayBufferTag:
2275      if ((object.byteLength != other.byteLength) ||
2276          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
2277        return false;
2278      }
2279      return true;
2280
2281    case boolTag:
2282    case dateTag:
2283    case numberTag:
2284      // Coerce booleans to `1` or `0` and dates to milliseconds.
2285      // Invalid dates are coerced to `NaN`.
2286      return eq(+object, +other);
2287
2288    case errorTag:
2289      return object.name == other.name && object.message == other.message;
2290
2291    case regexpTag:
2292    case stringTag:
2293      // Coerce regexes to strings and treat strings, primitives and objects,
2294      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
2295      // for more details.
2296      return object == (other + '');
2297
2298    case mapTag:
2299      var convert = mapToArray;
2300
2301    case setTag:
2302      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
2303      convert || (convert = setToArray);
2304
2305      if (object.size != other.size && !isPartial) {
2306        return false;
2307      }
2308      // Assume cyclic values are equal.
2309      var stacked = stack.get(object);
2310      if (stacked) {
2311        return stacked == other;
2312      }
2313      bitmask |= COMPARE_UNORDERED_FLAG;
2314
2315      // Recursively compare objects (susceptible to call stack limits).
2316      stack.set(object, other);
2317      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
2318      stack['delete'](object);
2319      return result;
2320
2321    case symbolTag:
2322      if (symbolValueOf) {
2323        return symbolValueOf.call(object) == symbolValueOf.call(other);
2324      }
2325  }
2326  return false;
vendor: 2,453 bytes, lines 2327-2401
2327}
2328
2329module.exports = equalByTag;
2330
2331
2332}),
2333"8714": (function (module, __unused_webpack_exports, __webpack_require__) {
2334var getAllKeys = __webpack_require__(3948);
2335
2336/** Used to compose bitmasks for value comparisons. */
2337var COMPARE_PARTIAL_FLAG = 1;
2338
2339/** Used for built-in method references. */
2340var objectProto = Object.prototype;
2341
2342/** Used to check objects for own properties. */
2343var hasOwnProperty = objectProto.hasOwnProperty;
2344
2345/**
2346 * A specialized version of `baseIsEqualDeep` for objects with support for
2347 * partial deep comparisons.
2348 *
2349 * @private
2350 * @param {Object} object The object to compare.
2351 * @param {Object} other The other object to compare.
2352 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
2353 * @param {Function} customizer The function to customize comparisons.
2354 * @param {Function} equalFunc The function to determine equivalents of values.
2355 * @param {Object} stack Tracks traversed `object` and `other` objects.
2356 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
2357 */
2358function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
2359  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
2360      objProps = getAllKeys(object),
2361      objLength = objProps.length,
2362      othProps = getAllKeys(other),
2363      othLength = othProps.length;
2364
2365  if (objLength != othLength && !isPartial) {
2366    return false;
2367  }
2368  var index = objLength;
2369  while (index--) {
2370    var key = objProps[index];
2371    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
2372      return false;
2373    }
2374  }
2375  // Check that cyclic values are equal.
2376  var objStacked = stack.get(object);
2377  var othStacked = stack.get(other);
2378  if (objStacked && othStacked) {
2379    return objStacked == other && othStacked == object;
2380  }
2381  var result = true;
2382  stack.set(object, other);
2383  stack.set(other, object);
2384
2385  var skipCtor = isPartial;
2386  while (++index < objLength) {
2387    key = objProps[index];
2388    var objValue = object[key],
2389        othValue = other[key];
2390
2391    if (customizer) {
2392      var compared = isPartial
2393        ? customizer(othValue, objValue, key, other, object, stack)
2394        : customizer(objValue, othValue, key, object, other, stack);
2395    }
2396    // Recursively compare objects (susceptible to call stack limits).
2397    if (!(compared === undefined
2398          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
2399          : compared
2400        )) {
2401      result = false;
vendor: 4,224 bytes, lines 2402-2562
2402      break;
2403    }
2404    skipCtor || (skipCtor = key == 'constructor');
2405  }
2406  if (result && !skipCtor) {
2407    var objCtor = object.constructor,
2408        othCtor = other.constructor;
2409
2410    // Non `Object` object instances with different constructors are not equal.
2411    if (objCtor != othCtor &&
2412        ('constructor' in object && 'constructor' in other) &&
2413        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
2414          typeof othCtor == 'function' && othCtor instanceof othCtor)) {
2415      result = false;
2416    }
2417  }
2418  stack['delete'](object);
2419  stack['delete'](other);
2420  return result;
2421}
2422
2423module.exports = equalObjects;
2424
2425
2426}),
2427"4502": (function (module, __unused_webpack_exports, __webpack_require__) {
2428var flatten = __webpack_require__(6380),
2429    overRest = __webpack_require__(6813),
2430    setToString = __webpack_require__(2413);
2431
2432/**
2433 * A specialized version of `baseRest` which flattens the rest array.
2434 *
2435 * @private
2436 * @param {Function} func The function to apply a rest parameter to.
2437 * @returns {Function} Returns the new function.
2438 */
2439function flatRest(func) {
2440  return setToString(overRest(func, undefined, flatten), func + '');
2441}
2442
2443module.exports = flatRest;
2444
2445
2446}),
2447"2593": (function (module, __unused_webpack_exports, __webpack_require__) {
2448/** Detect free variable `global` from Node.js. */
2449var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;
2450
2451module.exports = freeGlobal;
2452
2453
2454}),
2455"3948": (function (module, __unused_webpack_exports, __webpack_require__) {
2456var baseGetAllKeys = __webpack_require__(7743),
2457    getSymbols = __webpack_require__(6230),
2458    keys = __webpack_require__(7361);
2459
2460/**
2461 * Creates an array of own enumerable property names and symbols of `object`.
2462 *
2463 * @private
2464 * @param {Object} object The object to query.
2465 * @returns {Array} Returns the array of property names and symbols.
2466 */
2467function getAllKeys(object) {
2468  return baseGetAllKeys(object, keys, getSymbols);
2469}
2470
2471module.exports = getAllKeys;
2472
2473
2474}),
2475"9254": (function (module, __unused_webpack_exports, __webpack_require__) {
2476var baseGetAllKeys = __webpack_require__(7743),
2477    getSymbolsIn = __webpack_require__(2992),
2478    keysIn = __webpack_require__(3747);
2479
2480/**
2481 * Creates an array of own and inherited enumerable property names and
2482 * symbols of `object`.
2483 *
2484 * @private
2485 * @param {Object} object The object to query.
2486 * @returns {Array} Returns the array of property names and symbols.
2487 */
2488function getAllKeysIn(object) {
2489  return baseGetAllKeys(object, keysIn, getSymbolsIn);
2490}
2491
2492module.exports = getAllKeysIn;
2493
2494
2495}),
2496"6007": (function (module, __unused_webpack_exports, __webpack_require__) {
2497var metaMap = __webpack_require__(900),
2498    noop = __webpack_require__(6032);
2499
2500/**
2501 * Gets metadata for `func`.
2502 *
2503 * @private
2504 * @param {Function} func The function to query.
2505 * @returns {*} Returns the metadata for `func`.
2506 */
2507var getData = !metaMap ? noop : function(func) {
2508  return metaMap.get(func);
2509};
2510
2511module.exports = getData;
2512
2513
2514}),
2515"195": (function (module, __unused_webpack_exports, __webpack_require__) {
2516var realNames = __webpack_require__(8564);
2517
2518/** Used for built-in method references. */
2519var objectProto = Object.prototype;
2520
2521/** Used to check objects for own properties. */
2522var hasOwnProperty = objectProto.hasOwnProperty;
2523
2524/**
2525 * Gets the name of `func`.
2526 *
2527 * @private
2528 * @param {Function} func The function to query.
2529 * @returns {string} Returns the function name.
2530 */
2531function getFuncName(func) {
2532  var result = (func.name + ''),
2533      array = realNames[result],
2534      length = hasOwnProperty.call(realNames, result) ? array.length : 0;
2535
2536  while (length--) {
2537    var data = array[length],
2538        otherFunc = data.func;
2539    if (otherFunc == null || otherFunc == func) {
2540      return data.name;
2541    }
2542  }
2543  return result;
2544}
2545
2546module.exports = getFuncName;
2547
2548
2549}),
2550"1143": (function (module, __unused_webpack_exports, __webpack_require__) {
2551var isKeyable = __webpack_require__(6669);
2552
2553/**
2554 * Gets the data for `map`.
2555 *
2556 * @private
2557 * @param {Object} map The map to query.
2558 * @param {string} key The reference key.
2559 * @returns {*} Returns the map data.
2560 */
2561function getMapData(map, key) {
2562  var data = map.__data__;
vendor: 4,501 bytes, lines 2563-2733
2563  return isKeyable(key)
2564    ? data[typeof key == 'string' ? 'string' : 'hash']
2565    : data.map;
2566}
2567
2568module.exports = getMapData;
2569
2570
2571}),
2572"7145": (function (module, __unused_webpack_exports, __webpack_require__) {
2573var isStrictComparable = __webpack_require__(1542),
2574    keys = __webpack_require__(7361);
2575
2576/**
2577 * Gets the property names, values, and compare flags of `object`.
2578 *
2579 * @private
2580 * @param {Object} object The object to query.
2581 * @returns {Array} Returns the match data of `object`.
2582 */
2583function getMatchData(object) {
2584  var result = keys(object),
2585      length = result.length;
2586
2587  while (length--) {
2588    var key = result[length],
2589        value = object[key];
2590
2591    result[length] = [key, value, isStrictComparable(value)];
2592  }
2593  return result;
2594}
2595
2596module.exports = getMatchData;
2597
2598
2599}),
2600"440": (function (module, __unused_webpack_exports, __webpack_require__) {
2601var baseIsNative = __webpack_require__(692),
2602    getValue = __webpack_require__(8974);
2603
2604/**
2605 * Gets the native function at `key` of `object`.
2606 *
2607 * @private
2608 * @param {Object} object The object to query.
2609 * @param {string} key The key of the method to get.
2610 * @returns {*} Returns the function if it's native, else `undefined`.
2611 */
2612function getNative(object, key) {
2613  var value = getValue(object, key);
2614  return baseIsNative(value) ? value : undefined;
2615}
2616
2617module.exports = getNative;
2618
2619
2620}),
2621"6095": (function (module, __unused_webpack_exports, __webpack_require__) {
2622var overArg = __webpack_require__(6512);
2623
2624/** Built-in value references. */
2625var getPrototype = overArg(Object.getPrototypeOf, Object);
2626
2627module.exports = getPrototype;
2628
2629
2630}),
2631"5118": (function (module, __unused_webpack_exports, __webpack_require__) {
2632var Symbol = __webpack_require__(4886);
2633
2634/** Used for built-in method references. */
2635var objectProto = Object.prototype;
2636
2637/** Used to check objects for own properties. */
2638var hasOwnProperty = objectProto.hasOwnProperty;
2639
2640/**
2641 * Used to resolve the
2642 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
2643 * of values.
2644 */
2645var nativeObjectToString = objectProto.toString;
2646
2647/** Built-in value references. */
2648var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
2649
2650/**
2651 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
2652 *
2653 * @private
2654 * @param {*} value The value to query.
2655 * @returns {string} Returns the raw `toStringTag`.
2656 */
2657function getRawTag(value) {
2658  var isOwn = hasOwnProperty.call(value, symToStringTag),
2659      tag = value[symToStringTag];
2660
2661  try {
2662    value[symToStringTag] = undefined;
2663    var unmasked = true;
2664  } catch (e) {}
2665
2666  var result = nativeObjectToString.call(value);
2667  if (unmasked) {
2668    if (isOwn) {
2669      value[symToStringTag] = tag;
2670    } else {
2671      delete value[symToStringTag];
2672    }
2673  }
2674  return result;
2675}
2676
2677module.exports = getRawTag;
2678
2679
2680}),
2681"6230": (function (module, __unused_webpack_exports, __webpack_require__) {
2682var arrayFilter = __webpack_require__(2654),
2683    stubArray = __webpack_require__(1036);
2684
2685/** Used for built-in method references. */
2686var objectProto = Object.prototype;
2687
2688/** Built-in value references. */
2689var propertyIsEnumerable = objectProto.propertyIsEnumerable;
2690
2691/* Built-in method references for those with the same name as other `lodash` methods. */
2692var nativeGetSymbols = Object.getOwnPropertySymbols;
2693
2694/**
2695 * Creates an array of the own enumerable symbols of `object`.
2696 *
2697 * @private
2698 * @param {Object} object The object to query.
2699 * @returns {Array} Returns the array of symbols.
2700 */
2701var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
2702  if (object == null) {
2703    return [];
2704  }
2705  object = Object(object);
2706  return arrayFilter(nativeGetSymbols(object), function(symbol) {
2707    return propertyIsEnumerable.call(object, symbol);
2708  });
2709};
2710
2711module.exports = getSymbols;
2712
2713
2714}),
2715"2992": (function (module, __unused_webpack_exports, __webpack_require__) {
2716var arrayPush = __webpack_require__(5741),
2717    getPrototype = __webpack_require__(6095),
2718    getSymbols = __webpack_require__(6230),
2719    stubArray = __webpack_require__(1036);
2720
2721/* Built-in method references for those with the same name as other `lodash` methods. */
2722var nativeGetSymbols = Object.getOwnPropertySymbols;
2723
2724/**
2725 * Creates an array of the own and inherited enumerable symbols of `object`.
2726 *
2727 * @private
2728 * @param {Object} object The object to query.
2729 * @returns {Array} Returns the array of symbols.
2730 */
2731var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
2732  var result = [];
2733  while (object) {
vendor: 3,211 bytes, lines 2734-2845
2734    arrayPush(result, getSymbols(object));
2735    object = getPrototype(object);
2736  }
2737  return result;
2738};
2739
2740module.exports = getSymbolsIn;
2741
2742
2743}),
2744"9937": (function (module, __unused_webpack_exports, __webpack_require__) {
2745var DataView = __webpack_require__(8172),
2746    Map = __webpack_require__(9036),
2747    Promise = __webpack_require__(44),
2748    Set = __webpack_require__(6656),
2749    WeakMap = __webpack_require__(3283),
2750    baseGetTag = __webpack_require__(3757),
2751    toSource = __webpack_require__(1473);
2752
2753/** `Object#toString` result references. */
2754var mapTag = '[object Map]',
2755    objectTag = '[object Object]',
2756    promiseTag = '[object Promise]',
2757    setTag = '[object Set]',
2758    weakMapTag = '[object WeakMap]';
2759
2760var dataViewTag = '[object DataView]';
2761
2762/** Used to detect maps, sets, and weakmaps. */
2763var dataViewCtorString = toSource(DataView),
2764    mapCtorString = toSource(Map),
2765    promiseCtorString = toSource(Promise),
2766    setCtorString = toSource(Set),
2767    weakMapCtorString = toSource(WeakMap);
2768
2769/**
2770 * Gets the `toStringTag` of `value`.
2771 *
2772 * @private
2773 * @param {*} value The value to query.
2774 * @returns {string} Returns the `toStringTag`.
2775 */
2776var getTag = baseGetTag;
2777
2778// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
2779if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
2780    (Map && getTag(new Map) != mapTag) ||
2781    (Promise && getTag(Promise.resolve()) != promiseTag) ||
2782    (Set && getTag(new Set) != setTag) ||
2783    (WeakMap && getTag(new WeakMap) != weakMapTag)) {
2784  getTag = function(value) {
2785    var result = baseGetTag(value),
2786        Ctor = result == objectTag ? value.constructor : undefined,
2787        ctorString = Ctor ? toSource(Ctor) : '';
2788
2789    if (ctorString) {
2790      switch (ctorString) {
2791        case dataViewCtorString: return dataViewTag;
2792        case mapCtorString: return mapTag;
2793        case promiseCtorString: return promiseTag;
2794        case setCtorString: return setTag;
2795        case weakMapCtorString: return weakMapTag;
2796      }
2797    }
2798    return result;
2799  };
2800}
2801
2802module.exports = getTag;
2803
2804
2805}),
2806"8974": (function (module) {
2807/**
2808 * Gets the value at `key` of `object`.
2809 *
2810 * @private
2811 * @param {Object} [object] The object to query.
2812 * @param {string} key The key of the property to get.
2813 * @returns {*} Returns the property value.
2814 */
2815function getValue(object, key) {
2816  return object == null ? undefined : object[key];
2817}
2818
2819module.exports = getValue;
2820
2821
2822}),
2823"7635": (function (module, __unused_webpack_exports, __webpack_require__) {
2824var castPath = __webpack_require__(3835),
2825    isArguments = __webpack_require__(9732),
2826    isArray = __webpack_require__(6377),
2827    isIndex = __webpack_require__(9251),
2828    isLength = __webpack_require__(7924),
2829    toKey = __webpack_require__(8481);
2830
2831/**
2832 * Checks if `path` exists on `object`.
2833 *
2834 * @private
2835 * @param {Object} object The object to query.
2836 * @param {Array|string} path The path to check.
2837 * @param {Function} hasFunc The function to check properties.
2838 * @returns {boolean} Returns `true` if `path` exists, else `false`.
2839 */
2840function hasPath(object, path, hasFunc) {
2841  path = castPath(path, object);
2842
2843  var index = -1,
2844      length = path.length,
2845      result = false;
vendor: 6,648 bytes, lines 2846-3095
2846
2847  while (++index < length) {
2848    var key = toKey(path[index]);
2849    if (!(result = object != null && hasFunc(object, key))) {
2850      break;
2851    }
2852    object = object[key];
2853  }
2854  if (result || ++index != length) {
2855    return result;
2856  }
2857  length = object == null ? 0 : object.length;
2858  return !!length && isLength(length) && isIndex(key, length) &&
2859    (isArray(object) || isArguments(object));
2860}
2861
2862module.exports = hasPath;
2863
2864
2865}),
2866"9520": (function (module) {
2867/** Used to compose unicode character classes. */
2868var rsAstralRange = '\\ud800-\\udfff',
2869    rsComboMarksRange = '\\u0300-\\u036f',
2870    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
2871    rsComboSymbolsRange = '\\u20d0-\\u20ff',
2872    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
2873    rsVarRange = '\\ufe0e\\ufe0f';
2874
2875/** Used to compose unicode capture groups. */
2876var rsZWJ = '\\u200d';
2877
2878/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
2879var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
2880
2881/**
2882 * Checks if `string` contains Unicode symbols.
2883 *
2884 * @private
2885 * @param {string} string The string to inspect.
2886 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
2887 */
2888function hasUnicode(string) {
2889  return reHasUnicode.test(string);
2890}
2891
2892module.exports = hasUnicode;
2893
2894
2895}),
2896"7322": (function (module, __unused_webpack_exports, __webpack_require__) {
2897var nativeCreate = __webpack_require__(7305);
2898
2899/**
2900 * Removes all key-value entries from the hash.
2901 *
2902 * @private
2903 * @name clear
2904 * @memberOf Hash
2905 */
2906function hashClear() {
2907  this.__data__ = nativeCreate ? nativeCreate(null) : {};
2908  this.size = 0;
2909}
2910
2911module.exports = hashClear;
2912
2913
2914}),
2915"2937": (function (module) {
2916/**
2917 * Removes `key` and its value from the hash.
2918 *
2919 * @private
2920 * @name delete
2921 * @memberOf Hash
2922 * @param {Object} hash The hash to modify.
2923 * @param {string} key The key of the value to remove.
2924 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
2925 */
2926function hashDelete(key) {
2927  var result = this.has(key) && delete this.__data__[key];
2928  this.size -= result ? 1 : 0;
2929  return result;
2930}
2931
2932module.exports = hashDelete;
2933
2934
2935}),
2936"207": (function (module, __unused_webpack_exports, __webpack_require__) {
2937var nativeCreate = __webpack_require__(7305);
2938
2939/** Used to stand-in for `undefined` hash values. */
2940var HASH_UNDEFINED = '__lodash_hash_undefined__';
2941
2942/** Used for built-in method references. */
2943var objectProto = Object.prototype;
2944
2945/** Used to check objects for own properties. */
2946var hasOwnProperty = objectProto.hasOwnProperty;
2947
2948/**
2949 * Gets the hash value for `key`.
2950 *
2951 * @private
2952 * @name get
2953 * @memberOf Hash
2954 * @param {string} key The key of the value to get.
2955 * @returns {*} Returns the entry value.
2956 */
2957function hashGet(key) {
2958  var data = this.__data__;
2959  if (nativeCreate) {
2960    var result = data[key];
2961    return result === HASH_UNDEFINED ? undefined : result;
2962  }
2963  return hasOwnProperty.call(data, key) ? data[key] : undefined;
2964}
2965
2966module.exports = hashGet;
2967
2968
2969}),
2970"2165": (function (module, __unused_webpack_exports, __webpack_require__) {
2971var nativeCreate = __webpack_require__(7305);
2972
2973/** Used for built-in method references. */
2974var objectProto = Object.prototype;
2975
2976/** Used to check objects for own properties. */
2977var hasOwnProperty = objectProto.hasOwnProperty;
2978
2979/**
2980 * Checks if a hash value for `key` exists.
2981 *
2982 * @private
2983 * @name has
2984 * @memberOf Hash
2985 * @param {string} key The key of the entry to check.
2986 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
2987 */
2988function hashHas(key) {
2989  var data = this.__data__;
2990  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
2991}
2992
2993module.exports = hashHas;
2994
2995
2996}),
2997"7523": (function (module, __unused_webpack_exports, __webpack_require__) {
2998var nativeCreate = __webpack_require__(7305);
2999
3000/** Used to stand-in for `undefined` hash values. */
3001var HASH_UNDEFINED = '__lodash_hash_undefined__';
3002
3003/**
3004 * Sets the hash `key` to `value`.
3005 *
3006 * @private
3007 * @name set
3008 * @memberOf Hash
3009 * @param {string} key The key of the value to set.
3010 * @param {*} value The value to set.
3011 * @returns {Object} Returns the hash instance.
3012 */
3013function hashSet(key, value) {
3014  var data = this.__data__;
3015  this.size += this.has(key) ? 0 : 1;
3016  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
3017  return this;
3018}
3019
3020module.exports = hashSet;
3021
3022
3023}),
3024"1668": (function (module, __unused_webpack_exports, __webpack_require__) {
3025var Symbol = __webpack_require__(4886),
3026    isArguments = __webpack_require__(9732),
3027    isArray = __webpack_require__(6377);
3028
3029/** Built-in value references. */
3030var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
3031
3032/**
3033 * Checks if `value` is a flattenable `arguments` object or array.
3034 *
3035 * @private
3036 * @param {*} value The value to check.
3037 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
3038 */
3039function isFlattenable(value) {
3040  return isArray(value) || isArguments(value) ||
3041    !!(spreadableSymbol && value && value[spreadableSymbol]);
3042}
3043
3044module.exports = isFlattenable;
3045
3046
3047}),
3048"9251": (function (module) {
3049/** Used as references for various `Number` constants. */
3050var MAX_SAFE_INTEGER = 9007199254740991;
3051
3052/** Used to detect unsigned integer values. */
3053var reIsUint = /^(?:0|[1-9]\d*)$/;
3054
3055/**
3056 * Checks if `value` is a valid array-like index.
3057 *
3058 * @private
3059 * @param {*} value The value to check.
3060 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
3061 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
3062 */
3063function isIndex(value, length) {
3064  var type = typeof value;
3065  length = length == null ? MAX_SAFE_INTEGER : length;
3066
3067  return !!length &&
3068    (type == 'number' ||
3069      (type != 'symbol' && reIsUint.test(value))) &&
3070        (value > -1 && value % 1 == 0 && value < length);
3071}
3072
3073module.exports = isIndex;
3074
3075
3076}),
3077"7074": (function (module, __unused_webpack_exports, __webpack_require__) {
3078var isArray = __webpack_require__(6377),
3079    isSymbol = __webpack_require__(1359);
3080
3081/** Used to match property names within property paths. */
3082var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
3083    reIsPlainProp = /^\w*$/;
3084
3085/**
3086 * Checks if `value` is a property name and not a property path.
3087 *
3088 * @private
3089 * @param {*} value The value to check.
3090 * @param {Object} [object] The object to query keys on.
3091 * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
3092 */
3093function isKey(value, object) {
3094  if (isArray(value)) {
3095    return false;
vendor: 15,621 bytes, lines 3096-3752
3096  }
3097  var type = typeof value;
3098  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
3099      value == null || isSymbol(value)) {
3100    return true;
3101  }
3102  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
3103    (object != null && value in Object(object));
3104}
3105
3106module.exports = isKey;
3107
3108
3109}),
3110"6669": (function (module) {
3111/**
3112 * Checks if `value` is suitable for use as unique object key.
3113 *
3114 * @private
3115 * @param {*} value The value to check.
3116 * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
3117 */
3118function isKeyable(value) {
3119  var type = typeof value;
3120  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
3121    ? (value !== '__proto__')
3122    : (value === null);
3123}
3124
3125module.exports = isKeyable;
3126
3127
3128}),
3129"6252": (function (module, __unused_webpack_exports, __webpack_require__) {
3130var LazyWrapper = __webpack_require__(4281),
3131    getData = __webpack_require__(6007),
3132    getFuncName = __webpack_require__(195),
3133    lodash = __webpack_require__(6985);
3134
3135/**
3136 * Checks if `func` has a lazy counterpart.
3137 *
3138 * @private
3139 * @param {Function} func The function to check.
3140 * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
3141 *  else `false`.
3142 */
3143function isLaziable(func) {
3144  var funcName = getFuncName(func),
3145      other = lodash[funcName];
3146
3147  if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
3148    return false;
3149  }
3150  if (func === other) {
3151    return true;
3152  }
3153  var data = getData(other);
3154  return !!data && func === data[0];
3155}
3156
3157module.exports = isLaziable;
3158
3159
3160}),
3161"3417": (function (module, __unused_webpack_exports, __webpack_require__) {
3162var coreJsData = __webpack_require__(5772);
3163
3164/** Used to detect methods masquerading as native. */
3165var maskSrcKey = (function() {
3166  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
3167  return uid ? ('Symbol(src)_1.' + uid) : '';
3168}());
3169
3170/**
3171 * Checks if `func` has its source masked.
3172 *
3173 * @private
3174 * @param {Function} func The function to check.
3175 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
3176 */
3177function isMasked(func) {
3178  return !!maskSrcKey && (maskSrcKey in func);
3179}
3180
3181module.exports = isMasked;
3182
3183
3184}),
3185"8857": (function (module) {
3186/** Used for built-in method references. */
3187var objectProto = Object.prototype;
3188
3189/**
3190 * Checks if `value` is likely a prototype object.
3191 *
3192 * @private
3193 * @param {*} value The value to check.
3194 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
3195 */
3196function isPrototype(value) {
3197  var Ctor = value && value.constructor,
3198      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
3199
3200  return value === proto;
3201}
3202
3203module.exports = isPrototype;
3204
3205
3206}),
3207"1542": (function (module, __unused_webpack_exports, __webpack_require__) {
3208var isObject = __webpack_require__(8532);
3209
3210/**
3211 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
3212 *
3213 * @private
3214 * @param {*} value The value to check.
3215 * @returns {boolean} Returns `true` if `value` if suitable for strict
3216 *  equality comparisons, else `false`.
3217 */
3218function isStrictComparable(value) {
3219  return value === value && !isObject(value);
3220}
3221
3222module.exports = isStrictComparable;
3223
3224
3225}),
3226"7435": (function (module) {
3227/**
3228 * Removes all key-value entries from the list cache.
3229 *
3230 * @private
3231 * @name clear
3232 * @memberOf ListCache
3233 */
3234function listCacheClear() {
3235  this.__data__ = [];
3236  this.size = 0;
3237}
3238
3239module.exports = listCacheClear;
3240
3241
3242}),
3243"8438": (function (module, __unused_webpack_exports, __webpack_require__) {
3244var assocIndexOf = __webpack_require__(8357);
3245
3246/** Used for built-in method references. */
3247var arrayProto = Array.prototype;
3248
3249/** Built-in value references. */
3250var splice = arrayProto.splice;
3251
3252/**
3253 * Removes `key` and its value from the list cache.
3254 *
3255 * @private
3256 * @name delete
3257 * @memberOf ListCache
3258 * @param {string} key The key of the value to remove.
3259 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
3260 */
3261function listCacheDelete(key) {
3262  var data = this.__data__,
3263      index = assocIndexOf(data, key);
3264
3265  if (index < 0) {
3266    return false;
3267  }
3268  var lastIndex = data.length - 1;
3269  if (index == lastIndex) {
3270    data.pop();
3271  } else {
3272    splice.call(data, index, 1);
3273  }
3274  --this.size;
3275  return true;
3276}
3277
3278module.exports = listCacheDelete;
3279
3280
3281}),
3282"3067": (function (module, __unused_webpack_exports, __webpack_require__) {
3283var assocIndexOf = __webpack_require__(8357);
3284
3285/**
3286 * Gets the list cache value for `key`.
3287 *
3288 * @private
3289 * @name get
3290 * @memberOf ListCache
3291 * @param {string} key The key of the value to get.
3292 * @returns {*} Returns the entry value.
3293 */
3294function listCacheGet(key) {
3295  var data = this.__data__,
3296      index = assocIndexOf(data, key);
3297
3298  return index < 0 ? undefined : data[index][1];
3299}
3300
3301module.exports = listCacheGet;
3302
3303
3304}),
3305"9679": (function (module, __unused_webpack_exports, __webpack_require__) {
3306var assocIndexOf = __webpack_require__(8357);
3307
3308/**
3309 * Checks if a list cache value for `key` exists.
3310 *
3311 * @private
3312 * @name has
3313 * @memberOf ListCache
3314 * @param {string} key The key of the entry to check.
3315 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
3316 */
3317function listCacheHas(key) {
3318  return assocIndexOf(this.__data__, key) > -1;
3319}
3320
3321module.exports = listCacheHas;
3322
3323
3324}),
3325"2426": (function (module, __unused_webpack_exports, __webpack_require__) {
3326var assocIndexOf = __webpack_require__(8357);
3327
3328/**
3329 * Sets the list cache `key` to `value`.
3330 *
3331 * @private
3332 * @name set
3333 * @memberOf ListCache
3334 * @param {string} key The key of the value to set.
3335 * @param {*} value The value to set.
3336 * @returns {Object} Returns the list cache instance.
3337 */
3338function listCacheSet(key, value) {
3339  var data = this.__data__,
3340      index = assocIndexOf(data, key);
3341
3342  if (index < 0) {
3343    ++this.size;
3344    data.push([key, value]);
3345  } else {
3346    data[index][1] = value;
3347  }
3348  return this;
3349}
3350
3351module.exports = listCacheSet;
3352
3353
3354}),
3355"6409": (function (module, __unused_webpack_exports, __webpack_require__) {
3356var Hash = __webpack_require__(1796),
3357    ListCache = __webpack_require__(283),
3358    Map = __webpack_require__(9036);
3359
3360/**
3361 * Removes all key-value entries from the map.
3362 *
3363 * @private
3364 * @name clear
3365 * @memberOf MapCache
3366 */
3367function mapCacheClear() {
3368  this.size = 0;
3369  this.__data__ = {
3370    'hash': new Hash,
3371    'map': new (Map || ListCache),
3372    'string': new Hash
3373  };
3374}
3375
3376module.exports = mapCacheClear;
3377
3378
3379}),
3380"5335": (function (module, __unused_webpack_exports, __webpack_require__) {
3381var getMapData = __webpack_require__(1143);
3382
3383/**
3384 * Removes `key` and its value from the map.
3385 *
3386 * @private
3387 * @name delete
3388 * @memberOf MapCache
3389 * @param {string} key The key of the value to remove.
3390 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
3391 */
3392function mapCacheDelete(key) {
3393  var result = getMapData(this, key)['delete'](key);
3394  this.size -= result ? 1 : 0;
3395  return result;
3396}
3397
3398module.exports = mapCacheDelete;
3399
3400
3401}),
3402"5601": (function (module, __unused_webpack_exports, __webpack_require__) {
3403var getMapData = __webpack_require__(1143);
3404
3405/**
3406 * Gets the map value for `key`.
3407 *
3408 * @private
3409 * @name get
3410 * @memberOf MapCache
3411 * @param {string} key The key of the value to get.
3412 * @returns {*} Returns the entry value.
3413 */
3414function mapCacheGet(key) {
3415  return getMapData(this, key).get(key);
3416}
3417
3418module.exports = mapCacheGet;
3419
3420
3421}),
3422"1533": (function (module, __unused_webpack_exports, __webpack_require__) {
3423var getMapData = __webpack_require__(1143);
3424
3425/**
3426 * Checks if a map value for `key` exists.
3427 *
3428 * @private
3429 * @name has
3430 * @memberOf MapCache
3431 * @param {string} key The key of the entry to check.
3432 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
3433 */
3434function mapCacheHas(key) {
3435  return getMapData(this, key).has(key);
3436}
3437
3438module.exports = mapCacheHas;
3439
3440
3441}),
3442"151": (function (module, __unused_webpack_exports, __webpack_require__) {
3443var getMapData = __webpack_require__(1143);
3444
3445/**
3446 * Sets the map `key` to `value`.
3447 *
3448 * @private
3449 * @name set
3450 * @memberOf MapCache
3451 * @param {string} key The key of the value to set.
3452 * @param {*} value The value to set.
3453 * @returns {Object} Returns the map cache instance.
3454 */
3455function mapCacheSet(key, value) {
3456  var data = getMapData(this, key),
3457      size = data.size;
3458
3459  data.set(key, value);
3460  this.size += data.size == size ? 0 : 1;
3461  return this;
3462}
3463
3464module.exports = mapCacheSet;
3465
3466
3467}),
3468"7170": (function (module) {
3469/**
3470 * Converts `map` to its key-value pairs.
3471 *
3472 * @private
3473 * @param {Object} map The map to convert.
3474 * @returns {Array} Returns the key-value pairs.
3475 */
3476function mapToArray(map) {
3477  var index = -1,
3478      result = Array(map.size);
3479
3480  map.forEach(function(value, key) {
3481    result[++index] = [key, value];
3482  });
3483  return result;
3484}
3485
3486module.exports = mapToArray;
3487
3488
3489}),
3490"4167": (function (module) {
3491/**
3492 * A specialized version of `matchesProperty` for source values suitable
3493 * for strict equality comparisons, i.e. `===`.
3494 *
3495 * @private
3496 * @param {string} key The key of the property to get.
3497 * @param {*} srcValue The value to match.
3498 * @returns {Function} Returns the new spec function.
3499 */
3500function matchesStrictComparable(key, srcValue) {
3501  return function(object) {
3502    if (object == null) {
3503      return false;
3504    }
3505    return object[key] === srcValue &&
3506      (srcValue !== undefined || (key in Object(object)));
3507  };
3508}
3509
3510module.exports = matchesStrictComparable;
3511
3512
3513}),
3514"6141": (function (module, __unused_webpack_exports, __webpack_require__) {
3515var memoize = __webpack_require__(4984);
3516
3517/** Used as the maximum memoize cache size. */
3518var MAX_MEMOIZE_SIZE = 500;
3519
3520/**
3521 * A specialized version of `_.memoize` which clears the memoized function's
3522 * cache when it exceeds `MAX_MEMOIZE_SIZE`.
3523 *
3524 * @private
3525 * @param {Function} func The function to have its output memoized.
3526 * @returns {Function} Returns the new memoized function.
3527 */
3528function memoizeCapped(func) {
3529  var result = memoize(func, function(key) {
3530    if (cache.size === MAX_MEMOIZE_SIZE) {
3531      cache.clear();
3532    }
3533    return key;
3534  });
3535
3536  var cache = result.cache;
3537  return result;
3538}
3539
3540module.exports = memoizeCapped;
3541
3542
3543}),
3544"900": (function (module, __unused_webpack_exports, __webpack_require__) {
3545var WeakMap = __webpack_require__(3283);
3546
3547/** Used to store function metadata. */
3548var metaMap = WeakMap && new WeakMap;
3549
3550module.exports = metaMap;
3551
3552
3553}),
3554"7305": (function (module, __unused_webpack_exports, __webpack_require__) {
3555var getNative = __webpack_require__(440);
3556
3557/* Built-in method references that are verified to be native. */
3558var nativeCreate = getNative(Object, 'create');
3559
3560module.exports = nativeCreate;
3561
3562
3563}),
3564"2440": (function (module, __unused_webpack_exports, __webpack_require__) {
3565var overArg = __webpack_require__(6512);
3566
3567/* Built-in method references for those with the same name as other `lodash` methods. */
3568var nativeKeys = overArg(Object.keys, Object);
3569
3570module.exports = nativeKeys;
3571
3572
3573}),
3574"1308": (function (module) {
3575/**
3576 * This function is like
3577 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
3578 * except that it includes inherited enumerable properties.
3579 *
3580 * @private
3581 * @param {Object} object The object to query.
3582 * @returns {Array} Returns the array of property names.
3583 */
3584function nativeKeysIn(object) {
3585  var result = [];
3586  if (object != null) {
3587    for (var key in Object(object)) {
3588      result.push(key);
3589    }
3590  }
3591  return result;
3592}
3593
3594module.exports = nativeKeysIn;
3595
3596
3597}),
3598"895": (function (module, exports, __webpack_require__) {
3599/* module decorator */ module = __webpack_require__.nmd(module);
3600var freeGlobal = __webpack_require__(2593);
3601
3602/** Detect free variable `exports`. */
3603var freeExports =  true && exports && !exports.nodeType && exports;
3604
3605/** Detect free variable `module`. */
3606var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
3607
3608/** Detect the popular CommonJS extension `module.exports`. */
3609var moduleExports = freeModule && freeModule.exports === freeExports;
3610
3611/** Detect free variable `process` from Node.js. */
3612var freeProcess = moduleExports && freeGlobal.process;
3613
3614/** Used to access faster Node.js helpers. */
3615var nodeUtil = (function() {
3616  try {
3617    // Use `util.types` for Node.js 10+.
3618    var types = freeModule && freeModule.require && freeModule.require('util').types;
3619
3620    if (types) {
3621      return types;
3622    }
3623
3624    // Legacy `process.binding('util')` for Node.js < 10.
3625    return freeProcess && freeProcess.binding && freeProcess.binding('util');
3626  } catch (e) {}
3627}());
3628
3629module.exports = nodeUtil;
3630
3631
3632}),
3633"7070": (function (module) {
3634/** Used for built-in method references. */
3635var objectProto = Object.prototype;
3636
3637/**
3638 * Used to resolve the
3639 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
3640 * of values.
3641 */
3642var nativeObjectToString = objectProto.toString;
3643
3644/**
3645 * Converts `value` to a string using `Object.prototype.toString`.
3646 *
3647 * @private
3648 * @param {*} value The value to convert.
3649 * @returns {string} Returns the converted string.
3650 */
3651function objectToString(value) {
3652  return nativeObjectToString.call(value);
3653}
3654
3655module.exports = objectToString;
3656
3657
3658}),
3659"6512": (function (module) {
3660/**
3661 * Creates a unary function that invokes `func` with its argument transformed.
3662 *
3663 * @private
3664 * @param {Function} func The function to wrap.
3665 * @param {Function} transform The argument transform.
3666 * @returns {Function} Returns the new function.
3667 */
3668function overArg(func, transform) {
3669  return function(arg) {
3670    return func(transform(arg));
3671  };
3672}
3673
3674module.exports = overArg;
3675
3676
3677}),
3678"6813": (function (module, __unused_webpack_exports, __webpack_require__) {
3679var apply = __webpack_require__(9198);
3680
3681/* Built-in method references for those with the same name as other `lodash` methods. */
3682var nativeMax = Math.max;
3683
3684/**
3685 * A specialized version of `baseRest` which transforms the rest array.
3686 *
3687 * @private
3688 * @param {Function} func The function to apply a rest parameter to.
3689 * @param {number} [start=func.length-1] The start position of the rest parameter.
3690 * @param {Function} transform The rest array transform.
3691 * @returns {Function} Returns the new function.
3692 */
3693function overRest(func, start, transform) {
3694  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
3695  return function() {
3696    var args = arguments,
3697        index = -1,
3698        length = nativeMax(args.length - start, 0),
3699        array = Array(length);
3700
3701    while (++index < length) {
3702      array[index] = args[start + index];
3703    }
3704    index = -1;
3705    var otherArgs = Array(start + 1);
3706    while (++index < start) {
3707      otherArgs[index] = args[index];
3708    }
3709    otherArgs[start] = transform(array);
3710    return apply(func, this, otherArgs);
3711  };
3712}
3713
3714module.exports = overRest;
3715
3716
3717}),
3718"8564": (function (module) {
3719/** Used to lookup unminified function names. */
3720var realNames = {};
3721
3722module.exports = realNames;
3723
3724
3725}),
3726"5238": (function (module, __unused_webpack_exports, __webpack_require__) {
3727var freeGlobal = __webpack_require__(2593);
3728
3729/** Detect free variable `self`. */
3730var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
3731
3732/** Used as a reference to the global object. */
3733var root = freeGlobal || freeSelf || Function('return this')();
3734
3735module.exports = root;
3736
3737
3738}),
3739"1760": (function (module) {
3740/** Used to stand-in for `undefined` hash values. */
3741var HASH_UNDEFINED = '__lodash_hash_undefined__';
3742
3743/**
3744 * Adds `value` to the array cache.
3745 *
3746 * @private
3747 * @name add
3748 * @memberOf SetCache
3749 * @alias push
3750 * @param {*} value The value to cache.
3751 * @returns {Object} Returns the cache instance.
3752 */
vendor: 4,814 bytes, lines 3753-3977
3753function setCacheAdd(value) {
3754  this.__data__.set(value, HASH_UNDEFINED);
3755  return this;
3756}
3757
3758module.exports = setCacheAdd;
3759
3760
3761}),
3762"5484": (function (module) {
3763/**
3764 * Checks if `value` is in the array cache.
3765 *
3766 * @private
3767 * @name has
3768 * @memberOf SetCache
3769 * @param {*} value The value to search for.
3770 * @returns {number} Returns `true` if `value` is found, else `false`.
3771 */
3772function setCacheHas(value) {
3773  return this.__data__.has(value);
3774}
3775
3776module.exports = setCacheHas;
3777
3778
3779}),
3780"2779": (function (module) {
3781/**
3782 * Converts `set` to an array of its values.
3783 *
3784 * @private
3785 * @param {Object} set The set to convert.
3786 * @returns {Array} Returns the values.
3787 */
3788function setToArray(set) {
3789  var index = -1,
3790      result = Array(set.size);
3791
3792  set.forEach(function(value) {
3793    result[++index] = value;
3794  });
3795  return result;
3796}
3797
3798module.exports = setToArray;
3799
3800
3801}),
3802"2413": (function (module, __unused_webpack_exports, __webpack_require__) {
3803var baseSetToString = __webpack_require__(2422),
3804    shortOut = __webpack_require__(7890);
3805
3806/**
3807 * Sets the `toString` method of `func` to return `string`.
3808 *
3809 * @private
3810 * @param {Function} func The function to modify.
3811 * @param {Function} string The `toString` result.
3812 * @returns {Function} Returns `func`.
3813 */
3814var setToString = shortOut(baseSetToString);
3815
3816module.exports = setToString;
3817
3818
3819}),
3820"7890": (function (module) {
3821/** Used to detect hot functions by number of calls within a span of milliseconds. */
3822var HOT_COUNT = 800,
3823    HOT_SPAN = 16;
3824
3825/* Built-in method references for those with the same name as other `lodash` methods. */
3826var nativeNow = Date.now;
3827
3828/**
3829 * Creates a function that'll short out and invoke `identity` instead
3830 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
3831 * milliseconds.
3832 *
3833 * @private
3834 * @param {Function} func The function to restrict.
3835 * @returns {Function} Returns the new shortable function.
3836 */
3837function shortOut(func) {
3838  var count = 0,
3839      lastCalled = 0;
3840
3841  return function() {
3842    var stamp = nativeNow(),
3843        remaining = HOT_SPAN - (stamp - lastCalled);
3844
3845    lastCalled = stamp;
3846    if (remaining > 0) {
3847      if (++count >= HOT_COUNT) {
3848        return arguments[0];
3849      }
3850    } else {
3851      count = 0;
3852    }
3853    return func.apply(undefined, arguments);
3854  };
3855}
3856
3857module.exports = shortOut;
3858
3859
3860}),
3861"6063": (function (module, __unused_webpack_exports, __webpack_require__) {
3862var ListCache = __webpack_require__(283);
3863
3864/**
3865 * Removes all key-value entries from the stack.
3866 *
3867 * @private
3868 * @name clear
3869 * @memberOf Stack
3870 */
3871function stackClear() {
3872  this.__data__ = new ListCache;
3873  this.size = 0;
3874}
3875
3876module.exports = stackClear;
3877
3878
3879}),
3880"7727": (function (module) {
3881/**
3882 * Removes `key` and its value from the stack.
3883 *
3884 * @private
3885 * @name delete
3886 * @memberOf Stack
3887 * @param {string} key The key of the value to remove.
3888 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
3889 */
3890function stackDelete(key) {
3891  var data = this.__data__,
3892      result = data['delete'](key);
3893
3894  this.size = data.size;
3895  return result;
3896}
3897
3898module.exports = stackDelete;
3899
3900
3901}),
3902"3281": (function (module) {
3903/**
3904 * Gets the stack value for `key`.
3905 *
3906 * @private
3907 * @name get
3908 * @memberOf Stack
3909 * @param {string} key The key of the value to get.
3910 * @returns {*} Returns the entry value.
3911 */
3912function stackGet(key) {
3913  return this.__data__.get(key);
3914}
3915
3916module.exports = stackGet;
3917
3918
3919}),
3920"6667": (function (module) {
3921/**
3922 * Checks if a stack value for `key` exists.
3923 *
3924 * @private
3925 * @name has
3926 * @memberOf Stack
3927 * @param {string} key The key of the entry to check.
3928 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
3929 */
3930function stackHas(key) {
3931  return this.__data__.has(key);
3932}
3933
3934module.exports = stackHas;
3935
3936
3937}),
3938"1270": (function (module, __unused_webpack_exports, __webpack_require__) {
3939var ListCache = __webpack_require__(283),
3940    Map = __webpack_require__(9036),
3941    MapCache = __webpack_require__(4544);
3942
3943/** Used as the size to enable large array optimizations. */
3944var LARGE_ARRAY_SIZE = 200;
3945
3946/**
3947 * Sets the stack `key` to `value`.
3948 *
3949 * @private
3950 * @name set
3951 * @memberOf Stack
3952 * @param {string} key The key of the value to set.
3953 * @param {*} value The value to set.
3954 * @returns {Object} Returns the stack cache instance.
3955 */
3956function stackSet(key, value) {
3957  var data = this.__data__;
3958  if (data instanceof ListCache) {
3959    var pairs = data.__data__;
3960    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
3961      pairs.push([key, value]);
3962      this.size = ++data.size;
3963      return this;
3964    }
3965    data = this.__data__ = new MapCache(pairs);
3966  }
3967  data.set(key, value);
3968  this.size = data.size;
3969  return this;
3970}
3971
3972module.exports = stackSet;
3973
3974
3975}),
3976"6749": (function (module, __unused_webpack_exports, __webpack_require__) {
3977var asciiSize = __webpack_require__(609),
vendor: 20,555 bytes, lines 3978-4717
3978    hasUnicode = __webpack_require__(9520),
3979    unicodeSize = __webpack_require__(9668);
3980
3981/**
3982 * Gets the number of symbols in `string`.
3983 *
3984 * @private
3985 * @param {string} string The string to inspect.
3986 * @returns {number} Returns the string size.
3987 */
3988function stringSize(string) {
3989  return hasUnicode(string)
3990    ? unicodeSize(string)
3991    : asciiSize(string);
3992}
3993
3994module.exports = stringSize;
3995
3996
3997}),
3998"8997": (function (module, __unused_webpack_exports, __webpack_require__) {
3999var memoizeCapped = __webpack_require__(6141);
4000
4001/** Used to match property names within property paths. */
4002var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
4003
4004/** Used to match backslashes in property paths. */
4005var reEscapeChar = /\\(\\)?/g;
4006
4007/**
4008 * Converts `string` to a property path array.
4009 *
4010 * @private
4011 * @param {string} string The string to convert.
4012 * @returns {Array} Returns the property path array.
4013 */
4014var stringToPath = memoizeCapped(function(string) {
4015  var result = [];
4016  if (string.charCodeAt(0) === 46 /* . */) {
4017    result.push('');
4018  }
4019  string.replace(rePropName, function(match, number, quote, subString) {
4020    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
4021  });
4022  return result;
4023});
4024
4025module.exports = stringToPath;
4026
4027
4028}),
4029"8481": (function (module, __unused_webpack_exports, __webpack_require__) {
4030var isSymbol = __webpack_require__(1359);
4031
4032/** Used as references for various `Number` constants. */
4033var INFINITY = 1 / 0;
4034
4035/**
4036 * Converts `value` to a string key if it's not a string or symbol.
4037 *
4038 * @private
4039 * @param {*} value The value to inspect.
4040 * @returns {string|symbol} Returns the key.
4041 */
4042function toKey(value) {
4043  if (typeof value == 'string' || isSymbol(value)) {
4044    return value;
4045  }
4046  var result = (value + '');
4047  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
4048}
4049
4050module.exports = toKey;
4051
4052
4053}),
4054"1473": (function (module) {
4055/** Used for built-in method references. */
4056var funcProto = Function.prototype;
4057
4058/** Used to resolve the decompiled source of functions. */
4059var funcToString = funcProto.toString;
4060
4061/**
4062 * Converts `func` to its source code.
4063 *
4064 * @private
4065 * @param {Function} func The function to convert.
4066 * @returns {string} Returns the source code.
4067 */
4068function toSource(func) {
4069  if (func != null) {
4070    try {
4071      return funcToString.call(func);
4072    } catch (e) {}
4073    try {
4074      return (func + '');
4075    } catch (e) {}
4076  }
4077  return '';
4078}
4079
4080module.exports = toSource;
4081
4082
4083}),
4084"3230": (function (module) {
4085/** Used to match a single whitespace character. */
4086var reWhitespace = /\s/;
4087
4088/**
4089 * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
4090 * character of `string`.
4091 *
4092 * @private
4093 * @param {string} string The string to inspect.
4094 * @returns {number} Returns the index of the last non-whitespace character.
4095 */
4096function trimmedEndIndex(string) {
4097  var index = string.length;
4098
4099  while (index-- && reWhitespace.test(string.charAt(index))) {}
4100  return index;
4101}
4102
4103module.exports = trimmedEndIndex;
4104
4105
4106}),
4107"9668": (function (module) {
4108/** Used to compose unicode character classes. */
4109var rsAstralRange = '\\ud800-\\udfff',
4110    rsComboMarksRange = '\\u0300-\\u036f',
4111    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
4112    rsComboSymbolsRange = '\\u20d0-\\u20ff',
4113    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
4114    rsVarRange = '\\ufe0e\\ufe0f';
4115
4116/** Used to compose unicode capture groups. */
4117var rsAstral = '[' + rsAstralRange + ']',
4118    rsCombo = '[' + rsComboRange + ']',
4119    rsFitz = '\\ud83c[\\udffb-\\udfff]',
4120    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
4121    rsNonAstral = '[^' + rsAstralRange + ']',
4122    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
4123    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
4124    rsZWJ = '\\u200d';
4125
4126/** Used to compose unicode regexes. */
4127var reOptMod = rsModifier + '?',
4128    rsOptVar = '[' + rsVarRange + ']?',
4129    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
4130    rsSeq = rsOptVar + reOptMod + rsOptJoin,
4131    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
4132
4133/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
4134var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
4135
4136/**
4137 * Gets the size of a Unicode `string`.
4138 *
4139 * @private
4140 * @param {string} string The string inspect.
4141 * @returns {number} Returns the string size.
4142 */
4143function unicodeSize(string) {
4144  var result = reUnicode.lastIndex = 0;
4145  while (reUnicode.test(string)) {
4146    ++result;
4147  }
4148  return result;
4149}
4150
4151module.exports = unicodeSize;
4152
4153
4154}),
4155"219": (function (module, __unused_webpack_exports, __webpack_require__) {
4156var LazyWrapper = __webpack_require__(4281),
4157    LodashWrapper = __webpack_require__(9675),
4158    copyArray = __webpack_require__(8606);
4159
4160/**
4161 * Creates a clone of `wrapper`.
4162 *
4163 * @private
4164 * @param {Object} wrapper The wrapper to clone.
4165 * @returns {Object} Returns the cloned wrapper.
4166 */
4167function wrapperClone(wrapper) {
4168  if (wrapper instanceof LazyWrapper) {
4169    return wrapper.clone();
4170  }
4171  var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
4172  result.__actions__ = copyArray(wrapper.__actions__);
4173  result.__index__  = wrapper.__index__;
4174  result.__values__ = wrapper.__values__;
4175  return result;
4176}
4177
4178module.exports = wrapperClone;
4179
4180
4181}),
4182"3789": (function (module, __unused_webpack_exports, __webpack_require__) {
4183var baseClamp = __webpack_require__(2009),
4184    toNumber = __webpack_require__(6127);
4185
4186/**
4187 * Clamps `number` within the inclusive `lower` and `upper` bounds.
4188 *
4189 * @static
4190 * @memberOf _
4191 * @since 4.0.0
4192 * @category Number
4193 * @param {number} number The number to clamp.
4194 * @param {number} [lower] The lower bound.
4195 * @param {number} upper The upper bound.
4196 * @returns {number} Returns the clamped number.
4197 * @example
4198 *
4199 * _.clamp(-10, -5, 5);
4200 * // => -5
4201 *
4202 * _.clamp(10, -5, 5);
4203 * // => 5
4204 */
4205function clamp(number, lower, upper) {
4206  if (upper === undefined) {
4207    upper = lower;
4208    lower = undefined;
4209  }
4210  if (upper !== undefined) {
4211    upper = toNumber(upper);
4212    upper = upper === upper ? upper : 0;
4213  }
4214  if (lower !== undefined) {
4215    lower = toNumber(lower);
4216    lower = lower === lower ? lower : 0;
4217  }
4218  return baseClamp(toNumber(number), lower, upper);
4219}
4220
4221module.exports = clamp;
4222
4223
4224}),
4225"5055": (function (module) {
4226/**
4227 * Creates a function that returns `value`.
4228 *
4229 * @static
4230 * @memberOf _
4231 * @since 2.4.0
4232 * @category Util
4233 * @param {*} value The value to return from the new function.
4234 * @returns {Function} Returns the new constant function.
4235 * @example
4236 *
4237 * var objects = _.times(2, _.constant({ 'a': 1 }));
4238 *
4239 * console.log(objects);
4240 * // => [{ 'a': 1 }, { 'a': 1 }]
4241 *
4242 * console.log(objects[0] === objects[1]);
4243 * // => true
4244 */
4245function constant(value) {
4246  return function() {
4247    return value;
4248  };
4249}
4250
4251module.exports = constant;
4252
4253
4254}),
4255"8305": (function (module, __unused_webpack_exports, __webpack_require__) {
4256var isObject = __webpack_require__(8532),
4257    now = __webpack_require__(806),
4258    toNumber = __webpack_require__(6127);
4259
4260/** Error message constants. */
4261var FUNC_ERROR_TEXT = 'Expected a function';
4262
4263/* Built-in method references for those with the same name as other `lodash` methods. */
4264var nativeMax = Math.max,
4265    nativeMin = Math.min;
4266
4267/**
4268 * Creates a debounced function that delays invoking `func` until after `wait`
4269 * milliseconds have elapsed since the last time the debounced function was
4270 * invoked. The debounced function comes with a `cancel` method to cancel
4271 * delayed `func` invocations and a `flush` method to immediately invoke them.
4272 * Provide `options` to indicate whether `func` should be invoked on the
4273 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
4274 * with the last arguments provided to the debounced function. Subsequent
4275 * calls to the debounced function return the result of the last `func`
4276 * invocation.
4277 *
4278 * **Note:** If `leading` and `trailing` options are `true`, `func` is
4279 * invoked on the trailing edge of the timeout only if the debounced function
4280 * is invoked more than once during the `wait` timeout.
4281 *
4282 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
4283 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
4284 *
4285 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
4286 * for details over the differences between `_.debounce` and `_.throttle`.
4287 *
4288 * @static
4289 * @memberOf _
4290 * @since 0.1.0
4291 * @category Function
4292 * @param {Function} func The function to debounce.
4293 * @param {number} [wait=0] The number of milliseconds to delay.
4294 * @param {Object} [options={}] The options object.
4295 * @param {boolean} [options.leading=false]
4296 *  Specify invoking on the leading edge of the timeout.
4297 * @param {number} [options.maxWait]
4298 *  The maximum time `func` is allowed to be delayed before it's invoked.
4299 * @param {boolean} [options.trailing=true]
4300 *  Specify invoking on the trailing edge of the timeout.
4301 * @returns {Function} Returns the new debounced function.
4302 * @example
4303 *
4304 * // Avoid costly calculations while the window size is in flux.
4305 * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
4306 *
4307 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
4308 * jQuery(element).on('click', _.debounce(sendMail, 300, {
4309 *   'leading': true,
4310 *   'trailing': false
4311 * }));
4312 *
4313 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
4314 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
4315 * var source = new EventSource('/stream');
4316 * jQuery(source).on('message', debounced);
4317 *
4318 * // Cancel the trailing debounced invocation.
4319 * jQuery(window).on('popstate', debounced.cancel);
4320 */
4321function debounce(func, wait, options) {
4322  var lastArgs,
4323      lastThis,
4324      maxWait,
4325      result,
4326      timerId,
4327      lastCallTime,
4328      lastInvokeTime = 0,
4329      leading = false,
4330      maxing = false,
4331      trailing = true;
4332
4333  if (typeof func != 'function') {
4334    throw new TypeError(FUNC_ERROR_TEXT);
4335  }
4336  wait = toNumber(wait) || 0;
4337  if (isObject(options)) {
4338    leading = !!options.leading;
4339    maxing = 'maxWait' in options;
4340    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
4341    trailing = 'trailing' in options ? !!options.trailing : trailing;
4342  }
4343
4344  function invokeFunc(time) {
4345    var args = lastArgs,
4346        thisArg = lastThis;
4347
4348    lastArgs = lastThis = undefined;
4349    lastInvokeTime = time;
4350    result = func.apply(thisArg, args);
4351    return result;
4352  }
4353
4354  function leadingEdge(time) {
4355    // Reset any `maxWait` timer.
4356    lastInvokeTime = time;
4357    // Start the timer for the trailing edge.
4358    timerId = setTimeout(timerExpired, wait);
4359    // Invoke the leading edge.
4360    return leading ? invokeFunc(time) : result;
4361  }
4362
4363  function remainingWait(time) {
4364    var timeSinceLastCall = time - lastCallTime,
4365        timeSinceLastInvoke = time - lastInvokeTime,
4366        timeWaiting = wait - timeSinceLastCall;
4367
4368    return maxing
4369      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
4370      : timeWaiting;
4371  }
4372
4373  function shouldInvoke(time) {
4374    var timeSinceLastCall = time - lastCallTime,
4375        timeSinceLastInvoke = time - lastInvokeTime;
4376
4377    // Either this is the first call, activity has stopped and we're at the
4378    // trailing edge, the system time has gone backwards and we're treating
4379    // it as the trailing edge, or we've hit the `maxWait` limit.
4380    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
4381      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
4382  }
4383
4384  function timerExpired() {
4385    var time = now();
4386    if (shouldInvoke(time)) {
4387      return trailingEdge(time);
4388    }
4389    // Restart the timer.
4390    timerId = setTimeout(timerExpired, remainingWait(time));
4391  }
4392
4393  function trailingEdge(time) {
4394    timerId = undefined;
4395
4396    // Only invoke if we have `lastArgs` which means `func` has been
4397    // debounced at least once.
4398    if (trailing && lastArgs) {
4399      return invokeFunc(time);
4400    }
4401    lastArgs = lastThis = undefined;
4402    return result;
4403  }
4404
4405  function cancel() {
4406    if (timerId !== undefined) {
4407      clearTimeout(timerId);
4408    }
4409    lastInvokeTime = 0;
4410    lastArgs = lastCallTime = lastThis = timerId = undefined;
4411  }
4412
4413  function flush() {
4414    return timerId === undefined ? result : trailingEdge(now());
4415  }
4416
4417  function debounced() {
4418    var time = now(),
4419        isInvoking = shouldInvoke(time);
4420
4421    lastArgs = arguments;
4422    lastThis = this;
4423    lastCallTime = time;
4424
4425    if (isInvoking) {
4426      if (timerId === undefined) {
4427        return leadingEdge(lastCallTime);
4428      }
4429      if (maxing) {
4430        // Handle invocations in a tight loop.
4431        clearTimeout(timerId);
4432        timerId = setTimeout(timerExpired, wait);
4433        return invokeFunc(lastCallTime);
4434      }
4435    }
4436    if (timerId === undefined) {
4437      timerId = setTimeout(timerExpired, wait);
4438    }
4439    return result;
4440  }
4441  debounced.cancel = cancel;
4442  debounced.flush = flush;
4443  return debounced;
4444}
4445
4446module.exports = debounce;
4447
4448
4449}),
4450"4075": (function (module) {
4451/**
4452 * Checks `value` to determine whether a default value should be returned in
4453 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
4454 * or `undefined`.
4455 *
4456 * @static
4457 * @memberOf _
4458 * @since 4.14.0
4459 * @category Util
4460 * @param {*} value The value to check.
4461 * @param {*} defaultValue The default value.
4462 * @returns {*} Returns the resolved value.
4463 * @example
4464 *
4465 * _.defaultTo(1, 10);
4466 * // => 1
4467 *
4468 * _.defaultTo(undefined, 10);
4469 * // => 10
4470 */
4471function defaultTo(value, defaultValue) {
4472  return (value == null || value !== value) ? defaultValue : value;
4473}
4474
4475module.exports = defaultTo;
4476
4477
4478}),
4479"4071": (function (module) {
4480/**
4481 * Performs a
4482 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
4483 * comparison between two values to determine if they are equivalent.
4484 *
4485 * @static
4486 * @memberOf _
4487 * @since 4.0.0
4488 * @category Lang
4489 * @param {*} value The value to compare.
4490 * @param {*} other The other value to compare.
4491 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
4492 * @example
4493 *
4494 * var object = { 'a': 1 };
4495 * var other = { 'a': 1 };
4496 *
4497 * _.eq(object, object);
4498 * // => true
4499 *
4500 * _.eq(object, other);
4501 * // => false
4502 *
4503 * _.eq('a', 'a');
4504 * // => true
4505 *
4506 * _.eq('a', Object('a'));
4507 * // => false
4508 *
4509 * _.eq(NaN, NaN);
4510 * // => true
4511 */
4512function eq(value, other) {
4513  return value === other || (value !== value && other !== other);
4514}
4515
4516module.exports = eq;
4517
4518
4519}),
4520"9777": (function (module, __unused_webpack_exports, __webpack_require__) {
4521var createFind = __webpack_require__(727),
4522    findIndex = __webpack_require__(3142);
4523
4524/**
4525 * Iterates over elements of `collection`, returning the first element
4526 * `predicate` returns truthy for. The predicate is invoked with three
4527 * arguments: (value, index|key, collection).
4528 *
4529 * @static
4530 * @memberOf _
4531 * @since 0.1.0
4532 * @category Collection
4533 * @param {Array|Object} collection The collection to inspect.
4534 * @param {Function} [predicate=_.identity] The function invoked per iteration.
4535 * @param {number} [fromIndex=0] The index to search from.
4536 * @returns {*} Returns the matched element, else `undefined`.
4537 * @example
4538 *
4539 * var users = [
4540 *   { 'user': 'barney',  'age': 36, 'active': true },
4541 *   { 'user': 'fred',    'age': 40, 'active': false },
4542 *   { 'user': 'pebbles', 'age': 1,  'active': true }
4543 * ];
4544 *
4545 * _.find(users, function(o) { return o.age < 40; });
4546 * // => object for 'barney'
4547 *
4548 * // The `_.matches` iteratee shorthand.
4549 * _.find(users, { 'age': 1, 'active': true });
4550 * // => object for 'pebbles'
4551 *
4552 * // The `_.matchesProperty` iteratee shorthand.
4553 * _.find(users, ['active', false]);
4554 * // => object for 'fred'
4555 *
4556 * // The `_.property` iteratee shorthand.
4557 * _.find(users, 'active');
4558 * // => object for 'barney'
4559 */
4560var find = createFind(findIndex);
4561
4562module.exports = find;
4563
4564
4565}),
4566"3142": (function (module, __unused_webpack_exports, __webpack_require__) {
4567var baseFindIndex = __webpack_require__(2056),
4568    baseIteratee = __webpack_require__(5462),
4569    toInteger = __webpack_require__(8536);
4570
4571/* Built-in method references for those with the same name as other `lodash` methods. */
4572var nativeMax = Math.max;
4573
4574/**
4575 * This method is like `_.find` except that it returns the index of the first
4576 * element `predicate` returns truthy for instead of the element itself.
4577 *
4578 * @static
4579 * @memberOf _
4580 * @since 1.1.0
4581 * @category Array
4582 * @param {Array} array The array to inspect.
4583 * @param {Function} [predicate=_.identity] The function invoked per iteration.
4584 * @param {number} [fromIndex=0] The index to search from.
4585 * @returns {number} Returns the index of the found element, else `-1`.
4586 * @example
4587 *
4588 * var users = [
4589 *   { 'user': 'barney',  'active': false },
4590 *   { 'user': 'fred',    'active': false },
4591 *   { 'user': 'pebbles', 'active': true }
4592 * ];
4593 *
4594 * _.findIndex(users, function(o) { return o.user == 'barney'; });
4595 * // => 0
4596 *
4597 * // The `_.matches` iteratee shorthand.
4598 * _.findIndex(users, { 'user': 'fred', 'active': false });
4599 * // => 1
4600 *
4601 * // The `_.matchesProperty` iteratee shorthand.
4602 * _.findIndex(users, ['active', false]);
4603 * // => 0
4604 *
4605 * // The `_.property` iteratee shorthand.
4606 * _.findIndex(users, 'active');
4607 * // => 2
4608 */
4609function findIndex(array, predicate, fromIndex) {
4610  var length = array == null ? 0 : array.length;
4611  if (!length) {
4612    return -1;
4613  }
4614  var index = fromIndex == null ? 0 : toInteger(fromIndex);
4615  if (index < 0) {
4616    index = nativeMax(length + index, 0);
4617  }
4618  return baseFindIndex(array, baseIteratee(predicate, 3), index);
4619}
4620
4621module.exports = findIndex;
4622
4623
4624}),
4625"5720": (function (module, __unused_webpack_exports, __webpack_require__) {
4626var createFind = __webpack_require__(727),
4627    findLastIndex = __webpack_require__(3758);
4628
4629/**
4630 * This method is like `_.find` except that it iterates over elements of
4631 * `collection` from right to left.
4632 *
4633 * @static
4634 * @memberOf _
4635 * @since 2.0.0
4636 * @category Collection
4637 * @param {Array|Object} collection The collection to inspect.
4638 * @param {Function} [predicate=_.identity] The function invoked per iteration.
4639 * @param {number} [fromIndex=collection.length-1] The index to search from.
4640 * @returns {*} Returns the matched element, else `undefined`.
4641 * @example
4642 *
4643 * _.findLast([1, 2, 3, 4], function(n) {
4644 *   return n % 2 == 1;
4645 * });
4646 * // => 3
4647 */
4648var findLast = createFind(findLastIndex);
4649
4650module.exports = findLast;
4651
4652
4653}),
4654"3758": (function (module, __unused_webpack_exports, __webpack_require__) {
4655var baseFindIndex = __webpack_require__(2056),
4656    baseIteratee = __webpack_require__(5462),
4657    toInteger = __webpack_require__(8536);
4658
4659/* Built-in method references for those with the same name as other `lodash` methods. */
4660var nativeMax = Math.max,
4661    nativeMin = Math.min;
4662
4663/**
4664 * This method is like `_.findIndex` except that it iterates over elements
4665 * of `collection` from right to left.
4666 *
4667 * @static
4668 * @memberOf _
4669 * @since 2.0.0
4670 * @category Array
4671 * @param {Array} array The array to inspect.
4672 * @param {Function} [predicate=_.identity] The function invoked per iteration.
4673 * @param {number} [fromIndex=array.length-1] The index to search from.
4674 * @returns {number} Returns the index of the found element, else `-1`.
4675 * @example
4676 *
4677 * var users = [
4678 *   { 'user': 'barney',  'active': true },
4679 *   { 'user': 'fred',    'active': false },
4680 *   { 'user': 'pebbles', 'active': false }
4681 * ];
4682 *
4683 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
4684 * // => 2
4685 *
4686 * // The `_.matches` iteratee shorthand.
4687 * _.findLastIndex(users, { 'user': 'barney', 'active': true });
4688 * // => 0
4689 *
4690 * // The `_.matchesProperty` iteratee shorthand.
4691 * _.findLastIndex(users, ['active', false]);
4692 * // => 2
4693 *
4694 * // The `_.property` iteratee shorthand.
4695 * _.findLastIndex(users, 'active');
4696 * // => 0
4697 */
4698function findLastIndex(array, predicate, fromIndex) {
4699  var length = array == null ? 0 : array.length;
4700  if (!length) {
4701    return -1;
4702  }
4703  var index = length - 1;
4704  if (fromIndex !== undefined) {
4705    index = toInteger(fromIndex);
4706    index = fromIndex < 0
4707      ? nativeMax(length + index, 0)
4708      : nativeMin(index, length - 1);
4709  }
4710  return baseFindIndex(array, baseIteratee(predicate, 3), index, true);
4711}
4712
4713module.exports = findLastIndex;
4714
4715
4716}),
4717"6380": (function (module, __unused_webpack_exports, __webpack_require__) {
vendor: 9,520 bytes, lines 4718-5092
4718var baseFlatten = __webpack_require__(5265);
4719
4720/**
4721 * Flattens `array` a single level deep.
4722 *
4723 * @static
4724 * @memberOf _
4725 * @since 0.1.0
4726 * @category Array
4727 * @param {Array} array The array to flatten.
4728 * @returns {Array} Returns the new flattened array.
4729 * @example
4730 *
4731 * _.flatten([1, [2, [3, [4]], 5]]);
4732 * // => [1, 2, [3, [4]], 5]
4733 */
4734function flatten(array) {
4735  var length = array == null ? 0 : array.length;
4736  return length ? baseFlatten(array, 1) : [];
4737}
4738
4739module.exports = flatten;
4740
4741
4742}),
4743"5801": (function (module, __unused_webpack_exports, __webpack_require__) {
4744var createFlow = __webpack_require__(914);
4745
4746/**
4747 * Creates a function that returns the result of invoking the given functions
4748 * with the `this` binding of the created function, where each successive
4749 * invocation is supplied the return value of the previous.
4750 *
4751 * @static
4752 * @memberOf _
4753 * @since 3.0.0
4754 * @category Util
4755 * @param {...(Function|Function[])} [funcs] The functions to invoke.
4756 * @returns {Function} Returns the new composite function.
4757 * @see _.flowRight
4758 * @example
4759 *
4760 * function square(n) {
4761 *   return n * n;
4762 * }
4763 *
4764 * var addSquare = _.flow([_.add, square]);
4765 * addSquare(1, 2);
4766 * // => 9
4767 */
4768var flow = createFlow();
4769
4770module.exports = flow;
4771
4772
4773}),
4774"2397": (function (module, __unused_webpack_exports, __webpack_require__) {
4775var arrayEach = __webpack_require__(4970),
4776    baseEach = __webpack_require__(8264),
4777    castFunction = __webpack_require__(8269),
4778    isArray = __webpack_require__(6377);
4779
4780/**
4781 * Iterates over elements of `collection` and invokes `iteratee` for each element.
4782 * The iteratee is invoked with three arguments: (value, index|key, collection).
4783 * Iteratee functions may exit iteration early by explicitly returning `false`.
4784 *
4785 * **Note:** As with other "Collections" methods, objects with a "length"
4786 * property are iterated like arrays. To avoid this behavior use `_.forIn`
4787 * or `_.forOwn` for object iteration.
4788 *
4789 * @static
4790 * @memberOf _
4791 * @since 0.1.0
4792 * @alias each
4793 * @category Collection
4794 * @param {Array|Object} collection The collection to iterate over.
4795 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
4796 * @returns {Array|Object} Returns `collection`.
4797 * @see _.forEachRight
4798 * @example
4799 *
4800 * _.forEach([1, 2], function(value) {
4801 *   console.log(value);
4802 * });
4803 * // => Logs `1` then `2`.
4804 *
4805 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
4806 *   console.log(key);
4807 * });
4808 * // => Logs 'a' then 'b' (iteration order is not guaranteed).
4809 */
4810function forEach(collection, iteratee) {
4811  var func = isArray(collection) ? arrayEach : baseEach;
4812  return func(collection, castFunction(iteratee));
4813}
4814
4815module.exports = forEach;
4816
4817
4818}),
4819"4738": (function (module, __unused_webpack_exports, __webpack_require__) {
4820var baseGet = __webpack_require__(1957);
4821
4822/**
4823 * Gets the value at `path` of `object`. If the resolved value is
4824 * `undefined`, the `defaultValue` is returned in its place.
4825 *
4826 * @static
4827 * @memberOf _
4828 * @since 3.7.0
4829 * @category Object
4830 * @param {Object} object The object to query.
4831 * @param {Array|string} path The path of the property to get.
4832 * @param {*} [defaultValue] The value returned for `undefined` resolved values.
4833 * @returns {*} Returns the resolved value.
4834 * @example
4835 *
4836 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
4837 *
4838 * _.get(object, 'a[0].b.c');
4839 * // => 3
4840 *
4841 * _.get(object, ['a', '0', 'b', 'c']);
4842 * // => 3
4843 *
4844 * _.get(object, 'a.b.c', 'default');
4845 * // => 'default'
4846 */
4847function get(object, path, defaultValue) {
4848  var result = object == null ? undefined : baseGet(object, path);
4849  return result === undefined ? defaultValue : result;
4850}
4851
4852module.exports = get;
4853
4854
4855}),
4856"9290": (function (module, __unused_webpack_exports, __webpack_require__) {
4857var baseHasIn = __webpack_require__(6993),
4858    hasPath = __webpack_require__(7635);
4859
4860/**
4861 * Checks if `path` is a direct or inherited property of `object`.
4862 *
4863 * @static
4864 * @memberOf _
4865 * @since 4.0.0
4866 * @category Object
4867 * @param {Object} object The object to query.
4868 * @param {Array|string} path The path to check.
4869 * @returns {boolean} Returns `true` if `path` exists, else `false`.
4870 * @example
4871 *
4872 * var object = _.create({ 'a': _.create({ 'b': 2 }) });
4873 *
4874 * _.hasIn(object, 'a');
4875 * // => true
4876 *
4877 * _.hasIn(object, 'a.b');
4878 * // => true
4879 *
4880 * _.hasIn(object, ['a', 'b']);
4881 * // => true
4882 *
4883 * _.hasIn(object, 'b');
4884 * // => false
4885 */
4886function hasIn(object, path) {
4887  return object != null && hasPath(object, path, baseHasIn);
4888}
4889
4890module.exports = hasIn;
4891
4892
4893}),
4894"1622": (function (module) {
4895/**
4896 * This method returns the first argument it receives.
4897 *
4898 * @static
4899 * @since 0.1.0
4900 * @memberOf _
4901 * @category Util
4902 * @param {*} value Any value.
4903 * @returns {*} Returns `value`.
4904 * @example
4905 *
4906 * var object = { 'a': 1 };
4907 *
4908 * console.log(_.identity(object) === object);
4909 * // => true
4910 */
4911function identity(value) {
4912  return value;
4913}
4914
4915module.exports = identity;
4916
4917
4918}),
4919"9732": (function (module, __unused_webpack_exports, __webpack_require__) {
4920var baseIsArguments = __webpack_require__(841),
4921    isObjectLike = __webpack_require__(7013);
4922
4923/** Used for built-in method references. */
4924var objectProto = Object.prototype;
4925
4926/** Used to check objects for own properties. */
4927var hasOwnProperty = objectProto.hasOwnProperty;
4928
4929/** Built-in value references. */
4930var propertyIsEnumerable = objectProto.propertyIsEnumerable;
4931
4932/**
4933 * Checks if `value` is likely an `arguments` object.
4934 *
4935 * @static
4936 * @memberOf _
4937 * @since 0.1.0
4938 * @category Lang
4939 * @param {*} value The value to check.
4940 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
4941 *  else `false`.
4942 * @example
4943 *
4944 * _.isArguments(function() { return arguments; }());
4945 * // => true
4946 *
4947 * _.isArguments([1, 2, 3]);
4948 * // => false
4949 */
4950var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
4951  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
4952    !propertyIsEnumerable.call(value, 'callee');
4953};
4954
4955module.exports = isArguments;
4956
4957
4958}),
4959"6377": (function (module) {
4960/**
4961 * Checks if `value` is classified as an `Array` object.
4962 *
4963 * @static
4964 * @memberOf _
4965 * @since 0.1.0
4966 * @category Lang
4967 * @param {*} value The value to check.
4968 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
4969 * @example
4970 *
4971 * _.isArray([1, 2, 3]);
4972 * // => true
4973 *
4974 * _.isArray(document.body.children);
4975 * // => false
4976 *
4977 * _.isArray('abc');
4978 * // => false
4979 *
4980 * _.isArray(_.noop);
4981 * // => false
4982 */
4983var isArray = Array.isArray;
4984
4985module.exports = isArray;
4986
4987
4988}),
4989"508": (function (module, __unused_webpack_exports, __webpack_require__) {
4990var isFunction = __webpack_require__(6644),
4991    isLength = __webpack_require__(7924);
4992
4993/**
4994 * Checks if `value` is array-like. A value is considered array-like if it's
4995 * not a function and has a `value.length` that's an integer greater than or
4996 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
4997 *
4998 * @static
4999 * @memberOf _
5000 * @since 4.0.0
5001 * @category Lang
5002 * @param {*} value The value to check.
5003 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
5004 * @example
5005 *
5006 * _.isArrayLike([1, 2, 3]);
5007 * // => true
5008 *
5009 * _.isArrayLike(document.body.children);
5010 * // => true
5011 *
5012 * _.isArrayLike('abc');
5013 * // => true
5014 *
5015 * _.isArrayLike(_.noop);
5016 * // => false
5017 */
5018function isArrayLike(value) {
5019  return value != null && isLength(value.length) && !isFunction(value);
5020}
5021
5022module.exports = isArrayLike;
5023
5024
5025}),
5026"6018": (function (module, exports, __webpack_require__) {
5027/* module decorator */ module = __webpack_require__.nmd(module);
5028var root = __webpack_require__(5238),
5029    stubFalse = __webpack_require__(5786);
5030
5031/** Detect free variable `exports`. */
5032var freeExports =  true && exports && !exports.nodeType && exports;
5033
5034/** Detect free variable `module`. */
5035var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
5036
5037/** Detect the popular CommonJS extension `module.exports`. */
5038var moduleExports = freeModule && freeModule.exports === freeExports;
5039
5040/** Built-in value references. */
5041var Buffer = moduleExports ? root.Buffer : undefined;
5042
5043/* Built-in method references for those with the same name as other `lodash` methods. */
5044var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
5045
5046/**
5047 * Checks if `value` is a buffer.
5048 *
5049 * @static
5050 * @memberOf _
5051 * @since 4.3.0
5052 * @category Lang
5053 * @param {*} value The value to check.
5054 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
5055 * @example
5056 *
5057 * _.isBuffer(new Buffer(2));
5058 * // => true
5059 *
5060 * _.isBuffer(new Uint8Array(2));
5061 * // => false
5062 */
5063var isBuffer = nativeIsBuffer || stubFalse;
5064
5065module.exports = isBuffer;
5066
5067
5068}),
5069"6633": (function (module, __unused_webpack_exports, __webpack_require__) {
5070var baseKeys = __webpack_require__(7407),
5071    getTag = __webpack_require__(9937),
5072    isArguments = __webpack_require__(9732),
5073    isArray = __webpack_require__(6377),
5074    isArrayLike = __webpack_require__(508),
5075    isBuffer = __webpack_require__(6018),
5076    isPrototype = __webpack_require__(8857),
5077    isTypedArray = __webpack_require__(8586);
5078
5079/** `Object#toString` result references. */
5080var mapTag = '[object Map]',
5081    setTag = '[object Set]';
5082
5083/** Used for built-in method references. */
5084var objectProto = Object.prototype;
5085
5086/** Used to check objects for own properties. */
5087var hasOwnProperty = objectProto.hasOwnProperty;
5088
5089/**
5090 * Checks if `value` is an empty object, collection, map, or set.
5091 *
5092 * Objects are considered empty if they have no own enumerable str
5092ing keyed
5093 * properties.
5094 *
5095 * Array-like values such as `arguments` objects, arrays, buffers, strings, or
5096 * jQuery-like collections are considered empty if they have a `length` of `0`.
5097 * Similarly, maps and sets are considered empty if they have a `size` of `0`.
5098 *
5099 * @static
5100 * @memberOf _
5101 * @since 0.1.0
5102 * @category Lang
5103 * @param {*} value The value to check.
5104 * @returns {boolean} Returns `true` if `value` is empty, else `false`.
5105 * @example
5106 *
5107 * _.isEmpty(null);
5108 * // => true
5109 *
5110 * _.isEmpty(true);
5111 * // => true
5112 *
5113 * _.isEmpty(1);
5114 * // => true
5115 *
5116 * _.isEmpty([1, 2, 3]);
5117 * // => false
5118 *
5119 * _.isEmpty({ 'a': 1 });
5120 * // => false
5121 */
5122function isEmpty(value) {
5123  if (value == null) {
5124    return true;
5125  }
5126  if (isArrayLike(value) &&
5127      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
5128        isBuffer(value) || isTypedArray(value) || isArguments(value))) {
5129    return !value.length;
5130  }
5131  var tag = getTag(value);
5132  if (tag == mapTag || tag == setTag) {
5133    return !value.size;
5134  }
5135  if (isPrototype(value)) {
5136    return !baseKeys(value).length;
5137  }
5138  for (var key in value) {
5139    if (hasOwnProperty.call(value, key)) {
5140      return false;
5141    }
5142  }
5143  return true;
5144}
5145
5146module.exports = isEmpty;
5147
5148
5149}),
5150"6644": (function (module, __unused_webpack_exports, __webpack_require__) {
5151var baseGetTag = __webpack_require__(3757),
5152    isObject = __webpack_require__(8532);
5153
5154/** `Object#toString` result references. */
5155var asyncTag = '[object AsyncFunction]',
5156    funcTag = '[object Function]',
5157    genTag = '[object GeneratorFunction]',
5158    proxyTag = '[object Proxy]';
5159
5160/**
5161 * Checks if `value` is classified as a `Function` object.
5162 *
5163 * @static
5164 * @memberOf _
5165 * @since 0.1.0
5166 * @category Lang
5167 * @param {*} value The value to check.
5168 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
5169 * @example
5170 *
5171 * _.isFunction(_);
5172 * // => true
5173 *
5174 * _.isFunction(/abc/);
5175 * // => false
5176 */
5177function isFunction(value) {
5178  if (!isObject(value)) {
5179    return false;
5180  }
5181  // The use of `Object#toString` avoids issues with the `typeof` operator
5182  // in Safari 9 which returns 'object' for typed arrays and other constructors.
5183  var tag = baseGetTag(value);
5184  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
5185}
5186
5187module.exports = isFunction;
5188
5189
5190}),
5191"7924": (function (module) {
5192/** Used as references for various `Number` constants. */
5193var MAX_SAFE_INTEGER = 9007199254740991;
5194
5195/**
5196 * Checks if `value` is a valid array-like length.
5197 *
5198 * **Note:** This method is loosely based on
5199 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
5200 *
5201 * @static
5202 * @memberOf _
5203 * @since 4.0.0
5204 * @category Lang
5205 * @param {*} value The value to check.
5206 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
5207 * @example
5208 *
5209 * _.isLength(3);
5210 * // => true
5211 *
5212 * _.isLength(Number.MIN_VALUE);
5213 * // => false
5214 *
5215 * _.isLength(Infinity);
5216 * // => false
5217 *
5218 * _.isLength('3');
5219 * // => false
5220 */
5221function isLength(value) {
5222  return typeof value == 'number' &&
5223    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
5224}
5225
5226module.exports = isLength;
5227
5228
5229}),
5230"8532": (function (module) {
5231/**
5232 * Checks if `value` is the
5233 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
5234 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
5235 *
5236 * @static
5237 * @memberOf _
5238 * @since 0.1.0
5239 * @category Lang
5240 * @param {*} value The value to check.
5241 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
5242 * @example
5243 *
5244 * _.isObject({});
5245 * // => true
5246 *
5247 * _.isObject([1, 2, 3]);
5248 * // => true
5249 *
5250 * _.isObject(_.noop);
5251 * // => true
5252 *
5253 * _.isObject(null);
5254 * // => false
5255 */
5256function isObject(value) {
5257  var type = typeof value;
5258  return value != null && (type == 'object' || type == 'function');
5259}
5260
5261module.exports = isObject;
5262
5263
5264}),
5265"7013": (function (module) {
5266/**
5267 * Checks if `value` is object-like. A value is object-like if it's not `null`
5268 * and has a `typeof` result of "object".
5269 *
5270 * @static
5271 * @memberOf _
5272 * @since 4.0.0
5273 * @category Lang
5274 * @param {*} value The value to check.
5275 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
5276 * @example
5277 *
5278 * _.isObjectLike({});
5279 * // => true
5280 *
5281 * _.isObjectLike([1, 2, 3]);
5282 * // => true
5283 *
5284 * _.isObjectLike(_.noop);
5285 * // => false
5286 *
5287 * _.isObjectLike(null);
5288 * // => false
5289 */
5290function isObjectLike(value) {
5291  return value != null && typeof value == 'object';
5292}
5293
5294module.exports = isObjectLike;
5295
5296
5297}),
5298"1085": (function (module, __unused_webpack_exports, __webpack_require__) {
5299var baseGetTag = __webpack_require__(3757),
5300    isArray = __webpack_require__(6377),
5301    isObjectLike = __webpack_require__(7013);
5302
5303/** `Object#toString` result references. */
5304var stringTag = '[object String]';
5305
5306/**
5307 * Checks if `value` is classified as a `String` primitive or object.
5308 *
5309 * @static
5310 * @since 0.1.0
5311 * @memberOf _
5312 * @category Lang
5313 * @param {*} value The value to check.
5314 * @returns {boolean} Returns `true` if `value` is a string, else `false`.
5315 * @example
5316 *
5317 * _.isString('abc');
5318 * // => true
5319 *
5320 * _.isString(1);
5321 * // => false
5322 */
5323function isString(value) {
5324  return typeof value == 'string' ||
5325    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
5326}
5327
5328module.exports = isString;
5329
5330
5331}),
5332"1359": (function (module, __unused_webpack_exports, __webpack_require__) {
5333var baseGetTag = __webpack_require__(3757),
5334    isObjectLike = __webpack_require__(7013);
5335
5336/** `Object#toString` result references. */
5337var symbolTag = '[object Symbol]';
5338
5339/**
5340 * Checks if `value` is classified as a `Symbol` primitive or object.
5341 *
5342 * @static
5343 * @memberOf _
5344 * @since 4.0.0
5345 * @category Lang
5346 * @param {*} value The value to check.
5347 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
5348 * @example
5349 *
5350 * _.isSymbol(Symbol.iterator);
5351 * // => true
5352 *
5353 * _.isSymbol('abc');
5354 * // => false
5355 */
5356function isSymbol(value) {
5357  return typeof value == 'symbol' ||
5358    (isObjectLike(value) && baseGetTag(value) == symbolTag);
5359}
5360
5361module.exports = isSymbol;
5362
5363
5364}),
5365"8586": (function (module, __unused_webpack_exports, __webpack_require__) {
5366var baseIsTypedArray = __webpack_require__(2195),
5367    baseUnary = __webpack_require__(7509),
5368    nodeUtil = __webpack_require__(895);
5369
5370/* Node.js helper references. */
5371var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
5372
5373/**
5374 * Checks if `value` is classified as a typed array.
5375 *
5376 * @static
5377 * @memberOf _
5378 * @since 3.0.0
5379 * @category Lang
5380 * @param {*} value The value to check.
5381 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
5382 * @example
5383 *
5384 * _.isTypedArray(new Uint8Array);
5385 * // => true
5386 *
5387 * _.isTypedArray([]);
5388 * // => false
5389 */
5390var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
5391
5392module.exports = isTypedArray;
5393
5394
5395}),
5396"7361": (function (module, __unused_webpack_exports, __webpack_require__) {
5397var arrayLikeKeys = __webpack_require__(4979),
5398    baseKeys = __webpack_require__(7407),
5399    isArrayLike = __webpack_require__(508);
5400
5401/**
5402 * Creates an array of the own enumerable property names of `object`.
5403 *
5404 * **Note:** Non-object values are coerced to objects. See the
5405 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
5406 * for more details.
5407 *
5408 * @static
5409 * @since 0.1.0
5410 * @memberOf _
5411 * @category Object
5412 * @param {Object} object The object to query.
5413 * @returns {Array} Returns the array of property names.
5414 * @example
5415 *
5416 * function Foo() {
5417 *   this.a = 1;
5418 *   this.b = 2;
5419 * }
5420 *
5421 * Foo.prototype.c = 3;
5422 *
5423 * _.keys(new Foo);
5424 * // => ['a', 'b'] (iteration order is not guaranteed)
5425 *
5426 * _.keys('hi');
5427 * // => ['0', '1']
5428 */
5429function keys(object) {
5430  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
5431}
5432
5433module.exports = keys;
5434
5435
5436}),
5437"3747": (function (module, __unused_webpack_exports, __webpack_require__) {
5438var arrayLikeKeys = __webpack_require__(4979),
5439    baseKeysIn = __webpack_require__(9237),
5440    isArrayLike = __webpack_require__(508);
5441
5442/**
5443 * Creates an array of the own and inherited enumerable property names of `object`.
5444 *
5445 * **Note:** Non-object values are coerced to objects.
5446 *
5447 * @static
5448 * @memberOf _
5449 * @since 3.0.0
5450 * @category Object
5451 * @param {Object} object The object to query.
5452 * @returns {Array} Returns the array of property names.
5453 * @example
5454 *
5455 * function Foo() {
5456 *   this.a = 1;
5457 *   this.b = 2;
5458 * }
5459 *
5460 * Foo.prototype.c = 3;
5461 *
5462 * _.keysIn(new Foo);
5463 * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
5464 */
5465function keysIn(object) {
5466  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
5467}
5468
5469module.exports = keysIn;
5470
5471
5472}),
5473"3729": (function (module, __unused_webpack_exports, __webpack_require__) {
5474var baseAssignValue = __webpack_require__(2676),
5475    baseForOwn = __webpack_require__(3406),
5476    baseIteratee = __webpack_require__(5462);
5477
5478/**
5479 * Creates an object with the same keys as `object` and values generated
5480 * by running each own enumerable string keyed property of `object` thru
5481 * `iteratee`. The iteratee is invoked with three arguments:
5482 * (value, key, object).
5483 *
5484 * @static
5485 * @memberOf _
5486 * @since 2.4.0
5487 * @category Object
5488 * @param {Object} object The object to iterate over.
5489 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
5490 * @returns {Object} Returns the new mapped object.
5491 * @see _.mapKeys
5492 * @example
5493 *
5494 * var users = {
5495 *   'fred':    { 'user': 'fred',    'age': 40 },
5496 *   'pebbles': { 'user': 'pebbles', 'age': 1 }
5497 * };
5498 *
5499 * _.mapValues(users, function(o) { return o.age; });
5500 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
5501 *
5502 * // The `_.property` iteratee shorthand.
5503 * _.mapValues(users, 'age');
5504 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
5505 */
5506function mapValues(object, iteratee) {
5507  var result = {};
5508  iteratee = baseIteratee(iteratee, 3);
5509
5510  baseForOwn(object, function(value, key, object) {
5511    baseAssignValue(result, key, iteratee(value, key, object));
5512  });
5513  return result;
5514}
5515
5516module.exports = mapValues;
5517
5518
5519}),
5520"4984": (function (module, __unused_webpack_exports, __webpack_require__) {
5521var MapCache = __webpack_require__(4544);
5522
5523/** Error message constants. */
5524var FUNC_ERROR_TEXT = 'Expected a function';
5525
5526/**
5527 * Creates a function that memoizes the result of `func`. If `resolver` is
5528 * provided, it determines the cache key for storing the result based on the
5529 * arguments provided to the memoized function. By default, the first argument
5530 * provided to the memoized function is used as the map cache key. The `func`
5531 * is invoked with the `this` binding of the memoized function.
5532 *
5533 * **Note:** The cache is exposed as the `cache` property on the memoized
5534 * function. Its creation may be customized by replacing the `_.memoize.Cache`
5535 * constructor with one whose instances implement the
5536 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
5537 * method interface of `clear`, `delete`, `get`, `has`, and `set`.
5538 *
5539 * @static
5540 * @memberOf _
5541 * @since 0.1.0
5542 * @category Function
5543 * @param {Function} func The function to have its output memoized.
5544 * @param {Function} [resolver] The function to resolve the cache key.
5545 * @returns {Function} Returns the new memoized function.
5546 * @example
5547 *
5548 * var object = { 'a': 1, 'b': 2 };
5549 * var other = { 'c': 3, 'd': 4 };
5550 *
5551 * var values = _.memoize(_.values);
5552 * values(object);
5553 * // => [1, 2]
5554 *
5555 * values(other);
5556 * // => [3, 4]
5557 *
5558 * object.a = 2;
5559 * values(object);
5560 * // => [1, 2]
5561 *
5562 * // Modify the result cache.
5563 * values.cache.set(object, ['a', 'b']);
5564 * values(object);
5565 * // => ['a', 'b']
5566 *
5567 * // Replace `_.memoize.Cache`.
5568 * _.memoize.Cache = WeakMap;
5569 */
5570function memoize(func, resolver) {
5571  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
5572    throw new TypeError(FUNC_ERROR_TEXT);
5573  }
5574  var memoized = function() {
5575    var args = arguments,
5576        key = resolver ? resolver.apply(this, args) : args[0],
5577        cache = memoized.cache;
5578
5579    if (cache.has(key)) {
5580      return cache.get(key);
5581    }
5582    var result = func.apply(this, args);
5583    memoized.cache = cache.set(key, result) || cache;
5584    return result;
5585  };
5586  memoized.cache = new (memoize.Cache || MapCache);
5587  return memoized;
5588}
5589
5590// Expose `MapCache`.
5591memoize.Cache = MapCache;
5592
5593module.exports = memoize;
5594
5595
5596}),
5597"3103": (function (module) {
5598/** Error message constants. */
5599var FUNC_ERROR_TEXT = 'Expected a function';
5600
5601/**
5602 * Creates a function that negates the result of the predicate `func`. The
5603 * `func` predicate is invoked with the `this` binding and arguments of the
5604 * created function.
5605 *
5606 * @static
5607 * @memberOf _
5608 * @since 3.0.0
5609 * @category Function
5610 * @param {Function} predicate The predicate to negate.
5611 * @returns {Function} Returns the new negated function.
5612 * @example
5613 *
5614 * function isEven(n) {
5615 *   return n % 2 == 0;
5616 * }
5617 *
5618 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
5619 * // => [1, 3, 5]
5620 */
5621function negate(predicate) {
5622  if (typeof predicate != 'function') {
5623    throw new TypeError(FUNC_ERROR_TEXT);
5624  }
5625  return function() {
5626    var args = arguments;
5627    switch (args.length) {
5628      case 0: return !predicate.call(this);
5629      case 1: return !predicate.call(this, args[0]);
5630      case 2: return !predicate.call(this, args[0], args[1]);
5631      case 3: return !predicate.call(this, args[0], args[1], args[2]);
5632    }
5633    return !predicate.apply(this, args);
5634  };
5635}
5636
5637module.exports = negate;
5638
5639
5640}),
5641"6032": (function (module) {
5642/**
5643 * This method returns `undefined`.
5644 *
5645 * @static
5646 * @memberOf _
5647 * @since 2.3.0
5648 * @category Util
5649 * @example
5650 *
5651 * _.times(2, _.noop);
5652 * // => [undefined, undefined]
5653 */
5654function noop() {
5655  // No operation performed.
5656}
5657
5658module.exports = noop;
5659
5660
5661}),
5662"806": (function (module, __unused_webpack_exports, __webpack_require__) {
5663var root = __webpack_require__(5238);
5664
5665/**
5666 * Gets the timestamp of the number of milliseconds that have elapsed since
5667 * the Unix epoch (1 January 1970 00:00:00 UTC).
5668 *
5669 * @static
5670 * @memberOf _
5671 * @since 2.4.0
5672 * @category Date
5673 * @returns {number} Returns the timestamp.
5674 * @example
5675 *
5676 * _.defer(function(stamp) {
5677 *   console.log(_.now() - stamp);
5678 * }, _.now());
5679 * // => Logs the number of milliseconds it took for the deferred invocation.
5680 */
5681var now = function() {
5682  return root.Date.now();
5683};
5684
5685module.exports = now;
5686
5687
5688}),
5689"3452": (function (module, __unused_webpack_exports, __webpack_require__) {
5690var baseIteratee = __webpack_require__(5462),
5691    negate = __webpack_require__(3103),
5692    pickBy = __webpack_require__(4103);
5693
5694/**
5695 * The opposite of `_.pickBy`;
5695 this method creates an object composed of
5696 * the own and inherited enumerable string keyed properties of `object` that
5697 * `predicate` doesn't return truthy for. The predicate is invoked with two
5698 * arguments: (value, key).
5699 *
5700 * @static
5701 * @memberOf _
5702 * @since 4.0.0
5703 * @category Object
5704 * @param {Object} object The source object.
5705 * @param {Function} [predicate=_.identity] The function invoked per property.
5706 * @returns {Object} Returns the new object.
5707 * @example
5708 *
5709 * var object = { 'a': 1, 'b': '2', 'c': 3 };
5710 *
5711 * _.omitBy(object, _.isNumber);
5712 * // => { 'b': '2' }
5713 */
5714function omitBy(object, predicate) {
5715  return pickBy(object, negate(baseIteratee(predicate)));
5716}
5717
5718module.exports = omitBy;
5719
5720
5721}),
5722"4103": (function (module, __unused_webpack_exports, __webpack_require__) {
5723var arrayMap = __webpack_require__(1098),
5724    baseIteratee = __webpack_require__(5462),
5725    basePickBy = __webpack_require__(7100),
5726    getAllKeysIn = __webpack_require__(9254);
5727
5728/**
5729 * Creates an object composed of the `object` properties `predicate` returns
5730 * truthy for. The predicate is invoked with two arguments: (value, key).
5731 *
5732 * @static
5733 * @memberOf _
5734 * @since 4.0.0
5735 * @category Object
5736 * @param {Object} object The source object.
5737 * @param {Function} [predicate=_.identity] The function invoked per property.
5738 * @returns {Object} Returns the new object.
5739 * @example
5740 *
5741 * var object = { 'a': 1, 'b': '2', 'c': 3 };
5742 *
5743 * _.pickBy(object, _.isNumber);
5744 * // => { 'a': 1, 'c': 3 }
5745 */
5746function pickBy(object, predicate) {
5747  if (object == null) {
5748    return {};
5749  }
5750  var props = arrayMap(getAllKeysIn(object), function(prop) {
5751    return [prop];
5752  });
5753  predicate = baseIteratee(predicate);
5754  return basePickBy(object, props, function(value, path) {
5755    return predicate(value, path[0]);
5756  });
5757}
5758
5759module.exports = pickBy;
5760
5761
5762}),
5763"8303": (function (module, __unused_webpack_exports, __webpack_require__) {
5764var baseProperty = __webpack_require__(2726),
5765    basePropertyDeep = __webpack_require__(1374),
5766    isKey = __webpack_require__(7074),
5767    toKey = __webpack_require__(8481);
5768
5769/**
5770 * Creates a function that returns the value at `path` of a given object.
5771 *
5772 * @static
5773 * @memberOf _
5774 * @since 2.4.0
5775 * @category Util
5776 * @param {Array|string} path The path of the property to get.
5777 * @returns {Function} Returns the new accessor function.
5778 * @example
5779 *
5780 * var objects = [
5781 *   { 'a': { 'b': 2 } },
5782 *   { 'a': { 'b': 1 } }
5783 * ];
5784 *
5785 * _.map(objects, _.property('a.b'));
5786 * // => [2, 1]
5787 *
5788 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
5789 * // => [1, 2]
5790 */
5791function property(path) {
5792  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
5793}
5794
5795module.exports = property;
5796
5797
5798}),
5799"1455": (function (module, __unused_webpack_exports, __webpack_require__) {
5800var arrayReduce = __webpack_require__(2607),
5801    baseEach = __webpack_require__(8264),
5802    baseIteratee = __webpack_require__(5462),
5803    baseReduce = __webpack_require__(9864),
5804    isArray = __webpack_require__(6377);
5805
5806/**
5807 * Reduces `collection` to a value which is the accumulated result of running
5808 * each element in `collection` thru `iteratee`, where each successive
5809 * invocation is supplied the return value of the previous. If `accumulator`
5810 * is not given, the first element of `collection` is used as the initial
5811 * value. The iteratee is invoked with four arguments:
5812 * (accumulator, value, index|key, collection).
5813 *
5814 * Many lodash methods are guarded to work as iteratees for methods like
5815 * `_.reduce`, `_.reduceRight`, and `_.transform`.
5816 *
5817 * The guarded methods are:
5818 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
5819 * and `sortBy`
5820 *
5821 * @static
5822 * @memberOf _
5823 * @since 0.1.0
5824 * @category Collection
5825 * @param {Array|Object} collection The collection to iterate over.
5826 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
5827 * @param {*} [accumulator] The initial value.
5828 * @returns {*} Returns the accumulated value.
5829 * @see _.reduceRight
5830 * @example
5831 *
5832 * _.reduce([1, 2], function(sum, n) {
5833 *   return sum + n;
5834 * }, 0);
5835 * // => 3
5836 *
5837 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
5838 *   (result[value] || (result[value] = [])).push(key);
5839 *   return result;
5840 * }, {});
5841 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
5842 */
5843function reduce(collection, iteratee, accumulator) {
5844  var func = isArray(collection) ? arrayReduce : baseReduce,
5845      initAccum = arguments.length < 3;
5846
5847  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
5848}
5849
5850module.exports = reduce;
5851
5852
5853}),
5854"4659": (function (module, __unused_webpack_exports, __webpack_require__) {
5855var baseKeys = __webpack_require__(7407),
5856    getTag = __webpack_require__(9937),
5857    isArrayLike = __webpack_require__(508),
5858    isString = __webpack_require__(1085),
5859    stringSize = __webpack_require__(6749);
5860
5861/** `Object#toString` result references. */
5862var mapTag = '[object Map]',
5863    setTag = '[object Set]';
5864
5865/**
5866 * Gets the size of `collection` by returning its length for array-like
5867 * values or the number of own enumerable string keyed properties for objects.
5868 *
5869 * @static
5870 * @memberOf _
5871 * @since 0.1.0
5872 * @category Collection
5873 * @param {Array|Object|string} collection The collection to inspect.
5874 * @returns {number} Returns the collection size.
5875 * @example
5876 *
5877 * _.size([1, 2, 3]);
5878 * // => 3
5879 *
5880 * _.size({ 'a': 1, 'b': 2 });
5881 * // => 2
5882 *
5883 * _.size('pebbles');
5884 * // => 7
5885 */
5886function size(collection) {
5887  if (collection == null) {
5888    return 0;
5889  }
5890  if (isArrayLike(collection)) {
5891    return isString(collection) ? stringSize(collection) : collection.length;
5892  }
5893  var tag = getTag(collection);
5894  if (tag == mapTag || tag == setTag) {
5895    return collection.size;
5896  }
5897  return baseKeys(collection).length;
5898}
5899
5900module.exports = size;
5901
5902
5903}),
5904"1036": (function (module) {
5905/**
5906 * This method returns a new empty array.
5907 *
5908 * @static
5909 * @memberOf _
5910 * @since 4.13.0
5911 * @category Util
5912 * @returns {Array} Returns the new empty array.
5913 * @example
5914 *
5915 * var arrays = _.times(2, _.stubArray);
5916 *
5917 * console.log(arrays);
5918 * // => [[], []]
5919 *
5920 * console.log(arrays[0] === arrays[1]);
5921 * // => false
5922 */
5923function stubArray() {
5924  return [];
5925}
5926
5927module.exports = stubArray;
5928
5929
5930}),
5931"5786": (function (module) {
5932/**
5933 * This method returns `false`.
5934 *
5935 * @static
5936 * @memberOf _
5937 * @since 4.13.0
5938 * @category Util
5939 * @returns {boolean} Returns `false`.
5940 * @example
5941 *
5942 * _.times(2, _.stubFalse);
5943 * // => [false, false]
5944 */
5945function stubFalse() {
5946  return false;
5947}
5948
5949module.exports = stubFalse;
5950
5951
5952}),
5953"5082": (function (module, __unused_webpack_exports, __webpack_require__) {
5954var debounce = __webpack_require__(8305),
5955    isObject = __webpack_require__(8532);
5956
5957/** Error message constants. */
5958var FUNC_ERROR_TEXT = 'Expected a function';
5959
5960/**
5961 * Creates a throttled function that only invokes `func` at most once per
5962 * every `wait` milliseconds. The throttled function comes with a `cancel`
5963 * method to cancel delayed `func` invocations and a `flush` method to
5964 * immediately invoke them. Provide `options` to indicate whether `func`
5965 * should be invoked on the leading and/or trailing edge of the `wait`
5966 * timeout. The `func` is invoked with the last arguments provided to the
5967 * throttled function. Subsequent calls to the throttled function return the
5968 * result of the last `func` invocation.
5969 *
5970 * **Note:** If `leading` and `trailing` options are `true`, `func` is
5971 * invoked on the trailing edge of the timeout only if the throttled function
5972 * is invoked more than once during the `wait` timeout.
5973 *
5974 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
5975 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
5976 *
5977 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
5978 * for details over the differences between `_.throttle` and `_.debounce`.
5979 *
5980 * @static
5981 * @memberOf _
5982 * @since 0.1.0
5983 * @category Function
5984 * @param {Function} func The function to throttle.
5985 * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
5986 * @param {Object} [options={}] The options object.
5987 * @param {boolean} [options.leading=true]
5988 *  Specify invoking on the leading edge of the timeout.
5989 * @param {boolean} [options.trailing=true]
5990 *  Specify invoking on the trailing edge of the timeout.
5991 * @returns {Function} Returns the new throttled function.
5992 * @example
5993 *
5994 * // Avoid excessively updating the position while scrolling.
5995 * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
5996 *
5997 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
5998 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
5999 * jQuery(element).on('click', throttled);
6000 *
6001 * // Cancel the trailing throttled invocation.
6002 * jQuery(window).on('popstate', throttled.cancel);
6003 */
6004function throttle(func, wait, options) {
6005  var leading = true,
6006      trailing = true;
6007
6008  if (typeof func != 'function') {
6009    throw new TypeError(FUNC_ERROR_TEXT);
6010  }
6011  if (isObject(options)) {
6012    leading = 'leading' in options ? !!options.leading : leading;
6013    trailing = 'trailing' in options ? !!options.trailing : trailing;
6014  }
6015  return debounce(func, wait, {
6016    'leading': leading,
6017    'maxWait': wait,
6018    'trailing': trailing
6019  });
6020}
6021
6022module.exports = throttle;
6023
6024
6025}),
6026"5597": (function (module, __unused_webpack_exports, __webpack_require__) {
6027var toNumber = __webpack_require__(6127);
6028
6029/** Used as references for various `Number` constants. */
6030var INFINITY = 1 / 0,
6031    MAX_INTEGER = 1.7976931348623157e+308;
vendor: 8,033 bytes, lines 6032-6290
6032
6033/**
6034 * Converts `value` to a finite number.
6035 *
6036 * @static
6037 * @memberOf _
6038 * @since 4.12.0
6039 * @category Lang
6040 * @param {*} value The value to convert.
6041 * @returns {number} Returns the converted number.
6042 * @example
6043 *
6044 * _.toFinite(3.2);
6045 * // => 3.2
6046 *
6047 * _.toFinite(Number.MIN_VALUE);
6048 * // => 5e-324
6049 *
6050 * _.toFinite(Infinity);
6051 * // => 1.7976931348623157e+308
6052 *
6053 * _.toFinite('3.2');
6054 * // => 3.2
6055 */
6056function toFinite(value) {
6057  if (!value) {
6058    return value === 0 ? value : 0;
6059  }
6060  value = toNumber(value);
6061  if (value === INFINITY || value === -INFINITY) {
6062    var sign = (value < 0 ? -1 : 1);
6063    return sign * MAX_INTEGER;
6064  }
6065  return value === value ? value : 0;
6066}
6067
6068module.exports = toFinite;
6069
6070
6071}),
6072"8536": (function (module, __unused_webpack_exports, __webpack_require__) {
6073var toFinite = __webpack_require__(5597);
6074
6075/**
6076 * Converts `value` to an integer.
6077 *
6078 * **Note:** This method is loosely based on
6079 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
6080 *
6081 * @static
6082 * @memberOf _
6083 * @since 4.0.0
6084 * @category Lang
6085 * @param {*} value The value to convert.
6086 * @returns {number} Returns the converted integer.
6087 * @example
6088 *
6089 * _.toInteger(3.2);
6090 * // => 3
6091 *
6092 * _.toInteger(Number.MIN_VALUE);
6093 * // => 0
6094 *
6095 * _.toInteger(Infinity);
6096 * // => 1.7976931348623157e+308
6097 *
6098 * _.toInteger('3.2');
6099 * // => 3
6100 */
6101function toInteger(value) {
6102  var result = toFinite(value),
6103      remainder = result % 1;
6104
6105  return result === result ? (remainder ? result - remainder : result) : 0;
6106}
6107
6108module.exports = toInteger;
6109
6110
6111}),
6112"6127": (function (module, __unused_webpack_exports, __webpack_require__) {
6113var baseTrim = __webpack_require__(1072),
6114    isObject = __webpack_require__(8532),
6115    isSymbol = __webpack_require__(1359);
6116
6117/** Used as references for various `Number` constants. */
6118var NAN = 0 / 0;
6119
6120/** Used to detect bad signed hexadecimal string values. */
6121var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
6122
6123/** Used to detect binary string values. */
6124var reIsBinary = /^0b[01]+$/i;
6125
6126/** Used to detect octal string values. */
6127var reIsOctal = /^0o[0-7]+$/i;
6128
6129/** Built-in method references without a dependency on `root`. */
6130var freeParseInt = parseInt;
6131
6132/**
6133 * Converts `value` to a number.
6134 *
6135 * @static
6136 * @memberOf _
6137 * @since 4.0.0
6138 * @category Lang
6139 * @param {*} value The value to process.
6140 * @returns {number} Returns the number.
6141 * @example
6142 *
6143 * _.toNumber(3.2);
6144 * // => 3.2
6145 *
6146 * _.toNumber(Number.MIN_VALUE);
6147 * // => 5e-324
6148 *
6149 * _.toNumber(Infinity);
6150 * // => Infinity
6151 *
6152 * _.toNumber('3.2');
6153 * // => 3.2
6154 */
6155function toNumber(value) {
6156  if (typeof value == 'number') {
6157    return value;
6158  }
6159  if (isSymbol(value)) {
6160    return NAN;
6161  }
6162  if (isObject(value)) {
6163    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
6164    value = isObject(other) ? (other + '') : other;
6165  }
6166  if (typeof value != 'string') {
6167    return value === 0 ? value : +value;
6168  }
6169  value = baseTrim(value);
6170  var isBinary = reIsBinary.test(value);
6171  return (isBinary || reIsOctal.test(value))
6172    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
6173    : (reIsBadHex.test(value) ? NAN : +value);
6174}
6175
6176module.exports = toNumber;
6177
6178
6179}),
6180"6214": (function (module, __unused_webpack_exports, __webpack_require__) {
6181var baseToString = __webpack_require__(9653);
6182
6183/**
6184 * Converts `value` to a string. An empty string is returned for `null`
6185 * and `undefined` values. The sign of `-0` is preserved.
6186 *
6187 * @static
6188 * @memberOf _
6189 * @since 4.0.0
6190 * @category Lang
6191 * @param {*} value The value to convert.
6192 * @returns {string} Returns the converted string.
6193 * @example
6194 *
6195 * _.toString(null);
6196 * // => ''
6197 *
6198 * _.toString(-0);
6199 * // => '-0'
6200 *
6201 * _.toString([1, 2, 3]);
6202 * // => '1,2,3'
6203 */
6204function toString(value) {
6205  return value == null ? '' : baseToString(value);
6206}
6207
6208module.exports = toString;
6209
6210
6211}),
6212"6985": (function (module, __unused_webpack_exports, __webpack_require__) {
6213var LazyWrapper = __webpack_require__(4281),
6214    LodashWrapper = __webpack_require__(9675),
6215    baseLodash = __webpack_require__(4382),
6216    isArray = __webpack_require__(6377),
6217    isObjectLike = __webpack_require__(7013),
6218    wrapperClone = __webpack_require__(219);
6219
6220/** Used for built-in method references. */
6221var objectProto = Object.prototype;
6222
6223/** Used to check objects for own properties. */
6224var hasOwnProperty = objectProto.hasOwnProperty;
6225
6226/**
6227 * Creates a `lodash` object which wraps `value` to enable implicit method
6228 * chain sequences. Methods that operate on and return arrays, collections,
6229 * and functions can be chained together. Methods that retrieve a single value
6230 * or may return a primitive value will automatically end the chain sequence
6231 * and return the unwrapped value. Otherwise, the value must be unwrapped
6232 * with `_#value`.
6233 *
6234 * Explicit chain sequences, which must be unwrapped with `_#value`, may be
6235 * enabled using `_.chain`.
6236 *
6237 * The execution of chained methods is lazy, that is, it's deferred until
6238 * `_#value` is implicitly or explicitly called.
6239 *
6240 * Lazy evaluation allows several methods to support shortcut fusion.
6241 * Shortcut fusion is an optimization to merge iteratee calls; this avoids
6242 * the creation of intermediate arrays and can greatly reduce the number of
6243 * iteratee executions. Sections of a chain sequence qualify for shortcut
6244 * fusion if the section is applied to an array and iteratees accept only
6245 * one argument. The heuristic for whether a section qualifies for shortcut
6246 * fusion is subject to change.
6247 *
6248 * Chaining is supported in custom builds as long as the `_#value` method is
6249 * directly or indirectly included in the build.
6250 *
6251 * In addition to lodash methods, wrappers have `Array` and `String` methods.
6252 *
6253 * The wrapper `Array` methods are:
6254 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
6255 *
6256 * The wrapper `String` methods are:
6257 * `replace` and `split`
6258 *
6259 * The wrapper methods that support shortcut fusion are:
6260 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
6261 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
6262 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
6263 *
6264 * The chainable wrapper methods are:
6265 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
6266 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
6267 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
6268 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
6269 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
6270 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
6271 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
6272 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
6273 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
6274 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
6275 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
6276 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
6277 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
6278 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
6279 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
6280 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
6281 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
6282 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
6283 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
6284 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
6285 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
6286 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
6287 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
6288 * `zipObject`, `zipObjectDeep`, and `zipWith`
6289 *
6290 * The wrapper methods that are **not** chainable by default are:
6291 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
6292 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
6293 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
6294 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
6295 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
6296 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
6297 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
6298 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
6299 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
6300 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
6301 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
6302 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
6303 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
6304 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
6305 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
6306 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
6307 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
6308 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
6309 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
6310 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
6311 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
6312 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
6313 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
6314 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
6315 * `upperFirst`, `value`, and `words`
6316 *
6317 * @name _
6318 * @constructor
6319 * @category Seq
6320 * @param {*} value The value to wrap in a `lodash` instance.
6321 * @returns {Object} Returns the new `lodash` wrapper instance.
6322 * @example
6323 *
6324 * function square(n) {
6325 *   return n * n;
6326 * }
6327 *
6328 * var wrapped = _([1, 2, 3]);
6329 *
6330 * // Returns an unwrapped value.
6331 * wrapped.reduce(_.add);
6332 * // => 6
6333 *
6334 * // Returns a wrapped value.
6335 * var squares = wrapped.map(square);
6336 *
6337 * _.isArray(squares);
6338 * // => false
6339 *
6340 * _.isArray(squares.value());
6341 * // => true
6342 */
6343function lodash(value) {
6344  if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
6345    if (value instanceof LodashWrapper) {
6346      return value;
6347    }
6348    if (hasOwnProperty.call(value, '__wrapped__')) {
6349      return wrapperClone(value);
6350    }
6351  }
6352  return new LodashWrapper(value);
6353}
6354
6355// Ensure wrappers are instances of `baseLodash`.
6356lodash.prototype = baseLodash.prototype;
6357lodash.prototype.constructor = lodash;
6358
6359module.exports = lodash;
6360
6361
6362}),
6363"9516": (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6364"use strict";
6365// ESM COMPAT FLAG
6366__webpack_require__.r(__webpack_exports__);
6367
6368// EXPORTS
6369__webpack_require__.d(__webpack_exports__, {
6370  combineReducers: () => (/* reexport */ combineReducers),
6371  applyMiddleware: () => (/* reexport */ applyMiddleware),
6372  createStore: () => (/* reexport */ createStore_createStore),
6373  compose: () => (/* reexport */ compose),
6374  bindActionCreators: () => (/* reexport */ bindActionCreators)
6375});
6376
6377;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_freeGlobal.js
6378/** Detect free variable `global` from Node.js. */
6379var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
6380
6381/* ESM default export */ const _freeGlobal = (freeGlobal);
6382
6383;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_root.js
6384
6385
6386/** Detect free variable `self`. */
6387var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
6388
6389/** Used as a reference to the global object. */
6390var root = _freeGlobal || freeSelf || Function('return this')();
6391
6392/* ESM default export */ const _root = (root);
6393
6394;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_Symbol.js
6395
6396
6397/** Built-in value references. */
6398var Symbol = _root.Symbol;
6399
6400/* ESM default export */ const _Symbol = (Symbol);
6401
6402;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_getRawTag.js
6403
6404
6405/** Used for built-in method references. */
6406var objectProto = Object.prototype;
6407
6408/** Used to check objects for own properties. */
6409var _getRawTag_hasOwnProperty = objectProto.hasOwnProperty;
6410
6411/**
6412 * Used to resolve the
6413 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
6414 * of values.
6415 */
6416var nativeObjectToString = objectProto.toString;
6417
6418/** Built-in value references. */
6419var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;
6420
6421/**
6422 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
6423 *
6424 * @private
6425 * @param {*} value The value to query.
6426 * @returns {string} Returns the raw `toStringTag`.
6427 */
6428function getRawTag(value) {
6429  var isOwn = _getRawTag_hasOwnProperty.call(value, symToStringTag),
6430      tag = value[symToStringTag];
6431
6432  try {
6433    value[symToStringTag] = undefined;
6434    var unmasked = true;
6435  } catch (e) {}
6436
6437  var result = nativeObjectToString.call(value);
6438  if (unmasked) {
6439    if (isOwn) {
6440      value[symToStringTag] = tag;
6441    } else {
6442      delete value[symToStringTag];
6443    }
6444  }
6445  return result;
6446}
6447
6448/* ESM default export */ const _getRawTag = (getRawTag);
6449
6450;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_objectToString.js
6451/** Used for built-in method references. */
6452var _objectToString_objectProto = Object.prototype;
6453
6454/**
6455 * Used to resolve the
6456 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
6457 * of values.
6458 */
6459var _objectToString_nativeObjectToString = _objectToString_objectProto.toString;
6460
6461/**
6462 * Converts `value` to a string using `Object.prototype.toString`.
6463 *
6464 * @private
6465 * @param {*} value The value to convert.
6466 * @returns {string} Returns the converted string.
6467 */
6468function objectToString(value) {
6469  return _objectToString_nativeObjectToString.call(value);
6470}
6471
6472/* ESM default export */ const _objectToString = (objectToString);
6473
6474;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_baseGetTag.js
6475
6476
6477
6478
6479/** `Object#toString` result references. */
6480var nullTag = '[object Null]',
6481    undefinedTag = '[object Undefined]';
6482
6483/** Built-in value references. */
6484var _baseGetTag_symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;
6485
6486/**
6487 * The base implementation of `getTag` without fallbacks for buggy environments.
6488 *
6489 * @private
6490 * @param {*} value The value to query.
6491 * @returns {string} Returns the `toStringTag`.
6492 */
6493function baseGetTag(value) {
6494  if (value == null) {
6495    return value === undefined ? undefinedTag : nullTag;
6496  }
6497  return (_baseGetTag_symToStringTag && _baseGetTag_symToStringTag in Object(value))
6498    ? _getRawTag(value)
6499    : _objectToString(value);
6500}
6501
6502/* ESM default export */ const _baseGetTag = (baseGetTag);
6503
6504;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_overArg.js
6505/**
6506 * Creates a unary function that invokes `func` with its argument transformed.
6507 *
6508 * @private
6509 * @param {Function} func The function to wrap.
6510 * @param {Function} transform The argument transform.
6511 * @returns {Function} Returns the new function.
6512 */
6513function overArg(func, transform) {
6514  return function(arg) {
6515    return func(transform(arg));
6516  };
6517}
6518
6519/* ESM default export */ const _overArg = (overArg);
6520
6521;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_getPrototype.js
6522
6523
6524/** Built-in value references. */
6525var getPrototype = _overArg(Object.getPrototypeOf, Object);
6526
6527/* ESM default export */ const _getPrototype = (getPrototype);
6528
6529;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/isObjectLike.js
6530/**
6531 * Checks if `value` is object-like. A value is object-like if it's not `null`
6532 * and has a `typeof` result of "object".
6533 *
6534 * @static
6535 * @memberOf _
6536 * @since 4.0.0
6537 * @category Lang
6538 * @param {*} value The value to check.
6539 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
6540 * @example
6541 *
6542 * _.isObjectLike({});
6543 * // => true
6544 *
6545 * _.isObjectLike([1, 2, 3]);
6546 * // => true
6547 *
6548 * _.isObjectLike(_.noop);
6549 * // => false
6550 *
6551 * _.isObjectLike(null);
6552 * // => false
6553 */
6554function isObjectLike(value) {
6555  return value != null && typeof value == 'object';
6556}
6557
6558/* ESM default export */ const lodash_es_isObjectLike = (isObjectLike);
6559
6560;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/isPlainObject.js
6561
6562
6563
6564
6565/** `Object#toString` result references. */
6566var objectTag = '[object Object]';
6567
6568/** Used for built-in method references. */
6569var funcProto = Function.prototype,
6570    isPlainObject_objectProto = Object.prototype;
6571
6572/** Used to resolve the decompiled source of functions. */
6573var funcToString = funcProto.toString;
6574
6575/** Used to check objects for own properties. */
6576var isPlainObject_hasOwnProperty = isPlainObject_objectProto.hasOwnProperty;
6577
6578/** Used to infer the `Object` constructor. */
6579var objectCtorString = funcToString.call(Object);
6580
6581/**
6582 * Checks if `value` is a plain object, that is, an object created by the
6583 * `Object` constructor or one with a `[[Prototype]]` of `null`.
6584 *
6585 * @static
6586 * @memberOf _
6587 * @since 0.8.0
6588 * @category Lang
6589 * @param {*} value The value to check.
6590 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
6591 * @example
6592 *
6593 * function Foo() {
6594 *   this.a = 1;
6595 * }
6596 *
6597 * _.isPlainObject(new Foo);
6598 * // => false
6599 *
6600 * _.isPlainObject([1, 2, 3]);
6601 * // => false
6602 *
6603 * _.isPlainObject({ 'x': 0, 'y': 0 });
6604 * // => true
6605 *
6606 * _.isPlainObject(Object.create(null));
6607 * // => true
6608 */
6609function isPlainObject_isPlainObject(value) {
6610  if (!lodash_es_isObjectLike(value) || _baseGetTag(value) != objectTag) {
6611    return false;
6612  }
6613  var proto = _getPrototype(value);
6614  if (proto === null) {
6615    return true;
6616  }
6617  var Ctor = isPlainObject_hasOwnProperty.call(proto, 'constructor') && proto.constructor;
6618  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
6619    funcToString.call(Ctor) == objectCtorString;
6620}
6621
6622/* ESM default export */ const lodash_es_isPlainObject = (isPlainObject_isPlainObject);
6623
6624// EXTERNAL MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/index.js + 1 modules
6625var es = __webpack_require__("3485");
6626;// CONCATENATED MODULE: ../../app/node_modules/redux/es/createStore.js
6627
6628
6629
6630/**
6631 * These are private action types reserved by Redux.
6632 * For any unknown actions, you must return the current state.
6633 * If the current state is undefined, you must return the initial state.
6634 * Do not reference these action types directly in your code.
6635 */
6636var createStore_ActionTypes = {
6637  INIT: '@@redux/INIT'
6638};
6639
6640/**
6641 * Creates a Redux store that holds the state tree.
6642 * The only way to change the data in the store is to call `dispatch()` on it.
6643 *
6644 * There should only be a single store in your app. To specify how different
6645 * parts of the state tree respond to actions, you may combine several reducers
6646 * into a single reducer function by using `combineReducers`.
6647 *
6648 * @param {Function} reducer A function that returns the next state tree, given
6649 * the current state tree and the action to handle.
6650 *
6651 * @param {any} [preloadedState] The initial state. You may optionally specify it
6652 * to hydrate the state from the server in universal apps, or to restore a
6653 * previously serialized user session.
6654 * If you use `combineReducers` to produce the root reducer function, this must be
6655 * an object with the same shape as `combineReducers` keys.
6656 *
6657 * @param {Function} enhancer The store enhancer. You may optionally specify it
6658 * to enhance the store with third-party capabilities such as middleware,
6659 * time travel, persistence, etc. The only store enhancer that ships with Redux
6660 * is `applyMiddleware()`.
6661 *
6662 * @returns {Store} A Redux store that lets you read the state, dispatch actions
6663 * and subscribe to changes.
6664 */
6665function createStore_createStore(reducer, preloadedState, enhancer) {
6666  var _ref2;
6667
6668  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
6669    enhancer = preloadedState;
6670    preloadedState = undefined;
6671  }
6672
6673  if (typeof enhancer !== 'undefined') {
6674    if (typeof enhancer !== 'function') {
6675      throw new Error('Expected the enhancer to be a function.');
6676    }
6677
6678    return enhancer(createStore_createStore)(reducer, preloadedState);
6679  }
6680
6681  if (typeof reducer !== 'function') {
6682    throw new Error('Expected the reducer to be a function.');
6683  }
6684
6685  var currentReducer = reducer;
6686  var currentState = preloadedState;
6687  var currentListeners = [];
6688  var nextListeners = currentListeners;
6689  var isDispatching = false;
6690
6691  function ensureCanMutateNextListeners() {
6692    if (nextListeners === currentListeners) {
6693      nextListeners = currentListeners.slice();
6694    }
6695  }
6696
6697  /**
6698   * Reads the state tree managed by the store.
6699   *
6700   * @returns {any} The current state tree of your application.
6701   */
6702  function getState() {
6703    return currentState;
6704  }
6705
6706  /**
6707   * Adds a change listener. It will be called any time an action is dispatched,
6708   * and some part of the state tree may potentially have changed. You may then
6709   * call `getState()` to read the current state tree inside the callback.
6710   *
6711   * You may call `dispatch()` from a change listener, with the following
6712   * caveats:
6713   *
6714   * 1. The subscriptions are snapshotted just before every `dispatch()` call.
6715   * If you subscribe or unsubscribe while the listeners are being invoked, this
6716   * will not have any effect on the `dispatch()` that is currently in progress.
6717   * However, the next `dispatch()` call, whether nested or not, will use a more
6718   * recent snapshot of the subscription list.
6719   *
6720   * 2. The listener should not expect to see all state changes, as the state
6721   * might have been updated multiple times during a nested `dispatch()` before
6722   * the listener is called. It is, however, guaranteed that all subscribers
6723   * registered before the `dispatch()` started will be called with the latest
6724   * state by the time it exits.
6725   *
6726   * @param {Function} listener A callback to be invoked on every dispatch.
6727   * @returns {Function} A function to remove this change listener.
6728   */
6729  function subscribe(listener) {
6730    if (typeof listener !== 'function') {
6731      throw new Error('Expected listener to be a function.');
6732    }
6733
6734    var isSubscribed = true;
6735
6736    ensureCanMutateNextListeners();
6737    nextListeners.push(listener);
6738
6739    return function unsubscribe() {
6740      if (!isSubscribed) {
6741        return;
6742      }
6743
6744      isSubscribed = false;
6745
6746      ensureCanMutateNextListeners();
6747      var index = nextListeners.indexOf(listener);
6748      nextListeners.splice(index, 1);
6749    };
6750  }
6751
6752  /**
6753   * Dispatches an action. It is the only way to trigger a state change.
6754   *
6755   * The `reducer` function, used to create the store, will be called with the
6756   * current state tree and the given `action`. Its return value will
6757   * be considered the **next** state of the tree, and the change listeners
6758   * will be notified.
6759   *
6760   * The base implementation only supports plain object actions. If you want to
6761   * dispatch a Promise, an Observable, a thunk, or something else, you need to
6762   * wrap your store creating function into the corresponding middleware. For
6763   * example, see the documentation for the `redux-thunk` package. Even the
6764   * middleware will eventually dispatch plain object actions using this method.
6765   *
6766   * @param {Object} action A plain object representing “what changed”. It is
6767   * a good idea to keep actions serializable so you can record and replay user
6768   * sessions, or use the time travelling `redux-devtools`. An action must have
6769   * a `type` property which may not be `undefined`. It is a good idea to use
6770   * string constants for action types.
6771   *
6772   * @returns {Object} For convenience, the same action object you dispatched.
6773   *
6774   * Note that, if you use a custom middleware, it may wrap `dispatch()` to
6775   * return something else (for example, a Promise you can await).
6776   */
6777  function dispatch(action) {
6778    if (!lodash_es_isPlainObject(action)) {
6779      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
6780    }
6781
6782    if (typeof action.type === 'undefined') {
6783      throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
6784    }
6785
6786    if (isDispatching) {
6787      throw new Error('Reducers may not dispatch actions.');
6788    }
6789
6790    try {
6791      isDispatching = true;
6792      currentState = currentReducer(currentState, action);
6793    } finally {
6794      isDispatching = false;
6795    }
6796
6797    var listeners = currentListeners = nextListeners;
6798    for (var i = 0; i < listeners.length; i++) {
6799      listeners[i]();
6800    }
6801
6802    return action;
6803  }
6804
6805  /**
6806   * Replaces the reducer currently used by the store to calculate the state.
6807   *
6808   * You might need this if your app implements code splitting and you want to
6809   * load some of the reducers dynamically. You might also need this if you
6810   * implement a hot reloading mechanism for Redux.
6811   *
6812   * @param {Function} nextReducer The reducer for the store to use instead.
6813   * @returns {void}
6814   */
6815  function replaceReducer(nextReducer) {
6816    if (typeof nextReducer !== 'function') {
6817      throw new Error('Expected the nextReducer to be a function.');
6818    }
6819
6820    currentReducer = nextReducer;
6821    dispatch({ type: createStore_ActionTypes.INIT });
6822  }
6823
6824  /**
6825   * Interoperability point for observable/reactive libraries.
6826   * @returns {observable} A minimal observable of state changes.
6827   * For more information, see the observable proposal:
6828   * https://github.com/zenparsing/es-observable
6829   */
6830  function observable() {
6831    var _ref;
6832
6833    var outerSubscribe = subscribe;
6834    return _ref = {
6835      /**
6836       * The minimal observable subscription method.
6837       * @param {Object} observer Any object that can be used as an observer.
6838       * The observer object should have a `next` method.
6839       * @returns {subscription} An object with an `unsubscribe` method that can
6840       * be used to unsubscribe the observable from the store, and prevent further
6841       * emission of values from the observable.
6842       */
6843      subscribe: function subscribe(observer) {
6844        if (typeof observer !== 'object') {
6845          throw new TypeError('Expected the observer to be an object.');
6846        }
6847
6848        function observeState() {
6849          if (observer.next) {
6850            observer.next(getState());
6851          }
6852        }
6853
6854        observeState();
6855        var unsubscribe = outerSubscribe(observeState);
6856        return { unsubscribe: unsubscribe };
6857      }
6858    }, _ref[es/* default */.Z] = function () {
6859      return this;
6860    }, _ref;
6861  }
6862
6863  // When a store is created, an "INIT" action is dispatched so that every
6864  // reducer returns their initial state. This effectively populates
6865  // the initial state tree.
6866  dispatch({ type: createStore_ActionTypes.INIT });
6867
6868  return _ref2 = {
6869    dispatch: dispatch,
6870    subscribe: subscribe,
6871    getState: getState,
6872    replaceReducer: replaceReducer
6873  }, _ref2[es/* default */.Z] = observable, _ref2;
6874}
6875;// CONCATENATED MODULE: ../../app/node_modules/redux/es/combineReducers.js
6876
6877
6878
6879
6880function getUndefinedStateErrorMessage(key, action) {
6881  var actionType = action && action.type;
6882  var actionName = actionType && '"' + actionType.toString() + '"' || 'an action';
6883
6884  return 'Given action ' + actionName + ', reducer "' + key + '" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state.';
6885}
6886
6887function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unex
6887pectedKeyCache) {
6888  var reducerKeys = Object.keys(reducers);
6889  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';
6890
6891  if (reducerKeys.length === 0) {
6892    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';
6893  }
6894
6895  if (!isPlainObject(inputState)) {
6896    return 'The ' + argumentName + ' has unexpected type of "' + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + '". Expected argument to be an object with the following ' + ('keys: "' + reducerKeys.join('", "') + '"');
6897  }
6898
6899  var unexpectedKeys = Object.keys(inputState).filter(function (key) {
6900    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];
6901  });
6902
6903  unexpectedKeys.forEach(function (key) {
6904    unexpectedKeyCache[key] = true;
6905  });
6906
6907  if (unexpectedKeys.length > 0) {
6908    return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('"' + unexpectedKeys.join('", "') + '" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('"' + reducerKeys.join('", "') + '". Unexpected keys will be ignored.');
6909  }
6910}
6911
6912function assertReducerSanity(reducers) {
6913  Object.keys(reducers).forEach(function (key) {
6914    var reducer = reducers[key];
6915    var initialState = reducer(undefined, { type: createStore_ActionTypes.INIT });
6916
6917    if (typeof initialState === 'undefined') {
6918      throw new Error('Reducer "' + key + '" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined.');
6919    }
6920
6921    var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');
6922    if (typeof reducer(undefined, { type: type }) === 'undefined') {
6923      throw new Error('Reducer "' + key + '" returned undefined when probed with a random type. ' + ('Don\'t try to handle ' + createStore_ActionTypes.INIT + ' or other actions in "redux/*" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined.');
6924    }
6925  });
6926}
6927
6928/**
6929 * Turns an object whose values are different reducer functions, into a single
6930 * reducer function. It will call every child reducer, and gather their results
6931 * into a single state object, whose keys correspond to the keys of the passed
6932 * reducer functions.
6933 *
6934 * @param {Object} reducers An object whose values correspond to different
6935 * reducer functions that need to be combined into one. One handy way to obtain
6936 * it is to use ES6 `import * as reducers` syntax. The reducers may never return
6937 * undefined for any action. Instead, they should return their initial state
6938 * if the state passed to them was undefined, and the current state for any
6939 * unrecognized action.
6940 *
6941 * @returns {Function} A reducer function that invokes every reducer inside the
6942 * passed object, and builds a state object with the same shape.
6943 */
6944function combineReducers(reducers) {
6945  var reducerKeys = Object.keys(reducers);
6946  var finalReducers = {};
6947  for (var i = 0; i < reducerKeys.length; i++) {
6948    var key = reducerKeys[i];
6949
6950    if (false) {}
6951
6952    if (typeof reducers[key] === 'function') {
6953      finalReducers[key] = reducers[key];
6954    }
6955  }
6956  var finalReducerKeys = Object.keys(finalReducers);
6957
6958  if (false) { var unexpectedKeyCache }
6959
6960  var sanityError;
6961  try {
6962    assertReducerSanity(finalReducers);
6963  } catch (e) {
6964    sanityError = e;
6965  }
6966
6967  return function combination() {
6968    var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
6969    var action = arguments[1];
6970
6971    if (sanityError) {
6972      throw sanityError;
6973    }
6974
6975    if (false) { var warningMessage }
6976
6977    var hasChanged = false;
6978    var nextState = {};
6979    for (var i = 0; i < finalReducerKeys.length; i++) {
6980      var key = finalReducerKeys[i];
6981      var reducer = finalReducers[key];
6982      var previousStateForKey = state[key];
6983      var nextStateForKey = reducer(previousStateForKey, action);
6984      if (typeof nextStateForKey === 'undefined') {
6985        var errorMessage = getUndefinedStateErrorMessage(key, action);
6986        throw new Error(errorMessage);
6987      }
6988      nextState[key] = nextStateForKey;
6989      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
6990    }
6991    return hasChanged ? nextState : state;
6992  };
6993}
6994;// CONCATENATED MODULE: ../../app/node_modules/redux/es/bindActionCreators.js
6995function bindActionCreator(actionCreator, dispatch) {
6996  return function () {
6997    return dispatch(actionCreator.apply(undefined, arguments));
6998  };
6999}
7000
7001/**
7002 * Turns an object whose values are action creators, into an object with the
7003 * same keys, but with every function wrapped into a `dispatch` call so they
7004 * may be invoked directly. This is just a convenience method, as you can call
7005 * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
7006 *
7007 * For convenience, you can also pass a single function as the first argument,
7008 * and get a function in return.
7009 *
7010 * @param {Function|Object} actionCreators An object whose values are action
7011 * creator functions. One handy way to obtain it is to use ES6 `import * as`
7012 * syntax. You may also pass a single function.
7013 *
7014 * @param {Function} dispatch The `dispatch` function available on your Redux
7015 * store.
7016 *
7017 * @returns {Function|Object} The object mimicking the original object, but with
7018 * every action creator wrapped into the `dispatch` call. If you passed a
7019 * function as `actionCreators`, the return value will also be a single
7020 * function.
7021 */
7022function bindActionCreators(actionCreators, dispatch) {
7023  if (typeof actionCreators === 'function') {
7024    return bindActionCreator(actionCreators, dispatch);
7025  }
7026
7027  if (typeof actionCreators !== 'object' || actionCreators === null) {
7028    throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');
7029  }
7030
7031  var keys = Object.keys(actionCreators);
7032  var boundActionCreators = {};
7033  for (var i = 0; i < keys.length; i++) {
7034    var key = keys[i];
7035    var actionCreator = actionCreators[key];
7036    if (typeof actionCreator === 'function') {
7037      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
7038    }
7039  }
7040  return boundActionCreators;
7041}
7042;// CONCATENATED MODULE: ../../app/node_modules/redux/es/compose.js
7043/**
7044 * Composes single-argument functions from right to left. The rightmost
7045 * function can take multiple arguments as it provides the signature for
7046 * the resulting composite function.
7047 *
7048 * @param {...Function} funcs The functions to compose.
7049 * @returns {Function} A function obtained by composing the argument functions
7050 * from right to left. For example, compose(f, g, h) is identical to doing
7051 * (...args) => f(g(h(...args))).
7052 */
7053
7054function compose() {
7055  for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
7056    funcs[_key] = arguments[_key];
7057  }
7058
7059  if (funcs.length === 0) {
7060    return function (arg) {
7061      return arg;
7062    };
7063  }
7064
7065  if (funcs.length === 1) {
7066    return funcs[0];
7067  }
7068
7069  var last = funcs[funcs.length - 1];
7070  var rest = funcs.slice(0, -1);
7071  return function () {
7072    return rest.reduceRight(function (composed, f) {
7073      return f(composed);
7074    }, last.apply(undefined, arguments));
7075  };
7076}
7077;// CONCATENATED MODULE: ../../app/node_modules/redux/es/applyMiddleware.js
7078var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
7079
7080
7081
7082/**
7083 * Creates a store enhancer that applies middleware to the dispatch method
7084 * of the Redux store. This is handy for a variety of tasks, such as expressing
7085 * asynchronous actions in a concise manner, or logging every action payload.
7086 *
7087 * See `redux-thunk` package as an example of the Redux middleware.
7088 *
7089 * Because middleware is potentially asynchronous, this should be the first
7090 * store enhancer in the composition chain.
7091 *
7092 * Note that each middleware will be given the `dispatch` and `getState` functions
7093 * as named arguments.
7094 *
7095 * @param {...Function} middlewares The middleware chain to be applied.
7096 * @returns {Function} A store enhancer applying the middleware.
7097 */
7098function applyMiddleware() {
7099  for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
7100    middlewares[_key] = arguments[_key];
7101  }
7102
7103  return function (createStore) {
7104    return function (reducer, preloadedState, enhancer) {
7105      var store = createStore(reducer, preloadedState, enhancer);
7106      var _dispatch = store.dispatch;
7107      var chain = [];
7108
7109      var middlewareAPI = {
7110        getState: store.getState,
7111        dispatch: function dispatch(action) {
7112          return _dispatch(action);
7113        }
7114      };
7115      chain = middlewares.map(function (middleware) {
7116        return middleware(middlewareAPI);
7117      });
7118      _dispatch = compose.apply(undefined, chain)(store.dispatch);
7119
7120      return _extends({}, store, {
7121        dispatch: _dispatch
7122      });
7123    };
7124  };
7125}
7126;// CONCATENATED MODULE: ../../app/node_modules/redux/es/index.js
7127
7128
7129
7130
7131
7132
7133
7134/*
7135* This is a dummy function to check if the function name has been altered by minification.
7136* If the function has been minified and NODE_ENV !== 'production', warn the user.
7137*/
7138function isCrushed() {}
7139
7140if (false) {}
7141
7142
7143
7144}),
7145"3485": (function (module, __webpack_exports__, __webpack_require__) {
7146"use strict";
7147
7148// EXPORTS
7149__webpack_require__.d(__webpack_exports__, {
7150  Z: () => (/* binding */ es)
7151});
7152
7153;// CONCATENATED MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/ponyfill.js
7154function symbolObservablePonyfill(root) {
7155	var result;
7156	var Symbol = root.Symbol;
7157
7158	if (typeof Symbol === 'function') {
7159		if (Symbol.observable) {
7160			result = Symbol.observable;
7161		} else {
7162			result = Symbol('observable');
7163			Symbol.observable = result;
7164		}
7165	} else {
7166		result = '@@observable';
7167	}
7168
7169	return result;
7170};
7171
7172;// CONCATENATED MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/index.js
7173/* module decorator */ module = __webpack_require__.hmd(module);
7174/* global window */
7175
7176
7177var es_root;
7178
7179if (typeof self !== 'undefined') {
7180  es_root = self;
7181} else if (typeof window !== 'undefined') {
7182  es_root = window;
7183} else if (typeof __webpack_require__.g !== 'undefined') {
7184  es_root = __webpack_require__.g;
7185} else if (true) {
7186  es_root = module;
7187} else {}
7188
7189var es_result = symbolObservablePonyfill(es_root);
7190/* ESM default export */ const es = (es_result);
7191
7192
7193}),
7194"1185": (function (__unused_webpack_module, exports) {
7195"use strict";
7196
7197
7198Object.defineProperty(exports, "__esModule", ({
7199  value: true
7200}));
7201
7202var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
7203
7204exports.clone = clone;
7205exports.addLast = addLast;
7206exports.addFirst = addFirst;
7207exports.removeLast = removeLast;
7208exports.removeFirst = removeFirst;
7209exports.insert = insert;
7210exports.removeAt = removeAt;
7211exports.replaceAt = replaceAt;
7212exports.getIn = getIn;
7213exports.set = set;
7214exports.setIn = setIn;
7215exports.update = update;
7216exports.updateIn = updateIn;
7217exports.merge = merge;
7218exports.mergeDeep = mergeDeep;
7219exports.mergeIn = mergeIn;
7220exports.omit = omit;
7221exports.addDefaults = addDefaults;
7222
7223
7224/*!
7225 * Timm
7226 *
7227 * Immutability helpers with fast reads and acceptable writes.
7228 *
7229 * @copyright Guillermo Grau Panea 2016
7230 * @license MIT
7231 */
7232
7233var INVALID_ARGS = 'INVALID_ARGS';
7234
7235// ===============================================
7236// ### Helpers
7237// ===============================================
7238
7239
7240function throwStr(msg) {
7241  throw new Error(msg);
7242}
7243
7244function getKeysAndSymbols(obj) {
7245  var keys = Object.keys(obj);
7246  if (Object.getOwnPropertySymbols) {
7247    return keys.concat(Object.getOwnPropertySymbols(obj));
7248  }
7249  return keys;
7250}
7251
7252var hasOwnProperty = {}.hasOwnProperty;
7253
7254function clone(obj) {
7255  if (Array.isArray(obj)) return obj.slice();
7256  var keys = getKeysAndSymbols(obj);
7257  var out = {};
7258  for (var i = 0; i < keys.length; i++) {
7259    var key = keys[i];
7260    out[key] = obj[key];
7261  }
7262  return out;
7263}
7264
7265function doMerge(fAddDefaults, fDeep, first) {
7266  var out = first;
7267  !(out != null) && throwStr( false ? 0 : INVALID_ARGS);
7268  var fChanged = false;
7269
7270  for (var _len = arguments.length, rest = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
7271    rest[_key - 3] = arguments[_key];
7272  }
7273
7274  for (var idx = 0; idx < rest.length; idx++) {
7275    var obj = rest[idx];
7276    if (obj == null) continue;
7277    var keys = getKeysAndSymbols(obj);
7278    if (!keys.length) continue;
7279    for (var j = 0; j <= keys.length; j++) {
7280      var key = keys[j];
7281      if (fAddDefaults && out[key] !== undefined) continue;
7282      var nextVal = obj[key];
7283      if (fDeep && isObject(out[key]) && isObject(nextVal)) {
7284        nextVal = doMerge(fAddDefaults, fDeep, out[key], nextVal);
7285      }
7286      if (nextVal === undefined || nextVal === out[key]) continue;
7287      if (!fChanged) {
7288        fChanged = true;
7289        out = clone(out);
7290      }
7291      out[key] = nextVal;
7292    }
7293  }
7294  return out;
7295}
7296
7297function isObject(o) {
7298  var type = typeof o === 'undefined' ? 'undefined' : _typeof(o);
7299  return o != null && (type === 'object' || type === 'function');
7300}
7301
7302// _deepFreeze = (obj) ->
7303//   Object.freeze obj
7304//   for key in Object.getOwnPropertyNames obj
7305//     val = obj[key]
7306//     if isObject(val) and not Object.isFrozen val
7307//       _deepFreeze val
7308//   obj
7309
7310// ===============================================
7311// -- ### Arrays
7312// ===============================================
7313
7314// -- #### addLast()
7315// -- Returns a new array with an appended item or items.
7316// --
7317// -- Usage: `addLast<T>(array: Array<T>, val: Array<T>|T): Array<T>`
7318// --
7319// -- ```js
7320// -- arr = ['a', 'b']
7321// -- arr2 = addLast(arr, 'c')
7322// -- // ['a', 'b', 'c']
7323// -- arr2 === arr
7324// -- // false
7325// -- arr3 = addLast(arr, ['c', 'd'])
7326// -- // ['a', 'b', 'c', 'd']
7327// -- ```
7328// `array.concat(val)` also handles the scalar case,
7329// but is apparently very slow
7330function addLast(array, val) {
7331  if (Array.isArray(val)) return array.concat(val);
7332  return array.concat([val]);
7333}
7334
7335// -- #### addFirst()
7336// -- Returns a new array with a prepended item or items.
7337// --
7338// -- Usage: `addFirst<T>(array: Array<T>, val: Array<T>|T): Array<T>`
7339// --
7340// -- ```js
7341// -- arr = ['a', 'b']
7342// -- arr2 = addFirst(arr, 'c')
7343// -- // ['c', 'a', 'b']
7344// -- arr2 === arr
7345// -- // false
7346// -- arr3 = addFirst(arr, ['c', 'd'])
7347// -- // ['c', 'd', 'a', 'b']
7348// -- ```
7349function addFirst(array, val) {
7350  if (Array.isArray(val)) return val.concat(array);
7351  return [val].concat(array);
7352}
7353
7354// -- #### removeLast()
7355// -- Returns a new array removing the last item.
7356// --
7357// -- Usage: `removeLast<T>(array: Array<T>): Array<T>`
7358// --
7359// -- ```js
7360// -- arr = ['a', 'b']
7361// -- arr2 = removeLast(arr)
7362// -- // ['a']
7363// -- arr2 === arr
7364// -- // false
7365// --
7366// -- // The same array is returned if there are no changes:
7367// -- arr3 = []
7368// -- removeLast(arr3) === arr3
7369// -- // true
7370// -- ```
7371function removeLast(array) {
7372  if (!array.length) return array;
7373  return array.slice(0, array.length - 1);
7374}
7375
7376// -- #### removeFirst()
7377// -- Returns a new array removing the first item.
7378// --
7379// -- Usage: `removeFirst<T>(array: Array<T>): Array<T>`
7380// --
7381// -- ```js
7382// -- arr = ['a', 'b']
7383// -- arr2 = removeFirst(arr)
7384// -- // ['b']
7385// -- arr2 === arr
7386// -- // false
7387// --
7388// -- // The same array is returned if there are no changes:
7389// -- arr3 = []
7390// -- removeFirst(arr3) === arr3
7391// -- // true
7392// -- ```
7393function removeFirst(array) {
7394  if (!array.length) return array;
7395  return array.slice(1);
7396}
7397
7398// -- #### insert()
7399// -- Returns a new array obtained by inserting an item or items
7400// -- at a specified index.
7401// --
7402// -- Usage: `insert<T>(array: Array<T>, idx: number, val: Array<T>|T): Array<T>`
7403// --
7404// -- ```js
7405// -- arr = ['a', 'b', 'c']
7406// -- arr2 = insert(arr, 1, 'd')
7407// -- // ['a', 'd', 'b', 'c']
7408// -- arr2 === arr
7409// -- // false
7410// -- insert(arr, 1, ['d', 'e'])
7411// -- // ['a', 'd', 'e', 'b', 'c']
7412// -- ```
7413function insert(array, idx, val) {
7414  return array.slice(0, idx).concat(Array.isArray(val) ? val : [val]).concat(array.slice(idx));
7415}
7416
7417// -- #### removeAt()
7418// -- Returns a new array obtained by removing an item at
7419// -- a specified index.
7420// --
7421// -- Usage: `removeAt<T>(array: Array<T>, idx: number): Array<T>`
7422// --
7423// -- ```js
7424// -- arr = ['a', 'b', 'c']
7425// -- arr2 = removeAt(arr, 1)
7426// -- // ['a', 'c']
7427// -- arr2 === arr
7428// -- // false
7429// --
7430// -- // The same array is returned if there are no changes:
7431// -- removeAt(arr, 4) === arr
7432// -- // true
7433// -- ```
7434function removeAt(array, idx) {
7435  if (idx >= array.length || idx < 0) return array;
7436  return array.slice(0, idx).concat(array.slice(idx + 1));
7437}
7438
7439// -- #### replaceAt()
7440// -- Returns a new array obtained by replacing an item at
7441// -- a specified index. If the provided item is the same as
7442// -- (*referentially equal to*) the previous item at that position,
7443// -- the original array is returned.
7444// --
7445// -- Usage: `replaceAt<T>(array: Array<T>, idx: number, newItem: T): Array<T>`
7446// --
7447// -- ```js
7448// -- arr = ['a', 'b', 'c']
7449// -- arr2 = replaceAt(arr, 1, 'd')
7450// -- // ['a', 'd', 'c']
7451// -- arr2 === arr
7452// -- // false
7453// --
7454// -- // The same object is returned if there are no changes:
7455// -- replaceAt(arr, 1, 'b') === arr
7456// -- // true
7457// -- ```
7458function replaceAt(array, idx, newItem) {
7459  if (array[idx] === newItem) return array;
7460  var len = array.length;
7461  var result = Array(len);
7462  for (var i = 0; i < len; i++) {
7463    result[i] = array[i];
7464  }
7465  result[idx] = newItem;
7466  return result;
7467}
7468
7469// ===============================================
7470// -- ### Collections (objects and arrays)
7471// ===============================================
7472// -- The following types are used throughout this section
7473// -- ```js
7474// -- type ArrayOrObject = Array<any>|Object;
7475// -- type Key = number|string;
7476// -- ```
7477
7478// -- #### getIn()
7479// -- Returns a value from an object at a given path. Works with
7480// -- nested arrays and objects. If the path does not exist, it returns
7481// -- `undefined`.
7482// --
7483// -- Usage: `getIn(obj: ?ArrayOrObject, path: Array<Key>): any`
7484// --
7485// -- ```js
7486// -- obj = { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: ['a', 'b', 'c'] }
7487// -- getIn(obj, ['d', 'd1'])
7488// -- // 3
7489// -- getIn(obj, ['e', 1])
7490// -- // 'b'
7491// -- ```
7492function getIn(obj, path) {
7493  !Array.isArray(path) && throwStr( false ? 0 : INVALID_ARGS);
7494  if (obj == null) return undefined;
7495  var ptr = obj;
7496  for (var i = 0; i < path.length; i++) {
7497    var key = path[i];
7498    ptr = ptr != null ? ptr[key] : undefined;
7499    if (ptr === undefined) return ptr;
7500  }
7501  return ptr;
7502}
7503
7504// -- #### set()
7505// -- Returns a new object with a modified attribute.
7506// -- If the provided value is the same as (*referentially equal to*)
7507// -- the previous value, the original object is returned.
7508// --
7509// -- Usage: `set<T>(obj: ?T, key: Key, val: any): T`
7510// --
7511// -- ```js
7512// -- obj = { a: 1, b: 2, c: 3 }
7513// -- obj2 = set(obj, 'b', 5)
7514// -- // { a: 1, b: 5, c: 3 }
7515// -- obj2 === obj
7516// -- // false
7517// --
7518// -- // The same object is returned if there are no changes:
7519// -- set(obj, 'b', 2) === obj
7520// -- // true
7521// -- ```
7522function set(obj, key, val) {
7523  var fallback = typeof key === 'number' ? [] : {};
7524  var finalObj = obj == null ? fallback : obj;
7525  if (finalObj[key] === val) return finalObj;
7526  var obj2 = clone(finalObj);
7527  obj2[key] = val;
7528  return obj2;
7529}
7530
7531// -- #### setIn()
7532// -- Returns a new object with a modified **nested** attribute.
7533// --
7534// -- Notes:
7535// --
7536// -- * If the provided value is the same as (*referentially equal to*)
7537// -- the previous value, the original object is returned.
7538// -- * If the path does not exist, it will be created before setting
7539// -- the new value.
7540// --
7541// -- Usage: `setIn<T: ArrayOrObject>(obj: T, path: Array<Key>, val: any): T`
7542// --
7543// -- ```js
7544// -- obj = { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: { e1: 'foo', e2: 'bar' } }
7545// -- obj2 = setIn(obj, ['d', 'd1'], 4)
7546// -- // { a: 1, b: 2, d: { d1: 4, d2: 4 }, e: { e1: 'foo', e2: 'bar' } }
7547// -- obj2 === obj
7548// -- // false
7549// -- obj2.d === obj.d
7550// -- // false
7551// -- obj2.e === obj.e
7552// -- // true
7553// --
7554// -- // The same object is returned if there are no changes:
7555// -- obj3 = setIn(obj, ['d', 'd1'], 3)
7556// -- // { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: { e1: 'foo', e2: 'bar' } }
7557// -- obj3 === obj
7558// -- // true
7559// -- obj3.d === obj.d
7560// -- // true
7561// -- obj3.e === obj.e
7562// -- // true
7563// --
7564// -- // ... unknown paths create intermediate keys. Numeric segments are treated as array indices:
7565// -- setIn({ a: 3 }, ['unknown', 0, 'path'], 4)
7566// -- // { a: 3, unknown: [{ path: 4 }] }
7567// -- ```
7568function doSetIn(obj, path, val, idx) {
7569  var newValue = void 0;
7570  var key = path[idx];
7571  if (idx === path.length - 1) {
7572    newValue = val;
7573  } else {
7574    var nestedObj = isObject(obj) && isObject(obj[key]) ? obj[key] : typeof path[idx + 1] === 'number' ? [] : {};
7575    newValue = doSetIn(nestedObj, path, val, idx + 1);
7576  }
7577  return set(obj, key, newValue);
7578}
7579
7580function setIn(obj, path, val) {
7581  if (!path.length) return val;
7582  return doSetIn(obj, path, val, 0);
7583}
7584
7585// -- #### update()
7586// -- Returns a new object with a modified attribute,
7587// -- calculated via a user-provided callback based on the current value.
7588// -- If the calculated value is the same as (*referentially equal to*)
7589// -- the previous value, the original object is returned.
7590// --
7591// -- Usage: `update<T: ArrayOrObject>(obj: T, key: Key,
7592// -- fnUpdate: (prevValue: any) => any): T`
7593// --
7594// -- ```js
7595// -- obj = { a: 1, b: 2, c: 3 }
7596// -- obj2 = update(obj, 'b', (val) => val + 1)
7597// -- // { a: 1, b: 3, c: 3 }
7598// -- obj2 === obj
7599// -- // false
7600// --
7601// -- // The same object is returned if there are no changes:
7602// -- update(obj, 'b', (val) => val) === obj
7603// -- // true
7604// -- ```
7605function update(obj, key, fnUpdate) {
7606  var prevVal = obj == null ? undefined : obj[key];
7607  var nextVal = fnUpdate(prevVal);
7608  return set(obj, key, nextVal);
7609}
7610
7611// -- #### updateIn()
7612// -- Returns a new object with a modified **nested** attribute,
7613// -- calculated via a user-provided callback based on the current value.
7614// -- If the calculated value is the same as (*referentially equal to*)
7615// -- the previous value, the original object is returned.
7616// --
7617// -- Usage: `updateIn<T: ArrayOrObject>(obj: T, path: Array<Key>,
7618// -- fnUpdate: (prevValue: any) => any): T`
7619// --
7620// -- ```js
7621// -- obj = { a: 1, d: { d1: 3, d2: 4 } }
7622// -- obj2 = updateIn(obj, ['d', 'd1'], (val) => val + 1)
7623// -- // { a: 1, d: { d1: 4, d2: 4 } }
7624// -- obj2 === obj
7625// -- // false
7626// --
7627// -- // The same object is returned if there are no changes:
7628// -- obj3 = updateIn(obj, ['d', 'd1'], (val) => val)
7629// -- // { a: 1, d: { d1: 3, d2: 4 } }
7630// -- obj3 === obj
7631// -- // true
7632// -- ```
7633function updateIn(obj, path, fnUpdate) {
7634  var prevVal = getIn(obj, path);
7635  var nextVal = fnUpdate(prevVal);
7636  return setIn(obj, path, nextVal);
7637}
7638
7639// -- #### merge()
7640// -- Returns a new object built as follows: the overlapping keys from the
7641// -- second one overwrite the corresponding entries from the first one.
7642// -- Similar to `Object.assign()`, but immutable.
7643// --
7644// -- Usage:
7645// --
7646// -- * `merge(obj1: Object, obj2: ?Object): Object`
7647// -- * `merge(obj1: Object, ...objects: Array<?Object>): Object`
7648// --
7649// -- The unmodified `obj1` is returned if `obj2` does not *provide something
7650// -- new to* `obj1`, i.e. if either of the following
7651// -- conditions are true:
7652// --
7653// -- * `obj2` is `null` or `undefined`
7654// -- * `obj2` is an object, but it is empty
7655// -- * All attributes of `obj2` are `undefined`
7656// -- * All attributes of `obj2` are referentially equal to the
7657// --   corresponding attributes of `obj1`
7658// --
7659// -- Note that `undefined` attributes in `obj2` do not modify the
7660// -- corresponding attributes in `obj1`.
7661// --
7662// -- ```js
7663// -- obj1 = { a: 1, b: 2, c: 3 }
7664// -- obj2 = { c: 4, d: 5 }
7665// -- obj3 = merge(obj1, obj2)
7666// -- // { a: 1, b: 2, c: 4, d: 5 }
7667// -- obj3 === obj1
7668// -- // false
7669// --
7670// -- // The same object is returned if there are no changes:
7671// -- merge(obj1, { c: 3 }) === obj1
7672// -- // true
7673// -- ```
7674function merge(a, b, c, d, e, f) {
7675  for (var _len2 = arguments.length, rest = Array(_len2 > 6 ? _len2 - 6 : 0), _key2 = 6; _key2 < _len2; _key2++) {
7676    rest[_key2 - 6] = arguments[_key2];
7677  }
7678
7679  return rest.length ? doMerge.call.apply(doMerge, [null, false, false, a, b, c, d, e, f].concat(rest)) : doMerge(false, false, a, b, c, d, e, f);
7680}
7681
7682// -- #### mergeDeep()
7683// -- Returns a new object built as follows: the overlapping keys from the
7684// -- second one overwrite the corresponding entries from the first one.
7685// -- If both the first and second entries are objects they are merged recursively.
7686// -- Similar to `Object.assign()`, but immutable, and deeply merging.
7687// --
7688// -- Usage:
7689// --
7690// -- * `mergeDeep(obj1: Object, obj2: ?Object): Object`
7691// -- * `mergeDeep(obj1: Object, ...objects: Array<?Object>): Object`
7692// --
7693// -- The unmodified `obj1` is returned if `obj2` does not *provide something
7694// -- new to* `obj1`, i.e. if either of the following
7695// -- conditions are true:
7696// --
7697// -- * `obj2` is `null` or `undefined`
7698// -- * `obj2` is an object, but it is empty
7699// -- * All attributes of `obj2` are `undefined`
7700// -- * All attributes of `obj2` are referentially equal to the
7701// --   corresponding attributes of `obj1`
7702// --
7703// -- Note that `undefined` attributes in `obj2` do not modify the
7704// -- corresponding attributes in `obj1`.
7705// --
7706// -- ```js
7707// -- obj1 = { a: 1, b: 2, c: { a: 1 } }
7708// -- obj2 = { b: 3, c: { b: 2 } }
7709// -- obj3 = mergeDeep(obj1, obj2)
7710// -- // { a: 1, b: 3, c: { a: 1, b: 2 }  }
7711// -- obj3 === obj1
7712// -- // false
7713// --
7714// -- // The same object is returned if there are no changes:
7715// -- mergeDeep(obj1, { c: { a: 1 } }) === obj1
7716// -- // true
7717// -- ```
7718function mergeDeep(a, b, c, d, e, f) {
7719  for (var _len3 = arguments.length, rest = Array(_len3 > 6 ? _len3 - 6 : 0), _key3 = 6; _key3 < _len3; _key3++) {
7720    rest[_key3 - 6] = arguments[_key3];
7721  }
7722
7723  return rest.length ? doMerge.call.apply(doMerge, [null, false, true, a, b, c, d, e, f].concat(rest)) : doMerge(false, true, a, b, c, d, e, f);
7724}
7725
7726// -- #### mergeIn()
7727// -- Similar to `merge()`, but merging the value at a given nested path.
7728// -- Note that the returned type is the same as that of the first argument.
7729// --
7730// -- Usage:
7731// --
7732// -- * `mergeIn<T: ArrayOrObject>(obj1: T, path: Array<Key>, obj2: ?Object): T`
7733// -- * `mergeIn<T: ArrayOrObject>(obj1: T, path: Array<Key>,
7734// -- ...objects: Array<?Object>): T`
7735// --
7736// -- ```js
7737// -- obj1 = { a: 1, d: { b: { d1: 3, d2: 4 } } }
7738// -- obj2 = { d3: 5 }
7739// -- obj3 = mergeIn(obj1, ['d', 'b'], obj2)
7740// -- // { a: 1, d: { b: { d1: 3, d2: 4, d3: 5 } } }
7741// -- obj3 === obj1
7742// -- // false
7743// --
7744// -- // The same object is returned if there are no changes:
7745// -- mergeIn(obj1, ['d', 'b'], { d2: 4 }) === obj1
7746// -- // true
7747// -- ```
7748function mergeIn(a, path, b, c, d, e, f) {
7749  var prevVal = getIn(a, path);
7750  if (prevVal == null) prevVal = {};
7751  var nextVal = void 0;
7752
7753  for (var _len4 = arguments.length, rest = Array(_len4 > 7 ? _len4 - 7 : 0), _key4 = 7; _key4 < _len4; _key4++) {
7754    rest[_key4 - 7] = arguments[_key4];
7755  }
7756
7757  if (rest.length) {
7758    nextVal = doMerge.call.apply(doMerge, [null, false, false, prevVal, b, c, d, e, f].concat(rest));
7759  } else {
7760    nextVal = doMerge(false, false, prevVal, b, c, d, e, f);
7761  }
7762  return setIn(a, path, nextVal);
7763}
7764
7765// -- #### omit()
7766// -- Returns an object excluding one or several attributes.
7767// --
7768// -- Usage: `omit(obj: Object, attrs: Array<string>|string): Object`
7769//
7770// -- ```js
7771// -- obj = { a: 1, b: 2, c: 3, d: 4 }
7772// -- omit(obj, 'a')
7773// -- // { b: 2, c: 3, d: 4 }
7774// -- omit(obj, ['b', 'c'])
7775// -- // { a: 1, d: 4 }
7776// --
7777// -- // The same object is returned if there are no changes:
7778// -- omit(obj, 'z') === obj1
7779// -- // true
7780// -- ```
7781function omit(obj, attrs) {
7782  var omitList = Array.isArray(attrs) ? attrs : [attrs];
7783  var fDoSomething = false;
7784  for (var i = 0; i < omitList.length; i++) {
7785    if (hasOwnProperty.call(obj, omitList[i])) {
7786      fDoSomething = true;
7787      break;
7788    }
7789  }
7790  if (!fDoSomething) return obj;
7791  var out = {};
7792  var keys = getKeysAndSymbols(obj);
7793  for (var _i = 0; _i < keys.length; _i++) {
7794    var key = keys[_i];
7795    if (omitList.indexOf(key) >= 0) continue;
7796    out[key] = obj[key];
7797  }
7798  return out;
7799}
7800
7801// -- #### addDefaults()
7802// -- Returns a new object built as follows: `undefined` keys in the first one
7803// -- are filled in with the corresponding values from the second one
7804// -- (even if they are `null`).
7805// --
7806// -- Usage:
7807// --
7808// -- * `addDefaults(obj: Object, defaults: Object): Object`
7809// -- * `addDefaults(obj: Object, ...defaultObjects: Array<?Object>): Object`
7810// --
7811// -- ```js
7812// -- obj1 = { a: 1, b: 2, c: 3 }
7813// -- obj2 = { c: 4, d: 5, e: null }
7814// -- obj3 = addDefaults(obj1, obj2)
7815// -- // { a: 1, b: 2, c: 3, d: 5, e: null }
7816// -- obj3 === obj1
7817// -- // false
7818// --
7819// -- // The same object is returned if there are no changes:
7820// -- addDefaults(obj1, { c: 4 }) === obj1
7821// -- // true
7822// -- ```
7823function addDefaults(a, b, c, d, e, f) {
7824  for (var _len5 = arguments.length, rest = Array(_len5 > 6 ? _len5 - 6 : 0), _key5 = 6; _key5 < _len5; _key5++) {
7825    rest[_key5 - 6] = arguments[_key5];
7826  }
7827
7828  return rest.length ? doMerge.call.apply(doMerge, [null, true, false, a, b, c, d, e, f].concat(rest)) : doMerge(true, false, a, b, c, d, e, f);
7829}
7830
7831// ===============================================
7832// ### Public API
7833// ===============================================
7834var timm = {
7835  clone: clone,
7836  addLast: addLast,
7837  addFirst: addFirst,
7838  removeLast: removeLast,
7839  removeFirst: removeFirst,
7840  insert: insert,
7841  removeAt: removeAt,
7842  replaceAt: replaceAt,
7843
7844  getIn: getIn,
7845  // eslint-disable-next-line object-shorthand
7846  set: set, // so that flow doesn't complain
7847  setIn: setIn,
7848  update: update,
7849  updateIn: updateIn,
7850  merge: merge,
7851  mergeDeep: mergeDeep,
7852  mergeIn: mergeIn,
7853  omit: omit,
7854  addDefaults: addDefaults
7855};
7856
7857exports["default"] = timm;
7858
7859
7860}),
7861"5487": (function () {
7862"use strict";
7863/* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ /*!
7864 * tram.js v0.8.2-global
7865 * Cross-browser CSS3 transitions in JavaScript
7866 * https://github.com/bkwld/tram
7867 * MIT License
7868 */ /* prettier-ignore */ 
7869window.tram = function(a) {
7870    function b(a, b) {
7871        var c = new M.Bare;
7872        return c.init(a, b);
7873    }
7874    function c(a) {
7875        return a.replace(/[A-Z]/g, function(a) {
7876            return "-" + a.toLowerCase();
7877        });
7878    }
7879    function d(a) {
7880        var b = parseInt(a.slice(1), 16), c = b >> 16 & 255, d = b >> 8 & 255, e = 255 & b;
7881        return [
7882            c,
7883            d,
7884            e
7885        ];
7886    }
7887    function e(a, b, c) {
7888        return "#" + (1 << 24 | a << 16 | b << 8 | c).toString(16).slice(1);
7889    }
7890    function f() {}
7891    function g(a, b) {
7892        j("Type warning: Expected: [" + a + "] Got: [" + typeof b + "] " + b);
7893    }
7894    function h(a, b, c) {
7895        j("Units do not match [" + a + "]: " + b + ", " + c);
7896    }
7897    function i(a, b, c) {
7898        if (void 0 !== b && (c = b), void 0 === a) return c;
7899        var d = c;
7900        return $.test(a) || !_.test(a) ? d = parseInt(a, 10) : _.test(a) && (d = 1e3 * parseFloat(a)), 0 > d && (d = 0), d === d ? d : c;
7901    }
7902    function j(a) {
7903        U.debug && window && window.console.warn(a);
7904    }
7905    function k(a) {
7906        for(var b = -1, c = a ? a.length : 0, d = []; ++b < c;){
7907            var e = a[b];
7908            e && d.push(e);
7909        }
7910        return d;
7911    }
7912    var l = function(a, b, c) {
7913        function d(a) {
7914            return "object" == typeof a;
7915        }
7916        function e(a) {
7917            return "function" == typeof a;
7918        }
7919        function f() {}
7920        function g(h, i) {
7921            function j() {
7922                var a = new k;
7923                return e(a.init) && a.init.apply(a, arguments), a;
7924            }
7925            function k() {}
7926            i === c && (i = h, h = Object), j.Bare = k;
7927            var l, m = f[a] = h[a], n = k[a] = j[a] = new f;
7928            return n.constructor = j, j.mixin = function(b) {
7929                return k[a] = j[a] = g(j, b)[a], j;
7930            }, j.open = function(a) {
7931                if (l = {}, e(a) ? l = a.call(j, n, m, j, h) : d(a) && (l = a), d(l)) for(var c in l)b.call(l, c) && (n[c] = l[c]);
7932                return e(n.init) || (n.init = h), j;
7933            }, j.open(i);
7934        }
7935        return g;
7936    }("prototype", {}.hasOwnProperty), m = {
7937        ease: [
7938            "ease",
7939            function(a, b, c, d) {
7940                var e = (a /= d) * a, f = e * a;
7941                return b + c * (-2.75 * f * e + 11 * e * e + -15.5 * f + 8 * e + .25 * a);
7942            }
7943        ],
7944        "ease-in": [
7945            "ease-in",
7946            function(a, b, c, d) {
7947                var e = (a /= d) * a, f = e * a;
7948                return b + c * (-1 * f * e + 3 * e * e + -3 * f + 2 * e);
7949            }
7950        ],
7951        "ease-out": [
7952            "ease-out",
7953            function(a, b, c, d) {
7954                var e = (a /= d) * a, f = e * a;
7955                return b + c * (.3 * f * e + -1.6 * e * e + 2.2 * f + -1.8 * e + 1.9 * a);
7956            }
7957        ],
7958        "ease-in-out": [
7959            "ease-in-out",
7960            function(a, b, c, d) {
7961                var e = (a /= d) * a, f = e * a;
7962                return b + c * (2 * f * e + -5 * e * e + 2 * f + 2 * e);
7963            }
7964        ],
7965        linear: [
7966            "linear",
7967            function(a, b, c, d) {
7968                return c * a / d + b;
7969            }
7970        ],
7971        "ease-in-quad": [
7972            "cubic-bezier(0.550, 0.085, 0.680, 0.530)",
7973            function(a, b, c, d) {
7974                return c * (a /= d) * a + b;
7975            }
7976        ],
7977        "ease-out-quad": [
7978            "cubic-bezier(0.250, 0.460, 0.450, 0.940)",
7979            function(a, b, c, d) {
7980                return -c * (a /= d) * (a - 2) + b;
7981            }
7982        ],
7983        "ease-in-out-quad": [
7984            "cubic-bezier(0.455, 0.030, 0.515, 0.955)",
7985            function(a, b, c, d) {
7986                return (a /= d / 2) < 1 ? c / 2 * a * a + b : -c / 2 * (--a * (a - 2) - 1) + b;
7987            }
7988        ],
7989        "ease-in-cubic": [
7990            "cubic-bezier(0.550, 0.055, 0.675, 0.190)",
7991            function(a, b, c, d) {
7992                return c * (a /= d) * a * a + b;
7993            }
7994        ],
7995        "ease-out-cubic": [
7996            "cubic-bezier(0.215, 0.610, 0.355, 1)",
7997            function(a, b, c, d) {
7998                return c * ((a = a / d - 1) * a * a + 1) + b;
7999            }
8000        ],
8001        "ease-in-out-cubic": [
8002            "cubic-bezier(0.645, 0.045, 0.355, 1)",
8003            function(a, b, c, d) {
8004                return (a /= d / 2) < 1 ? c / 2 * a * a * a + b : c / 2 * ((a -= 2) * a * a + 2) + b;
8005            }
8006        ],
8007        "ease-in-quart": [
8008            "cubic-bezier(0.895, 0.030, 0.685, 0.220)",
8009            function(a, b, c, d) {
8010                return c * (a /= d) * a * a * a + b;
8011            }
8012        ],
8013        "ease-out-quart": [
8014            "cubic-bezier(0.165, 0.840, 0.440, 1)",
8015            function(a, b, c, d) {
8016                return -c * ((a = a / d - 1) * a * a * a - 1) + b;
8017            }
8018        ],
8019        "ease-in-out-quart": [
8020            "cubic-bezier(0.770, 0, 0.175, 1)",
8021            function(a, b, c, d) {
8022                return (a /= d / 2) < 1 ? c / 2 * a * a * a * a + b : -c / 2 * ((a -= 2) * a * a * a - 2) + b;
8023            }
8024        ],
8025        "ease-in-quint": [
8026            "cubic-bezier(0.755, 0.050, 0.855, 0.060)",
8027            function(a, b, c, d) {
8028                return c * (a /= d) * a * a * a * a + b;
8029            }
8030        ],
8031        "ease-out-quint": [
8032            "cubic-bezier(0.230, 1, 0.320, 1)",
8033            function(a, b, c, d) {
8034                return c * ((a = a / d - 1) * a * a * a * a + 1) + b;
8035            }
8036        ],
8037        "ease-in-out-quint": [
8038            "cubic-bezier(0.860, 0, 0.070, 1)",
8039            function(a, b, c, d) {
8040                return (a /= d / 2) < 1 ? c / 2 * a * a * a * a * a + b : c / 2 * ((a -= 2) * a * a * a * a + 2) + b;
8041            }
8042        ],
8043        "ease-in-sine": [
8044            "cubic-bezier(0.470, 0, 0.745, 0.715)",
8045            function(a, b, c, d) {
8046                return -c * Math.cos(a / d * (Math.PI / 2)) + c + b;
8047            }
8048        ],
8049        "ease-out-sine": [
8050            "cubic-bezier(0.390, 0.575, 0.565, 1)",
8051            function(a, b, c, d) {
8052                return c * Math.sin(a / d * (Math.PI / 2)) + b;
8053            }
8054        ],
8055        "ease-in-out-sine": [
8056            "cubic-bezier(0.445, 0.050, 0.550, 0.950)",
8057            function(a, b, c, d) {
8058                return -c / 2 * (Math.cos(Math.PI * a / d) - 1) + b;
8059            }
8060        ],
8061        "ease-in-expo": [
8062            "cubic-bezier(0.950, 0.050, 0.795, 0.035)",
8063            function(a, b, c, d) {
8064                return 0 === a ? b : c * Math.pow(2, 10 * (a / d - 1)) + b;
8065            }
8066        ],
8067        "ease-out-expo": [
8068            "cubic-bezier(0.190, 1, 0.220, 1)",
8069            function(a, b, c, d) {
8070                return a === d ? b + c : c * (-Math.pow(2, -10 * a / d) + 1) + b;
8071            }
8072        ],
8073        "ease-in-out-expo": [
8074            "cubic-bezier(1, 0, 0, 1)",
8075            function(a, b, c, d) {
8076                return 0 === a ? b : a === d ? b + c : (a /= d / 2) < 1 ? c / 2 * Math.pow(2, 10 * (a - 1)) + b : c / 2 * (-Math.pow(2, -10 * --a) + 2) + b;
8077            }
8078        ],
8079        "ease-in-circ": [
8080            "cubic-bezier(0.600, 0.040, 0.980, 0.335)",
8081            function(a, b, c, d) {
8082                return -c * (Math.sqrt(1 - (a /= d) * a) - 1) + b;
8083            }
8084        ],
8085        "ease-out-circ": [
8086            "cubic-bezier(0.075, 0.820, 0.165, 1)",
8087            function(a, b, c, d) {
8088                return c * Math.sqrt(1 - (a = a / d - 1) * a) + b;
8089            }
8090        ],
8091        "ease-in-out-circ": [
8092            "cubic-bezier(0.785, 0.135, 0.150, 0.860)",
8093            function(a, b, c, d) {
8094                return (a /= d / 2) < 1 ? -c / 2 * (Math.sqrt(1 - a * a) - 1) + b : c / 2 * (Math.sqrt(1 - (a -= 2) * a) + 1) + b;
8095            }
8096        ],
8097        "ease-in-back": [
8098            "cubic-bezier(0.600, -0.280, 0.735, 0.045)",
8099            function(a, b, c, d, e) {
8100                return void 0 === e && (e = 1.70158), c * (a /= d) * a * ((e + 1) * a - e) + b;
8101            }
8102        ],
8103        "ease-out-back": [
8104            "cubic-bezier(0.175, 0.885, 0.320, 1.275)",
8105            function(a, b, c, d, e) {
8106                return void 0 === e && (e = 1.70158), c * ((a = a / d - 1) * a * ((e + 1) * a + e) + 1) + b;
8107            }
8108        ],
8109        "ease-in-out-back": [
8110            "cubic-bezier(0.680, -0.550, 0.265, 1.550)",
8111            function(a, b, c, d, e) {
8112                return void 0 === e && (e = 1.70158), (a /= d / 2) < 1 ? c / 2 * a * a * (((e *= 1.525) + 1) * a - e) + b : c / 2 * ((a -= 2) * a * (((e *= 1.525) + 1) * a + e) + 2) + b;
8113            }
8114        ]
8115    }, n = {
8116        "ease-in-back": "cubic-bezier(0.600, 0, 0.735, 0.045)",
8117        "ease-out-back": "cubic-bezier(0.175, 0.885, 0.320, 1)",
8118        "ease-in-out-back": "cubic-bezier(0.680, 0, 0.265, 1)"
8119    }, o = document, p = window, q = "bkwld-tram", r = /[\-\.0-9]/g, s = /[A-Z]/, t = "number", u = /^(rgb|#)/, v = /(em|cm|mm|in|pt|pc|px)$/, w = /(em|cm|mm|in|pt|pc|px|%)$/, x = /(deg|rad|turn)$/, y = "unitless", z = /(all|none) 0s ease 0s/, A = /^(width|height)$/, B = " ", C = o.createElement("a"), D = [
8120        "Webkit",
8121        "Moz",
8122        "O",
8123        "ms"
8124    ], E = [
8125        "-webkit-",
8126        "-moz-",
8127        "-o-",
8128        "-ms-"
8129    ], F = function(a) {
8130        if (a in C.style) return {
8131            dom: a,
8132            css: a
8133        };
8134        var b, c, d = "", e = a.split("-");
8135        for(b = 0; b < e.length; b++)d += e[b].charAt(0).toUpperCase() + e[b].slice(1);
8136        for(b = 0; b < D.length; b++)if (c = D[b] + d, c in C.style) return {
8137            dom: c,
8138            css: E[b] + a
8139        };
8140    }, G = b.support = {
8141        bind: Function.prototype.bind,
8142        transform: F("transform"),
8143        transition: F("transition"),
8144        backface: F("backface-visibility"),
8145        timing: F("transition-timing-function")
8146    };
8147    if (G.transition) {
8148        var H = G.timing.dom;
8149        if (C.style[H] = m["ease-in-back"][0], !C.style[H]) for(var I in n)m[I][0] = n[I];
8150    }
8151    var J = b.frame = function() {
8152        var a = p.requestAnimationFrame || p.webkitRequestAnimationFrame || p.mozRequestAnimationFrame || p.oRequestAnimationFrame || p.msRequestAnimationFrame;
8153        return a && G.bind ? a.bind(p) : function(a) {
8154            p.setTimeout(a, 16);
8155        };
8156    }(), K = b.now = function() {
8157        var a = p.performance, b = a && (a.now || a.webkitNow || a.msNow || a.mozNow);
8158        return b && G.bind ? b.bind(a) : Date.now || function() {
8159            return +new Date;
8160        };
8161    }(), L = l(function(b) {
8162        function d(a, b) {
8163            var c = k(("" + a).split(B)), d = c[0];
8164            b = b || {};
8165            var e = Y[d];
8166            if (!e) return j("Unsupported property: " + d);
8167            if (!b.weak || !this.props[d]) {
8168                var f = e[0], g = this.props[d];
8169                return g || (g = this.props[d] = new f.Bare), g.init(this.$el, c, e, b), g;
8170            }
8171        }
8172        function e(a, b, c) {
8173            if (a) {
8174                var e = typeof a;
8175                if (b || (this.timer && this.timer.destroy(), this.queue = [], this.active = !1), "number" == e && b) return this.timer = new S({
8176                    duration: a,
8177                    context: this,
8178                    complete: h
8179                }), void (this.active = !0);
8180                if ("string" == e && b) {
8181                    switch(a){
8182                        case "hide":
8183                            o.call(this);
8184                            break;
8185                        case "stop":
8186                            l.call(this);
8187                            break;
8188                        case "redraw":
8189                            p.call(this);
8190                            break;
8191                        default:
8192                            d.call(this, a, c && c[1]);
8193                    }
8194                    return h.call(this);
8195                }
8196                if ("function" == e) return void a.call(this, this);
8197                if ("object" == e) {
8198                    var f = 0;
8199                    u.call(this, a, function(a, b) {
8200                        a.span > f && (f = a.span), a.stop(), a.animate(b);
8201                    }, function(a) {
8202                        "wait" in a && (f = i(a.wait, 0));
8203                    }), t.call(this), f > 0 && (this.timer = new S({
8204                        duration: f,
8205                        context: this
8206                    }), this.active = !0, b && (this.timer.complete = h));
8207                    var g = this, j = !1, k = {};
8208                    J(function() {
8209                        u.call(g, a, function(a) {
8210                            a.active && (j = !0, k[a.name] = a.nextStyle);
8211                        }), j && g.$el.css(k);
8212                    });
8213                }
8214            }
8215        }
8216        function f(a) {
8217            a = i(a, 0), this.active ? this.queue.push({
8218                options: a
8219            }) : (this.timer = new S({
8220                duration: a,
8221                context: this,
8222                complete: h
8223            }), this.active = !0);
8224        }
8225        function g(a) {
8226            return this.active ? (this.queue.push({
8227                options: a,
8228                args: arguments
8229            }), void (this.timer.complete = h)) : j("No active transition timer. Use start() or wait() before then().");
8230        }
8231        function h() {
8232            if (this.timer && this.timer.destroy(), this.active = !1, this.queue.length) {
8233                var a = this.queue.shift();
8234                e.call(this, a.options, !0, a.args);
8235            }
8236        }
8237        function l(a) {
8238            this.timer && this.timer.destroy(), this.queue = [], this.active = !1;
8239            var b;
8240            "string" == typeof a ? (b = {}, b[a] = 1) : b = "object" == typeof a && null != a ? a : this.props, u.call(this, b, v), t.call(this);
8241        }
8242        function m(a) {
8243            l.call(this, a), u.call(this, a, w, x);
8244        }
8245        function n(a) {
8246            "string" != typeof a && (a = "block"), this.el.style.display = a;
8247        }
8248        function o() {
8249            l.call(this), this.el.style.display = "none";
8250        }
8251        function p() {
8252            this.el.offsetHeight;
8253        }
8254        function r() {
8255            l.call(this), a.removeData(this.el, q), this.$el = this.el = null;
8256        }
8257        function t() {
8258            var a, b, c = [];
8259            this.upstream && c.push(this.upstream);
8260            for(a in this.props)b = this.props[a], b.active && c.push(b.string);
8261            c = c.join(","), this.style !== c && (this.style = c, this.el.style[G.transition.dom] = c);
8262        }
8263        function u(a, b, e) {
8264            var f, g, h, i, j = b !== v, k = {};
8265            for(f in a)h = a[f], f in Z ? (k.transform || (k.transform = {}), k.transform[f] = h) : (s.test(f) && (f = c(f)), f in Y ? k[f] = h : (i || (i = {}), i[f] = h));
8266            for(f in k){
8267                if (h = k[f], g = this.props[f], !g) {
8268                    if (!j) continue;
8269                    g = d.call(this, f);
8270                }
8271                b.call(this, g, h);
8272            }
8273            e && i && e.call(this, i);
8274        }
8275        function v(a) {
8276            a.stop();
8277        }
8278        function w(a, b) {
8279            a.set(b);
8280        }
8281        function x(a) {
8282            this.$el.css(a);
8283        }
8284        function y(a, c) {
8285            b[a] = function() {
8286                return this.children ? A.call(this, c, arguments) : (this.el && c.apply(this, arguments), this);
8287            };
8288        }
8289        function A(a, b) {
8290            var c, d = this.children.length;
8291            for(c = 0; d > c; c++)a.apply(this.children[c], b);
8292            return this;
8293        }
8294        b.init = function(b) {
8295            if (this.$el = a(b), this.el = this.$el[0], this.props = {}, this.queue = [], this.style = "", this.active = !1, U.keepInherited && !U.fallback) {
8296                var c = W(this.el, "transition");
8297                c && !z.test(c) && (this.upstream = c);
8298            }
8299            G.backface && U.hideBackface && V(this.el, G.backface.css, "hidden");
8300        }, y("add", d), y("start", e), y("wait", f), y("then", g), y("next", h), y("stop", l), y("set", m), y("show", n), y("hide", o), y("redraw", p), y("destroy", r);
8301    }), M = l(L, function(b) {
8302        function c(b, c) {
8303            var d = a.data(b, q) || a.data(b, q, new L.Bare);
8304            return d.el || d.init(b), c ? d.start(c) : d;
8305        }
8306        b.init = function(b, d) {
8307            var e = a(b);
8308            if (!e.length) return this;
8309            if (1 === e.length) return c(e[0], d);
8310            var f = [];
8311            return e.each(function(a, b) {
8312                f.push(c(b, d));
8313            }), this.children = f, this;
8314        };
8315    }), N = l(function(a) {
8316        function b() {
8317            var a = this.get();
8318            this.update("auto");
8319            var b = this.get();
8320            return this.update(a), b;
8321        }
8322        function c(a, b, c) {
8323            return void 0 !== b && (c = b), a in m ? a : c;
8324        }
8325        function d(a) {
8326            var b = /rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(a);
8327            return (b ? e(b[1], b[2], b[3]) : a).replace(/#(\w)(\w)(\w)$/, "#$1$1$2$2$3$3");
8328        }
8329        var f = {
8330            duration: 500,
8331            ease: "ease",
8332            delay: 0
8333        };
8334        a.init = function(a, b, d, e) {
8335            this.$el = a, this.el = a[0];
8336            var g = b[0];
8337            d[2] && (g = d[2]), X[g] && (g = X[g]), this.name = g, this.type = d[1], this.duration = i(b[1], this.duration, f.duration), this.ease = c(b[2], this.ease, f.ease), this.delay = i(b[3], this.delay, f.delay), this.span = this.duration + this.delay, this.active = !1, this.nextStyle = null, this.auto = A.test(this.name), this.unit = e.unit || this.unit || U.defaultUnit, this.angle = e.angle || this.angle || U.defaultAngle, U.fallback || e.fallback ? this.animate = this.fallback : (this.animate = this.transition, this.string = this.name + B + this.duration + "ms" + ("ease" != this.ease ? B + m[this.ease][0] : "") + (this.delay ? B + this.delay + "ms" : ""));
8338        }, a.set = function(a) {
8339            a = this.convert(a, this.type), this.update(a), this.redraw();
8340        }, a.transition = function(a) {
8341            this.active = !0, a = this.convert(a, this.type), this.auto && ("auto" == this.el.style[this.name] && (this.update(this.get()), this.redraw()), "auto" == a && (a = b.call(this))), this.nextStyle = a;
8342        }, a.fallback = function(a) {
8343            var c = this.el.style[this.name] || this.convert(this.get(), this.type);
8344            a = this.convert(a, this.type), this.auto && ("auto" == c && (c = this.convert(this.get(), this.type)), "auto" == a && (a = b.call(this))), this.tween = new R({
8345                from: c,
8346                to: a,
8347                duration: this.duration,
8348                delay: this.delay,
8349                ease: this.ease,
8350                update: this.update,
8351                context: this
8352            });
8353        }, a.get = function() {
8354            return W(this.el, this.name);
8355        }, a.update = function(a) {
8356            V(this.el, this.name, a);
8357        }, a.stop = function() {
8358            (this.active || this.nextStyle) && (this.active = !1, this.nextStyle = null, V(this.el, this.name, this.get()));
8359            var a = this.tween;
8360            a && a.context && a.destroy();
8361        }, a.convert = function(a, b) {
8362            if ("auto" == a && this.auto) return a;
8363            var c, e = "number" == typeof a, f = "string" == typeof a;
8364            switch(b){
8365                case t:
8366                    if (e) return a;
8367                    if (f && "" === a.replace(r, "")) return +a;
8368                    c = "number(unitless)";
8369                    break;
8370                case u:
8371                    if (f) {
8372                        if ("" === a && this.original) return this.original;
8373                        if (b.test(a)) return "#" == a.charAt(0) && 7 == a.length ? a : d(a);
8374                    }
8375                    c = "hex or rgb string";
8376                    break;
8377                case v:
8378                    if (e) return a + this.unit;
8379                    if (f && b.test(a)) return a;
8380                    c = "number(px) or string(unit)";
8381                    break;
8382                case w:
8383                    if (e) return a + this.unit;
8384                    if (f && b.test(a)) return a;
8385                    c = "number(px) or string(unit or %)";
8386                    break;
8387                case x:
8388                    if (e) return a + this.angle;
8389                    if (f && b.test(a)) return a;
8390                    c = "number(deg) or string(angle)";
8391                    break;
8392                case y:
8393                    if (e) return a;
8394                    if (f && w.test(a)) return a;
8395                    c = "number(unitless) or string(unit or %)";
8396            }
8397            return g(c, a), a;
8398        }, a.redraw = function() {
8399            this.el.offsetHeight;
8400        };
8401    }), O = l(N, function(a, b) {
8402        a.init = function() {
8403            b.init.apply(this, arguments), this.original || (this.original = this.convert(this.get(), u));
8404        };
8405    }), P = l(N, function(a, b) {
8406        a.init = function() {
8407            b.init.apply(this, arguments), this.animate = this.fallback;
8408        }, a.get = function() {
8409            return this.$el[this.name]();
8410        }, a.update = function(a) {
8411            this.$el[this.name](a);
8412        };
8413    }), Q = l(N, function(a, b) {
8414        function c(a, b) {
8415            var c, d, e, f, g;
8416            for(c in a)f = Z[c], e = f[0], d = f[1] || c, g = this.convert(a[c], e), b.call(this, d, g, e);
8417        }
8418        a.init = function() {
8419            b.init.apply(this, arguments), this.current || (this.current = {}, Z.perspective && U.perspective && (this.current.perspective = U.perspective, V(this.el, this.name, this.style(this.current)), this.redraw()));
8420        }, a.set = function(a) {
8421            c.call(this, a, function(a, b) {
8422                this.current[a] = b;
8423            }), V(this.el, this.name, this.style(this.current)), this.redraw();
8424        }, a.transition = function(a) {
8425            var b = this.values(a);
8426            this.tween = new T({
8427                current: this.current,
8428                values: b,
8429                duration: this.duration,
8430                delay: this.delay,
8431                ease: this.ease
8432            });
8433            var c, d = {};
8434            for(c in this.current)d[c] = c in b ? b[c] : this.current[c];
8435            this.active = !0, this.nextStyle = this.style(d);
8436        }, a.fallback = function(a) {
8437            var b = this.values(a);
8438            this.tween = new T({
8439                current: this.current,
8440                values: b,
8441                duration: this.duration,
8442                delay: this.delay,
8443                ease: this.ease,
8444                update: this.update,
8445                context: this
8446            });
8447        }, a.update = function() {
8448            V(this.el, this.name, this.style(this.current));
8449        }, a.style = function(a) {
8450            var b, c = "";
8451            for(b in a)c += b + "(" + a[b] + ") ";
8452            return c;
8453        }, a.values = function(a) {
8454            var b, d = {};
8455            return c.call(this, a, function(a, c, e) {
8456                d[a] = c, void 0 === this.current[a] && (b = 0, ~a.indexOf("scale") && (b = 1), this.current[a] = this.convert(b, e));
8457            }), d;
8458        };
8459    }), R = l(function(b) {
8460        function c(a) {
8461            1 === n.push(a) && J(g);
8462        }
8463        function g() {
8464            var a, b, c, d = n.length;
8465            if (d) for(J(g), b = K(), a = d; a--;)c = n[a], c && c.render(b);
8466        }
8467        function i(b) {
8468            var c, d = a.inArray(b, n);
8469            d >= 0 && (c = n.slice(d + 1), n.length = d, c.length && (n = n.concat(c)));
8470        }
8471        function j(a) {
8472            return Math.round(a * o) / o;
8473        }
8474        function k(a, b, c) {
8475            return e(a[0] + c * (b[0] - a[0]), a[1] + c * (b[1] - a[1]), a[2] + c * (b[2] - a[2]));
8476        }
8477        var l = {
8478            ease: m.ease[1],
8479            from: 0,
8480            to: 1
8481        };
8482        b.init = function(a) {
8483            this.duration = a.duration || 0, this.delay = a.delay || 0;
8484            var b = a.ease || l.ease;
8485            m[b] && (b = m[b][1]), "function" != typeof b && (b = l.ease), this.ease = b, this.update = a.update || f, this.complete = a.complete || f, this.context = a.context || this, this.name = a.name;
8486            var c = a.from, d = a.to;
8487            void 0 === c && (c = l.from), void 0 === d && (d = l.to), this.unit = a.unit || "", "number" == typeof c && "number" == typeof d ? (this.begin = c, this.change = d - c) : this.format(d, c), this.value = this.begin + this.unit, this.start = K(), a.autoplay !== !1 && this.play();
8488        }, b.play = function() {
8489            this.active || (this.start || (this.start = K()), this.active = !0, c(this));
8490        }, b.stop = function() {
8491            this.active && (this.active = !1, i(this));
8492        }, b.render = function(a) {
8493            var b, c = a - this.start;
8494            if (this.delay) {
8495                if (c <= this.delay) return;
8496                c -= this.delay;
8497            }
8498            if (c < this.duration) {
8499                var d = this.ease(c, 0, 1, this.duration);
8500                return b = this.startRGB ? k(this.startRGB, this.endRGB, d) : j(this.begin + d * this.change), this.value = b + this.unit, void this.update.call(this.context, this.value);
8501            }
8502            b = this.endHex || this.begin + this.change, this.value = b + this.unit, this.update.call(this.context, this.value), this.complete.call(this.context), this.destroy();
8503        }, b.format = function(a, b) {
8504            if (b += "", a += "", "#" == a.charAt(0)) return this.startRGB = d(b), this.endRGB = d(a), this.endHex = a, this.begin = 0, void (this.change = 1);
8505            if (!this.unit) {
8506                var c = b.replace(r, ""), e = a.replace(r, "");
8507                c !== e && h("tween", b, a), this.unit = c;
8508            }
8509            b = parseFloat(b), a = parseFloat(a), this.begin = this.value = b, this.change = a - b;
8510        }, b.destroy = function() {
8511            this.stop(), this.context = null, this.ease = this.update = this.complete = f;
8512        };
8513        var n = [], o = 1e3;
8514    }
8514), S = l(R, function(a) {
8515        a.init = function(a) {
8516            this.duration = a.duration || 0, this.complete = a.complete || f, this.context = a.context, this.play();
8517        }, a.render = function(a) {
8518            var b = a - this.start;
8519            b < this.duration || (this.complete.call(this.context), this.destroy());
8520        };
8521    }), T = l(R, function(a, b) {
8522        a.init = function(a) {
8523            this.context = a.context, this.update = a.update, this.tweens = [], this.current = a.current;
8524            var b, c;
8525            for(b in a.values)c = a.values[b], this.current[b] !== c && this.tweens.push(new R({
8526                name: b,
8527                from: this.current[b],
8528                to: c,
8529                duration: a.duration,
8530                delay: a.delay,
8531                ease: a.ease,
8532                autoplay: !1
8533            }));
8534            this.play();
8535        }, a.render = function(a) {
8536            var b, c, d = this.tweens.length, e = !1;
8537            for(b = d; b--;)c = this.tweens[b], c.context && (c.render(a), this.current[c.name] = c.value, e = !0);
8538            return e ? void (this.update && this.update.call(this.context)) : this.destroy();
8539        }, a.destroy = function() {
8540            if (b.destroy.call(this), this.tweens) {
8541                var a, c = this.tweens.length;
8542                for(a = c; a--;)this.tweens[a].destroy();
8543                this.tweens = null, this.current = null;
8544            }
8545        };
8546    }), U = b.config = {
8547        debug: !1,
8548        defaultUnit: "px",
8549        defaultAngle: "deg",
8550        keepInherited: !1,
8551        hideBackface: !1,
8552        perspective: "",
8553        fallback: !G.transition,
8554        agentTests: []
8555    };
8556    b.fallback = function(a) {
8557        if (!G.transition) return U.fallback = !0;
8558        U.agentTests.push("(" + a + ")");
8559        var b = new RegExp(U.agentTests.join("|"), "i");
8560        U.fallback = b.test(navigator.userAgent);
8561    }, b.fallback("6.0.[2-5] Safari"), b.tween = function(a) {
8562        return new R(a);
8563    }, b.delay = function(a, b, c) {
8564        return new S({
8565            complete: b,
8566            duration: a,
8567            context: c
8568        });
8569    }, a.fn.tram = function(a) {
8570        return b.call(null, this, a);
8571    };
8572    var V = a.style, W = a.css, X = {
8573        transform: G.transform && G.transform.css
8574    }, Y = {
8575        color: [
8576            O,
8577            u
8578        ],
8579        background: [
8580            O,
8581            u,
8582            "background-color"
8583        ],
8584        "outline-color": [
8585            O,
8586            u
8587        ],
8588        "border-color": [
8589            O,
8590            u
8591        ],
8592        "border-top-color": [
8593            O,
8594            u
8595        ],
8596        "border-right-color": [
8597            O,
8598            u
8599        ],
8600        "border-bottom-color": [
8601            O,
8602            u
8603        ],
8604        "border-left-color": [
8605            O,
8606            u
8607        ],
8608        "border-width": [
8609            N,
8610            v
8611        ],
8612        "border-top-width": [
8613            N,
8614            v
8615        ],
8616        "border-right-width": [
8617            N,
8618            v
8619        ],
8620        "border-bottom-width": [
8621            N,
8622            v
8623        ],
8624        "border-left-width": [
8625            N,
8626            v
8627        ],
8628        "border-spacing": [
8629            N,
8630            v
8631        ],
8632        "letter-spacing": [
8633            N,
8634            v
8635        ],
8636        margin: [
8637            N,
8638            v
8639        ],
8640        "margin-top": [
8641            N,
8642            v
8643        ],
8644        "margin-right": [
8645            N,
8646            v
8647        ],
8648        "margin-bottom": [
8649            N,
8650            v
8651        ],
8652        "margin-left": [
8653            N,
8654            v
8655        ],
8656        padding: [
8657            N,
8658            v
8659        ],
8660        "padding-top": [
8661            N,
8662            v
8663        ],
8664        "padding-right": [
8665            N,
8666            v
8667        ],
8668        "padding-bottom": [
8669            N,
8670            v
8671        ],
8672        "padding-left": [
8673            N,
8674            v
8675        ],
8676        "outline-width": [
8677            N,
8678            v
8679        ],
8680        opacity: [
8681            N,
8682            t
8683        ],
8684        top: [
8685            N,
8686            w
8687        ],
8688        right: [
8689            N,
8690            w
8691        ],
8692        bottom: [
8693            N,
8694            w
8695        ],
8696        left: [
8697            N,
8698            w
8699        ],
8700        "font-size": [
8701            N,
8702            w
8703        ],
8704        "text-indent": [
8705            N,
8706            w
8707        ],
8708        "word-spacing": [
8709            N,
8710            w
8711        ],
8712        width: [
8713            N,
8714            w
8715        ],
8716        "min-width": [
8717            N,
8718            w
8719        ],
8720        "max-width": [
8721            N,
8722            w
8723        ],
8724        height: [
8725            N,
8726            w
8727        ],
8728        "min-height": [
8729            N,
8730            w
8731        ],
8732        "max-height": [
8733            N,
8734            w
8735        ],
8736        "line-height": [
8737            N,
8738            y
8739        ],
8740        "scroll-top": [
8741            P,
8742            t,
8743            "scrollTop"
8744        ],
8745        "scroll-left": [
8746            P,
8747            t,
8748            "scrollLeft"
8749        ]
8750    }, Z = {};
8751    G.transform && (Y.transform = [
8752        Q
8753    ], Z = {
8754        x: [
8755            w,
8756            "translateX"
8757        ],
8758        y: [
8759            w,
8760            "translateY"
8761        ],
8762        rotate: [
8763            x
8764        ],
8765        rotateX: [
8766            x
8767        ],
8768        rotateY: [
8769            x
8770        ],
8771        scale: [
8772            t
8773        ],
8774        scaleX: [
8775            t
8776        ],
8777        scaleY: [
8778            t
8779        ],
8780        skew: [
8781            x
8782        ],
8783        skewX: [
8784            x
8785        ],
8786        skewY: [
8787            x
8788        ]
8789    }), G.transform && G.backface && (Z.z = [
8790        w,
8791        "translateZ"
8792    ], Z.rotateZ = [
8793        x
8794    ], Z.scaleZ = [
8795        t
8796    ], Z.perspective = [
8797        v
8798    ]);
8799    var $ = /ms/, _ = /s|\./;
8800    return a.tram = b;
8801}(window.jQuery);
8802
8803//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW0tbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGVzbGludC1jb21tZW50cy9uby11bmxpbWl0ZWQtZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8qIVxuICogdHJhbS5qcyB2MC44LjItZ2xvYmFsXG4gKiBDcm9zcy1icm93c2VyIENTUzMgdHJhbnNpdGlvbnMgaW4gSmF2YVNjcmlwdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2Jrd2xkL3RyYW1cbiAqIE1JVCBMaWNlbnNlXG4gKi9cbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xud2luZG93LnRyYW09ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3ZhciBjPW5ldyBNLkJhcmU7cmV0dXJuIGMuaW5pdChhLGIpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGEucmVwbGFjZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm5cIi1cIithLnRvTG93ZXJDYXNlKCl9KTt9ZnVuY3Rpb24gZChhKXt2YXIgYj1wYXJzZUludChhLnNsaWNlKDEpLDE2KSxjPWI+PjE2JjI1NSxkPWI+PjgmMjU1LGU9MjU1JmI7cmV0dXJuW2MsZCxlXX1mdW5jdGlvbiBlKGEsYixjKXtyZXR1cm5cIiNcIisoMTw8MjR8YTw8MTZ8Yjw8OHxjKS50b1N0cmluZygxNikuc2xpY2UoMSl9ZnVuY3Rpb24gZigpe31mdW5jdGlvbiBnKGEsYil7aihcIlR5cGUgd2FybmluZzogRXhwZWN0ZWQ6IFtcIithK1wiXSBHb3Q6IFtcIit0eXBlb2YgYitcIl0gXCIrYil9ZnVuY3Rpb24gaChhLGIsYyl7aihcIlVuaXRzIGRvIG5vdCBtYXRjaCBbXCIrYStcIl06IFwiK2IrXCIsIFwiK2MpfWZ1bmN0aW9uIGkoYSxiLGMpe2lmKHZvaWQgMCE9PWImJihjPWIpLHZvaWQgMD09PWEpcmV0dXJuIGM7dmFyIGQ9YztyZXR1cm4gJC50ZXN0KGEpfHwhXy50ZXN0KGEpP2Q9cGFyc2VJbnQoYSwxMCk6Xy50ZXN0KGEpJiYoZD0xZTMqcGFyc2VGbG9hdChhKSksMD5kJiYoZD0wKSxkPT09ZD9kOmN9ZnVuY3Rpb24gaihhKXtVLmRlYnVnJiZ3aW5kb3cmJndpbmRvdy5jb25zb2xlLndhcm4oYSl9ZnVuY3Rpb24gayhhKXtmb3IodmFyIGI9LTEsYz1hP2EubGVuZ3RoOjAsZ
8803D1bXTsrK2I8Yzspe3ZhciBlPWFbYl07ZSYmZC5wdXNoKGUpfXJldHVybiBkfXZhciBsPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGUoYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYX1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoaCxpKXtmdW5jdGlvbiBqKCl7dmFyIGE9bmV3IGs7cmV0dXJuIGUoYS5pbml0KSYmYS5pbml0LmFwcGx5KGEsYXJndW1lbnRzKSxhfWZ1bmN0aW9uIGsoKXt9aT09PWMmJihpPWgsaD1PYmplY3QpLGouQmFyZT1rO3ZhciBsLG09ZlthXT1oW2FdLG49a1thXT1qW2FdPW5ldyBmO3JldHVybiBuLmNvbnN0cnVjdG9yPWosai5taXhpbj1mdW5jdGlvbihiKXtyZXR1cm4ga1thXT1qW2FdPWcoaixiKVthXSxqfSxqLm9wZW49ZnVuY3Rpb24oYSl7aWYobD17fSxlKGEpP2w9YS5jYWxsKGosbixtLGosaCk6ZChhKSYmKGw9YSksZChsKSlmb3IodmFyIGMgaW4gbCliLmNhbGwobCxjKSYmKG5bY109bFtjXSk7cmV0dXJuIGUobi5pbml0KXx8KG4uaW5pdD1oKSxqfSxqLm9wZW4oaSl9cmV0dXJuIGd9KFwicHJvdG90eXBlXCIse30uaGFzT3duUHJvcGVydHkpLG09e2Vhc2U6W1wiZWFzZVwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKC0yLjc1KmYqZSsxMSplKmUrLTE1LjUqZis4KmUrLjI1KmEpfV0sXCJlYXNlLWluXCI6W1wiZWFzZS1pblwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKC0xKmYqZSszKmUqZSstMypmKzIqZSl9XSxcImVhc2Utb3V0XCI6W1wiZWFzZS1vdXRcIixmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0oYS89ZCkqYSxmPWUqYTtyZXR1cm4gYitjKiguMypmKmUrLTEuNiplKmUrMi4yKmYrLTEuOCplKzEuOSphKX1dLFwiZWFzZS1pbi1vdXRcIjpbXCJlYXNlLWluLW91dFwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKDIqZiplKy01KmUqZSsyKmYrMiplKX1dLGxpbmVhcjpbXCJsaW5lYXJcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYyphL2QrYn1dLFwiZWFzZS1pbi1xdWFkXCI6W1wiY3ViaWMtYmV6aWVyKDAuNTUwLCAwLjA4NSwgMC42ODAsIDAuNTMwKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKihhLz1kKSphK2J9XSxcImVhc2Utb3V0LXF1YWRcIjpbXCJjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuLWMqKGEvPWQpKihhLTIpK2J9XSxcImVhc2UtaW4tb3V0LXF1YWRcIjpbXCJjdWJpYy1iZXppZXIoMC40NTUsIDAuMDMwLCAwLjUxNSwgMC45NTUpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGEvPWQvMik8MT9jLzIqYSphK2I6LWMvMiooLS1hKihhLTIpLTEpK2J9XSxcImVhc2UtaW4tY3ViaWNcIjpbXCJjdWJpYy1iZXppZXIoMC41NTAsIDAuMDU1LCAwLjY3NSwgMC4xOTApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKGEvPWQpKmEqYStifV0sXCJlYXNlLW91dC1jdWJpY1wiOltcImN1YmljLWJlemllcigwLjIxNSwgMC42MTAsIDAuMzU1LCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKigoYT1hL2QtMSkqYSphKzEpK2J9XSxcImVhc2UtaW4tb3V0LWN1YmljXCI6W1wiY3ViaWMtYmV6aWVyKDAuNjQ1LCAwLjA0NSwgMC4zNTUsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGEvPWQvMik8MT9jLzIqYSphKmErYjpjLzIqKChhLT0yKSphKmErMikrYn1dLFwiZWFzZS1pbi1xdWFydFwiOltcImN1YmljLWJlemllcigwLjg5NSwgMC4wMzAsIDAuNjg1LCAwLjIyMClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYyooYS89ZCkqYSphKmErYn1dLFwiZWFzZS1vdXQtcXVhcnRcIjpbXCJjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYyooKGE9YS9kLTEpKmEqYSphLTEpK2J9XSxcImVhc2UtaW4tb3V0LXF1YXJ0XCI6W1wiY3ViaWMtYmV6aWVyKDAuNzcwLCAwLCAwLjE3NSwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxP2MvMiphKmEqYSphK2I6LWMvMiooKGEtPTIpKmEqYSphLTIpK2J9XSxcImVhc2UtaW4tcXVpbnRcIjpbXCJjdWJpYy1iZXppZXIoMC43NTUsIDAuMDUwLCAwLjg1NSwgMC4wNjApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKGEvPWQpKmEqYSphKmErYn1dLFwiZWFzZS1vdXQtcXVpbnRcIjpbXCJjdWJpYy1iZXppZXIoMC4yMzAsIDEsIDAuMzIwLCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKigoYT1hL2QtMSkqYSphKmEqYSsxKStifV0sXCJlYXNlLWluLW91dC1xdWludFwiOltcImN1YmljLWJlemllcigwLjg2MCwgMCwgMC4wNzAsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGEvPWQvMik8MT9jLzIqYSphKmEqYSphK2I6Yy8yKigoYS09MikqYSphKmEqYSsyKStifV0sXCJlYXNlLWluLXNpbmVcIjpbXCJjdWJpYy1iZXppZXIoMC40NzAsIDAsIDAuNzQ1LCAwLjcxNSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYypNYXRoLmNvcyhhL2QqKE1hdGguUEkvMikpK2MrYn1dLFwiZWFzZS1vdXQtc2luZVwiOltcImN1YmljLWJlemllcigwLjM5MCwgMC41NzUsIDAuNTY1LCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKk1hdGguc2luKGEvZCooTWF0aC5QSS8yKSkrYn1dLFwiZWFzZS1pbi1vdXQtc2luZVwiOltcImN1YmljLWJlemllcigwLjQ0NSwgMC4wNTAsIDAuNTUwLCAwLjk1MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYy8yKihNYXRoLmNvcyhNYXRoLlBJKmEvZCktMSkrYn1dLFwiZWFzZS1pbi1leHBvXCI6W1wiY3ViaWMtYmV6aWVyKDAuOTUwLCAwLjA1MCwgMC43OTUsIDAuMDM1KVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiAwPT09YT9iOmMqTWF0aC5wb3coMiwxMCooYS9kLTEpKStifV0sXCJlYXNlLW91dC1leHBvXCI6W1wiY3ViaWMtYmV6aWVyKDAuMTkwLCAxLCAwLjIyMCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYT09PWQ/YitjOmMqKC1NYXRoLnBvdygyLC0x
8803MCphL2QpKzEpK2J9XSxcImVhc2UtaW4tb3V0LWV4cG9cIjpbXCJjdWJpYy1iZXppZXIoMSwgMCwgMCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gMD09PWE/YjphPT09ZD9iK2M6KGEvPWQvMik8MT9jLzIqTWF0aC5wb3coMiwxMCooYS0xKSkrYjpjLzIqKC1NYXRoLnBvdygyLC0xMCotLWEpKzIpK2J9XSxcImVhc2UtaW4tY2lyY1wiOltcImN1YmljLWJlemllcigwLjYwMCwgMC4wNDAsIDAuOTgwLCAwLjMzNSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYyooTWF0aC5zcXJ0KDEtKGEvPWQpKmEpLTEpK2J9XSxcImVhc2Utb3V0LWNpcmNcIjpbXCJjdWJpYy1iZXppZXIoMC4wNzUsIDAuODIwLCAwLjE2NSwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYypNYXRoLnNxcnQoMS0oYT1hL2QtMSkqYSkrYn1dLFwiZWFzZS1pbi1vdXQtY2lyY1wiOltcImN1YmljLWJlemllcigwLjc4NSwgMC4xMzUsIDAuMTUwLCAwLjg2MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxPy1jLzIqKE1hdGguc3FydCgxLWEqYSktMSkrYjpjLzIqKE1hdGguc3FydCgxLShhLT0yKSphKSsxKStifV0sXCJlYXNlLWluLWJhY2tcIjpbXCJjdWJpYy1iZXppZXIoMC42MDAsIC0wLjI4MCwgMC43MzUsIDAuMDQ1KVwiLGZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEuNzAxNTgpLGMqKGEvPWQpKmEqKChlKzEpKmEtZSkrYn1dLFwiZWFzZS1vdXQtYmFja1wiOltcImN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIwLCAxLjI3NSlcIixmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xLjcwMTU4KSxjKigoYT1hL2QtMSkqYSooKGUrMSkqYStlKSsxKStifV0sXCJlYXNlLWluLW91dC1iYWNrXCI6W1wiY3ViaWMtYmV6aWVyKDAuNjgwLCAtMC41NTAsIDAuMjY1LCAxLjU1MClcIixmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xLjcwMTU4KSwoYS89ZC8yKTwxP2MvMiphKmEqKCgoZSo9MS41MjUpKzEpKmEtZSkrYjpjLzIqKChhLT0yKSphKigoKGUqPTEuNTI1KSsxKSphK2UpKzIpK2J9XX0sbj17XCJlYXNlLWluLWJhY2tcIjpcImN1YmljLWJlemllcigwLjYwMCwgMCwgMC43MzUsIDAuMDQ1KVwiLFwiZWFzZS1vdXQtYmFja1wiOlwiY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMjAsIDEpXCIsXCJlYXNlLWluLW91dC1iYWNrXCI6XCJjdWJpYy1iZXppZXIoMC42ODAsIDAsIDAuMjY1LCAxKVwifSxvPWRvY3VtZW50LHA9d2luZG93LHE9XCJia3dsZC10cmFtXCIscj0vW1xcLVxcLjAtOV0vZyxzPS9bQS1aXS8sdD1cIm51bWJlclwiLHU9L14ocmdifCMpLyx2PS8oZW18Y218bW18aW58cHR8cGN8cHgpJC8sdz0vKGVtfGNtfG1tfGlufHB0fHBjfHB4fCUpJC8seD0vKGRlZ3xyYWR8dHVybikkLyx5PVwidW5pdGxlc3NcIix6PS8oYWxsfG5vbmUpIDBzIGVhc2UgMHMvLEE9L14od2lkdGh8aGVpZ2h0KSQvLEI9XCIgXCIsQz1vLmNyZWF0ZUVsZW1lbnQoXCJhXCIpLEQ9W1wiV2Via2l0XCIsXCJNb3pcIixcIk9cIixcIm1zXCJdLEU9W1wiLXdlYmtpdC1cIixcIi1tb3otXCIsXCItby1cIixcIi1tcy1cIl0sRj1mdW5jdGlvbihhKXtpZihhIGluIEMuc3R5bGUpcmV0dXJue2RvbTphLGNzczphfTt2YXIgYixjLGQ9XCJcIixlPWEuc3BsaXQoXCItXCIpO2ZvcihiPTA7YjxlLmxlbmd0aDtiKyspZCs9ZVtiXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlW2JdLnNsaWNlKDEpO2ZvcihiPTA7YjxELmxlbmd0aDtiKyspaWYoYz1EW2JdK2QsYyBpbiBDLnN0eWxlKXJldHVybntkb206Yyxjc3M6RVtiXSthfX0sRz1iLnN1cHBvcnQ9e2JpbmQ6RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsdHJhbnNmb3JtOkYoXCJ0cmFuc2Zvcm1cIiksdHJhbnNpdGlvbjpGKFwidHJhbnNpdGlvblwiKSxiYWNrZmFjZTpGKFwiYmFja2ZhY2UtdmlzaWJpbGl0eVwiKSx0aW1pbmc6RihcInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uXCIpfTtpZihHLnRyYW5zaXRpb24pe3ZhciBIPUcudGltaW5nLmRvbTtpZihDLnN0eWxlW0hdPW1bXCJlYXNlLWluLWJhY2tcIl1bMF0sIUMuc3R5bGVbSF0pZm9yKHZhciBJIGluIG4pbVtJXVswXT1uW0ldfXZhciBKPWIuZnJhbWU9ZnVuY3Rpb24oKXt2YXIgYT1wLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxwLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7cmV0dXJuIGEmJkcuYmluZD9hLmJpbmQocCk6ZnVuY3Rpb24oYSl7cC5zZXRUaW1lb3V0KGEsMTYpfX0oKSxLPWIubm93PWZ1bmN0aW9uKCl7dmFyIGE9cC5wZXJmb3JtYW5jZSxiPWEmJihhLm5vd3x8YS53ZWJraXROb3d8fGEubXNOb3d8fGEubW96Tm93KTtyZXR1cm4gYiYmRy5iaW5kP2IuYmluZChhKTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSgpLEw9bChmdW5jdGlvbihiKXtmdW5jdGlvbiBkKGEsYil7dmFyIGM9aygoXCJcIithKS5zcGxpdChCKSksZD1jWzBdO2I9Ynx8e307dmFyIGU9WVtkXTtpZighZSlyZXR1cm4gaihcIlVuc3VwcG9ydGVkIHByb3BlcnR5OiBcIitkKTtpZighYi53ZWFrfHwhdGhpcy5wcm9wc1tkXSl7dmFyIGY9ZVswXSxnPXRoaXMucHJvcHNbZF07cmV0dXJuIGd8fChnPXRoaXMucHJvcHNbZF09bmV3IGYuQmFyZSksZy5pbml0KHRoaXMuJGVsLGMsZSxiKSxnfX1mdW5jdGlvbiBlKGEsYixjKXtpZihhKXt2YXIgZT10eXBlb2YgYTtpZihifHwodGhpcy50aW1lciYmdGhpcy50aW1lci5kZXN0cm95KCksdGhpcy5xdWV1ZT1bXSx0aGlzLmFjdGl2ZT0hMSksXCJudW1iZXJcIj09ZSYmYilyZXR1cm4gdGhpcy50aW1lcj1uZXcgUyh7ZHVyYXRpb246YSxjb250ZXh0OnRoaXMsY29tcGxldGU6aH0pLHZvaWQodGhpcy5hY3RpdmU9ITApO2lmKFwic3RyaW5nXCI9PWUmJmIpe3N3aXRjaChhKXtjYXNlXCJoaWRlXCI6by5jYWxsKHRoaXMpO2JyZWFrO2Nhc2VcInN0b3BcIjpsLmNhbGwodGhpcyk7YnJlYWs7Y2FzZVwicmVkcmF3XCI6cC5jYWxsKHRoaXMpO2JyZWFrO2RlZmF1bHQ6ZC5jYWxsKHRoaXMsYSxjJiZjWzFdKX1yZXR1cm4gaC5jYWxsKHRoaXMpfWlmKFwiZnVuY3Rpb25cIj09ZSlyZXR1cm4gdm9pZCBhLmNhbGwodGhpcyx0aGlzKTtpZihcIm9iamVjdFwiPT1lKXt2YXIgZj0wO3UuY2FsbCh0aGlzLGEsZnVuY3Rpb24oYSxiKXthLnNwYW4+ZiYmKGY9YS5zcGFuKSxhLnN0b3AoKSxhLmFuaW1hdGUoYil9LGZ1bmN0aW9uKGEpe1wid2FpdFwiaW4gYSYmKGY9aShhLndhaXQsMCkpfSksdC5jYWxsKHRoaXMpLGY+MCYmKHRoaXMudGltZXI9bmV3IFMoe2R1cmF0aW9uOmYsY29udGV4dDp0aGlzfSksdGhpcy5hY3RpdmU9ITAsYiYmKHRoaXMudGltZXIuY29tcGxldGU9aCkpO3ZhciBnPXRoaXMsaj0hMSxrPXt9O0ooZnVuY3Rpb24oKXt1LmNhbGwoZyxhLGZ1bmN0aW9uKGEpe2EuYWN0aXZlJiYoaj0hMCxrW2EubmFtZV09YS5uZXh0U3R5bGUpfSksaiYmZy4kZWwuY3NzKGspfSl9fX1mdW5jdGlvbiBmKGEpe2E9aShhLDApLHRoaXMuYWN0aXZlP3RoaXMucXVldWUucHVzaCh7b3B0aW9uczphfSk6KHRoaXMudGltZXI9bmV3IFMoe2R1cmF0aW9uOmEsY29udGV4dDp0aGlzLGNvbXBsZXRlOmh9KSx0aGlzLmFjdGl2ZT0hMCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMucXVldWUucHVzaCh7b3B0aW9uczphLGFyZ3M6YXJndW1lbnRzfSksdm9pZCh0aGlzLnRpbWVyLmNvbXBsZXRlPWgpKTpqKFwiTm8gYWN0aXZlIHRyYW5zaXRpb24gdGltZXIuIFVzZSBzdGFydCgpIG9yIHdhaXQoKSBiZWZvcmUgdGhlbigpLlwiKX1mdW5jdGlvbiBoKCl7aWYodGhpcy50aW1lciYmdGhpcy50aW1lci5kZXN0cm95KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5xdWV1ZS5sZW5ndGgpe3ZhciBhPXRoaXMucXVldWUuc2hpZnQoKTtlLmNhbGwodGhpcyxhLm9wdGlvbnMsITAsYS5hcmdzKX19ZnVuY3Rpb24gbChhKXt0
8803aGlzLnRpbWVyJiZ0aGlzLnRpbWVyLmRlc3Ryb3koKSx0aGlzLnF1ZXVlPVtdLHRoaXMuYWN0aXZlPSExO3ZhciBiO1wic3RyaW5nXCI9PXR5cGVvZiBhPyhiPXt9LGJbYV09MSk6Yj1cIm9iamVjdFwiPT10eXBlb2YgYSYmbnVsbCE9YT9hOnRoaXMucHJvcHMsdS5jYWxsKHRoaXMsYix2KSx0LmNhbGwodGhpcyl9ZnVuY3Rpb24gbShhKXtsLmNhbGwodGhpcyxhKSx1LmNhbGwodGhpcyxhLHcseCl9ZnVuY3Rpb24gbihhKXtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9XCJibG9ja1wiKSx0aGlzLmVsLnN0eWxlLmRpc3BsYXk9YX1mdW5jdGlvbiBvKCl7bC5jYWxsKHRoaXMpLHRoaXMuZWwuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn1mdW5jdGlvbiBwKCl7dGhpcy5lbC5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gcigpe2wuY2FsbCh0aGlzKSxhLnJlbW92ZURhdGEodGhpcy5lbCxxKSx0aGlzLiRlbD10aGlzLmVsPW51bGx9ZnVuY3Rpb24gdCgpe3ZhciBhLGIsYz1bXTt0aGlzLnVwc3RyZWFtJiZjLnB1c2godGhpcy51cHN0cmVhbSk7Zm9yKGEgaW4gdGhpcy5wcm9wcyliPXRoaXMucHJvcHNbYV0sYi5hY3RpdmUmJmMucHVzaChiLnN0cmluZyk7Yz1jLmpvaW4oXCIsXCIpLHRoaXMuc3R5bGUhPT1jJiYodGhpcy5zdHlsZT1jLHRoaXMuZWwuc3R5bGVbRy50cmFuc2l0aW9uLmRvbV09Yyl9ZnVuY3Rpb24gdShhLGIsZSl7dmFyIGYsZyxoLGksaj1iIT09dixrPXt9O2ZvcihmIGluIGEpaD1hW2ZdLGYgaW4gWj8oay50cmFuc2Zvcm18fChrLnRyYW5zZm9ybT17fSksay50cmFuc2Zvcm1bZl09aCk6KHMudGVzdChmKSYmKGY9YyhmKSksZiBpbiBZP2tbZl09aDooaXx8KGk9e30pLGlbZl09aCkpO2ZvcihmIGluIGspe2lmKGg9a1tmXSxnPXRoaXMucHJvcHNbZl0sIWcpe2lmKCFqKWNvbnRpbnVlO2c9ZC5jYWxsKHRoaXMsZil9Yi5jYWxsKHRoaXMsZyxoKX1lJiZpJiZlLmNhbGwodGhpcyxpKX1mdW5jdGlvbiB2KGEpe2Euc3RvcCgpfWZ1bmN0aW9uIHcoYSxiKXthLnNldChiKX1mdW5jdGlvbiB4KGEpe3RoaXMuJGVsLmNzcyhhKX1mdW5jdGlvbiB5KGEsYyl7YlthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuP0EuY2FsbCh0aGlzLGMsYXJndW1lbnRzKToodGhpcy5lbCYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyl9fWZ1bmN0aW9uIEEoYSxiKXt2YXIgYyxkPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ZvcihjPTA7ZD5jO2MrKylhLmFwcGx5KHRoaXMuY2hpbGRyZW5bY10sYik7cmV0dXJuIHRoaXN9Yi5pbml0PWZ1bmN0aW9uKGIpe2lmKHRoaXMuJGVsPWEoYiksdGhpcy5lbD10aGlzLiRlbFswXSx0aGlzLnByb3BzPXt9LHRoaXMucXVldWU9W10sdGhpcy5zdHlsZT1cIlwiLHRoaXMuYWN0aXZlPSExLFUua2VlcEluaGVyaXRlZCYmIVUuZmFsbGJhY2spe3ZhciBjPVcodGhpcy5lbCxcInRyYW5zaXRpb25cIik7YyYmIXoudGVzdChjKSYmKHRoaXMudXBzdHJlYW09Yyl9Ry5iYWNrZmFjZSYmVS5oaWRlQmFja2ZhY2UmJlYodGhpcy5lbCxHLmJhY2tmYWNlLmNzcyxcImhpZGRlblwiKX0seShcImFkZFwiLGQpLHkoXCJzdGFydFwiLGUpLHkoXCJ3YWl0XCIsZikseShcInRoZW5cIixnKSx5KFwibmV4dFwiLGgpLHkoXCJzdG9wXCIsbCkseShcInNldFwiLG0pLHkoXCJzaG93XCIsbikseShcImhpZGVcIixvKSx5KFwicmVkcmF3XCIscCkseShcImRlc3Ryb3lcIixyKX0pLE09bChMLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYixjKXt2YXIgZD1hLmRhdGEoYixxKXx8YS5kYXRhKGIscSxuZXcgTC5CYXJlKTtyZXR1cm4gZC5lbHx8ZC5pbml0KGIpLGM/ZC5zdGFydChjKTpkfWIuaW5pdD1mdW5jdGlvbihiLGQpe3ZhciBlPWEoYik7aWYoIWUubGVuZ3RoKXJldHVybiB0aGlzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYyhlWzBdLGQpO3ZhciBmPVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24oYSxiKXtmLnB1c2goYyhiLGQpKX0pLHRoaXMuY2hpbGRyZW49Zix0aGlzfX0pLE49bChmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7dmFyIGE9dGhpcy5nZXQoKTt0aGlzLnVwZGF0ZShcImF1dG9cIik7dmFyIGI9dGhpcy5nZXQoKTtyZXR1cm4gdGhpcy51cGRhdGUoYSksYn1mdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gdm9pZCAwIT09YiYmKGM9YiksYSBpbiBtP2E6Y31mdW5jdGlvbiBkKGEpe3ZhciBiPS9yZ2JhP1xcKChcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykvLmV4ZWMoYSk7cmV0dXJuIChiP2UoYlsxXSxiWzJdLGJbM10pOmEpLnJlcGxhY2UoLyMoXFx3KShcXHcpKFxcdykkLyxcIiMkMSQxJDIkMiQzJDNcIik7fXZhciBmPXtkdXJhdGlvbjo1MDAsZWFzZTpcImVhc2VcIixkZWxheTowfTthLmluaXQ9ZnVuY3Rpb24oYSxiLGQsZSl7dGhpcy4kZWw9YSx0aGlzLmVsPWFbMF07dmFyIGc9YlswXTtkWzJdJiYoZz1kWzJdKSxYW2ddJiYoZz1YW2ddKSx0aGlzLm5hbWU9Zyx0aGlzLnR5cGU9ZFsxXSx0aGlzLmR1cmF0aW9uPWkoYlsxXSx0aGlzLmR1cmF0aW9uLGYuZHVyYXRpb24pLHRoaXMuZWFzZT1jKGJbMl0sdGhpcy5lYXNlLGYuZWFzZSksdGhpcy5kZWxheT1pKGJbM10sdGhpcy5kZWxheSxmLmRlbGF5KSx0aGlzLnNwYW49dGhpcy5kdXJhdGlvbit0aGlzLmRlbGF5LHRoaXMuYWN0aXZlPSExLHRoaXMubmV4dFN0eWxlPW51bGwsdGhpcy5hdXRvPUEudGVzdCh0aGlzLm5hbWUpLHRoaXMudW5pdD1lLnVuaXR8fHRoaXMudW5pdHx8VS5kZWZhdWx0VW5pdCx0aGlzLmFuZ2xlPWUuYW5nbGV8fHRoaXMuYW5nbGV8fFUuZGVmYXVsdEFuZ2xlLFUuZmFsbGJhY2t8fGUuZmFsbGJhY2s
8803/dGhpcy5hbmltYXRlPXRoaXMuZmFsbGJhY2s6KHRoaXMuYW5pbWF0ZT10aGlzLnRyYW5zaXRpb24sdGhpcy5zdHJpbmc9dGhpcy5uYW1lK0IrdGhpcy5kdXJhdGlvbitcIm1zXCIrKFwiZWFzZVwiIT10aGlzLmVhc2U/QittW3RoaXMuZWFzZV1bMF06XCJcIikrKHRoaXMuZGVsYXk/Qit0aGlzLmRlbGF5K1wibXNcIjpcIlwiKSl9LGEuc2V0PWZ1bmN0aW9uKGEpe2E9dGhpcy5jb252ZXJ0KGEsdGhpcy50eXBlKSx0aGlzLnVwZGF0ZShhKSx0aGlzLnJlZHJhdygpfSxhLnRyYW5zaXRpb249ZnVuY3Rpb24oYSl7dGhpcy5hY3RpdmU9ITAsYT10aGlzLmNvbnZlcnQoYSx0aGlzLnR5cGUpLHRoaXMuYXV0byYmKFwiYXV0b1wiPT10aGlzLmVsLnN0eWxlW3RoaXMubmFtZV0mJih0aGlzLnVwZGF0ZSh0aGlzLmdldCgpKSx0aGlzLnJlZHJhdygpKSxcImF1dG9cIj09YSYmKGE9Yi5jYWxsKHRoaXMpKSksdGhpcy5uZXh0U3R5bGU9YX0sYS5mYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmVsLnN0eWxlW3RoaXMubmFtZV18fHRoaXMuY29udmVydCh0aGlzLmdldCgpLHRoaXMudHlwZSk7YT10aGlzLmNvbnZlcnQoYSx0aGlzLnR5cGUpLHRoaXMuYXV0byYmKFwiYXV0b1wiPT1jJiYoYz10aGlzLmNvbnZlcnQodGhpcy5nZXQoKSx0aGlzLnR5cGUpKSxcImF1dG9cIj09YSYmKGE9Yi5jYWxsKHRoaXMpKSksdGhpcy50d2Vlbj1uZXcgUih7ZnJvbTpjLHRvOmEsZHVyYXRpb246dGhpcy5kdXJhdGlvbixkZWxheTp0aGlzLmRlbGF5LGVhc2U6dGhpcy5lYXNlLHVwZGF0ZTp0aGlzLnVwZGF0ZSxjb250ZXh0OnRoaXN9KX0sYS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gVyh0aGlzLmVsLHRoaXMubmFtZSl9LGEudXBkYXRlPWZ1bmN0aW9uKGEpe1YodGhpcy5lbCx0aGlzLm5hbWUsYSl9LGEuc3RvcD1mdW5jdGlvbigpeyh0aGlzLmFjdGl2ZXx8dGhpcy5uZXh0U3R5bGUpJiYodGhpcy5hY3RpdmU9ITEsdGhpcy5uZXh0U3R5bGU9bnVsbCxWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuZ2V0KCkpKTt2YXIgYT10aGlzLnR3ZWVuO2EmJmEuY29udGV4dCYmYS5kZXN0cm95KCl9LGEuY29udmVydD1mdW5jdGlvbihhLGIpe2lmKFwiYXV0b1wiPT1hJiZ0aGlzLmF1dG8pcmV0dXJuIGE7dmFyIGMsZT1cIm51bWJlclwiPT10eXBlb2YgYSxmPVwic3RyaW5nXCI9PXR5cGVvZiBhO3N3aXRjaC
8803hiKXtjYXNlIHQ6aWYoZSlyZXR1cm4gYTtpZihmJiZcIlwiPT09YS5yZXBsYWNlKHIsXCJcIikpcmV0dXJuK2E7Yz1cIm51bWJlcih1bml0bGVzcylcIjticmVhaztjYXNlIHU6aWYoZil7aWYoXCJcIj09PWEmJnRoaXMub3JpZ2luYWwpcmV0dXJuIHRoaXMub3JpZ2luYWw7aWYoYi50ZXN0KGEpKXJldHVyblwiI1wiPT1hLmNoYXJBdCgwKSYmNz09YS5sZW5ndGg/YTpkKGEpfWM9XCJoZXggb3IgcmdiIHN0cmluZ1wiO2JyZWFrO2Nhc2UgdjppZihlKXJldHVybiBhK3RoaXMudW5pdDtpZihmJiZiLnRlc3QoYSkpcmV0dXJuIGE7Yz1cIm51bWJlcihweCkgb3Igc3RyaW5nKHVuaXQpXCI7YnJlYWs7Y2FzZSB3OmlmKGUpcmV0dXJuIGErdGhpcy51bml0O2lmKGYmJmIudGVzdChhKSlyZXR1cm4gYTtjPVwibnVtYmVyKHB4KSBvciBzdHJpbmcodW5pdCBvciAlKVwiO2JyZWFrO2Nhc2UgeDppZihlKXJldHVybiBhK3RoaXMuYW5nbGU7aWYoZiYmYi50ZXN0KGEpKXJldHVybiBhO2M9XCJudW1iZXIoZGVnKSBvciBzdHJpbmcoYW5nbGUpXCI7YnJlYWs7Y2FzZSB5OmlmKGUpcmV0dXJuIGE7aWYoZiYmdy50ZXN0KGEpKXJldHVybiBhO2M9XCJudW1iZXIodW5pdGxlc3MpIG9yIHN0cmluZyh1bml0IG9yICUpXCJ9cmV0dXJuIGcoYyxhKSxhfSxhLnJlZHJhdz1mdW5jdGlvbigpe3RoaXMuZWwub2Zmc2V0SGVpZ2h0fX0pLE89bChOLGZ1bmN0aW9uKGEsYil7YS5pbml0PWZ1bmN0aW9uKCl7Yi5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLm9yaWdpbmFsfHwodGhpcy5vcmlnaW5hbD10aGlzLmNvbnZlcnQodGhpcy5nZXQoKSx1KSl9fSksUD1sKE4sZnVuY3Rpb24oYSxiKXthLmluaXQ9ZnVuY3Rpb24oKXtiLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuYW5pbWF0ZT10aGlzLmZhbGxiYWNrfSxhLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbFt0aGlzLm5hbWVdKCl9LGEudXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMuJGVsW3RoaXMubmFtZV0oYSl9fSksUT1sKE4sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWY9WltjXSxlPWZbMF0sZD1mWzFdfHxjLGc9dGhpcy5jb252ZXJ0KGFbY10sZSksYi5jYWxsKHRoaXMsZCxnLGUpfWEuaW5pdD1mdW5jdGlvbigpe2IuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5jdXJyZW50fHwodGhpcy5jdXJyZW50PXt9LFoucGVyc3BlY3RpdmUmJlUucGVyc3BlY3RpdmUmJih0aGlzLmN1cnJlbnQucGVyc3BlY3RpdmU9VS5wZXJzcGVjdGl2ZSxWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuc3R5bGUodGhpcy5jdXJyZW50KSksdGhpcy5yZWRyYXcoKSkpfSxhLnNldD1mdW5jdGlvbihhKXtjLmNhbGwodGhpcyxhLGZ1bmN0aW9uKGEsYil7dGhpcy5jdXJyZW50W2FdPWJ9KSxWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuc3R5bGUodGhpcy5jdXJyZW50KSksdGhpcy5yZWRyYXcoKX0sYS50cmFuc2l0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudmFsdWVzKGEpO3RoaXMudHdlZW49bmV3IFQoe2N1cnJlbnQ6dGhpcy5jdXJyZW50LHZhbHVlczpiLGR1cmF0aW9uOnRoaXMuZHVyYXRpb24sZGVsYXk6dGhpcy5kZWxheSxlYXNlOnRoaXMuZWFzZX0pO3ZhciBjLGQ9e307Zm9yKGMgaW4gdGhpcy5jdXJyZW50KWRbY109YyBpbiBiP2JbY106dGhpcy5jdXJyZW50W2NdO3RoaXMuYWN0aXZlPSEwLHRoaXMubmV4dFN0eWxlPXRoaXMuc3R5bGUoZCl9LGEuZmFsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52YWx1ZXMoYSk7dGhpcy50d2Vlbj1uZXcgVCh7Y3VycmVudDp0aGlzLmN1cnJlbnQsdmFsdWVzOmIsZHVyYXRpb246dGhpcy5kdXJhdGlvbixkZWxheTp0aGlzLmRlbGF5LGVhc2U6dGhpcy5lYXNlLHVwZGF0ZTp0aGlzLnVwZGF0ZSxjb250ZXh0OnRoaXN9KX0sYS51cGRhdGU9ZnVuY3Rpb24oKXtWKHRoaXMuZWwsdGhpcy5uYW1lLHRoaXMuc3R5bGUodGhpcy5jdXJyZW50KSl9LGEuc3R5bGU9ZnVuY3Rpb24oYSl7dmFyIGIsYz1cIlwiO2ZvcihiIGluIGEpYys9YitcIihcIithW2JdK1wiKSBcIjtyZXR1cm4gY30sYS52YWx1ZXM9ZnVuY3Rpb24oYSl7dmFyIGIsZD17fTtyZXR1cm4gYy5jYWxsKHRoaXMsYSxmdW5jdGlvbihhLGMsZSl7ZFthXT1jLHZvaWQgMD09PXRoaXMuY3VycmVudFthXSYmKGI9MCx+YS5pbmRleE9mKFwic2NhbGVcIikmJihiPTEpLHRoaXMuY3VycmVudFthXT10aGlzLmNvbnZlcnQoYixlKSl9KSxkfX0pLFI9bChmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpezE9PT1uLnB1c2goYSkmJk
8803ooZyl9ZnVuY3Rpb24gZygpe3ZhciBhLGIsYyxkPW4ubGVuZ3RoO2lmKGQpZm9yKEooZyksYj1LKCksYT1kO2EtLTspYz1uW2FdLGMmJmMucmVuZGVyKGIpfWZ1bmN0aW9uIGkoYil7dmFyIGMsZD1hLmluQXJyYXkoYixuKTtkPj0wJiYoYz1uLnNsaWNlKGQrMSksbi5sZW5ndGg9ZCxjLmxlbmd0aCYmKG49bi5jb25jYXQoYykpKX1mdW5jdGlvbiBqKGEpe3JldHVybiBNYXRoLnJvdW5kKGEqbykvb31mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4gZShhWzBdK2MqKGJbMF0tYVswXSksYVsxXStjKihiWzFdLWFbMV0pLGFbMl0rYyooYlsyXS1hWzJdKSl9dmFyIGw9e2Vhc2U6bS5lYXNlWzFdLGZyb206MCx0bzoxfTtiLmluaXQ9ZnVuY3Rpb24oYSl7dGhpcy5kdXJhdGlvbj1hLmR1cmF0aW9ufHwwLHRoaXMuZGVsYXk9YS5kZWxheXx8MDt2YXIgYj1hLmVhc2V8fGwuZWFzZTttW2JdJiYoYj1tW2JdWzFdKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBiJiYoYj1sLmVhc2UpLHRoaXMuZWFzZT1iLHRoaXMudXBkYXRlPWEudXBkYXRlfHxmLHRoaXMuY29tcGxldGU9YS5jb21wbGV0ZXx8Zix0aGlzLmNvbnRleHQ9YS5jb250ZXh0fHx0aGlzLHRoaXMubmFtZT1hLm5hbWU7dmFyIGM9YS5mcm9tLGQ9YS50bzt2b2lkIDA9PT1jJiYoYz1sLmZyb20pLHZvaWQgMD09PWQmJihkPWwudG8pLHRoaXMudW5pdD1hLnVuaXR8fFwiXCIsXCJudW1iZXJcIj09dHlwZW9mIGMmJlwibnVtYmVyXCI9PXR5cGVvZiBkPyh0aGlzLmJlZ2luPWMsdGhpcy5jaGFuZ2U9ZC1jKTp0aGlzLmZvcm1hdChkLGMpLHRoaXMudmFsdWU9dGhpcy5iZWdpbit0aGlzLnVuaXQsdGhpcy5zdGFydD1LKCksYS5hdXRvcGxheSE9PSExJiZ0aGlzLnBsYXkoKX0sYi5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmV8fCh0aGlzLnN0YXJ0fHwodGhpcy5zdGFydD1LKCkpLHRoaXMuYWN0aXZlPSEwLGModGhpcykpfSxiLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlPSExLGkodGhpcykpfSxiLnJlbmRlcj1mdW5jdGlvbihhKXt2YXIgYixjPWEtdGhpcy5zdGFydDtpZih0aGlzLmRlbGF5KXtpZihjPD10aGlzLmRlbGF5KXJldHVybjtjLT10aGlzLmRlbGF5fWlmKGM8dGhpcy5kdXJhdGlvbil7dmFyIGQ9dGhpcy5lYXNlKGMsMCwxLHRoaXMuZHVyYXRpb24pO3JldHVybiBiPXRoaXMuc3RhcnRSR0I/ayh0aGlzLnN0YXJ0UkdCLHRoaXMuZW5kUkdCLGQpOmoodGhpcy5iZWdpbitkKnRoaXMuY2hhbmdlKSx0aGlzLnZhbHVlPWIrdGhpcy51bml0LHZvaWQgdGhpcy51cGRhdGUuY2FsbCh0aGlzLmNvbnRleHQsdGhpcy52YWx1ZSl9Yj10aGlzLmVuZEhleHx8dGhpcy5iZWdpbit0aGlzLmNoYW5nZSx0aGlzLnZhbHVlPWIrdGhpcy51bml0LHRoaXMudXBkYXRlLmNhbGwodGhpcy5jb250ZXh0LHRoaXMudmFsdWUpLHRoaXMuY29tcGxldGUuY2FsbCh0aGlzLmNvbnRleHQpLHRoaXMuZGVzdHJveSgpfSxiLmZvcm1hdD1mdW5jdGlvbihhLGIpe2lmKGIrPVwiXCIsYSs9XCJcIixcIiNcIj09YS5jaGFyQXQoMCkpcmV0dXJuIHRoaXMuc3RhcnRSR0I9ZChiKSx0aGlzLmVuZFJHQj1kKGEpLHRoaXMuZW5kSGV4PWEsdGhpcy5iZWdpbj0wLHZvaWQodGhpcy5jaGFuZ2U9MSk7aWYoIXRoaXMudW5pdCl7dmFyIGM9Yi5yZXBsYWNlKHIsXCJcIiksZT1hLnJlcGxhY2UocixcIlwiKTtjIT09ZSYmaChcInR3ZWVuXCIsYixhKSx0aGlzLnVuaXQ9Y31iPXBhcnNlRmxvYXQoYiksYT1wYXJzZUZsb2F0KGEpLHRoaXMuYmVnaW49dGhpcy52YWx1ZT1iLHRoaXMuY2hhbmdlPWEtYn0sYi5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdG9wKCksdGhpcy5jb250ZXh0PW51bGwsdGhpcy5lYXNlPXRoaXMudXBkYXRlPXRoaXMuY29tcGxldGU9Zn07dmFyIG49W10sbz0xZTN9KSxTPWwoUixmdW5jdGlvbihhKXthLmluaXQ9ZnVuY3Rpb24oYSl7dGhpcy5kdXJhdGlvbj1hLmR1cmF0aW9ufHwwLHRoaXMuY29tcGxldGU9YS5jb21wbGV0ZXx8Zix0aGlzLmNvbnRleHQ9YS5jb250ZXh0LHRoaXMucGxheSgpfSxhLnJlbmRlcj1mdW5jdGlvbihhKXt2YXIgYj1hLXRoaXMuc3RhcnQ7Yjx0aGlzLmR1cmF0aW9ufHwodGhpcy5jb21wbGV0ZS5jYWxsKHRoaXMuY29udGV4dCksdGhpcy5kZXN0cm95KCkpfX0pLFQ9bChSLGZ1bmN0aW9uKGEsYil7YS5pbml0PWZ1bmN0aW9uKGEpe3RoaXMuY29udGV4dD1hLmNvbnRleHQsdGhpcy51cGRhdGU9YS51cGRhdGUsdGhpcy50d2VlbnM9W10sdGhpcy5jdXJyZW50PWEuY3VycmVudDt2YXIgYixjO2ZvcihiIGluIGEudmFsdWVzKWM9YS52YWx1ZXNbYl0sdGhpcy5jdXJyZW50W2JdIT09YyYmdGhpcy50d2VlbnMucHVzaChuZXcgUih7bmFtZTpiLGZyb206dGhpcy5jdXJyZW50W2JdLHRvOmMsZHVyYXRpb246YS5kdXJhdGlvbixkZWxheTphLmRlbGF5LGVhc2U6YS5lYXNlLGF1dG9wbGF5OiExfSkpO3RoaXMucGxheSgpfSxhLnJlbmRlcj1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcy50d2VlbnMubGVuZ3RoLGU9ITE7Zm9yKGI9ZDtiLS07KWM9dGhpcy50d2VlbnNbYl0sYy5jb250ZXh0JiYoYy5yZW5kZXIoYSksdGhpcy5jdXJyZW50W2MubmFtZV09Yy52YWx1ZSxlPSEwKTtyZXR1cm4gZT92b2lkKHRoaXMudXBkYXRlJiZ0aGlzLnVwZGF0ZS5jYWxsKHRoaXMuY29udGV4dCkpOnRoaXMuZGVzdHJveSgpfSxhLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZihiLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLnR3ZWVucyl7dmFyIGEsYz10aGlzLnR3ZWVucy5sZW5ndGg7Zm9yKGE9YzthLS07KXRoaXMudHdlZW5zW2FdLmRlc3Ryb3koKTt0aGlzLnR3ZWVucz1udWxsLHRoaXMuY3VycmVudD1udWxsfX19KSxVPWIuY29uZmlnPXtkZWJ1ZzohMSxkZWZhdWx0VW5pdDpcInB4XCIsZGVmYXVsdEFuZ2xlOlwiZGVnXCIsa2VlcEluaGVyaXRlZDohMSxoaWRlQmFja2ZhY2U6ITEscGVyc3BlY3RpdmU6XCJcIixmYWxsYmFjazohRy50cmFuc2l0aW9uLGFnZW50VGVzdHM6W119O2IuZmFsbGJhY2s9ZnVuY3Rpb24oYSl7aWYoIUcudHJhbnNpdGlvbilyZXR1cm4gVS5mYWxsYmFjaz0hMDtVLmFnZW50VGVzdHMucHVzaChcIihcIithK1wiKVwiKTt2YXIgYj1uZXcgUmVnRXhwKFUuYWdlbnRUZXN0cy5qb2luKFwifFwiKSxcIml
8803cIik7VS5mYWxsYmFjaz1iLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LGIuZmFsbGJhY2soXCI2LjAuWzItNV0gU2FmYXJpXCIpLGIudHdlZW49ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBSKGEpfSxiLmRlbGF5PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbmV3IFMoe2NvbXBsZXRlOmIsZHVyYXRpb246YSxjb250ZXh0OmN9KX0sYS5mbi50cmFtPWZ1bmN0aW9uKGEpe3JldHVybiBiLmNhbGwobnVsbCx0aGlzLGEpfTt2YXIgVj1hLnN0eWxlLFc9YS5jc3MsWD17dHJhbnNmb3JtOkcudHJhbnNmb3JtJiZHLnRyYW5zZm9ybS5jc3N9LFk9e2NvbG9yOltPLHVdLGJhY2tncm91bmQ6W08sdSxcImJhY2tncm91bmQtY29sb3JcIl0sXCJvdXRsaW5lLWNvbG9yXCI6W08sdV0sXCJib3JkZXItY29sb3JcIjpbTyx1XSxcImJvcmRlci10b3AtY29sb3JcIjpbTyx1XSxcImJvcmRlci1yaWdodC1jb2xvclwiOltPLHVdLFwiYm9yZGVyLWJvdHRvbS1jb2xvclwiOltPLHVdLFwiYm9yZGVyLWxlZnQtY29sb3JcIjpbTyx1XSxcImJvcmRlci13aWR0aFwiOltOLHZdLFwiYm9yZGVyLXRvcC13aWR0aFwiOltOLHZdLFwiYm9yZGVyLXJpZ2h0LXdpZHRoXCI6W04sdl0sXCJib3JkZXItYm90dG9tLXdpZHRoXCI6W04sdl0sXCJib3JkZXItbGVmdC13aWR0aFwiOltOLHZdLFwiYm9yZGVyLXNwYWNpbmdcIjpbTix2XSxcImxldHRlci1zcGFjaW5nXCI6W04sdl0sbWFyZ2luOltOLHZdLFwibWFyZ2luLXRvcFwiOltOLHZdLFwibWFyZ2luLXJpZ2h0XCI6W04sdl0sXCJtYXJnaW4tYm90dG9tXCI6W04sdl0sXCJtYXJnaW4tbGVmdFwiOltOLHZdLHBhZGRpbmc6W04sdl0sXCJwYWRkaW5nLXRvcFwiOltOLHZdLFwicGFkZGluZy1yaWdodFwiOltOLHZdLFwicGFkZGluZy1ib3R0b21cIjpbTix2XSxcInBhZGRpbmctbGVmdFwiOltOLHZdLFwib3V0bGluZS13aWR0aFwiOltOLHZdLG9wYWNpdHk6W04sdF0sdG9wOltOLHddLHJpZ2h0OltOLHddLGJvdHRvbTpbTix3XSxsZWZ0OltOLHddLFwiZm9udC1zaXplXCI6W04sd10sXCJ0ZXh0LWluZGVudFwiOltOLHddLFwid29yZC1zcGFjaW5nXCI6W04sd10sd2lkdGg6W04sd10sXCJtaW4td2lkdGhcIjpbTix3XSxcIm1heC13aWR0aFwiOltOLHddLGhlaWdodDpbTix3XSxcIm1pbi1oZWlnaHRcIjpbTix3XSxcIm1heC1oZWlnaHRcIjpbTix3XSxcImxpbmUtaGVpZ2h0XCI6W04seV0sXCJzY3JvbGwtdG9wXCI6W1AsdCxcInNjcm9sbFRvcFwiXSxcInNjcm9sbC1sZWZ0XCI6W1AsdCxcInNjcm9sbExlZnRcIl19LFo9e307Ry50cmFuc2Zvcm0mJihZLnRyYW5zZm9ybT1bUV0sWj17eDpbdyxcInRyYW5zbGF0ZVhcIl0seTpbdyxcInRyYW5zbGF0ZVlcIl0scm90YXRlOlt4XSxyb3RhdGVYOlt4XSxyb3RhdGVZOlt4XSxzY2FsZTpbdF0sc2NhbGVYOlt0XSxzY2FsZVk6W3RdLHNrZXc6W3hdLHNrZXdYOlt4XSxza2V3WTpbeF19KSxHLnRyYW5zZm9ybSYmRy5iYWNrZmFjZSYmKFouej1bdyxcInRyYW5zbGF0ZVpcIl0sWi5yb3RhdGVaPVt4XSxaLnNjYWxlWj1bdF0sWi5wZXJzcGVjdGl2ZT1bdl0pO3ZhciAkPS9tcy8sXz0vc3xcXC4vO3JldHVybiBhLnRyYW09Yn0od2luZG93LmpRdWVyeSk7XG4iXSwibmFtZXMiOlsid2luZG93IiwidHJhbSIsImEiLCJiIiwiYyIsIk0iLCJCYXJlIiwiaW5pdCIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImQiLCJwYXJzZUludCIsInNsaWNlIiwiZSIsInRvU3RyaW5nIiwiZiIsImciLCJqIiwiaCIsImkiLCIkIiwidGVzdCIsIl8iLCJwYXJzZUZsb2F0IiwiVSIsImRlYnVnIiwiY29uc29sZSIsIndhcm4iLCJrIiwibGVuZ3RoIiwicHVzaCIsImwiLCJhcHBseSIsImFyZ3VtZW50cyIsIk9iamVjdCIsIm0iLCJuIiwiY29uc3RydWN0b3IiLCJtaXhpbiIsIm9wZW4iLCJjYWxsIiwiaGFzT3duUHJvcGVydHkiLCJlYXNlIiwibGluZWFyIiwiTWF0aCIsImNvcyIsIlBJIiwic2luIiwicG93Iiwic3FydCIsIm8iLCJkb2N1bWVudCIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiQSIsIkIiLCJDIiwiY3JlYXRlRWxlbWVudCIsIkQiLCJFIiwiRiIsInN0eWxlIiwiZG9tIiwiY3NzIiwic3BsaXQiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsIkciLCJzdXBwb3J0IiwiYmluZCIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwidHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsImJhY2tmYWNlIiwidGltaW5nIiwiSCIsIkkiLCJKIiwiZnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwiSyIsIm5vdyIsInBlcmZvcm1hbmNlIiwid2Via2l0Tm93IiwibXNOb3ciLCJtb3pOb3ciLCJEYXRlIiwiTCIsIlkiLCJ3ZWFrIiwicHJvcHMiLCIkZWwiLCJ0aW1lciIsImRlc3Ryb3kiLCJxdWV1ZSIsImFjdGl2ZSIsIlMiLCJkdXJhdGlvbiIsImNvbnRleHQiLCJjb21wbGV0ZSIsInNwYW4iLCJzdG9wIiwiYW5pbWF0ZSIsIndhaXQiLCJuYW1lIiwibmV4dFN0eWxlIiwib3B0aW9ucyIsImFyZ3MiLCJzaGlmdCIsImVsIiwiZGlzcGxheSIsIm9mZnNldEhlaWdodCIsInJlbW92ZURhdGEiLCJ1cHN0cmVhbSIsInN0cmluZyIsImpvaW4iLCJaIiwic2V0IiwiY2hpbGRyZW4iLCJrZWVwSW5oZXJpdGVkIiwiZmFsbGJhY2siLCJXIiwiaGlkZUJhY2tmYWNlIiwiViIsImRhdGEiLCJzdGFydCIsImVhY2giLCJOIiwiZ2V0IiwidXBkYXRlIiwiZXhlYyIsImRlbGF5IiwiWCIsInR5cGUiLCJhdXRvIiwidW5pdCIsImRlZmF1bHRVbml0IiwiYW5nbGUiLCJkZWZhdWx0QW5nbGUiLCJjb252ZXJ0IiwicmVkcmF3IiwidHdlZW4iLCJSIiwiZnJvbSIsInRvIiwib3JpZ2luYWwiLCJPIiwiUCIsIlEiLCJjdXJyZW50IiwicGVyc3BlY3RpdmUiLCJ2YWx1ZXMiLCJUIiwiaW5kZXhPZiIsInJlbmRlciIsImluQXJyYXkiLCJjb25jYXQiLCJyb3VuZCIsImJlZ2luIiwiY2hhbmdlIiwiZm9ybWF0IiwidmFsdWUiLCJhdXRvcGxheSIsInBsYXkiLCJzdGFydFJHQiIsImVuZFJHQiIsImVuZEhleCIsInR3ZWVucyIsImNvbmZpZyIsImFnZW50VGVzdHMiLCJSZWdFeHAiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmbiIsImNvbG9yIiwiYmFja2dyb3VuZCIsIm1hcmdpbiIsInBhZGRpbmciLCJvcGFjaXR5IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJyb3RhdGUiLCJyb3RhdGVYIiwicm90YXRlWSIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2tldyIsInNrZXdYIiwic2tld1kiLCJyb3RhdGVaIiwic2NhbGVaIiwialF1ZXJ5Il0sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQsR0FDdkQsa0JBQWtCLEdBQ2xCOzs7OztDQUtDLEdBQ0QsbUJBQW1CO0FBQ25CQSxPQUFPQyxJQUFJLEdBQUMsU0FBU0MsQ0FBQztJQUFFLFNBQVNDLEVBQUVELENBQUMsRUFBQ0MsQ0FBQztRQUFFLElBQUlDLElBQUUsSUFBSUMsRUFBRUMsSUFBSTtRQUFDLE9BQU9GLEVBQUVHLElBQUksQ0FBQ0wsR0FBRUM7SUFBRTtJQUFDLFNBQVNDLEVBQUVGLENBQUM7UUFBRSxPQUFPQSxFQUF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
8804
8805}),
8806"5756": (function (module, __unused_webpack_exports, __webpack_require__) {
8807"use strict";
8808// Include tram for frame-throttling
8809/* globals window */ 
8810var $ = window.$;
8811var tram = __webpack_require__(5487) && $.tram;
8812/*!
8813 * Webflow._ (aka) Underscore.js 1.6.0 (custom build)
8814 *
8815 * http://underscorejs.org
8816 * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
8817 * Underscore may be freely distributed under the MIT license.
8818 * @license MIT
8819 */ /**
8820 * Webflow custom build of Underscore.js 1.6.0
8821 * https://github.com/jashkenas/underscore/tree/1.6.0
8822 *
8823 * _.each
8824 * _.map
8825 * _.find
8826 * _.filter
8827 * _.any
8828 * _.contains
8829 * _.delay
8830 * _.defer
8831 * _.throttle (webflow)
8832 * _.debounce
8833 * _.keys
8834 * _.has
8835 * _.now
8836 * _.template (webflow: upgraded to 1.13.6)
8837 */ module.exports = function() {
8838    var _ = {};
8839    // Current version.
8840    _.VERSION = '1.6.0-Webflow';
8841    // Establish the object that gets returned to break out of a loop iteration.
8842    var breaker = {};
8843    // Save bytes in the minified (but not gzipped) version:
8844    /* eslint-disable one-var */ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
8845    /* eslint-enable one-var */ // Create quick reference variables for speed access to core prototypes.
8846    /* eslint-disable one-var, unused-imports/no-unused-vars */ var push = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty;
8847    /* eslint-enable one-var, unused-imports/no-unused-vars */ // All **ECMAScript 5** native function implementations that we hope to use
8848    // are declared here.
8849    /* eslint-disable one-var, unused-imports/no-unused-vars */ var nativeForEach = ArrayProto.forEach, nativeMap = ArrayProto.map, nativeReduce = ArrayProto.reduce, nativeReduceRight = ArrayProto.reduceRight, nativeFilter = ArrayProto.filter, nativeEvery = ArrayProto.every, nativeSome = ArrayProto.some, nativeIndexOf = ArrayProto.indexOf, nativeLastIndexOf = ArrayProto.lastIndexOf, nativeIsArray = Array.isArray, nativeKeys = Object.keys, nativeBind = FuncProto.bind;
8850    /* eslint-enable one-var, unused-imports/no-unused-vars */ // Collection Functions
8851    // --------------------
8852    // The cornerstone, an `each` implementation, aka `forEach`.
8853    // Handles objects with the built-in `forEach`, arrays, and raw objects.
8854    // Delegates to **ECMAScript 5**'s native `forEach` if available.
8855    var each = _.each = _.forEach = function(obj, iterator, context) {
8856        /* jshint shadow:true */ if (obj == null) return obj;
8857        if (nativeForEach && obj.forEach === nativeForEach) {
8858            obj.forEach(iterator, context);
8859        // eslint-disable-next-line no-implicit-coercion
8860        } else if (obj.length === +obj.length) {
8861            for(var i = 0, length = obj.length; i < length; i++){
8862                if (iterator.call(context, obj[i], i, obj) === breaker) return;
8863            }
8864        } else {
8865            var keys = _.keys(obj);
8866            // eslint-disable-next-line no-redeclare
8867            for(var i = 0, length = keys.length; i < length; i++){
8868                if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
8869            }
8870        }
8871        return obj;
8872    };
8873    // Return the results of applying the iterator to each element.
8874    // Delegates to **ECMAScript 5**'s native `map` if available.
8875    _.map = _.collect = function(obj, iterator, context) {
8876        var results = [];
8877        if (obj == null) return results;
8878        if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
8879        each(obj, function(value, index, list) {
8880            results.push(iterator.call(context, value, index, list));
8881        });
8882        return results;
8883    };
8884    // Return the first value which passes a truth test. Aliased as `detect`.
8885    _.find = _.detect = function(obj, predicate, context) {
8886        var result;
8887        any(obj, function(value, index, list) {
8888            if (predicate.call(context, value, index, list)) {
8889                result = value;
8890                return true;
8891            }
8892        });
8893        return result;
8894    };
8895    // Return all the elements that pass a truth test.
8896    // Delegates to **ECMAScript 5**'s native `filter` if available.
8897    // Aliased as `select`.
8898    _.filter = _.select = function(obj, predicate, context) {
8899        var results = [];
8900        if (obj == null) return results;
8901        if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context);
8902        each(obj, function(value, index, list) {
8903            if (predicate.call(context, value, index, list)) results.push(value);
8904        });
8905        return results;
8906    };
8907    // Determine if at least one element in the object matches a truth test.
8908    // Delegates to **ECMAScript 5**'s native `some` if available.
8909    // Aliased as `any`.
8910    var any = _.some = _.any = function(obj, predicate, context) {
8911        predicate || (predicate = _.identity);
8912        var result = false;
8913        if (obj == null) return result;
8914        if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context);
8915        each(obj, function(value, index, list) {
8916            if (result || (result = predicate.call(context, value, index, list))) return breaker;
8917        });
8918        return !!result; // eslint-disable-line no-implicit-coercion
8919    };
8920    // Determine if the array or object contains a given value (using `===`).
8921    // Aliased as `include`.
8922    _.contains = _.include = function(obj, target) {
8923        if (obj == null) return false;
8924        if (nativeIndexOf && obj.indexOf === nativeIndexOf) // eslint-disable-next-line eqeqeq
8925        return obj.indexOf(target) != -1;
8926        return any(obj, function(value) {
8927            return value === target;
8928        });
8929    };
8930    // Function (ahem) Functions
8931    // --------------------
8932    // Delays a function for the given number of milliseconds, and then calls
8933    // it with the arguments supplied.
8934    _.delay = function(func, wait) {
8935        var args = slice.call(arguments, 2);
8936        return setTimeout(function() {
8937            return func.apply(null, args);
8938        }, wait);
8939    };
8940    // Defers a function, scheduling it to run after the current call stack has
8941    // cleared.
8942    _.defer = function(func) {
8943        return _.delay.apply(_, [
8944            func,
8945            1
8946        ].concat(slice.call(arguments, 1)));
8947    };
8948    // Returns a function, that, when invoked, will only be triggered once every
8949    // browser animation frame - using tram's requestAnimationFrame polyfill.
8950    _.throttle = function(func) {
8951        // eslint-disable-next-line one-var
8952        var wait, args, context;
8953        return function() {
8954            if (wait) return;
8955            wait = true;
8956            args = arguments;
8957            context = this;
8958            tram.frame(function() {
8959                wait = false;
8960                func.apply(context, args);
8961            });
8962        };
8963    };
8964    // Returns a function, that, as long as it continues to be invoked, will not
8965    // be triggered. The function will be called after it stops being called for
8966    // N milliseconds. If `immediate` is passed, trigger the function on the
8967    // leading edge, instead of the trailing.
8968    _.debounce = function(func, wait, immediate) {
8969        // eslint-disable-next-line one-var
8970        var timeout, args, context, timestamp, result;
8971        var later = function() {
8972            var last = _.now() - timestamp;
8973            if (last < wait) {
8974                timeout = setTimeout(later, wait - last);
8975            } else {
8976                timeout = null;
8977                if (!immediate) {
8978                    result = func.apply(context, args);
8979                    context = args = null;
8980                }
8981            }
8982        };
8983        return function() {
8984            context = this;
8985            args = arguments;
8986            timestamp = _.now();
8987            var callNow = immediate && !timeout;
8988            if (!timeout) {
8989                timeout = setTimeout(later, wait);
8990            }
8991            if (callNow) {
8992                result = func.apply(context, args);
8993                context = args = null;
8994            }
8995            return result;
8996        };
8997    };
8998    // Object Functions
8999    // ----------------
9000    // Fill in a given object with default properties.
9001    _.defaults = function(obj) {
9002        if (!_.isObject(obj)) return obj;
9003        for(var i = 1, length = arguments.length; i < length; i++){
9004            var source = arguments[i];
9005            for(var prop in source){
9006                // eslint-disable-next-line no-void
9007                if (obj[prop] === void 0) obj[prop] = source[prop];
9008            }
9009        }
9010        return obj;
9011    };
9012    // Retrieve the names of an object's properties.
9013    // Delegates to **ECMAScript 5**'s native `Object.keys`
9014    _.keys = function(obj) {
9015        if (!_.isObject(obj)) return [];
9016        if (nativeKeys) return nativeKeys(obj);
9017        var keys = [];
9018        for(var key in obj)if (_.has(obj, key)) keys.push(key);
9019        return keys;
9020    };
9021    // Shortcut function for checking if an object has a given property directly
9022    // on itself (in other words, not on a prototype).
9023    _.has = function(obj, key) {
9024        return hasOwnProperty.call(obj, key);
9025    };
9026    // Is a given variable an object?
9027    _.isObject = function(obj) {
9028        return obj === Object(obj);
9029    };
9030    // Utility Functions
9031    // -----------------
9032    // A (possibly faster) way to get the current timestamp as an integer.
9033    _.now = Date.now || function() {
9034        return new Date().getTime();
9035    };
9036    // By default, Underscore uses ERB-style template delimiters, change the
9037    // following template settings to use alternative delimiters.
9038    _.templateSettings = {
9039        evaluate: /<%([\s\S]+?)%>/g,
9040        interpolate: /<%=([\s\S]+?)%>/g,
9041        escape: /<%-([\s\S]+?)%>/g
9042    };
9043    // When customizing `templateSettings`, if you don't want to define an
9044    // interpolation, evaluation or escaping regex, we need one that is
9045    // guaranteed not to match.
9046    var noMatch = /(.)^/;
9047    // Certain characters need to be escaped so that they can be put into a
9048    // string literal.
9049    var escapes = {
9050        "'": "'",
9051        '\\': '\\',
9052        '\r': 'r',
9053        '\n': 'n',
9054        '\u2028': 'u2028',
9055        '\u2029': 'u2029'
9056    };
9057    var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
9058    var escapeChar = function(match) {
9059        return '\\' + escapes[match];
9060    };
9061    // In order to prevent third-party code injection through
9062    // `_.templateSettings.variable`, we test it against the following regular
9063    // expression. It is intentionally a bit more liberal than just matching valid
9064    // identifiers, but still prevents possible loopholes through defaults or
9065    // destructuring assignment.
9066    var bareIdentifier = /^\s*(\w|\$)+\s*$/;
9067    // JavaScript micro-templating, similar to John Resig's implementation.
9068    // Underscore templating handles arbitrary delimiters, preserves whitespace,
9069    // and correctly escapes quotes within interpolated code.
9070    // NB: `oldSettings` only exists for backwards compatibility.
9071    _.template = function(text, settings, oldSettings) {
9072        if (!settings && oldSettings) settings = oldSettings;
9073        settings = _.defaults({}, settings, _.templateSettings);
9074        // Combine delimiters into one regular expression via alternation.
9075        var matcher = RegExp([
vendor: 4,189 bytes, lines 9076-9126
9076            (settings.escape || noMatch).source,
9077            (settings.interpolate || noMatch).source,
9078            (settings.evaluate || noMatch).source
9079        ].join('|') + '|$', 'g');
9080        // Compile the template source, escaping string literals appropriately.
9081        var index = 0;
9082        var source = "__p+='";
9083        text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
9084            source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
9085            index = offset + match.length;
9086            if (escape) {
9087                source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
9088            } else if (interpolate) {
9089                source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
9090            } else if (evaluate) {
9091                source += "';\n" + evaluate + "\n__p+='";
9092            }
9093            // Adobe VMs need the match returned to produce the correct offset.
9094            return match;
9095        });
9096        source += "';\n";
9097        var argument = settings.variable;
9098        if (argument) {
9099            // Insure against third-party code injection. (CVE-2021-23358)
9100            if (!bareIdentifier.test(argument)) throw new Error('variable is not a bare identifier: ' + argument);
9101        } else {
9102            // If a variable is not specified, place data values in local scope.
9103            source = 'with(obj||{}){\n' + source + '}\n';
9104            argument = 'obj';
9105        }
9106        source = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + source + 'return __p;\n';
9107        var render;
9108        try {
9109            // eslint-disable-next-line no-new-func
9110            render = new Function(settings.variable || 'obj', '_', source);
9111        } catch (e) {
9112            e.source = source;
9113            throw e;
9114        }
9115        var template = function(data) {
9116            return render.call(this, data, _);
9117        };
9118        // Provide the compiled source as a convenience for precompilation.
9119        template.source = 'function(' + argument + '){\n' + source + '}';
9120        return template;
9121    };
9122    // Export underscore
9123    return _;
9124}();
9125
9126//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuZGVyc2NvcmUtY3VzdG9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEluY2x1ZGUgdHJhbSBmb3IgZnJhbWUtdGhyb3R0bGluZ1xuLyogZ2xvYmFscyB3aW5kb3cgKi9cblxudmFyICQgPSB3aW5kb3cuJDtcbnZhciB0cmFtID0gcmVxdWlyZSgnLi90cmFtLW1pbicpICYmICQudHJhbTtcblxuLyohXG4gKiBXZWJmbG93Ll8gKGFrYSkgVW5kZXJzY29yZS5qcyAxLjYuMCAoY3VzdG9tIGJ1aWxkKVxuICpcbiAqIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4gKiAoYykgMjAwOS0yMDEzIEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKiBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbi8qKlxuICogV2ViZmxvdyBjdXN0b20gYnVpbGQgb2YgVW5kZXJzY29yZS5qcyAxLjYuMFxuICogaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3RyZWUvMS42LjBcbiAqXG4gKiBfLmVhY2hcbiAqIF8ubWFwXG4gKiBfLmZpbmRcbiAqIF8uZmlsdGVyXG4gKiBfLmFueVxuICogXy5jb250YWluc1xuICogXy5kZWxheVxuICogXy5kZWZlclxuICogXy50aHJvdHRsZSAod2ViZmxvdylcbiAqIF8uZGVib3VuY2VcbiAqIF8ua2V5c1xuICogXy5oYXNcbiAqIF8ubm93XG4gKiBfLnRlbXBsYXRlICh3ZWJmbG93OiB1cGdyYWRlZCB0byAxLjEzLjYpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIF8gPSB7fTtcblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjYuMC1XZWJmbG93JztcblxuICAvLyBFc3RhYmxpc2ggdGhlIG9iamVjdCB0aGF0IGdldHMgcmV0dXJuZWQgdG8gYnJlYWsgb3V0IG9mIGEgbG9vcCBpdGVyYXRpb24uXG4gIHZhciBicmVha2VyID0ge307XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgLyogZXNsaW50LWRpc2FibGUgb25lLXZhciAqL1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuICAvKiBlc2xpbnQtZW5hYmxlIG9uZS12YXIgKi9cblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgLyogZXNsaW50LWRpc2FibGUgb25lLXZhciwgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIGNvbmNhdCA9IEFycmF5UHJvdG8uY29uY2F0LFxuICAgIHRv
9126U3RyaW5nID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcbiAgLyogZXNsaW50LWVuYWJsZSBvbmUtdmFyLCB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgLyogZXNsaW50LWRpc2FibGUgb25lLXZhciwgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cbiAgdmFyIG5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2gsXG4gICAgbmF0aXZlTWFwID0gQXJyYXlQcm90by5tYXAsXG4gICAgbmF0aXZlUmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2UsXG4gICAgbmF0aXZlUmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0LFxuICAgIG5hdGl2ZUZpbHRlciA9IEFycmF5UHJvdG8uZmlsdGVyLFxuICAgIG5hdGl2ZUV2ZXJ5ID0gQXJyYXlQcm90by5ldmVyeSxcbiAgICBuYXRpdmVTb21lID0gQXJyYXlQcm90by5zb21lLFxuICAgIG5hdGl2ZUluZGV4T2YgPSBBcnJheVByb3RvLmluZGV4T2YsXG4gICAgbmF0aXZlTGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mLFxuICAgIG5hdGl2ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICBuYXRpdmVCaW5kID0gRnVuY1Byb3RvLmJpbmQ7XG4gIC8qIGVzbGludC1lbmFibGUgb25lLXZhciwgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIG9iamVjdHMgd2l0aCB0aGUgYnVpbHQtaW4gYGZvckVhY2hgLCBhcnJheXMsIGFuZCByYXcgb2JqZWN0cy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGZvckVhY2hgIGlmIGF2YWlsYWJsZS5cbiAgdmFyIGVhY2ggPVxuICAgIChfLmVhY2ggPVxuICAgIF8uZm9yRWFjaCA9XG4gICAgICBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvKiBqc2hpbnQgc2hhZG93OnRydWUgKi9cbiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgICBpZiAobmF0aXZlRm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gbmF0aXZlRm9yRWFjaCkge1xuICAgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbiAgICAgICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArb2JqLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKSA9PT0gYnJlYWtlcikgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2Y
9126XIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopID09PSBicmVha2VyKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9KTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVudC5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYG1hcGAgaWYgYXZhaWxhYmxlLlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHRzO1xuICAgIGlmIChuYXRpdmVNYXAgJiYgb2JqLm1hcCA9PT0gbmF0aXZlTWFwKSByZXR1cm4gb2JqLm1hcChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbiAob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGFueShvYmosIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBmaWx0ZXJgIGlmIGF2YWlsYWJsZS5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uIChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0cztcbiAgICBpZiAobmF0aXZlRmlsdGVyICYmIG9iai5maWx0ZXIgPT09IG5hdGl2ZUZpbHRlcilcbiAgICAgIHJldHVybiBvYmouZmlsdGVyKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgc29tZWAgaWYgYXZhaWxhYmxlLlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICB2YXIgYW55ID1cbiAgICAoXy5zb21lID1cbiAgICBfLmFueSA9XG4gICAgICBmdW5jdGlvbiAob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgICAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBfLmlkZW50aXR5KTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGlmIChuYXRpdmVTb21lICYmIG9iai5zb21lID09PSBuYXRpdmVTb21lKVxuICAgICAgICAgIHJldHVybiBvYmouc29tZShwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICAgIGlmIChyZXN1bHQgfHwgKHJlc3VsdCA9IHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpKVxuICAgICAgICAgICAgcmV0dXJuIGJyZWFrZXI7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gISFyZXN1bHQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbiAgICAgIH0pO1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gdmFsdWUgKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbiAob2JqLCB0YXJnZXQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAobmF0aXZlSW5kZXhPZiAmJiBvYmouaW5kZXhPZiA9PT0gbmF0aXZlSW5kZXhPZilcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIHJldHVybiBvYmouaW5kZXhPZih0YXJnZXQpICE9IC0xO1xuICAgIHJldHVybiBhbnkob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGFyZ2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uIChmdW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgIHJldHVybi
9126BfLmRlbGF5LmFwcGx5KF8sIFtmdW5jLCAxXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgb25jZSBldmVyeVxuICAvLyBicm93c2VyIGFuaW1hdGlvbiBmcmFtZSAtIHVzaW5nIHRyYW0ncyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgcG9seWZpbGwuXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvbmUtdmFyXG4gICAgdmFyIHdhaXQsIGFyZ3MsIGNvbnRleHQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh3YWl0KSByZXR1cm47XG4gICAgICB3YWl0ID0gdHJ1ZTtcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIHRyYW0uZnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3YWl0ID0gZmFsc2U7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uIChmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb25lLXZhclxuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcbiAgICAgIGlmIChsYXN0IDwgd2FpdCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2Y
9126XIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIGZvciAodmFyIGkgPSAxLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICBpZiAob2JqW3Byb3BdID09PSB2b2lkIDApIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbiAob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID1cbiAgICBEYXRlLm5vdyB8fFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZTogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlOiAvPCUtKFtcXHNcXFNdKz8pJT4vZyxcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOScsXG4gIH07XG5cbiAgdmFyIGVzY2FwZVJlZ0V4cCA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uIHRocm91Z2hcbiAgLy8gYF8udGVtcGxhdGVTZXR0aW5ncy52YXJpYWJsZWAsIHdlIHRlc3QgaXQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIHJlZ3VsYXJcbiAgLy8gZXhwcmVzc2lvbi4gSXQgaXMgaW50ZW50aW9uYWxseSBhIGJpdCBtb3JlIGxpYmVyYWwgdGhhbiBqdXN0IG1hdGNoaW5nIHZhbGlkXG4gIC8vIGlkZW50aWZpZXJzLCBidXQgc3RpbGwgcHJldmVudHMgcG9zc2libGUgbG9vcGhvbGVzIHRocm91Z2ggZGVmYXVsdHMgb3JcbiAgLy8gZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50LlxuICB2YXIgYmFyZUlkZW50aWZpZXIgPSAvXlxccyooXFx3fFxcJCkrXFxzKiQvO1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChcbiAgICAgIFtcbiAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICBdLmpvaW4oJ3wnKSArICd8JCcsXG4gICAgICAnZydcbiAgICApO
91261xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShcbiAgICAgIG1hdGNoZXIsXG4gICAgICBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpO1xuICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgICk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlO1xuICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgLy8gSW5zdXJlIGFnYWluc3QgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24uIChDVkUtMjAyMS0yMzM1OClcbiAgICAgIGlmICghYmFyZUlkZW50aWZpZXIudGVzdChhcmd1bWVudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcbiAgICAgIGFyZ3VtZW50ID0gJ29iaic7XG4gICAgfVxuXG4gICAgc291cmNlID1cbiAgICAgIFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgK1xuICAgICAgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHZhciByZW5kZXI7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldH
9126RpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBFeHBvcnQgdW5kZXJzY29yZVxuICByZXR1cm4gXztcbn0pKCk7XG4iXSwibmFtZXMiOlsiJCIsIndpbmRvdyIsInRyYW0iLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsIl8iLCJWRVJTSU9OIiwiYnJlYWtlciIsIkFycmF5UHJvdG8iLCJBcnJheSIsInByb3RvdHlwZSIsIk9ialByb3RvIiwiT2JqZWN0IiwiRnVuY1Byb3RvIiwiRnVuY3Rpb24iLCJwdXNoIiwic2xpY2UiLCJjb25jYXQiLCJ0b1N0cmluZyIsImhhc093blByb3BlcnR5IiwibmF0aXZlRm9yRWFjaCIsImZvckVhY2giLCJuYXRpdmVNYXAiLCJtYXAiLCJuYXRpdmVSZWR1Y2UiLCJyZWR1Y2UiLCJuYXRpdmVSZWR1Y2VSaWdodCIsInJlZHVjZVJpZ2h0IiwibmF0aXZlRmlsdGVyIiwiZmlsdGVyIiwibmF0aXZlRXZlcnkiLCJldmVyeSIsIm5hdGl2ZVNvbWUiLCJzb21lIiwibmF0aXZlSW5kZXhPZiIsImluZGV4T2YiLCJuYXRpdmVMYXN0SW5kZXhPZiIsImxhc3RJbmRleE9mIiwibmF0aXZlSXNBcnJheSIsImlzQXJyYXkiLCJuYXRpdmVLZXlzIiwia2V5cyIsIm5hdGl2ZUJpbmQiLCJiaW5kIiwiZWFjaCIsIm9iaiIsIml0ZXJhdG9yIiwiY29udGV4dCIsImxlbmd0aCIsImkiLCJjYWxsIiwiY29sbGVjdCIsInJlc3VsdHMiLCJ2YWx1ZSIsImluZGV4IiwibGlzdCIsImZpbmQiLCJkZXRlY3QiLCJwcmVkaWNhdGUiLCJyZXN1bHQiLCJhbnkiLCJzZWxlY3QiLCJpZGVudGl0eSIsImNvbnRhaW5zIiwiaW5jbHVkZSIsInRhcmdldCIsImRlbGF5IiwiZnVuYyIsIndhaXQiLCJhcmdzIiwiYXJndW1lbnRzIiwic2V0VGltZW91dCIsImFwcGx5IiwiZGVmZXIiLCJ0aHJvdHRsZSIsImZyYW1lIiwiZGVib3VuY2UiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwidGltZXN0YW1wIiwibGF0ZXIiLCJsYXN0Iiwibm93IiwiY2FsbE5vdyIsImRlZmF1bHRzIiwiaXNPYmplY3QiLCJzb3VyY2UiLCJwcm9wIiwia2V5IiwiaGFzIiwiRGF0ZSIsImdldFRpbWUiLCJ0ZW1wbGF0ZVNldHRpbmdzIiwiZXZhbHVhdGUiLCJpbnRlcnBvbGF0ZSIsImVzY2FwZSIsIm5vTWF0Y2giLCJlc2NhcGVzIiwiZXNjYXBlUmVnRXhwIiwiZXNjYXBlQ2hhciIsIm1hdGNoIiwiYmFyZUlkZW50aWZpZXIiLCJ0ZW1wbGF0ZSIsInRleHQiLCJzZXR0aW5ncyIsIm9sZFNldHRpbmdzIiwibWF0Y2hlciIsIlJlZ0V4cCIsImpvaW4iLCJyZXBsYWNlIiwib2Zmc2V0IiwiYXJndW1lbnQiLCJ2YXJpYWJsZSIsInRlc3QiLCJFcnJvciIsInJlbmRlciIsImUiLCJkYXRhIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsa0JBQWtCO0FBRWxCLElBQUlBLElBQUlDLE9BQU9ELENBQUM7QUFDaEIsSUFBSUUsT0FBT0MsUUFBUSxpQkFBaUJILEVBQUVFLElBQUk7QUFFMUM7Ozs7Ozs7Q0FPQyxHQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FDREUsT0FBT0MsT0FBTyxHQUFHLE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
9127
9128}),
9129"9461": (function (module, __unused_webpack_exports, __webpack_require__) {
9130"use strict";
9131/* globals document, window, navigator */ /**
9132 * Webflow: Brand pages on the subdomain
9133 */ 
9134var Webflow = __webpack_require__(3949);
9135Webflow.define('brand', module.exports = function($) {
9136    var api = {};
9137    var doc = document;
9138    var $html = $('html');
9139    var $body = $('body');
9140    var namespace = '.w-webflow-badge';
9141    var location = window.location;
9142    var isPhantom = /PhantomJS/i.test(navigator.userAgent);
9143    var fullScreenEvents = 'fullscreenchange webkitfullscreenchange mozfullscreenchange msfullscreenchange';
9144    var brandElement;
9145    // -----------------------------------
9146    // Module methods
9147    api.ready = function() {
9148        var shouldBrand = $html.attr('data-wf-status');
9149        var publishedDomain = $html.attr('data-wf-domain') || '';
9150        if (/\.webflow\.io$/i.test(publishedDomain) && location.hostname !== publishedDomain) {
9151            shouldBrand = true;
9152        }
9153        if (shouldBrand && !isPhantom) {
9154            brandElement = brandElement || createBadge();
9155            ensureBrand();
9156            setTimeout(ensureBrand, 500);
9157            $(doc).off(fullScreenEvents, onFullScreenChange).on(fullScreenEvents, onFullScreenChange);
9158        }
9159    };
9160    function onFullScreenChange() {
9161        var fullScreen = doc.fullScreen || doc.mozFullScreen || doc.webkitIsFullScreen || doc.msFullscreenElement || Boolean(doc.webkitFullscreenElement);
9162        $(brandElement).attr('style', fullScreen ? 'display: none !important;' : '');
9163    }
9164    function createBadge() {
9165        var $brand = $('<a class="w-webflow-badge"></a>').attr('href', 'https://webflow.com?utm_campaign=brandjs');
9166        var $logoArt = $('<img>').attr('src', 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-icon-d2.89e12c322e.svg').attr('alt', '').css({
9167            marginRight: '4px',
9168            width: '26px'
9169        });
9170        var $logoText = $('<img>').attr('src', 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-text-d2.c82cec3b78.svg').attr('alt', 'Made in Webflow');
9171        $brand.append($logoArt, $logoText);
9172        return $brand[0];
9173    }
9174    function ensureBrand() {
9175        var found = $body.children(namespace);
9176        var match = found.length && found.get(0) === brandElement;
9177        var inEditor = Webflow.env('editor');
9178        if (match) {
9179            // Remove brand when Editor is active
9180            if (inEditor) {
9181                found.remove();
9182            }
9183            // Exit early, brand is in place
9184            return;
9185        }
9186        // Remove any invalid brand elements
9187        if (found.length) {
9188            found.remove();
9189        }
9190        // Append the brand (unless Editor is active)
9191        if (!inEditor) {
9192            $body.append(brandElement);
9193        }
9194    }
9195    // Export module
9196    return api;
9197});
9198
9199//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctYnJhbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBkb2N1bWVudCwgd2luZG93LCBuYXZpZ2F0b3IgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBCcmFuZCBwYWdlcyBvbiB0aGUgc3ViZG9tYWluXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbldlYmZsb3cuZGVmaW5lKFxuICAnYnJhbmQnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIHZhciBhcGkgPSB7fTtcbiAgICB2YXIgZG9jID0gZG9jdW1lbnQ7XG4gICAgdmFyICRodG1sID0gJCgnaHRtbCcpO1xuICAgIHZhciAkYm9keSA9ICQoJ2JvZHknKTtcbiAgICB2YXIgbmFtZXNwYWNlID0gJy53LXdlYmZsb3ctYmFkZ2UnO1xuICAgIHZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgaXNQaGFudG9tID0gL1BoYW50b21KUy9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIGZ1bGxTY3JlZW5FdmVudHMgPVxuICAgICAgJ2Z1bGxzY3JlZW5jaGFuZ2Ugd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSBtb3pmdWxsc2NyZWVuY2hhbmdlIG1zZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgdmFyIGJyYW5kRWxlbWVudDtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzaG91bGRCcmFuZCA9ICRodG1sLmF0dHIoJ2RhdGEtd2Ytc3RhdHVzJyk7XG4gICAgICB2Y
9199XIgcHVibGlzaGVkRG9tYWluID0gJGh0bWwuYXR0cignZGF0YS13Zi1kb21haW4nKSB8fCAnJztcbiAgICAgIGlmIChcbiAgICAgICAgL1xcLndlYmZsb3dcXC5pbyQvaS50ZXN0KHB1Ymxpc2hlZERvbWFpbikgJiZcbiAgICAgICAgbG9jYXRpb24uaG9zdG5hbWUgIT09IHB1Ymxpc2hlZERvbWFpblxuICAgICAgKSB7XG4gICAgICAgIHNob3VsZEJyYW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRCcmFuZCAmJiAhaXNQaGFudG9tKSB7XG4gICAgICAgIGJyYW5kRWxlbWVudCA9IGJyYW5kRWxlbWVudCB8fCBjcmVhdGVCYWRnZSgpO1xuICAgICAgICBlbnN1cmVCcmFuZCgpO1xuICAgICAgICBzZXRUaW1lb3V0KGVuc3VyZUJyYW5kLCA1MDApO1xuXG4gICAgICAgICQoZG9jKVxuICAgICAgICAgIC5vZmYoZnVsbFNjcmVlbkV2ZW50cywgb25GdWxsU2NyZWVuQ2hhbmdlKVxuICAgICAgICAgIC5vbihmdWxsU2NyZWVuRXZlbnRzLCBvbkZ1bGxTY3JlZW5DaGFuZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbkZ1bGxTY3JlZW5DaGFuZ2UoKSB7XG4gICAgICB2YXIgZnVsbFNjcmVlbiA9XG4gICAgICAgIGRvYy5mdWxsU2NyZWVuIHx8XG4gICAgICAgIGRvYy5tb3pGdWxsU2NyZWVuIHx8XG4gICAgICAgIGRvYy53ZWJraXRJc0Z1bGxTY3JlZW4gfHxcbiAgICAgICAgZG9jLm1zRnVsbHNjcmVlbkVsZW1lbnQgfHxcbiAgICAgICAgQm9vbGVhbihkb2Mud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQpO1xuICAgICAgJChicmFuZEVsZW1lbnQpLmF0dHIoXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgIGZ1bGxTY3JlZW4gPyAnZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OycgOiAnJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCYWRnZSgpIHtcbiAgICAgIHZhciAkYnJhbmQgPSAkKCc8YSBjbGFzcz1cInctd2ViZmxvdy1iYWRnZVwiPjwvYT4nKS5hdHRyKFxuICAgICAgICAnaHJlZicsXG4gICAgICAgICdodHRwczovL3dlYmZsb3cuY29tP3V0bV9jYW1wYWlnbj1icmFuZGpzJ1xuICAgICAgKTtcblxuICAgICAgdmFyICRsb2dvQXJ0ID0gJCgnPGltZz4nKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAnc3JjJyxcbiAgICAgICAgICAnaHR0cHM6Ly9kM2U1NHYxMDNqOHFiYi5jbG91ZGZyb250Lm5ldC9pbWcvd2ViZmxvdy1iYWRnZS1pY29uLWQyLjg5ZTEyYzMyMmUuc3ZnJ1xuICAgICAgICApXG4gICAgICAgIC5hdHRyKCdhbHQnLCAnJylcbiAgICAgICAgLmNzcyh7XG4gICAgICAgICAgbWFyZ2luUmlnaHQ6ICc0cHgnLFxuICAgICAgICAgIHdpZHRoOiAnMjZweCcsXG4gICAgICAgIH0pO1xuXG4gICAgICB2Y
9199XIgJGxvZ29UZXh0ID0gJCgnPGltZz4nKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAnc3JjJyxcbiAgICAgICAgICAnaHR0cHM6Ly9kM2U1NHYxMDNqOHFiYi5jbG91ZGZyb250Lm5ldC9pbWcvd2ViZmxvdy1iYWRnZS10ZXh0LWQyLmM4MmNlYzNiNzguc3ZnJ1xuICAgICAgICApXG4gICAgICAgIC5hdHRyKCdhbHQnLCAnTWFkZSBpbiBXZWJmbG93Jyk7XG5cbiAgICAgICRicmFuZC5hcHBlbmQoJGxvZ29BcnQsICRsb2dvVGV4dCk7XG4gICAgICByZXR1cm4gJGJyYW5kWzBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuc3VyZUJyYW5kKCkge1xuICAgICAgdmFyIGZvdW5kID0gJGJvZHkuY2hpbGRyZW4obmFtZXNwYWNlKTtcbiAgICAgIHZhciBtYXRjaCA9IGZvdW5kLmxlbmd0aCAmJiBmb3VuZC5nZXQoMCkgPT09IGJyYW5kRWxlbWVudDtcbiAgICAgIHZhciBpbkVkaXRvciA9IFdlYmZsb3cuZW52KCdlZGl0b3InKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAvLyBSZW1vdmUgYnJhbmQgd2hlbiBFZGl0b3IgaXMgYWN0aXZlXG4gICAgICAgIGlmIChpbkVkaXRvcikge1xuICAgICAgICAgIGZvdW5kLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4aXQgZWFybHksIGJyYW5kIGlzIGluIHBsYWNlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBhbnkgaW52YWxpZCBicmFuZCBlbGVtZW50c1xuICAgICAgaWYgKGZvdW5kLmxlbmd0aCkge1xuICAgICAgICBmb3VuZC5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGVuZCB0aGUgYnJhbmQgKHVubGVzcyBFZGl0b3IgaXMgYWN0aXZlKVxuICAgICAgaWYgKCFpbkVkaXRvcikge1xuICAgICAgICAkYm9keS5hcHBlbmQoYnJhbmRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsImFwaSIsImRvYyIsImRvY3VtZW50IiwiJGh0bWwiLCIkYm9keSIsIm5hbWVzcGFjZSIsImxvY2F0aW9uIiwid2luZG93IiwiaXNQaGFudG9tIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZ1bGxTY3JlZW5FdmVudHMiLCJicmFuZEVsZW1lbnQiLCJyZWFkeSIsInNob3VsZEJyYW5kIiwiYXR0ciIsInB1Ymxpc2hlZERvbWFpbiIsImhvc3RuYW1lIiwiY3JlYXRlQmFkZ2UiLCJlbnN1cmVCcmFuZCIsInNldFRpbWVvdXQiLCJvZmYiLCJvbkZ1bGxTY3JlZW5DaGFuZ2UiLCJvbiIsImZ1bGxTY3JlZW4iLCJtb3pGdWxsU2NyZWVuIiwid2Via2l0SXNGdWxsU2NyZWVuIiwibXNGdWxsc2NyZWVuRWxlbWVudCIsIkJvb2xlYW4iLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIiRicmFuZCIsIiRsb2dvQXJ0IiwiY3NzIiwibWFyZ2luUmlnaHQiLCJ3aWR0aCIsIiRsb2dvVGV4dCIsImFwcGVuZCIsImZvdW5kIiwiY2hpbGRyZW4iLCJtYXRjaCIsImxlbmd0aCIsImdldCIsImluRWRpdG9yIiwiZW52IiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUMsR0FFdkM7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUM7SUFDM0IsSUFBSUMsTUFBTSxDQUFDO0lBQ1gsSUFBSUMsTUFBTUM7SUFDVixJQUFJQyxRQUFRSixFQUFFO0lBQ2QsSUFBSUssUUFBUUwsRUFBRTtJQUNkLElBQUlNLFlBQVk7SUFDaEIsSUFBSUMsV0FBV0MsT0FBT0QsUUFBUTtJQUM5QixJQUFJRSxZQUFZLGFBQWFDLElBQUksQ0FBQ0MsVUFBVUMsU0FBUztJQUNyRCxJQUFJQyxtQkFDRjtJQUNGLElBQUlDO0lBRUosc0NBQXNDO0lBQ3RDLGlCQUFpQjtJQUVqQmIsSUFBSWMsS0FBSyxHQUFHO1FBQ1YsSUFBSUMsY0FBY1osTUFBTWEsSUFBSSxDQUFDO1FBQzdCLElBQUlDLGtCQUFrQmQsTUFBTWEsSUFBSSxDQUFDLHFCQUFxQjtRQUN0RCxJQUNFLGtCQUFrQlAsSUFBSSxDQUFDUSxvQkFDdkJYLFNBQVNZLFFBQVEsS0FBS0QsaUJBQ3RCO1lBQ0FGLGNBQWM7UUFDaEI7UUFDQSxJQUFJQSxlQUFlLENBQUNQLFdBQVc7WUFDN0JLLGVBQWVBLGdCQUFnQk07WUFDL0JDO1lBQ0FDLFdBQVdELGFBQWE7WUFFeEJyQixFQUFFRSxLQUNDcUIsR0FBRyxDQUFDVixrQkFBa0JXLG9CQUN0QkMsRUFBRSxDQUFDWixrQkFBa0JXO1FBQzFCO0lBQ0Y7SUFFQSxTQUFTQTtRQUNQLElBQUlFLGFBQ0Z4QixJQUFJd0IsVUFBVSxJQUNkeEIsSUFBSXlCLGFBQWEsSUFDakJ6QixJQUFJMEIsa0JBQWtCLElBQ3RCMUIsSUFBSTJCLG1CQUFtQixJQUN2QkMsUUFBUTVCLElBQUk2Qix1QkFBdUI7UUFDckMvQixFQUFFYyxjQUFjRyxJQUFJLENBQ2xCLFNBQ0FTLGFBQWEsOEJBQThCO0lBRS9DO0lBRUEsU0FBU047UUFDUCxJQUFJWSxTQUFTaEMsRUFBRSxtQ0FBbUNpQixJQUFJLENBQ3BELFFBQ0E7UUFHRixJQUFJZ0IsV0FBV2pDLEVBQUUsU0FDZGlCLElBQUksQ0FDSCxPQUNBLGtGQUVEQSxJQUFJLENBQUMsT0FBTyxJQUNaaUIsR0FBRyxDQUFDO1lBQ0hDLGFBQWE7WUFDYkMsT0FBTztRQUNUO1FBRUYsSUFBSUMsWUFBWXJDLEVBQUUsU0FDZmlCLElBQUksQ0FDSCxPQUNBLGtGQUVEQSxJQUFJLENBQUMsT0FBTztRQUVmZSxPQUFPTSxNQUFNLENBQUNMLFVBQVVJO1FBQ3hCLE9BQU9MLE1BQU0sQ0FBQyxFQUFFO0lBQ2xCO0lBRUEsU0FBU1g7UUFDUCxJQUFJa0IsUUFBUWxDLE1BQU1tQyxRQUFRLENBQUNsQztRQUMzQixJQUFJbUMsUUFBUUYsTUFBTUcsTUFBTSxJQUFJSCxNQUFNSSxHQUFHLENBQUMsT0FBTzdCO1FBQzdDLElBQUk4QixXQUFXakQsUUFBUWtELEdBQUcsQ0FBQztRQUMzQixJQUFJSixPQUFPO1lBQ1QscUNBQXFDO1lBQ3JDLElBQUlHLFVBQVU7Z0JBQ1pMLE1BQU1PLE1BQU07WUFDZDtZQUNBLGdDQUFnQztZQUNoQztRQUNGO1FBQ0Esb0NBQW9DO1FBQ3BDLElBQUlQLE1BQU1HLE1BQU0sRUFBRTtZQUNoQkgsTUFBTU8sTUFBTTtRQUNkO1FBQ0EsNkNBQTZDO1FBQzdDLElBQUksQ0FBQ0YsVUFBVTtZQUNidkMsTUFBTWlDLE1BQU0sQ0FBQ3hCO1FBQ2Y7SUFDRjtJQUVBLGdCQUFnQjtJQUNoQixPQUFPYjtBQUNUIn0=
9200
9201}),
9202"2338": (function (module, __unused_webpack_exports, __webpack_require__) {
9203"use strict";
9204/* globals window, document */ /**
9205 * Webflow: focus-visible
9206 */ 
9207var Webflow = __webpack_require__(3949);
9208/*
9209 * This polyfill comes from https://github.com/WICG/focus-visible
9210 */ Webflow.define('focus-visible', module.exports = function() {
9211    /**
9212     * Applies the :focus-visible polyfill at the given scope.
9213     * A scope in this case is either the top-level Document or a Shadow Root.
9214     *
9215     * @param {(Document|ShadowRoot)} scope
9216     * @see https://github.com/WICG/focus-visible
9217     */ function applyFocusVisiblePolyfill(scope) {
9218        var hadKeyboardEvent = true;
9219        var hadFocusVisibleRecently = false;
vendor: 4,720 bytes, lines 9220-9334
9220        var hadFocusVisibleRecentlyTimeout = null;
9221        var inputTypesAllowlist = {
9222            text: true,
9223            search: true,
9224            url: true,
9225            tel: true,
9226            email: true,
9227            password: true,
9228            number: true,
9229            date: true,
9230            month: true,
9231            week: true,
9232            time: true,
9233            datetime: true,
9234            'datetime-local': true
9235        };
9236        /**
9237       * Helper function for legacy browsers and iframes which sometimes focus
9238       * elements like document, body, and non-interactive SVG.
9239       * @param {Element} el
9240       */ function isValidFocusTarget(el) {
9241            if (el && el !== document && el.nodeName !== 'HTML' && el.nodeName !== 'BODY' && 'classList' in el && 'contains' in el.classList) {
9242                return true;
9243            }
9244            return false;
9245        }
9246        /**
9247       * Computes whether the given element should automatically trigger the
9248       * `focus-visible` class being added, i.e. whether it should always match
9249       * `:focus-visible` when focused.
9250       * @param {Element} el
9251       * @return {boolean}
9252       */ function focusTriggersKeyboardModality(el) {
9253            var type = el.type;
9254            var tagName = el.tagName;
9255            if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {
9256                return true;
9257            }
9258            if (tagName === 'TEXTAREA' && !el.readOnly) {
9259                return true;
9260            }
9261            if (el.isContentEditable) {
9262                return true;
9263            }
9264            return false;
9265        }
9266        function addFocusVisibleAttribute(el) {
9267            if (el.getAttribute('data-wf-focus-visible')) {
9268                return;
9269            }
9270            el.setAttribute('data-wf-focus-visible', 'true');
9271        }
9272        function removeFocusVisibleAttribute(el) {
9273            if (!el.getAttribute('data-wf-focus-visible')) {
9274                return;
9275            }
9276            el.removeAttribute('data-wf-focus-visible');
9277        }
9278        /**
9279       * If the most recent user interaction was via the keyboard;
9280       * and the key press did not include a meta, alt/option, or control key;
9281       * then the modality is keyboard. Otherwise, the modality is not keyboard.
9282       * Apply `focus-visible` to any current active element and keep track
9283       * of our keyboard modality state with `hadKeyboardEvent`.
9284       * @param {KeyboardEvent} e
9285       */ function onKeyDown(e) {
9286            if (e.metaKey || e.altKey || e.ctrlKey) {
9287                return;
9288            }
9289            if (isValidFocusTarget(scope.activeElement)) {
9290                addFocusVisibleAttribute(scope.activeElement);
9291            }
9292            hadKeyboardEvent = true;
9293        }
9294        /**
9295       * If at any point a user clicks with a pointing device, ensure that we change
9296       * the modality away from keyboard.
9297       * This avoids the situation where a user presses a key on an already focused
9298       * element, and then clicks on a different element, focusing it with a
9299       * pointing device, while we still think we're in keyboard modality.
9300       * @param {Event} e
9301       */ function onPointerDown() {
9302            hadKeyboardEvent = false;
9303        }
9304        /**
9305       * On `focus`, add the `focus-visible` class to the target if:
9306       * - the target received focus as a result of keyboard navigation, or
9307       * - the event target is an element that will likely require interaction
9308       *   via the keyboard (e.g. a text box)
9309       * @param {Event} e
9310       */ function onFocus(e) {
9311            // Prevent IE from focusing the document or HTML element.
9312            if (!isValidFocusTarget(e.target)) {
9313                return;
9314            }
9315            if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {
9316                addFocusVisibleAttribute(e.target);
9317            }
9318        }
9319        /**
9320       * On `blur`, remove the `focus-visible` class from the target.
9321       * @param {Event} e
9322       */ function onBlur(e) {
9323            if (!isValidFocusTarget(e.target)) {
9324                return;
9325            }
9326            if (e.target.hasAttribute('data-wf-focus-visible')) {
9327                // To detect a tab/window switch, we look for a blur event followed
9328                // rapidly by a visibility change.
9329                // If we don't see a visibility change within 100ms, it's probably a
9330                // regular focus change.
9331                hadFocusVisibleRecently = true;
9332                window.clearTimeout(hadFocusVisibleRecentlyTimeout);
9333                hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {
9334                    hadFocusVisibleRecently = false;
9335                }, 100);
9336                removeFocusVisibleAttribute(e.target);
9337            }
9338        }
9339        /**
9340       * If the user changes tabs, keep track of whether or not the previously
9341       * focused element had .focus-visible.
9342       * @param {Event} e
9343       */ function onVisibilityChange() {
9344            if (document.visibilityState === 'hidden') {
9345                // If the tab becomes active again, the browser will handle calling focus
9346                // on the element (Safari actually calls it twice).
9347                // If this tab change caused a blur on an element with focus-visible,
9348                // re-apply the class when the user switches back to the tab.
9349                if (hadFocusVisibleRecently) {
9350                    hadKeyboardEvent = true;
9351                }
9352                addInitialPointerMoveListeners();
9353            }
9354        }
9355        /**
9356       * Add a group of listeners to detect usage of any pointing devices.
9357       * These listeners will be added when the polyfill first loads, and anytime
9358       * the window is blurred, so that they are active when the window regains
9359       * focus.
9360       */ function addInitialPointerMoveListeners() {
9361            document.addEventListener('mousemove', onInitialPointerMove);
9362            document.addEventListener('mousedown', onInitialPointerMove);
9363            document.addEventListener('mouseup', onInitialPointerMove);
9364            document.addEventListener('pointermove', onInitialPointerMove);
9365            document.addEventListener('pointerdown', onInitialPointerMove);
9366            document.addEventListener('pointerup', onInitialPointerMove);
9367            document.addEventListener('touchmove', onInitialPointerMove);
9368            document.addEventListener('touchstart', onInitialPointerMove);
9369            document.addEventListener('touchend', onInitialPointerMove);
9370        }
9371        function removeInitialPointerMoveListeners() {
9372            document.removeEventListener('mousemove', onInitialPointerMove);
9373            document.removeEventListener('mousedown', onInitialPointerMove);
9374            document.removeEventListener('mouseup', onInitialPointerMove);
9375            document.removeEventListener('pointermove', onInitialPointerMove);
9376            document.removeEventListener('pointerdown', onInitialPointerMove);
9377            document.removeEventListener('pointerup', onInitialPointerMove);
9378            document.removeEventListener('touchmove', onInitialPointerMove);
9379            document.removeEventListener('touchstart', onInitialPointerMove);
9380            document.removeEventListener('touchend', onInitialPointerMove);
9381        }
9382        /**
9383       * When the polfyill first loads, assume the user is in keyboard modality.
9384       * If any event is received from a pointing device (e.g. mouse, pointer,
9385       * touch), turn off keyboard modality.
9386       * This accounts for situations where focus enters the page from the URL bar.
9387       * @param {Event} e
9388       */ function onInitialPointerMove(e) {
9389            // Work around a Safari quirk that fires a mousemove on <html> whenever the
9390            // window blurs, even if you're tabbing out of the page. ¯\_(ツ)_/¯
9391            if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {
9392                return;
9393            }
9394            hadKeyboardEvent = false;
9395            removeInitialPointerMoveListeners();
9396        }
9397        // For some kinds of state, we are interested in changes at the global scope
9398        // only. For example, global pointer input, global key presses and global
9399        // visibility change should affect the state at every scope:
9400        document.addEventListener('keydown', onKeyDown, true);
9401        document.addEventListener('mousedown', onPointerDown, true);
9402        document.addEventListener('pointerdown', onPointerDown, true);
9403        document.addEventListener('touchstart', onPointerDown, true);
9404        document.addEventListener('visibilitychange', onVisibilityChange, true);
9405        addInitialPointerMoveListeners();
9406        // For focus and blur, we specifically care about state changes in the local
9407        // scope. This is because focus / blur events that originate from within a
9408        // shadow root are not re-dispatched from the host element if it was already
9409        // the active element in its own scope:
9410        scope.addEventListener('focus', onFocus, true);
9411        scope.addEventListener('blur', onBlur, true);
9412    }
9413    function ready() {
9414        if (typeof document !== 'undefined') {
9415            try {
9416                // check for native support; this will throw if the selector is not considered valid
9417                document.querySelector(':focus-visible');
9418            } catch (e) {
9419                // :focus-visible pseudo-selector is not supported natively
9420                applyFocusVisiblePolyfill(document);
9421            }
9422        }
9423    }
9424    // Export module
9425    return {
9426        ready
9427    };
9428});
9429
9430//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctZm9jdXMtdmlzaWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBmb2N1cy12aXNpYmxlXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbi8qXG4gKiBUaGlzIHBvbHlmaWxsIGNvbWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZVxuICovXG5XZWJmbG93LmRlZmluZShcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgOmZvY3VzLXZpc2libGUgcG9seWZpbGwgYXQgdGhlIGdpdmVuIHNjb3BlLlxuICAgICAqIEEgc2NvcGUgaW4gdGhpcyBjYXNlIGlzIGVpdGhlciB0aGUgdG9wLWxldmVsIERvY3VtZW50IG9yIGEgU2hhZG93IFJvb3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhEb2N1bWVudHxTaGFkb3dSb290KX0gc2NvcGVcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcHBseUZvY3VzVmlzaWJsZVBvbHlmaWxsK
9430HNjb3BlKSB7XG4gICAgICB2YXIgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG4gICAgICB2YXIgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSBmYWxzZTtcbiAgICAgIHZhciBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQgPSBudWxsO1xuXG4gICAgICB2YXIgaW5wdXRUeXBlc0FsbG93bGlzdCA9IHtcbiAgICAgICAgdGV4dDogdHJ1ZSxcbiAgICAgICAgc2VhcmNoOiB0cnVlLFxuICAgICAgICB1cmw6IHRydWUsXG4gICAgICAgIHRlbDogdHJ1ZSxcbiAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgIG1vbnRoOiB0cnVlLFxuICAgICAgICB3ZWVrOiB0cnVlLFxuICAgICAgICB0aW1lOiB0cnVlLFxuICAgICAgICBkYXRldGltZTogdHJ1ZSxcbiAgICAgICAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsZWdhY3kgYnJvd3NlcnMgYW5kIGlmcmFtZXMgd2hpY2ggc29tZXRpbWVzIGZvY3VzXG4gICAgICAgKiBlbGVtZW50cyBsaWtlIGRvY3VtZW50LCBib2R5LCBhbmQgbm9uLWludGVyYWN0aXZlIFNWRy5cbiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaXNWYWxpZEZvY3VzVGFyZ2V0KGVsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbCAmJlxuICAgICAgICAgIGVsICE9PSBkb2N1bWVudCAmJlxuICAgICAgICAgIGVsLm5vZGVOYW1lICE9PSAnSFRNTCcgJiZcbiAgICAgICAgICBlbC5ub2RlTmFtZSAhPT0gJ0JPRFknICYmXG4gICAgICAgICAgJ2NsYXNzTGlzdCcgaW4gZWwgJiZcbiAgICAgICAgICAnY29udGFpbnMnIGluIGVsLmNsYXNzTGlzdFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICAgICAgICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICAgICAgICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gICAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShlbCkge1xuICAgICAgICB2Y
9430XIgdHlwZSA9IGVsLnR5cGU7XG4gICAgICAgIHZhciB0YWdOYW1lID0gZWwudGFnTmFtZTtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBpbnB1dFR5cGVzQWxsb3dsaXN0W3R5cGVdICYmICFlbC5yZWFkT25seSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdURVhUQVJFQScgJiYgIWVsLnJlYWRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlKGVsKSB7XG4gICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2YtZm9jdXMtdmlzaWJsZScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy12aXNpYmxlJywgJ3RydWUnKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlKGVsKSB7XG4gICAgICAgIGlmICghZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXdmLWZvY3VzLXZpc2libGUnKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtd2YtZm9jdXMtdmlzaWJsZScpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZSBtb3N0IHJlY2VudCB1c2VyIGludGVyYWN0aW9uIHdhcyB2aWEgdGhlIGtleWJvYXJkO1xuICAgICAgICogYW5kIHRoZSBrZXkgcHJlc3MgZGlkIG5vdCBpbmNsdWRlIGEgbWV0YSwgYWx0L29wdGlvbiwgb3IgY29udHJvbCBrZXk7XG4gICAgICAgKiB0aGVuIHRoZSBtb2RhbGl0eSBpcyBrZXlib2FyZC4gT3RoZXJ3aXNlLCB0aGUgbW9kYWxpdHkgaXMgbm90IGtleWJvYXJkLlxuICAgICAgICogQXBwbHkgYGZvY3VzLXZpc2libGVgIHRvIGFueSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50IGFuZCBrZWVwIHRyYWNrXG4gICAgICAgKiBvZiBvdXIga2V5Ym9hcmQgbW9kYWxpdHkgc3RhdGUgd2l0aCBgaGFkS2V5Ym9hcmRFdmVudGAuXG4gICAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICAgICAgaWYgKGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLmN0cmxLZXkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNWYWxpZEZvY3VzVGFyZ2V0KHNjb3BlLmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlKHNjb3BlLmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gICAgICAgKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICAgICAgICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAgICAgICAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAgICAgICAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIG9uUG9pbnRlckRvd24oKSB7XG4gICAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBPbiBgZm9jdXNgLCBhZGQgdGhlIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byB0aGUgdGFyZ2V0IGlmOlxuICAgICAgICogLSB0aGUgdGFyZ2V0IHJlY2VpdmVkIGZvY3VzIGFzIGEgcmVzdWx0IG9mIGtleWJvYXJkIG5hdmlnYXRpb24sIG9yXG4gICAgICAgKiAtIHRoZSBldmVudCB0YXJnZXQgaXMgYW4gZWxlbWVudCB0aGF0IHdpbGwgbGlrZWx5IHJlcXVpcmUgaW50ZXJhY3Rpb25cbiAgICAgICAqICAgdmlhIHRoZSBrZXlib2FyZCAoZS5nLiBhIHRleHQgYm94KVxuICAgICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgLy8gUHJldmVudCBJRSBmcm9tIGZvY3VzaW5nIHRoZSBkb2N1bWVudCBvciBIVE1MIGVsZW1lbnQuXG4gICAgICAgIGlmICghaXNWYWxpZEZvY3VzVGFyZ2V0KGUudGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYWRLZXlib2FyZEV2ZW50IHx8IGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KGUudGFyZ2V0KSkge1xuICAgICAgICAgIGFkZEZvY3VzVmlzaWJsZUF0dHJpYnV0ZShlLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBPbiBgYmx1cmAsIHJlbW92ZSB0aGUgYGZvY3VzLXZpc2libGVgIGNsYXNzIGZyb20gdGhlIHRhcmdldC5cbiAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25CbHVyKGUpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRm9jdXNUYXJnZXQoZS50YXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy12aXNpYmxlJykpIHtcbiAgICAgICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAgICAgLy8gcmFwaWRseSBieSBhIHZpc2liaWxpdHkgY2hhbmdlLlxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IHNlZSBhIHZpc2liaWxpdHkgY2hhbmdlIHdpdGhpbiAxMDBtcywgaXQncyBwcm9iYWJseSBhXG4gICAgICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSB0cnVlO1xuICAgICAgICAgI
9430HdpbmRvdy5jbGVhclRpbWVvdXQoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0KTtcbiAgICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgcmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlKGUudGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZSB1c2VyIGNoYW5nZXMgdGFicywga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgcHJldmlvdXNseVxuICAgICAgICogZm9jdXNlZCBlbGVtZW50IGhhZCAuZm9jdXMtdmlzaWJsZS5cbiAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgIC8vIElmIHRoZSB0YWIgYmVjb21lcyBhY3RpdmUgYWdhaW4sIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGNhbGxpbmcgZm9jdXNcbiAgICAgICAgICAvLyBvbiB0aGUgZWxlbWVudCAoU2FmYXJpIGFjdHVhbGx5IGNhbGxzIGl0IHR3aWNlKS5cbiAgICAgICAgICAvLyBJZiB0aGlzIHRhYiBjaGFuZ2UgY2F1c2VkIGEgYmx1ciBvbiBhbiBlbGVtZW50IHdpdGggZm9jdXMtdmlzaWJsZSxcbiAgICAgICAgICAvLyByZS1hcHBseSB0aGUgY2xhc3Mgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcyBiYWNrIHRvIHRoZSB0YWIuXG4gICAgICAgICAgaWYgKGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5KSB7XG4gICAgICAgICAgICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBBZGQgYSBncm91cCBvZiBsaXN0ZW5lcnMgdG8gZGV0ZWN0IHVzYWdlIG9mIGFueSBwb2ludGluZyBkZXZpY2VzLlxuICAgICAgICogVGhlc2UgbGlzdGVuZXJzIHdpbGwgYmUgYWRkZWQgd2hlbiB0aGUgcG9seWZpbGwgZmlyc3QgbG9hZHMsIGFuZCBhbnl0aW1lXG4gICAgICAgKiB0aGUgd2luZG93IGlzIGJsdXJyZWQsIHNvIHRoYXQgdGhleSBhcmUgYWN0aXZlIHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zXG4gICAgICAgKiBmb2N1cy5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gYWRkSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzKCkge1xuICAgICAgICBkb2
9430N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZUluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycygpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2
9430N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFdoZW4gdGhlIHBvbGZ5aWxsIGZpcnN0IGxvYWRzLCBhc3N1bWUgdGhlIHVzZXIgaXMgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gICAgICAgKiBJZiBhbnkgZXZlbnQgaXMgcmVjZWl2ZWQgZnJvbSBhIHBvaW50aW5nIGRldmljZSAoZS5nLiBtb3VzZSwgcG9pbnRlcixcbiAgICAgICAqIHRvdWNoKSwgdHVybiBvZmYga2V5Ym9hcmQgbW9kYWxpdHkuXG4gICAgICAgKiBUaGlzIGFjY291bnRzIGZvciBzaXR1YXRpb25zIHdoZXJlIGZvY3VzIGVudGVycyB0aGUgcGFnZSBmcm9tIHRoZSBVUkwgYmFyLlxuICAgICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbkluaXRpYWxQb2ludGVyTW92ZShlKSB7XG4gICAgICAgIC8vIFdvcmsgYXJvdW5kIGEgU2FmYXJpIHF1aXJrIHRoYXQgZmlyZXMgYSBtb3VzZW1vdmUgb24gPGh0bWw+IHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyB3aW5kb3cgYmx1cnMsIGV2ZW4gaWYgeW91J3JlIHRhYmJpbmcgb3V0IG9mIHRoZSBwYWdlLiDCr1xcXyjjg4QpXy/Cr1xuICAgICAgICBpZiAoZS50YXJnZXQubm9kZU5hbWUgJiYgZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFkS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xuICAgICAgICByZW1vdmVJbml0aWFsUG9pbnRlck1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHNvbWUga2luZHMgb2Ygc3RhdGUsIHdlIGFyZSBpbnRlcmVzdGVkIGluIGNoYW5nZXMgYXQgdGhlIGdsb2JhbCBzY29wZVxuICAgICAgLy8gb25seS4gRm9yIGV4YW1wbGUsIGdsb2JhbCBwb2ludGVyIGlucHV0LCBnbG9iYWwga2V5IHByZXNzZXMgYW5kIGdsb2JhbFxuICAgICAgLy8gdmlzaWJpbGl0eSBjaGFuZ2Ugc2hvdWxkIGFmZmVjdCB0aGUgc3RhdGUgYXQgZXZlcnkgc2NvcGU6XG4gICAgICBkb2
9430N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duLCB0cnVlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uUG9pbnRlckRvd24sIHRydWUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBvblBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xuXG4gICAgICBhZGRJbml0aWFsUG9pbnRlck1vdmVMaXN0ZW5lcnMoKTtcblxuICAgICAgLy8gRm9yIGZvY3VzIGFuZCBibHVyLCB3ZSBzcGVjaWZpY2FsbHkgY2FyZSBhYm91dCBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBsb2NhbFxuICAgICAgLy8gc2NvcGUuIFRoaXMgaXMgYmVjYXVzZSBmb2N1cyAvIGJsdXIgZXZlbnRzIHRoYXQgb3JpZ2luYXRlIGZyb20gd2l0aGluIGFcbiAgICAgIC8vIHNoYWRvdyByb290IGFyZSBub3QgcmUtZGlzcGF0Y2hlZCBmcm9tIHRoZSBob3N0IGVsZW1lbnQgaWYgaXQgd2FzIGFscmVhZHlcbiAgICAgIC8vIHRoZSBhY3RpdmUgZWxlbWVudCBpbiBpdHMgb3duIHNjb3BlOlxuICAgICAgc2NvcGUuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbkZvY3VzLCB0cnVlKTtcbiAgICAgIHNjb3BlLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIsIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgbmF0aXZlIHN1cHBvcnQ7IHRoaXMgd2lsbCB0aHJvdyBpZiB0aGUgc2VsZWN0b3IgaXMgbm90IGNvbnNpZGVyZWQgdmFsaWRcbiAgICAgICAgICBkb2
9430N1bWVudC5xdWVyeVNlbGVjdG9yKCc6Zm9jdXMtdmlzaWJsZScpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gOmZvY3VzLXZpc2libGUgcHNldWRvLXNlbGVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgbmF0aXZlbHlcbiAgICAgICAgICBhcHBseUZvY3VzVmlzaWJsZVBvbHlmaWxsKGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4ge3JlYWR5fTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBwbHlGb2N1c1Zpc2libGVQb2x5ZmlsbCIsInNjb3BlIiwiaGFkS2V5Ym9hcmRFdmVudCIsImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwiaW5wdXRUeXBlc0FsbG93bGlzdCIsInRleHQiLCJzZWFyY2giLCJ1cmwiLCJ0ZWwiLCJlbWFpbCIsInBhc3N3b3JkIiwibnVtYmVyIiwiZGF0ZSIsIm1vbnRoIiwid2VlayIsInRpbWUiLCJkYXRldGltZSIsImlzVmFsaWRGb2N1c1RhcmdldCIsImVsIiwiZG9jdW1lbnQiLCJub2RlTmFtZSIsImNsYXNzTGlzdCIsImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwidHlwZSIsInRhZ05hbWUiLCJyZWFkT25seSIsImlzQ29udGVudEVkaXRhYmxlIiwiYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwib25LZXlEb3duIiwiZSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJjdHJsS2V5IiwiYWN0aXZlRWxlbWVudCIsIm9uUG9pbnRlckRvd24iLCJvbkZvY3VzIiwidGFyZ2V0Iiwib25CbHVyIiwiaGFzQXR0cmlidXRlIiwid2luZG93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsInZpc2liaWxpdHlTdGF0ZSIsImFkZEluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbkluaXRpYWxQb2ludGVyTW92ZSIsInJlbW92ZUluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b0xvd2VyQ2FzZSIsInJlYWR5IiwicXVlcnlTZWxlY3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0Qjs7Q0FFQyxHQUNERCxRQUFRRSxNQUFNLENBQ1osaUJBQ0NDLE9BQU9DLE9BQU8sR0FBRztJQUNoQjs7Ozs7O0tBTUMsR0FDRCxTQUFTQywwQkFBMEJDLEtBQUs7UUFDdEMsSUFBSUMsbUJBQW1CO1FBQ3ZCLElBQUlDLDBCQUEwQjtRQUM5QixJQUFJQyxpQ0FBaUM7UUFFckMsSUFBSUMsc0JBQXNCO1lBQ3hCQyxNQUFNO1lBQ05DLFFBQVE7WUFDUkMsS0FBSztZQUNMQyxLQUFLO1lBQ0xDLE9BQU87WUFDUEMsVUFBVTtZQUNWQyxRQUFRO1lBQ1JDLE1BQU07WUFDTkMsT0FBTztZQUNQQyxNQUFNO1lBQ05DLE1BQU07WUFDTkMsVUFBVTtZQUNWLGtCQUFrQjtRQUNwQjtRQUVBOzs7O09BSUMsR0FDRCxTQUFTQyxtQkFBbUJDLEVBQUU7WUFDNUIsSUFDRUEsTUFDQUEsT0FBT0MsWUFDUEQsR0FBR0UsUUFBUSxLQUFLLFVBQ2hCRixHQUFHRSxRQUFRLEtBQUssVUFDaEIsZUFBZUYsTUFDZixjQUFjQSxHQUFHRyxTQUFTLEVBQzFCO2dCQUNBLE9BQU87WUFDVDtZQUNBLE9BQU87UUFDVDtRQUVBOzs7Ozs7T0FNQyxHQUNELFNBQVNDLDhCQUE4QkosRUFBRTtZQUN2QyxJQUFJSyxPQUFPTCxHQUFHSyxJQUFJO1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
9431
9432}),
9433"8334": (function (module, __unused_webpack_exports, __webpack_require__) {
9434"use strict";
9435/* globals document, MouseEvent */ /**
9436 * Webflow: focus
9437 */ 
9438var Webflow = __webpack_require__(3949);
9439/*
9440 * Safari has a weird bug where it doesn't support :focus for links with hrefs,
9441 * buttons, and input[type=button|submit], so we listen for mousedown events
9442 * instead and force the element to emit a focus event in those cases.
9443
9444 * See these webkit bugs for reference:
9445 * https://bugs.webkit.org/show_bug.cgi?id=22261
9446 * https://bugs.webkit.org/show_bug.cgi?id=229895
9447 */ Webflow.define('focus', module.exports = function() {
9448    var capturedEvents = [];
9449    var capturing = false;
9450    function captureEvent(e) {
9451        if (capturing) {
9452            e.preventDefault();
9453            e.stopPropagation();
9454            e.stopImmediatePropagation();
9455            capturedEvents.unshift(e);
9456        }
9457    }
9458    /*
9459     * The only mousedown events we care about here are ones emanating from
9460     * (A) anchor links with href attribute,
9461     * (B) non-disabled buttons,
9462     * (C) non-disabled textarea,
9463     * (D) non-disabled inputs of type "button", "reset", "checkbox", "radio", "submit"
9464     * (E) non-interactive elements (button, a, input, textarea, select) that have a tabindex with a numeric value
9465     * (F) audio elements
9466     * (G) video elements with controls attribute
9467     */ function isPolyfilledFocusEvent(e) {
9468        var el = e.target;
9469        var tag = el.tagName;
9470        return /^a$/i.test(tag) && el.href != null || // (A)
9471        /^(button|textarea)$/i.test(tag) && el.disabled !== true || // (B) (C)
9472        /^input$/i.test(tag) && /^(button|reset|submit|radio|checkbox)$/i.test(el.type) && !el.disabled || // (D)
9473        !/^(button|input|textarea|select|a)$/i.test(tag) && !Number.isNaN(Number.parseFloat(el.tabIndex)) || // (E)
9474        /^audio$/i.test(tag) || // (F)
9475        /^video$/i.test(tag) && el.controls === true // (G)
9476        ;
9477    }
9478    function handler(e) {
9479        if (isPolyfilledFocusEvent(e)) {
9480            // start capturing possible out-of-order mouse events
9481            capturing = true;
9482            /*
9483         * enqueue the focus event _after_ the current batch of events, which
9484         * includes any blur events. The correct order of events is:
9485         *
9486         * [this element] MOUSEDOWN               <-- this event
9487         * [previously active element] BLUR
9488         * [previously active element] FOCUSOUT
9489         * [this element] FOCUS                   <-- forced event
9490         * [this element] FOCUSIN                 <-- forced event
9491         * [this element] MOUSEUP                 <-- possibly captured event (it may have fired _before_ the FOCUS event)
9492         * [this element] CLICK                   <-- possibly captured event (it may have fired _before_ the FOCUS event)
9493         */ setTimeout(()=>{
9494                // stop capturing possible out-of-order mouse events
9495                capturing = false;
9496                // trigger focus event
9497                e.target.focus();
9498                // re-dispatch captured mouse events in order
9499                while(capturedEvents.length > 0){
9500                    var event = capturedEvents.pop();
9501                    event.target.dispatchEvent(new MouseEvent(event.type, event));
9502                }
9503            }, 0);
9504        }
9505    }
9506    function ready() {
9507        if (typeof document !== 'undefined' && document.body.hasAttribute('data-wf-focus-within') && Webflow.env.safari) {
9508            document.addEventListener('mousedown', handler, true);
9509            document.addEventListener('mouseup', captureEvent, true);
9510            document.addEventListener('click', captureEvent, true);
9511        }
9512    }
9513    // Export module
9514    return {
9515        ready
9516    };
9517});
9518
9519//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctZm9jdXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBkb2N1bWVudCwgTW91c2VFdmVudCAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IGZvY3VzXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbi8qXG4gKiBTYWZhcmkgaGFzIGEgd2VpcmQgYnVnIHdoZXJlIGl0IGRvZXNuJ3Qgc3VwcG9ydCA6Zm9jdXMgZm9yIGxpbmtzIHdpdGggaHJlZnMsXG4gKiBidXR0b25zLCBhbmQgaW5wdXRbdHlwZT1idXR0b258c3VibWl0XSwgc28gd2UgbGlzdGVuIGZvciBtb3VzZWRvd24gZXZlbnRzXG4gKiBpbnN0ZWFkIGFuZCBmb3JjZSB0aGUgZWxlbWVudCB0byBlbWl0IGEgZm9jdXMgZXZlbnQgaW4gdGhvc2UgY2FzZXMuXG5cbiAqIFNlZSB0aGVzZSB3ZWJraXQgYnVncyBmb3IgcmVmZXJlbmNlOlxuICogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjYxXG4gKiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5ODk1XG4gKi9cbldlYmZsb3cuZGVmaW5lKFxuICAnZm9jdXMnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNhcHR1cmVkRXZlbnRzID0gW107XG4gICAgdmFyIGNhcHR1cmluZyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY2FwdHVyZUV2ZW50KGUpIHtcbiAgICAgIGlmIChjYXB0dXJpbmcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBjYXB0dXJlZEV2ZW50cy51bnNoaWZ0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogVGhlIG9ubHkgbW91c2Vkb3duIGV2ZW50cyB3ZSBjYXJlIGFib3V0IGhlcmUgYXJlIG9uZXMgZW1hbmF0aW5nIGZyb21cbiAgICAgKiAoQSkgYW5jaG9yIGxpbmtzIHdpdGggaHJlZiBhdHRyaWJ1dGUsXG4gICAgICogKEIpIG5vbi1kaXNhYmxlZCBidXR0b25zLFxuICAgICAqIChDKSBub24tZGlzYWJsZWQgdGV4dGFyZWEsXG4gICAgICogKEQpIG5vbi1kaXNhYmxlZCBpbnB1dHMgb2YgdHlwZSBcImJ1dHRvblwiLCBcInJlc2V0XCIsIFwiY2hlY2tib3hcIiwgXCJyYWRpb1wiLCBcInN1Ym1pdFwiXG4gICAgICogKEUpIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyAoYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCkgdGhhdCBoYXZlIGEgdGFiaW5kZXggd2l0aCBhIG51bWVyaWMgdmFsdWVcbiAgICAgKiAoRikgYXVkaW8gZWxlbWVudHNcbiAgICAgKiAoRykgdmlkZW8gZWxlbWVudHMgd2l0aCBjb250cm9scyBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1BvbHlmaWxsZWRGb2N1c0V2ZW50KGUpIHtcbiAgICAgIHZhciBlbCA9IGUudGFyZ2V0O1xuICAgICAgdmFyIHRhZyA9IGVsLnRhZ05hbWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoL15hJC9pLnRlc3QodGFnKSAmJiBlbC5ocmVmICE9IG51bGwpIHx8IC8vIChBKVxuICAgICAgICAoL14oYnV0dG9ufHRleHRhcmVhKSQvaS50ZXN0KHRhZykgJiYgZWwuZGlzYWJsZWQgIT09IHRydWUpIHx8IC8vIChCKSAoQylcbiAgICAgICAgKC9eaW5wdXQkL2kudGVzdCh0YWcpICYmXG4gICAgICAgICAgL14oYnV0dG9ufHJlc2V0fHN1Ym1pdHxyYWRpb3xjaGVja2JveCkkL2kudGVzdChlbC50eXBlKSAmJlxuICAgICAgICAgICFlbC5kaXNhYmxlZCkgfHwgLy8gKEQpXG4gICAgICAgICghL14oYnV0dG9ufGlucHV0fHRleHRhcmVhfHNlbGVjdHxhKSQvaS50ZXN0KHRhZykgJiZcbiAgICAgICAgICAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGVsLnRhYkluZGV4KSkpIHx8IC8vIChFKVxuICAgICAgICAvXmF1ZGlvJC9pLnRlc3QodGFnKSB8fCAvLyAoRilcbiAgICAgICAgKC9edmlkZW8kL2kudGVzdCh0YWcpICYmIGVsLmNvbnRyb2xzID09PSB0cnVlKSAvLyAoRylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlcihlKSB7XG4gICAgICBpZiAoaXNQb2x5ZmlsbGVkRm9jdXNFdmVudChlKSkge1xuICAgICAgICAvLyBzdGFydCBjYXB0dXJpbmcgcG9zc2libGUgb3V0LW9mLW9yZGVyIG1vdXNlIGV2ZW50c1xuICAgICAgICBjYXB0dXJpbmcgPSB0cnVlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGVucXVldWUgdGhlIGZvY3VzIGV2ZW50IF9hZnRlcl8gdGhlIGN1cnJlbnQgYmF0Y2ggb2YgZXZlbnRzLCB3aGljaFxuICAgICAgICAgKiBpbmNsdWRlcyBhbnkgYmx1ciBldmVudHMuIFRoZSBjb3JyZWN0IG9yZGVyIG9mIGV2ZW50cyBpczpcbiAgICAgICAgICpcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gTU9VU0VET1dOICAgICAgICAgICAgICAgPC0tIHRoaXMgZXZlbnRcbiAgICAgICAgICogW3ByZXZpb3VzbHkgYWN0aXZlIGVsZW1lbnRdIEJMVVJcbiAgICAgICAgICogW3ByZXZpb3VzbHkgYWN0aXZlIGVsZW1lbnRdIEZPQ1VTT1VUXG4gICAgICAgICAqIFt0aGlzIGVsZW1lbnRdIEZPQ1VTICAgICAgICAgICAgICAgICAgIDwtLSBmb3JjZWQgZXZlbnRcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gRk9DVVNJTiAgICAgICAgICAgICAgICAgPC0tIGZvcmNlZCBldmVudFxuICAgICAgICAgKiBbdGhpcyBlbGVtZW50XSBNT1VTRVVQICAgICAgICAgICAgICAgICA8LS0gcG9zc2libHkgY2FwdHVyZWQgZXZlbnQgKGl0IG1heSBoYXZlIGZpcmVkIF9iZWZvcmVfIHRoZSBGT0NVUyBldmVudClcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gQ0xJQ0sgICAgICAgICAgICAgICAgICAgPC0tIHBvc3NpYmx5IGNhc
9519HR1cmVkIGV2ZW50IChpdCBtYXkgaGF2ZSBmaXJlZCBfYmVmb3JlXyB0aGUgRk9DVVMgZXZlbnQpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyBzdG9wIGNhcHR1cmluZyBwb3NzaWJsZSBvdXQtb2Ytb3JkZXIgbW91c2UgZXZlbnRzXG4gICAgICAgICAgY2FwdHVyaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAvLyB0cmlnZ2VyIGZvY3VzIGV2ZW50XG4gICAgICAgICAgZS50YXJnZXQuZm9jdXMoKTtcblxuICAgICAgICAgIC8vIHJlLWRpc3BhdGNoIGNhcHR1cmVkIG1vdXNlIGV2ZW50cyBpbiBvcmRlclxuICAgICAgICAgIHdoaWxlIChjYXB0dXJlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnQgPSBjYXB0dXJlZEV2ZW50cy5wb3AoKTtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KGV2ZW50LnR5cGUsIGV2ZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy13aXRoaW4nKSAmJlxuICAgICAgICBXZWJmbG93LmVudi5zYWZhcmlcbiAgICAgICkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVyLCB0cnVlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGNhcHR1cmVFdmVudCwgdHJ1ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FwdHVyZUV2ZW50LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIHtyZWFkeX07XG4gIH0pXG4pO1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJyZXF1aXJlIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsImNhcHR1cmVkRXZlbnRzIiwiY2FwdHVyaW5nIiwiY2FwdHVyZUV2ZW50IiwiZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwidW5zaGlmdCIsImlzUG9seWZpbGxlZEZvY3VzRXZlbnQiLCJlbCIsInRhcmdldCIsInRhZyIsInRhZ05hbWUiLCJ0ZXN0IiwiaHJlZiIsImRpc2FibGVkIiwidHlwZSIsIk51bWJlciIsImlzTmFOIiwicGFyc2VGbG9hdCIsInRhYkluZGV4IiwiY29udHJvbHMiLCJoYW5kbGVyIiwic2V0VGltZW91dCIsImZvY3VzIiwibGVuZ3RoIiwiZXZlbnQiLCJwb3AiLCJkaXNwYXRjaEV2ZW50IiwiTW91c2VFdmVudCIsInJlYWR5IiwiZG9jdW1lbnQiLCJib2R5IiwiaGFzQXR0cmlidXRlIiwiZW52Iiwic2FmYXJpIiwiYWRkRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDLEdBRWhDOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0Qjs7Ozs7Ozs7Q0FRQyxHQUNERCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHO0lBQ2hCLElBQUlDLGlCQUFpQixFQUFFO0lBQ3ZCLElBQUlDLFlBQVk7SUFFaEIsU0FBU0MsYUFBYUMsQ0FBQztRQUNyQixJQUFJRixXQUFXO1lBQ2JFLEVBQUVDLGNBQWM7WUFDaEJELEVBQUVFLGVBQWU7WUFDakJGLEVBQUVHLHdCQUF3QjtZQUMxQk4sZUFBZU8sT0FBTyxDQUFDSjtRQUN6QjtJQUNGO0lBRUE7Ozs7Ozs7Ozt
9519LQVNDLEdBQ0QsU0FBU0ssdUJBQXVCTCxDQUFDO1FBQy9CLElBQUlNLEtBQUtOLEVBQUVPLE1BQU07UUFDakIsSUFBSUMsTUFBTUYsR0FBR0csT0FBTztRQUNwQixPQUNFLEFBQUMsT0FBT0MsSUFBSSxDQUFDRixRQUFRRixHQUFHSyxJQUFJLElBQUksUUFBUyxNQUFNO1FBQzlDLHVCQUF1QkQsSUFBSSxDQUFDRixRQUFRRixHQUFHTSxRQUFRLEtBQUssUUFBUyxVQUFVO1FBQ3ZFLFdBQVdGLElBQUksQ0FBQ0YsUUFDZiwwQ0FBMENFLElBQUksQ0FBQ0osR0FBR08sSUFBSSxLQUN0RCxDQUFDUCxHQUFHTSxRQUFRLElBQUssTUFBTTtRQUN4QixDQUFDLHNDQUFzQ0YsSUFBSSxDQUFDRixRQUMzQyxDQUFDTSxPQUFPQyxLQUFLLENBQUNELE9BQU9FLFVBQVUsQ0FBQ1YsR0FBR1csUUFBUSxNQUFPLE1BQU07UUFDMUQsV0FBV1AsSUFBSSxDQUFDRixRQUFRLE1BQU07UUFDN0IsV0FBV0UsSUFBSSxDQUFDRixRQUFRRixHQUFHWSxRQUFRLEtBQUssS0FBTSxNQUFNOztJQUV6RDtJQUVBLFNBQVNDLFFBQVFuQixDQUFDO1FBQ2hCLElBQUlLLHVCQUF1QkwsSUFBSTtZQUM3QixxREFBcUQ7WUFDckRGLFlBQVk7WUFFWjs7Ozs7Ozs7Ozs7U0FXQyxHQUNEc0IsV0FBVztnQkFDVCxvREFBb0Q7Z0JBQ3BEdEIsWUFBWTtnQkFFWixzQkFBc0I7Z0JBQ3RCRSxFQUFFTyxNQUFNLENBQUNjLEtBQUs7Z0JBRWQsNkNBQTZDO2dCQUM3QyxNQUFPeEIsZUFBZXlCLE1BQU0sR0FBRyxFQUFHO29CQUNoQyxJQUFJQyxRQUFRMUIsZUFBZTJCLEdBQUc7b0JBQzlCRCxNQUFNaEIsTUFBTSxDQUFDa0IsYUFBYSxDQUFDLElBQUlDLFdBQVdILE1BQU1WLElBQUksRUFBRVU7Z0JBQ3hEO1lBQ0YsR0FBRztRQUNMO0lBQ0Y7SUFFQSxTQUFTSTtRQUNQLElBQ0UsT0FBT0MsYUFBYSxlQUNwQkEsU0FBU0MsSUFBSSxDQUFDQyxZQUFZLENBQUMsMkJBQzNCdEMsUUFBUXVDLEdBQUcsQ0FBQ0MsTUFBTSxFQUNsQjtZQUNBSixTQUFTSyxnQkFBZ0IsQ0FBQyxhQUFhZCxTQUFTO1lBQ2hEUyxTQUFTSyxnQkFBZ0IsQ0FBQyxXQUFXbEMsY0FBYztZQUNuRDZCLFNBQVNLLGdCQUFnQixDQUFDLFNBQVNsQyxjQUFjO1FBQ25EO0lBQ0Y7SUFFQSxnQkFBZ0I7SUFDaEIsT0FBTztRQUFDNEI7SUFBSztBQUNmIn0=
9520
9521}),
9522"7199": (function (module) {
9523"use strict";
9524/* globals window */ /**
9525 * Webflow: IX Event triggers for other modules
9526 */ 
9527var $ = window.jQuery;
9528var api = {};
9529var eventQueue = [];
9530var namespace = '.w-ix';
9531var eventTriggers = {
9532    reset: function(i, el) {
9533        el.__wf_intro = null;
9534    },
9535    intro: function(i, el) {
9536        if (el.__wf_intro) {
9537            return;
9538        }
9539        el.__wf_intro = true;
9540        $(el).triggerHandler(api.types.INTRO);
9541    },
9542    outro: function(i, el) {
9543        if (!el.__wf_intro) {
9544            return;
9545        }
9546        el.__wf_intro = null;
9547        $(el).triggerHandler(api.types.OUTRO);
9548    }
9549};
9550api.triggers = {};
9551api.types = {
9552    INTRO: 'w-ix-intro' + namespace,
9553    OUTRO: 'w-ix-outro' + namespace
9554};
9555// Trigger any events in queue + restore trigger methods
9556api.init = function() {
9557    var count = eventQueue.length;
9558    for(var i = 0; i < count; i++){
9559        var memo = eventQueue[i];
9560        memo[0](0, memo[1]);
9561    }
9562    eventQueue = [];
9563    $.extend(api.triggers, eventTriggers);
9564};
9565// Replace all triggers with async wrapper to queue events until init
9566api.async = function() {
9567    for(var key in eventTriggers){
9568        var func = eventTriggers[key];
9569        if (!eventTriggers.hasOwnProperty(key)) {
9570            continue;
9571        }
9572        // Replace trigger method with async wrapper
9573        api.triggers[key] = function(i, el) {
9574            eventQueue.push([
9575                func,
9576                el
9577            ]);
9578        };
9579    }
9580};
9581// Default triggers to async queue
9582api.async();
9583module.exports = api;
9584
9585//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXgtZXZlbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93ICovXG5cbi8qKlxuICogV2ViZmxvdzogSVggRXZlbnQgdHJpZ2dlcnMgZm9yIG90aGVyIG1vZHVsZXNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciAkID0gd2luZG93LmpRdWVyeTtcbnZhciBhcGkgPSB7fTtcbnZhciBldmVudFF1ZXVlID0gW107XG52YXIgbmFtZXNwYWNlID0gJy53LWl4JztcblxudmFyIGV2ZW50VHJpZ2dlcnMgPSB7XG4gIHJlc2V0OiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBlbC5fX3dmX2ludHJvID0gbnVsbDtcbiAgfSxcbiAgaW50cm86IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIGlmIChlbC5fX3dmX2ludHJvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsLl9fd2ZfaW50cm8gPSB0cnVlO1xuICAgICQoZWwpLnRyaWdnZXJIYW5kbGVyKGFwaS50eXBlcy5JTlRSTyk7XG4gIH0sXG4gIG91dHJvOiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBpZiAoIWVsLl9fd2ZfaW50cm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwuX193Zl9pbnRybyA9IG51bGw7XG4gICAgJChlbCkudHJpZ2dlckhhbmRsZXIoYXBpLnR5cGVzLk9VVFJPKTtcbiAgfSxcbn07XG5cbmFwaS50cmlnZ2VycyA9IHt9O1xuXG5hcGkudHlwZXMgPSB7XG4gIElOVFJPOiAndy1peC1pbnRybycgKyBuYW1lc3BhY2UsXG4gIE9VVFJPOiAndy1peC1vdXRybycgKyBuYW1lc3BhY2UsXG59O1xuXG4vLyBUcmlnZ2VyIGFueSBldmVudHMgaW4gcXVldWUgKyByZXN0b3JlIHRyaWdnZXIgbWV0aG9kc1xuYXBpLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb3VudCA9IGV2ZW50UXVldWUubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICB2YXIgbWVtbyA9IGV2ZW50UXVldWVbaV07XG4gICAgbWVtb1swXSgwLCBtZW1vWzFdKTtcbiAgfVxuICBldmVudFF1ZXVlID0gW107XG4gICQuZXh0ZW5kKGFwaS50cmlnZ2VycywgZXZlbnRUcmlnZ2Vycyk7XG59O1xuXG4vLyBSZXBsYWNlIGFsbCB0cmlnZ2VycyB3aXRoIGFzeW5jIHdyYXBwZXIgdG8gcXVldWUgZXZlbnRzIHVudGlsIGluaXRcbmFwaS5hc3luYyA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIga2V5IGluIGV2ZW50VHJpZ2dlcnMpIHtcbiAgICB2YXIgZnVuYyA9IGV2ZW50VHJpZ2dlcnNba2V5XTtcbiAgICBpZiAoIWV2ZW50VHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSB0cmlnZ2VyIG1ldGhvZCB3aXRoIGFzeW5jIHdyYXBwZXJcbiAgICBhcGkudHJpZ2dlcnNba2V5XSA9IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgZXZlbnRRdWV1ZS5wdXNoKFtmdW5jLCBlbF0pO1xuICAgIH07XG4gIH1cbn07XG5cbi8vIERlZmF1bHQgdHJpZ2dlcnMgdG8gYXN5bmMgcXVldWVcbmFwaS5hc3luYygpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFwaTtcbiJdLCJuYW1lcyI6WyIkIiwid2luZG93IiwialF1ZXJ5IiwiYXBpIiwiZXZlbnRRdWV1ZSIsIm5hbWVzcGFjZSIsImV2ZW50VHJpZ2dlcnMiLCJyZXNldCIsImkiLCJlbCIsIl9fd2ZfaW50cm8iLCJpbnRybyIsInRyaWdnZXJIYW5kbGVyIiwidHlwZXMiLCJJTlRSTyIsIm91dHJvIiwiT1VUUk8iLCJ0cmlnZ2VycyIsImluaXQiLCJjb3VudCIsImxlbmd0aCIsIm1lbW8iLCJleHRlbmQiLCJhc3luYyIsImtleSIsImZ1bmMiLCJoYXNPd25Qcm9wZXJ0eSIsInB1c2giLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsR0FFbEI7O0NBRUMsR0FFRDtBQUVBLElBQUlBLElBQUlDLE9BQU9DLE1BQU07QUFDckIsSUFBSUMsTUFBTSxDQUFDO0FBQ1gsSUFBSUMsYUFBYSxFQUFFO0FBQ25CLElBQUlDLFlBQVk7QUFFaEIsSUFBSUMsZ0JBQWdCO0lBQ2xCQyxPQUFPLFNBQVVDLENBQUMsRUFBRUMsRUFBRTtRQUNwQkEsR0FBR0MsVUFBVSxHQUFHO0lBQ2xCO0lBQ0FDLE9BQU8sU0FBVUgsQ0FBQyxFQUFFQyxFQUFFO1FBQ3BCLElBQUlBLEdBQUdDLFVBQVUsRUFBRTtZQUNqQjtRQUNGO1FBQ0FELEdBQUdDLFVBQVUsR0FBRztRQUNoQlYsRUFBRVMsSUFBSUcsY0FBYyxDQUFDVCxJQUFJVSxLQUFLLENBQUNDLEtBQUs7SUFDdEM7SUFDQUMsT0FBTyxTQUFVUCxDQUFDLEVBQUVDLEVBQUU7UUFDcEIsSUFBSSxDQUFDQSxHQUFHQyxVQUFVLEVBQUU7WUFDbEI7UUFDRjtRQUNBRCxHQUFHQyxVQUFVLEdBQUc7UUFDaEJWLEVBQUVTLElBQUlHLGNBQWMsQ0FBQ1QsSUFBSVUsS0FBSyxDQUFDRyxLQUFLO0lBQ3RDO0FBQ0Y7QUFFQWIsSUFBSWMsUUFBUSxHQUFHLENBQUM7QUFFaEJkLElBQUlVLEtBQUssR0FBRztJQUNWQyxPQUFPLGVBQWVUO0lBQ3RCVyxPQUFPLGVBQWVYO0FBQ3hCO0FBRUEsd0R
9585BQXdEO0FBQ3hERixJQUFJZSxJQUFJLEdBQUc7SUFDVCxJQUFJQyxRQUFRZixXQUFXZ0IsTUFBTTtJQUM3QixJQUFLLElBQUlaLElBQUksR0FBR0EsSUFBSVcsT0FBT1gsSUFBSztRQUM5QixJQUFJYSxPQUFPakIsVUFBVSxDQUFDSSxFQUFFO1FBQ3hCYSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUdBLElBQUksQ0FBQyxFQUFFO0lBQ3BCO0lBQ0FqQixhQUFhLEVBQUU7SUFDZkosRUFBRXNCLE1BQU0sQ0FBQ25CLElBQUljLFFBQVEsRUFBRVg7QUFDekI7QUFFQSxxRUFBcUU7QUFDckVILElBQUlvQixLQUFLLEdBQUc7SUFDVixJQUFLLElBQUlDLE9BQU9sQixjQUFlO1FBQzdCLElBQUltQixPQUFPbkIsYUFBYSxDQUFDa0IsSUFBSTtRQUM3QixJQUFJLENBQUNsQixjQUFjb0IsY0FBYyxDQUFDRixNQUFNO1lBQ3RDO1FBQ0Y7UUFFQSw0Q0FBNEM7UUFDNUNyQixJQUFJYyxRQUFRLENBQUNPLElBQUksR0FBRyxTQUFVaEIsQ0FBQyxFQUFFQyxFQUFFO1lBQ2pDTCxXQUFXdUIsSUFBSSxDQUFDO2dCQUFDRjtnQkFBTWhCO2FBQUc7UUFDNUI7SUFDRjtBQUNGO0FBRUEsa0NBQWtDO0FBQ2xDTixJQUFJb0IsS0FBSztBQUVUSyxPQUFPQyxPQUFPLEdBQUcxQiJ9
9586
9587}),
9588"2570": (function (module, __unused_webpack_exports, __webpack_require__) {
9589"use strict";
9590/* globals window */ /**
9591 * Webflow: Interactions
9592 */ 
9593var Webflow = __webpack_require__(3949);
9594var IXEvents = __webpack_require__(7199);
9595Webflow.define('ix', module.exports = function($, _) {
9596    var api = {};
9597    var designer;
9598    var $win = $(window);
9599    var namespace = '.w-ix';
9600    var tram = $.tram;
9601    var env = Webflow.env;
9602    var inApp = env();
9603    var emptyFix = env.chrome && env.chrome < 35;
9604    var transNone = 'none 0s ease 0s';
9605    var $subs = $();
9606    var config = {};
9607    var anchors = [];
9608    var loads = [];
9609    var readys = [];
9610    var destroyed;
9611    var readyDelay = 1;
9612    // Component types and proxy selectors
9613    var components = {
9614        tabs: '.w-tab-link, .w-tab-pane',
9615        dropdown: '.w-dropdown',
9616        slider: '.w-slide',
9617        navbar: '.w-nav'
9618    };
9619    // -----------------------------------
9620    // Module methods
9621    api.init = function(list) {
9622        setTimeout(function() {
9623            configure(list);
9624        }, 1);
9625    };
9626    api.preview = function() {
9627        designer = false;
9628        readyDelay = 100;
9629        setTimeout(function() {
9630            configure(window.__wf_ix);
9631        }, 1);
9632    };
9633    api.design = function() {
9634        designer = true;
9635        api.destroy();
9636    };
9637    api.destroy = function() {
9638        destroyed = true;
9639        $subs.each(teardown);
9640        Webflow.scroll.off(scroll);
9641        IXEvents.async();
9642        anchors = [];
9643        loads = [];
9644        readys = [];
9645    };
9646    api.ready = function() {
9647        // Redirect IX init while in design/preview modes
9648        if (inApp) {
9649            return env('design') ? api.design() : api.preview();
9650        }
9651        // Ready should only be used after destroy, as a way to re-init
9652        if (config && destroyed) {
9653            destroyed = false;
9654            init();
9655        }
9656    };
9657    api.run = run;
9658    api.style = inApp ? styleApp : stylePub;
9659    // -----------------------------------
9660    // Private methods
9661    function configure(list) {
9662        if (!list) {
9663            return;
9664        }
9665        // Map all interactions by slug
9666        config = {};
9667        _.each(list, function(item) {
9668            config[item.slug] = item.value;
9669        });
9670        // Init ix after config
9671        init();
9672    }
9673    function init() {
9674        initIX1Engine();
9675        // Need init IXEvents regardless if IX1 events exist since
9676        // IXEvents _also_ dispatch IX2 events.
9677        // Trigger queued events, must happen after init
9678        IXEvents.init();
9679        // Trigger a redraw to ensure all IX intros play
9680        Webflow.redraw.up();
9681    }
9682    function initIX1Engine() {
9683        // Build each element's interaction keying from data attribute
9684        var els = $('[data-ix]');
9685        if (!els.length) {
9686            return;
9687        }
9688        els.each(teardown);
9689        els.each(build);
9690        // Listen for scroll events if any anchors exist
9691        if (anchors.length) {
9692            Webflow.scroll.on(scroll);
9693            setTimeout(scroll, 1);
9694        }
9695        // Handle loads or readys if they exist
9696        if (loads.length) {
9697            Webflow.load(runLoads);
9698        }
9699        if (readys.length) {
9700            setTimeout(runReadys, readyDelay);
9701        }
9702    }
9703    function build(i, el) {
9704        var $el = $(el);
9705        var id = $el.attr('data-ix');
9706        var ix = config[id];
9707        if (!ix) {
9708            return;
9709        }
9710        var triggers = ix.triggers;
9711        if (!triggers) {
9712            return;
9713        }
9714        // Set styles immediately to provide tram with starting transform values
9715        api.style($el, ix.style);
9716        _.each(triggers, function(trigger) {
9717            var state = {};
9718            var type = trigger.type;
9719            var stepsB = trigger.stepsB && trigger.stepsB.length;
9720            function runA() {
9721                run(trigger, $el, {
9722                    group: 'A'
9723                });
9724            }
9725            function runB() {
9726                run(trigger, $el, {
9727                    group: 'B'
9728                });
9729            }
9730            if (type === 'load') {
9731                trigger.preload && !inApp ? loads.push(runA) : readys.push(runA);
9732                return;
9733            }
9734            if (type === 'click') {
9735                $el.on('click' + namespace, function(evt) {
9736                    // Avoid late clicks on touch devices
9737                    if (!Webflow.validClick(evt.currentTarget)) {
9738                        return;
9739                    }
9740                    // Prevent default on empty hash urls
9741                    if ($el.attr('href') === '#') {
9742                        evt.preventDefault();
9743                    }
9744                    run(trigger, $el, {
9745                        group: state.clicked ? 'B' : 'A'
9746                    });
9747                    if (stepsB) {
9748                        state.clicked = !state.clicked;
9749                    }
9750                });
9751                $subs = $subs.add($el);
9752                return;
9753            }
9754            if (type === 'hover') {
9755                $el.on('mouseenter' + namespace, runA);
9756                $el.on('mouseleave' + namespace, runB);
9757                $subs = $subs.add($el);
9758                return;
9759            }
9760            if (type === 'scroll') {
9761                anchors.push({
9762                    el: $el,
9763                    trigger,
9764                    state: {
9765                        active: false
9766                    },
9767                    offsetTop: convert(trigger.offsetTop),
9768                    offsetBot: convert(trigger.offsetBot)
9769                });
9770                return;
9771            }
9772            // Check for a proxy component selector
9773            // type == [tabs, dropdown, slider, navbar]
9774            var proxy = components[type];
9775            if (proxy) {
9776                var $proxy = $el.closest(proxy);
9777                $proxy.on(IXEvents.types.INTRO, runA).on(IXEvents.types.OUTRO, runB);
9778                $subs = $subs.add($proxy);
9779                return;
9780            }
9781        });
9782    }
9783    function convert(offset) {
9784        if (!offset) {
9785            return 0;
9786        }
9787        offset = String(offset);
9788        var result = parseInt(offset, 10);
9789        // eslint-disable-next-line no-self-compare
9790        if (result !== result) {
9791            return 0;
9792        }
9793        if (offset.indexOf('%') > 0) {
9794            result /= 100;
9795            if (result >= 1) {
9796                result = 0.999;
9797            }
9798        }
9799        return result;
9800    }
9801    function teardown(i, el) {
9802        $(el).off(namespace);
9803    }
9804    function scroll() {
9805        var viewTop = $win.scrollTop();
9806        var viewHeight = $win.height();
9807        // Check each anchor for a valid scroll trigger
9808        var count = anchors.length;
9809        for(var i = 0; i < count; i++){
9810            var anchor = anchors[i];
9811            var $el = anchor.el;
9812            var trigger = anchor.trigger;
9813            var stepsB = trigger.stepsB && trigger.stepsB.length;
9814            var state = anchor.state;
9815            var top = $el.offset().top;
9816            var height = $el.outerHeight();
9817            var offsetTop = anchor.offsetTop;
9818            var offsetBot = anchor.offsetBot;
9819            if (offsetTop < 1 && offsetTop > 0) {
9820                offsetTop *= viewHeight;
9821            }
9822            if (offsetBot < 1 && offsetBot > 0) {
9823                offsetBot *= viewHeight;
9824            }
9825            var active = top + height - offsetTop >= viewTop && top + offsetBot <= viewTop + viewHeight;
9826            if (active === state.active) {
9827                continue;
9828            }
9829            if (active === false && !stepsB) {
9830                continue;
9831            }
9832            state.active = active;
9833            run(trigger, $el, {
9834                group: active ? 'A' : 'B'
9835            });
9836        }
9837    }
9838    function runLoads() {
9839        var count = loads.length;
9840        for(var i = 0; i < count; i++){
9841            loads[i]();
9842        }
9843    }
9844    function runReadys() {
9845        var count = readys.length;
9846        for(var i = 0; i < count; i++){
9847            readys[i]();
9848        }
9849    }
9850    function run(trigger, $el, opts, replay) {
9851        opts = opts || {};
9852        var done = opts.done;
9853        var preserve3d = trigger.preserve3d;
9854        // Do not run in designer unless forced
9855        if (designer && !opts.force) {
9856            return;
9857        }
9858        // Operate on a set of grouped steps
9859        var group = opts.group || 'A';
9860        var loop = trigger['loop' + group];
9861        var steps = trigger['steps' + group];
9862        if (!steps || !steps.length) {
9863            return;
9864        }
9865        if (steps.length < 2) {
9866            loop = false;
9867        }
9868        // One-time init before any loops
9869        if (!replay) {
9870            // Find selector within element descendants, siblings, or query whole document
9871            var selector = trigger.selector;
9872            if (selector) {
9873                if (trigger.descend) {
9874                    $el = $el.find(selector);
9875                } else if (trigger.siblings) {
9876                    $el = $el.siblings(selector);
9877                } else {
9878                    $el = $(selector);
9879                }
9880                if (inApp) {
9881                    $el.attr('data-ix-affect', 1);
9882                }
9883            }
9884            // Apply empty fix for certain Chrome versions
9885            if (emptyFix) {
9886                $el.addClass('w-ix-emptyfix');
9887            }
9888            // Set preserve3d for triggers with 3d transforms
9889            if (preserve3d) {
9890                $el.css('transform-style', 'preserve-3d');
9891            }
9892        }
9893        var _tram = tram($el);
9894        // Add steps
9895        var meta = {
9896            omit3d: !preserve3d
9897        };
9898        for(var i = 0; i < steps.length; i++){
9899            addStep(_tram, steps[i], meta);
9900        }
9901        function fin() {
9902            // Run trigger again if looped
9903            if (loop) {
9904                return run(trigger, $el, opts, true);
9905            }
9906            // Reset any 'auto' values
9907            if (meta.width === 'auto') {
9908                _tram.set({
9909                    width: 'auto'
9910                });
9911            }
9912            if (meta.height === 'auto') {
9913                _tram.set({
9914                    height: 'auto'
9915                });
9916            }
9917            // Run callback
9918            done && done();
9919        }
9920        // Add final step to queue if tram has started
9921        meta.start ? _tram.then(fin) : fin();
9922    }
9923    function addStep(_tram, step, meta) {
9924        var addMethod = 'add';
9925        var startMethod = 'start';
9926        // Once the transition has started, we will always use then() to add to the queue.
9927        if (meta.start) {
9928            addMethod = startMethod = 'then';
9929        }
9930        // Parse transitions string on the current step
9931        var transitions = step.transition;
9932        if (transitions) {
9933            transitions = transitions.split(',');
9934            for(var i = 0; i < transitions.length; i++){
9935                var transition = transitions[i];
9936                _tram[addMethod](transition);
9937            }
9938        }
9939        // Build a clean object to pass to the tram method
9940        var clean = tramify(step, meta) || {};
9941        // Store last width and height values
9942        if (clean.width != null) {
9943            meta.width = clean.width;
9944        }
9945        if (clean.height != null) {
9946            meta.height = clean.height;
9947        }
9948        // When transitions are not present, set values immediately and continue queue.
9949        if (transitions == null) {
9950            // If we have started, wrap set() in then() and reset queue
9951            if (meta.start) {
9952                _tram.then(function() {
9953                    var queue = this.queue;
9954                    this.set(clean);
9955                    if (clean.display) {
9956                        _tram.redraw();
9957                        Webflow.redraw.up();
9958                    }
9959                    this.queue = queue;
9960                    this.next();
9961                });
9962            } else {
9963                _tram.set(clean);
9964                // Always redraw after setting display
9965                if (clean.display) {
9966                    _tram.redraw();
9967                    Webflow.redraw.up();
9968                }
9969            }
9970            // Use the wait() method to kick off queue in absence of transitions.
9971            var wait = clean.wait;
9972            if (wait != null) {
9973                _tram.wait(wait);
9974                meta.start = true;
9975            }
9976        // Otherwise, when transitions are present
9977        } else {
9978            // If display is present, handle it separately
9979            if (clean.display) {
9980                var display = clean.display;
9981                // eslint-disable-next-line webflow/no-delete
9982                delete clean.display;
9983                // If we've already started, we need to wrap it in a then()
9984                if (meta.start) {
9985                    _tram.then(function() {
9986                        var queue = this.queue;
9987                        this.set({
9988                            display
9989                        }).redraw();
9990                        Webflow.redraw.up();
9991                        this.queue = queue;
9992                        this.next();
9993                    });
9994                } else {
9995                    _tram.set({
9996                        display
9997                    }).redraw();
9998                    Webflow.redraw.up();
9999                }
10000            }
10001            // Otherwise, start a transition using the current start method.
10002            _tram[startMethod](clean);
10003            meta.start = true;
10004        }
10005    }
10006    // (In app) Set styles immediately and manage upstream transition
10007    function styleApp(el, data) {
10008        var _tram = tram(el);
10009        // Exit early when data is empty to avoid clearing upstream
10010        if ($.isEmptyObject(data)) {
10011            return;
10012        }
10013        // Get computed transition value
10014        el.css('transition', '');
10015        var computed = el.css('transition');
10016        // If computed is set to none, clear upstream
10017        if (computed === transNone) {
10018            computed = _tram.upstream = null;
10019        }
10020        // Set upstream transition to none temporarily
10021        _tram.upstream = transNone;
10022        // Set values immediately
10023        _tram.set(tramify(data));
10024        // Only restore upstream in preview mode
10025        _tram.upstream = computed;
10026    }
10027    // (Published) Set styles immediately on specified jquery element
10028    function stylePub(el, data) {
10029        tram(el).set(tramify(data));
10030    }
10031    // Build a clean object for tram
10032    function tramify(obj, meta) {
10033        var omit3d = meta && meta.omit3d;
10034        var result = {};
10035        var found = false;
10036        for(var key in obj){
10037            if (key === 'transition') {
10038                continue;
10039            }
10040            if (key === 'keysort') {
10041                continue;
10042            }
10043            if (omit3d) {
10044                if (key === 'z' || key === 'rotateX' || key === 'rotateY' || key === 'scaleZ') {
10045                    continue;
10046                }
10047            }
10048            result[key] = obj[key];
10049            found = true;
10050        }
10051        // If empty, return null for tram.set/stop compliance
10052        return found ? result : null;
10053    }
10054    // Export module
10055    return api;
10056});
10057
10058//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3cgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBJbnRlcmFjdGlvbnNcbiAqL1xudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG52YXIgSVhFdmVudHMgPSByZXF1aXJlKCcuL3dlYmZsb3ctaXgtZXZlbnRzJyk7XG5cbldlYmZsb3cuZGVmaW5lKFxuICAnaXgnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCwgXykge1xuICAgIHZhciBhcGkgPSB7fTtcbiAgICB2YXIgZGVzaWduZXI7XG4gICAgdmFyICR3aW4gPSAkKHdpbmRvdyk7XG4gICAgdmFyIG5hbWVzcGFjZSA9ICcudy1peCc7XG4gICAgdmFyIHRyYW0gPSAkLnRyYW07XG4gICAgdmFyIGVudiA9IFdlYmZsb3cuZW52O1xuICAgIHZhciBpbkFwcCA9IGVudigpO1xuICAgIHZhciBlbXB0eUZpeCA9IGVudi5jaHJvbWUgJiYgZW52LmNocm9tZSA8IDM1O1xuICAgIHZhciB0cmFuc05vbmUgPSAnbm9uZSAwcyBlYXNlIDBzJztcbiAgICB2YXIgJHN1YnMgPSAkKCk7XG4gICAgdmFyIGNvbmZpZyA9IHt9O1xuICAgIHZhciBhbmNob3JzID0gW107XG4gICAgdmFyIGxvYWRzID0gW107XG4gICAgdmFyIHJlYWR5cyA9IFtdO1xuICAgIHZhciBkZXN0cm95ZWQ7XG4gICAgdmFyIHJlYWR5RGVsYXkgPSAxO1xuXG4gICAgLy8gQ29tcG9uZW50IHR5cGVzIGFuZCBwcm94eSBzZWxlY3RvcnNcbiAgICB2YXIgY29tcG9uZW50cyA9IHtcbiAgICAgIHRhYnM6ICcudy10YWItbGluaywgLnctdGFiLXBhbmUnLFxuICAgICAgZHJvcGRvd246ICcudy1kcm9wZG93bicsXG4gICAgICBzbGlkZXI6ICcudy1zbGlkZScsXG4gICAgICBuYXZiYXI6ICcudy1uYXYnLFxuICAgIH07XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE1vZHVsZSBtZXRob2RzXG5cbiAgICBhcGkuaW5pdCA9IGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uZmlndXJlKGxpc3QpO1xuICAgICAgfSwgMSk7XG4gICAgfTtcblxuICAgIGFwaS5wcmV2aWV3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzaWduZXIgPSBmYWxzZTtcbiAgICAgIHJlYWR5RGVsYXkgPSAxMDA7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uZmlndXJlKHdpbmRvdy5fX3dmX2l4KTtcbiAgICAgIH0sIDEpO1xuICAgIH07XG5cbiAgICBhcGkuZGVzaWduID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzaWduZXIgPSB0cnVlO1xuICAgICAgYXBpLmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgYXBpLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgJHN1YnMuZWFjaCh0ZWFyZG93bik7XG4gICAgICBXZWJmbG93LnNjcm9sbC5vZmYoc2Nyb2xsKTtcbiAgICAgIElYRXZlbnRzLmFzeW5jKCk7XG4gICAgICBhbmNob3JzID0gW107XG4gICAgICBsb2FkcyA9IFtdO1xuICAgICAgcmVhZHlzID0gW107XG4gICAgfTtcblxuICAgIGFwaS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlZGlyZWN0IElYIGluaXQgd2hpbGUgaW4gZGVzaWduL3ByZXZpZXcgbW9kZXNcbiAgICAgIGlmIChpbkFwcCkge1xuICAgICAgICByZXR1cm4gZW52KCdkZXNpZ24nKSA/IGFwaS5kZXNpZ24oKSA6IGFwaS5wcmV2aWV3KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWR5IHNob3VsZCBvbmx5IGJlIHVzZWQgYWZ0ZXIgZGVzdHJveSwgYXMgYSB3YXkgdG8gcmUtaW5pdFxuICAgICAgaWYgKGNvbmZpZyAmJiBkZXN0cm95ZWQpIHtcbiAgICAgICAgZGVzdHJveWVkID0gZmFsc2U7XG4gICAgICAgIGluaXQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYXBpLnJ1biA9IHJ1bjtcbiAgICBhcGkuc3R5bGUgPSBpbkFwcCA/IHN0eWxlQXBwIDogc3R5bGVQdWI7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFByaXZhdGUgbWV0aG9kc1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGxpc3QpIHtcbiAgICAgIGlmICghbGlzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcCBhbGwgaW50ZXJhY3Rpb25zIGJ5IHNsdWdcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgICAgXy5lYWNoKGxpc3QsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGNvbmZpZ1tpdGVtLnNsdWddID0gaXRlbS52YWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbml0IGl4IGFmdGVyIGNvbmZpZ1xuICAgICAgaW5pdCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBpbml0SVgxRW5naW5lKCk7XG5cbiAgICAgIC8vIE5lZWQgaW5pdCBJWEV2ZW50cyByZWdhcmRsZXNzIGlmIElYMSBldmVudHMgZXhpc3Qgc2luY2VcbiAgICAgIC8vIElYRXZlbnRzIF9hbHNvXyBkaXNwYXRjaCBJWDIgZXZlbnRzLlxuXG4gICAgICAvLyBUcmlnZ2VyIHF1ZXVlZCBldmVudHMsIG11c3QgaGFwcGVuIGFmdGVyIGluaXRcbiAgICAgIElYRXZlbnRzLmluaXQoKTtcblxuICAgICAgLy8gVHJpZ2dlciBhIHJlZHJhdyB0byBlbnN1cmUgYWxsIElYIGludHJvcyBwbGF5XG4gICAgICBXZWJmbG93LnJlZHJhdy51cCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRJWDFFbmdpbmUoKSB7XG4gICAgICAvLyBCdWlsZCBlYWNoIGVsZW1lbnQncyBpbnRlcmFjdGlvbiBrZXlpbmcgZnJvbSBkYXRhIGF0dHJpYnV0ZVxuICAgICAgdmFyIGVscyA9ICQoJ1tkYXRhLWl4XScpO1xuICAgICAgaWYgKCFlbHMubGVuZ3RoKSB7XG4gICAgICAgI
10058HJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWxzLmVhY2godGVhcmRvd24pO1xuICAgICAgZWxzLmVhY2goYnVpbGQpO1xuXG4gICAgICAvLyBMaXN0ZW4gZm9yIHNjcm9sbCBldmVudHMgaWYgYW55IGFuY2hvcnMgZXhpc3RcbiAgICAgIGlmIChhbmNob3JzLmxlbmd0aCkge1xuICAgICAgICBXZWJmbG93LnNjcm9sbC5vbihzY3JvbGwpO1xuICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBsb2FkcyBvciByZWFkeXMgaWYgdGhleSBleGlzdFxuICAgICAgaWYgKGxvYWRzLmxlbmd0aCkge1xuICAgICAgICBXZWJmbG93LmxvYWQocnVuTG9hZHMpO1xuICAgICAgfVxuICAgICAgaWYgKHJlYWR5cy5sZW5ndGgpIHtcbiAgICAgICAgc2V0VGltZW91dChydW5SZWFkeXMsIHJlYWR5RGVsYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkKGksIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCk7XG4gICAgICB2YXIgaWQgPSAkZWwuYXR0cignZGF0YS1peCcpO1xuICAgICAgdmFyIGl4ID0gY29uZmlnW2lkXTtcbiAgICAgIGlmICghaXgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHRyaWdnZXJzID0gaXgudHJpZ2dlcnM7XG4gICAgICBpZiAoIXRyaWdnZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHN0eWxlcyBpbW1lZGlhdGVseSB0byBwcm92aWRlIHRyYW0gd2l0aCBzdGFydGluZyB0cmFuc2Zvcm0gdmFsdWVzXG4gICAgICBhcGkuc3R5bGUoJGVsLCBpeC5zdHlsZSk7XG5cbiAgICAgIF8uZWFjaCh0cmlnZ2VycywgZnVuY3Rpb24gKHRyaWdnZXIpIHtcbiAgICAgICAgdmFyIHN0YXRlID0ge307XG4gICAgICAgIHZhciB0eXBlID0gdHJpZ2dlci50eXBlO1xuICAgICAgICB2Y
10058XIgc3RlcHNCID0gdHJpZ2dlci5zdGVwc0IgJiYgdHJpZ2dlci5zdGVwc0IubGVuZ3RoO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJ1bkEoKSB7XG4gICAgICAgICAgcnVuKHRyaWdnZXIsICRlbCwge2dyb3VwOiAnQSd9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBydW5CKCkge1xuICAgICAgICAgIHJ1bih0cmlnZ2VyLCAkZWwsIHtncm91cDogJ0InfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgdHJpZ2dlci5wcmVsb2FkICYmICFpbkFwcCA/IGxvYWRzLnB1c2gocnVuQSkgOiByZWFkeXMucHVzaChydW5BKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICRlbC5vbignY2xpY2snICsgbmFtZXNwYWNlLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICAvLyBBdm9pZCBsYXRlIGNsaWNrcyBvbiB0b3VjaCBkZXZpY2VzXG4gICAgICAgICAgICBpZiAoIVdlYmZsb3cudmFsaWRDbGljayhldnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgb24gZW1wdHkgaGFzaCB1cmxzXG4gICAgICAgICAgICBpZiAoJGVsLmF0dHIoJ2hyZWYnKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBydW4odHJpZ2dlciwgJGVsLCB7Z3JvdXA6IHN0YXRlLmNsaWNrZWQgPyAnQicgOiAnQSd9KTtcbiAgICAgICAgICAgIGlmIChzdGVwc0IpIHtcbiAgICAgICAgICAgICAgc3RhdGUuY2xpY2tlZCA9ICFzdGF0ZS5jbGlja2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICRzdWJzID0gJHN1YnMuYWRkKCRlbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdob3ZlcicpIHtcbiAgICAgICAgICAkZWwub24oJ21vdXNlZW50ZXInICsgbmFtZXNwYWNlLCBydW5BKTtcbiAgICAgICAgICAkZWwub24oJ21vdXNlbGVhdmUnICsgbmFtZXNwYWNlLCBydW5CKTtcbiAgICAgICAgICAkc3VicyA9ICRzdWJzLmFkZCgkZWwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnc2Nyb2xsJykge1xuICAgICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICBlbDogJGVsLFxuICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgIHN0YXRlOiB7YWN0aXZlOiBmYWxzZX0sXG4gICAgICAgICAgICBvZmZzZXRUb3A6IGNvbnZlcnQodHJpZ2dlci5vZmZzZXRUb3ApLFxuICAgICAgICAgICAgb2Zmc2V0Qm90OiBjb252ZXJ0KHRyaWdnZXIub2Zmc2V0Qm90KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgYSBwcm94eSBjb21wb25lbnQgc2VsZWN0b3JcbiAgICAgICAgLy8gdHlwZSA9PSBbdGFicywgZHJvcGRvd24sIHNsaWRlciwgbmF2YmFyXVxuICAgICAgICB2Y
10058XIgcHJveHkgPSBjb21wb25lbnRzW3R5cGVdO1xuICAgICAgICBpZiAocHJveHkpIHtcbiAgICAgICAgICB2YXIgJHByb3h5ID0gJGVsLmNsb3Nlc3QocHJveHkpO1xuICAgICAgICAgICRwcm94eS5vbihJWEV2ZW50cy50eXBlcy5JTlRSTywgcnVuQSkub24oSVhFdmVudHMudHlwZXMuT1VUUk8sIHJ1bkIpO1xuICAgICAgICAgICRzdWJzID0gJHN1YnMuYWRkKCRwcm94eSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0KG9mZnNldCkge1xuICAgICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBvZmZzZXQgPSBTdHJpbmcob2Zmc2V0KTtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJzZUludChvZmZzZXQsIDEwKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmIChyZXN1bHQgIT09IHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChvZmZzZXQuaW5kZXhPZignJScpID4gMCkge1xuICAgICAgICByZXN1bHQgLz0gMTAwO1xuICAgICAgICBpZiAocmVzdWx0ID49IDEpIHtcbiAgICAgICAgICByZXN1bHQgPSAwLjk5OTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZWFyZG93bihpLCBlbCkge1xuICAgICAgJChlbCkub2ZmKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsKCkge1xuICAgICAgdmFyIHZpZXdUb3AgPSAkd2luLnNjcm9sbFRvcCgpO1xuICAgICAgdmFyIHZpZXdIZWlnaHQgPSAkd2luLmhlaWdodCgpO1xuXG4gICAgICAvLyBDaGVjayBlYWNoIGFuY2hvciBmb3IgYSB2YWxpZCBzY3JvbGwgdHJpZ2dlclxuICAgICAgdmFyIGNvdW50ID0gYW5jaG9ycy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIGFuY2hvciA9IGFuY2hvcnNbaV07XG4gICAgICAgIHZhciAkZWwgPSBhbmNob3IuZWw7XG4gICAgICAgIHZhciB0cmlnZ2VyID0gYW5jaG9yLnRyaWdnZXI7XG4gICAgICAgIHZhciBzdGVwc0IgPSB0cmlnZ2VyLnN0ZXBzQiAmJiB0cmlnZ2VyLnN0ZXBzQi5sZW5ndGg7XG4gICAgICAgIHZhciBzdGF0ZSA9IGFuY2hvci5zdGF0ZTtcbiAgICAgICAgdmFyIHRvcCA9ICRlbC5vZmZzZXQoKS50b3A7XG4gICAgICAgIHZhciBoZWlnaHQgPSAkZWwub3V0ZXJIZWlnaHQoKTtcbiAgICAgICAgdmFyIG9mZnNldFRvcCA9IGFuY2hvci5vZmZzZXRUb3A7XG4gICAgICAgIHZhciBvZmZzZXRCb3QgPSBhbmNob3Iub2Zmc2V0Qm90O1xuICAgICAgICBpZiAob2Zmc2V0VG9wIDwgMSAmJiBvZmZzZXRUb3AgPiAwKSB7XG4gICAgICAgICAgb2Zmc2V0VG9wICo9IHZpZXdIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldEJvdCA8IDEgJiYgb2Zmc2V0Qm90ID4gMCkge1xuICAgICAgICAgIG9mZnNldEJvdCAqPSB2aWV3SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBhY3RpdmUgPVxuICAgICAgICAgIHRvcCArIGhlaWdodCAtIG9mZnNldFRvcCA+PSB2aWV3VG9wICYmXG4gICAgICAgICAgdG9wICsgb2Zmc2V0Qm90IDw9IHZpZXdUb3AgKyB2aWV3SGVpZ2h0O1xuICAgICAgICBpZiAoYWN0aXZlID09PSBzdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZlID09PSBmYWxzZSAmJiAhc3RlcHNCKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICBydW4odHJpZ2dlciwgJGVsLCB7Z3JvdXA6IGFjdGl2ZSA/ICdBJyA6ICdCJ30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bkxvYWRzKCkge1xuICAgICAgdmFyIGNvdW50ID0gbG9hZHMubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGxvYWRzW2ldKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuUmVhZHlzKCkge1xuICAgICAgdmFyIGNvdW50ID0gcmVhZHlzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICByZWFkeXNbaV0oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odHJpZ2dlciwgJGVsLCBvcHRzLCByZXBsYXkpIHtcbiAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgdmFyIGRvbmUgPSBvcHRzLmRvbmU7XG4gICAgICB2Y
10058XIgcHJlc2VydmUzZCA9IHRyaWdnZXIucHJlc2VydmUzZDtcblxuICAgICAgLy8gRG8gbm90IHJ1biBpbiBkZXNpZ25lciB1bmxlc3MgZm9yY2VkXG4gICAgICBpZiAoZGVzaWduZXIgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPcGVyYXRlIG9uIGEgc2V0IG9mIGdyb3VwZWQgc3RlcHNcbiAgICAgIHZhciBncm91cCA9IG9wdHMuZ3JvdXAgfHwgJ0EnO1xuICAgICAgdmFyIGxvb3AgPSB0cmlnZ2VyWydsb29wJyArIGdyb3VwXTtcbiAgICAgIHZhciBzdGVwcyA9IHRyaWdnZXJbJ3N0ZXBzJyArIGdyb3VwXTtcbiAgICAgIGlmICghc3RlcHMgfHwgIXN0ZXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RlcHMubGVuZ3RoIDwgMikge1xuICAgICAgICBsb29wID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE9uZS10aW1lIGluaXQgYmVmb3JlIGFueSBsb29wc1xuICAgICAgaWYgKCFyZXBsYXkpIHtcbiAgICAgICAgLy8gRmluZCBzZWxlY3RvciB3aXRoaW4gZWxlbWVudCBkZXNjZW5kYW50cywgc2libGluZ3MsIG9yIHF1ZXJ5IHdob2xlIGRvY3VtZW50XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRyaWdnZXIuc2VsZWN0b3I7XG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIGlmICh0cmlnZ2VyLmRlc2NlbmQpIHtcbiAgICAgICAgICAgICRlbCA9ICRlbC5maW5kKHNlbGVjdG9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuc2libGluZ3MpIHtcbiAgICAgICAgICAgICRlbCA9ICRlbC5zaWJsaW5ncyhzZWxlY3Rvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRlbCA9ICQoc2VsZWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5BcHApIHtcbiAgICAgICAgICAgICRlbC5hdHRyKCdkYXRhLWl4LWFmZmVjdCcsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFwcGx5IGVtcHR5IGZpeCBmb3IgY2VydGFpbiBDaHJvbWUgdmVyc2lvbnNcbiAgICAgICAgaWYgKGVtcHR5Rml4KSB7XG4gICAgICAgICAgJGVsLmFkZENsYXNzKCd3LWl4LWVtcHR5Zml4Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgcHJlc2VydmUzZCBmb3IgdHJpZ2dlcnMgd2l0aCAzZCB0cmFuc2Zvcm1zXG4gICAgICAgIGlmIChwcmVzZXJ2ZTNkKSB7XG4gICAgICAgICAgJGVsLmNzcygndHJhbnNmb3JtLXN0eWxlJywgJ3ByZXNlcnZlLTNkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIF90cmFtID0gdHJhbSgkZWwpO1xuXG4gICAgICAvLyBBZGQgc3RlcHNcbiAgICAgIHZhciBtZXRhID0ge29taXQzZDogIXByZXNlcnZlM2R9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhZGRTdGVwKF90cmFtLCBzdGVwc1tpXSwgbWV0YSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGZpbigpIHtcbiAgICAgICAgLy8gUnVuIHRyaWdnZXIgYWdhaW4gaWYgbG9vcGVkXG4gICAgICAgIGlmIChsb29wKSB7XG4gICAgICAgICAgcmV0dXJuIHJ1bih0cmlnZ2VyLCAkZWwsIG9wdHMsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzZXQgYW55ICdhdXRvJyB2YWx1ZXNcbiAgICAgICAgaWYgKG1ldGEud2lkdGggPT09ICdhdXRvJykge1xuICAgICAgICAgIF90cmFtLnNldCh7d2lkdGg6ICdhdXRvJ30pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhLmhlaWdodCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgX3RyYW0uc2V0KHtoZWlnaHQ6ICdhdXRvJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUnVuIGNhbGxiYWNrXG4gICAgICAgIGRvbmUgJiYgZG9uZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZmluYWwgc3RlcCB0byBxdWV1ZSBpZiB0cmFtIGhhcyBzdGFydGVkXG4gICAgICBtZXRhLnN0YXJ0ID8gX3RyYW0udGhlbihmaW4pIDogZmluKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3RlcChfdHJhbSwgc3RlcCwgbWV0YSkge1xuICAgICAgdmFyIGFkZE1ldGhvZCA9ICdhZGQnO1xuICAgICAgdmFyIHN0YXJ0TWV0aG9kID0gJ3N0YXJ0JztcblxuICAgICAgLy8gT25jZSB0aGUgdHJhbnNpdGlvbiBoYXMgc3RhcnRlZCwgd2Ugd2lsbCBhbHdheXMgdXNlIHRoZW4oKSB0byBhZGQgdG8gdGhlIHF1ZXVlLlxuICAgICAgaWYgKG1ldGEuc3RhcnQpIHtcbiAgICAgICAgYWRkTWV0aG9kID0gc3RhcnRNZXRob2QgPSAndGhlbic7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIHRyYW5zaXRpb25zIHN0cmluZyBvbiB0aGUgY3VycmVudCBzdGVwXG4gICAgICB2Y
10058XIgdHJhbnNpdGlvbnMgPSBzdGVwLnRyYW5zaXRpb247XG4gICAgICBpZiAodHJhbnNpdGlvbnMpIHtcbiAgICAgICAgdHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucy5zcGxpdCgnLCcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uc1tpXTtcbiAgICAgICAgICBfdHJhbVthZGRNZXRob2RdKHRyYW5zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIGEgY2xlYW4gb2JqZWN0IHRvIHBhc3MgdG8gdGhlIHRyYW0gbWV0aG9kXG4gICAgICB2YXIgY2xlYW4gPSB0cmFtaWZ5KHN0ZXAsIG1ldGEpIHx8IHt9O1xuXG4gICAgICAvLyBTdG9yZSBsYXN0IHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzXG4gICAgICBpZiAoY2xlYW4ud2lkdGggIT0gbnVsbCkge1xuICAgICAgICBtZXRhLndpZHRoID0gY2xlYW4ud2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoY2xlYW4uaGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgbWV0YS5oZWlnaHQgPSBjbGVhbi5oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gdHJhbnNpdGlvbnMgYXJlIG5vdCBwcmVzZW50LCBzZXQgdmFsdWVzIGltbWVkaWF0ZWx5IGFuZCBjb250aW51ZSBxdWV1ZS5cbiAgICAgIGlmICh0cmFuc2l0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgc3RhcnRlZCwgd3JhcCBzZXQoKSBpbiB0aGVuKCkgYW5kIHJlc2V0IHF1ZXVlXG4gICAgICAgIGlmIChtZXRhLnN0YXJ0KSB7XG4gICAgICAgICAgX3RyYW0udGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2Y
10058XIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgICAgICAgICAgdGhpcy5zZXQoY2xlYW4pO1xuICAgICAgICAgICAgaWYgKGNsZWFuLmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgX3RyYW0ucmVkcmF3KCk7XG4gICAgICAgICAgICAgIFdlYmZsb3cucmVkcmF3LnVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnF1ZXVlID0gcXVldWU7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdHJhbS5zZXQoY2xlYW4pO1xuXG4gICAgICAgICAgLy8gQWx3YXlzIHJlZHJhdyBhZnRlciBzZXR0aW5nIGRpc3BsYXlcbiAgICAgICAgICBpZiAoY2xlYW4uZGlzcGxheSkge1xuICAgICAgICAgICAgX3RyYW0ucmVkcmF3KCk7XG4gICAgICAgICAgICBXZWJmbG93LnJlZHJhdy51cCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSB0aGUgd2FpdCgpIG1ldGhvZCB0byBraWNrIG9mZiBxdWV1ZSBpbiBhYnNlbmNlIG9mIHRyYW5zaXRpb25zLlxuICAgICAgICB2YXIgd2FpdCA9IGNsZWFuLndhaXQ7XG4gICAgICAgIGlmICh3YWl0ICE9IG51bGwpIHtcbiAgICAgICAgICBfdHJhbS53YWl0KHdhaXQpO1xuICAgICAgICAgIG1ldGEuc3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIHRyYW5zaXRpb25zIGFyZSBwcmVzZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBkaXNwbGF5IGlzIHByZXNlbnQsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5XG4gICAgICAgIGlmIChjbGVhbi5kaXNwbGF5KSB7XG4gICAgICAgICAgdmFyIGRpc3BsYXkgPSBjbGVhbi5kaXNwbGF5O1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3ZWJmbG93L25vLWRlbGV0ZVxuICAgICAgICAgIGRlbGV0ZSBjbGVhbi5kaXNwbGF5O1xuXG4gICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBzdGFydGVkLCB3ZSBuZWVkIHRvIH
10058dyYXAgaXQgaW4gYSB0aGVuKClcbiAgICAgICAgICBpZiAobWV0YS5zdGFydCkge1xuICAgICAgICAgICAgX3RyYW0udGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgICAgICAgICAgIHRoaXMuc2V0KHtkaXNwbGF5fSkucmVkcmF3KCk7XG4gICAgICAgICAgICAgIFdlYmZsb3cucmVkcmF3LnVwKCk7XG4gICAgICAgICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RyYW0uc2V0KHtkaXNwbGF5fSkucmVkcmF3KCk7XG4gICAgICAgICAgICBXZWJmbG93LnJlZHJhdy51cCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgc3RhcnQgYSB0cmFuc2l0aW9uIHVzaW5nIHRoZSBjdXJyZW50IHN0YXJ0IG1ldGhvZC5cbiAgICAgICAgX3RyYW1bc3RhcnRNZXRob2RdKGNsZWFuKTtcbiAgICAgICAgbWV0YS5zdGFydCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gKEluIGFwcCkgU2V0IHN0eWxlcyBpbW1lZGlhdGVseSBhbmQgbWFuYWdlIHVwc3RyZWFtIHRyYW5zaXRpb25cbiAgICBmdW5jdGlvbiBzdHlsZUFwcChlbCwgZGF0YSkge1xuICAgICAgdmFyIF90cmFtID0gdHJhbShlbCk7XG5cbiAgICAgIC8vIEV4aXQgZWFybHkgd2hlbiBkYXRhIGlzIGVtcHR5IHRvIGF2b2lkIGNsZWFyaW5nIHVwc3RyZWFtXG4gICAgICBpZiAoJC5pc0VtcHR5T2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGNvbXB1dGVkIHRyYW5zaXRpb24gdmFsdWVcbiAgICAgIGVsLmNzcygndHJhbnNpdGlvbicsICcnKTtcbiAgICAgIHZhciBjb21wdXRlZCA9IGVsLmNzcygndHJhbnNpdGlvbicpO1xuXG4gICAgICAvLyBJZiBjb21wdXRlZCBpcyBzZXQgdG8gbm9uZSwgY2xlYXIgdXBzdHJlYW1cbiAgICAgIGlmIChjb21wdXRlZCA9PT0gdHJhbnNOb25lKSB7XG4gICAgICAgIGNvbXB1dGVkID0gX3RyYW0udXBzdHJlYW0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdXBzdHJlYW0gdHJhbnNpdGlvbiB0byBub25lIHRlbXBvcmFyaWx5XG4gICAgICBfdHJhbS51cHN0cmVhbSA9IHRyYW5zTm9uZTtcblxuICAgICAgLy8gU2V0IHZhbHVlcyBpbW1lZGlhdGVseVxuICAgICAgX3RyYW0uc2V0KHRyYW1pZnkoZGF0YSkpO1xuXG4gICAgICAvLyBPbmx5IHJlc3RvcmUgdXBzdHJlYW0gaW4gcHJldmlldyBtb2RlXG4gICAgICBfdHJhbS51cHN0cmVhbSA9IGNvbXB1dGVkO1xuICAgIH1cblxuICAgIC8vIChQdWJsaXNoZWQpIFNldCBzdHlsZXMgaW1tZWRpYXRlbHkgb24gc3BlY2lmaWVkIGpxdWVyeSBlbGVtZW50XG4gICAgZnVuY3Rpb24gc3R5bGVQdWIoZWwsIGRhdGEpIHtcbiAgICAgIHRyYW0oZWwpLnNldCh0cmFtaWZ5KGRhdGEpKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBhIGNsZWFuIG9iamVjdCBmb3IgdHJhbVxuICAgIGZ1bmN0aW9uIHRyYW1pZnkob2JqLCBtZXRhKSB7XG4gICAgICB2Y
10058XIgb21pdDNkID0gbWV0YSAmJiBtZXRhLm9taXQzZDtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoa2V5ID09PSAndHJhbnNpdGlvbicpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAna2V5c29ydCcpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob21pdDNkKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAga2V5ID09PSAneicgfHxcbiAgICAgICAgICAgIGtleSA9PT0gJ3JvdGF0ZVgnIHx8XG4gICAgICAgICAgICBrZXkgPT09ICdyb3RhdGVZJyB8fFxuICAgICAgICAgICAga2V5ID09PSAnc2NhbGVaJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGVtcHR5LCByZXR1cm4gbnVsbCBmb3IgdHJhbS5zZXQvc3RvcCBjb21wbGlhbmNlXG4gICAgICByZXR1cm4gZm91bmQgPyByZXN1bHQgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsIklYRXZlbnRzIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJfIiwiYXBpIiwiZGVzaWduZXIiLCIkd2luIiwid2luZG93IiwibmFtZXNwYWNlIiwidHJhbSIsImVudiIsImluQXBwIiwiZW1wdHlGaXgiLCJjaHJvbWUiLCJ0cmFuc05vbmUiLCIkc3VicyIsImNvbmZpZyIsImFuY2hvcnMiLCJsb2FkcyIsInJlYWR5cyIsImRlc3Ryb3llZCIsInJlYWR5RGVsYXkiLCJjb21wb25lbnRzIiwidGFicyIsImRyb3Bkb3duIiwic2xpZGVyIiwibmF2YmFyIiwiaW5pdCIsImxpc3QiLCJzZXRUaW1lb3V0IiwiY29uZmlndXJlIiwicHJldmlldyIsIl9fd2ZfaXgiLCJkZXNpZ24iLCJkZXN0cm95IiwiZWFjaCIsInRlYXJkb3duIiwic2Nyb2xsIiwib2ZmIiwiYXN5bmMiLCJyZWFkeSIsInJ1biIsInN0eWxlIiwic3R5bGVBcHAiLCJzdHlsZVB1YiIsIml0ZW0iLCJzbHVnIiwidmFsdWUiLCJpbml0SVgxRW5naW5lIiwicmVkcmF3IiwidXAiLCJlbHMiLCJsZW5ndGgiLCJidWlsZCIsIm9uIiwibG9hZCIsInJ1bkxvYWRzIiwicnVuUmVhZHlzIiwiaSIsImVsIiwiJGVsIiwiaWQiLCJhdHRyIiwiaXgiLCJ0cmlnZ2VycyIsInRyaWdnZXIiLCJzdGF0ZSIsInR5cGUiLCJzdGVwc0IiLCJydW5BIiwiZ3JvdXAiLCJydW5CIiwicHJlbG9hZCIsInB1c2giLCJldnQiLCJ2YWxpZENsaWNrIiwiY3VycmVudFRhcmdldCIsInByZXZlbnREZWZhdWx0IiwiY2xpY2tlZCIsImFkZCIsImFjdGl2ZSIsIm9mZnNldFRvcCIsImNvbnZlcnQiLCJvZmZzZXRCb3QiLCJwcm94eSIsIiRwcm94eSIsImNsb3Nlc3QiLCJ0eXBlcyIsIklOVFJPIiwiT1VUUk8iLCJvZmZzZXQiLCJTdHJpbmciLCJyZXN1bHQiLCJwYXJzZUludCIsImluZGV4T2YiLCJ2aWV3VG9wIiwic2Nyb2xsVG9wIiwidmlld0hlaWdodCIsImhlaWdodCIsImNvdW50IiwiYW5jaG9yIiwidG9wIiwib3V0ZXJIZWlnaHQiLCJvcHRzIiwicmVwbGF5IiwiZG9uZSIsInByZXNlcnZlM2QiLCJmb3JjZSIsImxvb3AiLCJzdGVwcyIsInNlbGVjdG9yIiwiZGVzY2VuZCIsImZpbmQiLCJzaWJsaW5ncyIsImFkZENsYXNzIiwiY3NzIiwiX3RyYW0iLCJtZXRhIiwib21pdDNkIiwiYWRkU3RlcCIsImZpbiIsIndpZHRoIiwic2V0Iiwic3RhcnQiLCJ0aGVuIiwic3RlcCIsImFkZE1ldGhvZCIsInN0YXJ0TWV0aG9kIiwidHJhbnNpdGlvbnMiLCJ0cmFuc2l0aW9uIiwic3BsaXQiLCJjbGVhbiIsInRyYW1pZnkiLCJxdWV1ZSIsImRpc3BsYXkiLCJuZXh0Iiwid2FpdCIsImRhdGEiLCJpc0VtcHR5T2JqZWN0IiwiY29tcHV0ZWQiLCJ1cHN0cmVhbSIsIm9iaiIsImZvdW5kIiwia2V5Il0sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsR0FFbEI7O0NBRUM7QUFDRCxJQUFJQSxVQUFVQyxRQUFRO0FBQ3RCLElBQUlDLFdBQVdELFFBQVE7QUFFdkJELFFBQVFHLE1BQU0sQ0FDWixNQUNDQyxPQUFPQyxPQUFPLEdBQUcsU0FBVUMsQ0FBQyxFQUFFQyxDQUFDO0lBQzlCLElBQUlDLE1BQU0sQ0FBQztJQUNYLElBQUlDO0lBQ0osSUFBSUMsT0FBT0osRUFBRUs7SUFDYixJQUFJQyxZQUFZO0lBQ2hCLElBQUlDLE9BQU9QLEVBQUVPLElBQUk7SUFDakIsSUFBSUMsTUFBTWQsUUFBUWMsR0FBRztJQUNyQixJQUFJQyxRQUFRRDtJQUNaLElBQUlFLFdBQVdGLElBQUlHLE1BQU0sSUFBSUgsSUFBSUcsTUFBTSxHQUFHO0lBQzFDLElBQUlDLFlBQVk7SUFDaEIsSUFBSUMsUUFBUWI7SUFDWixJQUFJYyxTQUFTLENBQUM7SUFDZCxJQUFJQyxVQUFVLEVBQUU7SUFDaEIsSUFBSUMsUUFBUSxFQUFFO0lBQ2QsSUFBSUMsU0FBUyxFQUFFO0lBQ2YsSUFBSUM7SUFDSixJQUFJQyxhQUFhO0lBRWpCLHNDQUFzQztJQUN0QyxJQUFJQyxhQUFhO1FBQ2ZDLE1BQU07UUFDTkMsVUFBVTtRQUNWQyxRQUFRO1FBQ1JDLFFBQVE7SUFDVjtJQUVBLHNDQUFzQztJQUN0QyxpQkFBaUI7SUFFakJ0QixJQUFJdUIsSUFBSSxHQUFHLFNBQVVDLElBQUk7UUFDdkJDLFdBQVc7WUFDVEMsVUFBVUY7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
10059
10060}),
10061"5134": (function (module, __unused_webpack_exports, __webpack_require__) {
10062"use strict";
10063/* globals window, document */ 
10064var IXEvents = __webpack_require__(7199);
10065function dispatchCustomEvent(element, eventName) {
10066    var event = document.createEvent('CustomEvent');
10067    event.initCustomEvent(eventName, true, true, null);
10068    element.dispatchEvent(event);
10069}
10070/**
10071 * Webflow: IX Event triggers for other modules
10072 */ var $ = window.jQuery;
10073var api = {};
10074var namespace = '.w-ix';
10075var eventTriggers = {
10076    reset: function(i, el) {
10077        IXEvents.triggers.reset(i, el);
10078    },
10079    intro: function(i, el) {
10080        IXEvents.triggers.intro(i, el);
10081        dispatchCustomEvent(el, 'COMPONENT_ACTIVE');
10082    },
10083    outro: function(i, el) {
10084        IXEvents.triggers.outro(i, el);
10085        dispatchCustomEvent(el, 'COMPONENT_INACTIVE');
10086    }
10087};
10088api.triggers = {};
10089api.types = {
10090    INTRO: 'w-ix-intro' + namespace,
10091    OUTRO: 'w-ix-outro' + namespace
10092};
10093$.extend(api.triggers, eventTriggers);
10094module.exports = api;
10095
10096//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXgyLWV2ZW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQgKi9cblxuJ3VzZSBzdHJpY3QnO1xudmFyIElYRXZlbnRzID0gcmVxdWlyZSgnLi93ZWJmbG93LWl4LWV2ZW50cycpO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEN1c3RvbUV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSkge1xuICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgdHJ1ZSwgbnVsbCk7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbi8qKlxuICogV2ViZmxvdzogSVggRXZlbnQgdHJpZ2dlcnMgZm9yIG90aGVyIG1vZHVsZXNcbiAqL1xuXG52YXIgJCA9IHdpbmRvdy5qUXVlcnk7XG52YXIgYXBpID0ge307XG52YXIgbmFtZXNwYWNlID0gJy53LWl4JztcblxudmFyIGV2ZW50VHJpZ2dlcnMgPSB7XG4gIHJlc2V0OiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBJWEV2ZW50cy50cmlnZ2Vycy5yZXNldChpLCBlbCk7XG4gIH0sXG4gIGludHJvOiBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICBJWEV2ZW50cy50cmlnZ2Vycy5pbnRybyhpLCBlbCk7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudChlbCwgJ0NPTVBPTkVOVF9BQ1RJVkUnKTtcbiAgfSxcbiAgb3V0cm86IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIElYRXZlbnRzLnRyaWdnZXJzLm91dHJvKGksIGVsKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KGVsLCAnQ09NUE9ORU5UX0lOQUNUSVZFJyk7XG4gIH0sXG59O1xuXG5hcGkudHJpZ2dlcnMgPSB7fTtcblxuYXBpLnR5cGVzID0ge1xuICBJTlRSTzogJ3ctaXgtaW50cm8nICsgbmFtZXNwYWNlLFxuICBPVVRSTzogJ3ctaXgtb3V0cm8nICsgbmFtZXNwYWNlLFxufTtcblxuJC5leHRlbmQoYXBpLnRyaWdnZXJzLCBldmVudFRyaWdnZXJzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBhcGk7XG4iXSwibmFtZXMiOlsiSVhFdmVudHMiLCJyZXF1aXJlIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImVsZW1lbnQiLCJldmVudE5hbWUiLCJldmVudCIsImRvY3VtZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0Q3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiJCIsIndpbmRvdyIsImpRdWVyeSIsImFwaSIsIm5hbWVzcGFjZSIsImV2ZW50VHJpZ2dlcnMiLCJyZXNldCIsImkiLCJlbCIsInRyaWdnZXJzIiwiaW50cm8iLCJvdXRybyIsInR5cGVzIiwiSU5UUk8iLCJPVVRSTyIsImV4dGVuZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QixHQUU1QjtBQUNBLElBQUlBLFdBQVdDLFFBQVE7QUFFdkIsU0FBU0Msb0JBQW9CQyxPQUFPLEVBQUVDLFNBQVM7SUFDN0MsSUFBSUMsUUFBUUMsU0FBU0MsV0FBVyxDQUFDO0lBQ2pDRixNQUFNRyxlQUFlLENBQUNKLFdBQVcsTUFBTSxNQUFNO0lBQzdDRCxRQUFRTSxhQUFhLENBQUNKO0FBQ3hCO0FBRUE7O0NBRUMsR0FFRCxJQUFJSyxJQUFJQyxPQUFPQyxNQUFNO0FBQ3JCLElBQUlDLE1BQU0sQ0FBQztBQUNYLElBQUlDLFlBQVk7QUFFaEIsSUFBSUMsZ0JBQWdCO0lBQ2xCQyxPQUFPLFNBQVVDLENBQUMsRUFBRUMsRUFBRTtRQUNwQmxCLFNBQVNtQixRQUFRLENBQUNILEtB
10096QUssQ0FBQ0MsR0FBR0M7SUFDN0I7SUFDQUUsT0FBTyxTQUFVSCxDQUFDLEVBQUVDLEVBQUU7UUFDcEJsQixTQUFTbUIsUUFBUSxDQUFDQyxLQUFLLENBQUNILEdBQUdDO1FBQzNCaEIsb0JBQW9CZ0IsSUFBSTtJQUMxQjtJQUNBRyxPQUFPLFNBQVVKLENBQUMsRUFBRUMsRUFBRTtRQUNwQmxCLFNBQVNtQixRQUFRLENBQUNFLEtBQUssQ0FBQ0osR0FBR0M7UUFDM0JoQixvQkFBb0JnQixJQUFJO0lBQzFCO0FBQ0Y7QUFFQUwsSUFBSU0sUUFBUSxHQUFHLENBQUM7QUFFaEJOLElBQUlTLEtBQUssR0FBRztJQUNWQyxPQUFPLGVBQWVUO0lBQ3RCVSxPQUFPLGVBQWVWO0FBQ3hCO0FBRUFKLEVBQUVlLE1BQU0sQ0FBQ1osSUFBSU0sUUFBUSxFQUFFSjtBQUV2QlcsT0FBT0MsT0FBTyxHQUFHZCJ9
10097
10098}),
10099"941": (function (module, __unused_webpack_exports, __webpack_require__) {
10100"use strict";
10101/**
10102 * Webflow: Interactions 2
10103 */ 
10104var Webflow = __webpack_require__(3949);
10105var ix2 = __webpack_require__(6011);
10106ix2.setEnv(Webflow.env);
10107Webflow.define('ix2', module.exports = function() {
10108    return ix2;
10109});
10110
10111//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctaXgyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViZmxvdzogSW50ZXJhY3Rpb25zIDJcbiAqL1xudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG52YXIgaXgyID0gcmVxdWlyZSgnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZScpO1xuXG5peDIuc2V0RW52KFdlYmZsb3cuZW52KTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdpeDInLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGl4MjtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJpeDIiLCJzZXRFbnYiLCJlbnYiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Q0FFQztBQUNELElBQUlBLFVBQVVDLFFBQVE7QUFDdEIsSUFBSUMsTUFBTUQsUUFBUTtBQUVsQkMsSUFBSUMsTUFBTSxDQUFDSCxRQUFRSSxHQUFHO0FBRXRCSixRQUFRSyxNQUFNLENBQ1osT0FDQ0MsT0FBT0MsT0FBTyxHQUFHO0lBQ2hCLE9BQU9MO0FBQ1QifQ==
10112
10113}),
10114"3949": (function (module, __unused_webpack_exports, __webpack_require__) {
10115"use strict";
10116/* globals window, document, navigator, WEBFLOW_ENV_TEST */ /**
10117 * Webflow: Core site library
10118 */ 
10119var Webflow = {};
10120var modules = {};
10121var primary = [];
10122var secondary = window.Webflow || [];
10123var $ = window.jQuery;
10124var $win = $(window);
10125var $doc = $(document);
10126var isFunction = $.isFunction;
10127var _ = Webflow._ = __webpack_require__(5756);
10128var tram = Webflow.tram = __webpack_require__(5487) && $.tram;
10129var domready = false;
10130var destroyed = false;
10131tram.config.hideBackface = false;
10132tram.config.keepInherited = true;
10133/**
10134 * Webflow.define - Define a named module
10135 * @param  {string} name
10136 * @param  {function} factory
10137 * @param  {object} [options]
10138 * @return {object}
10139 */ Webflow.define = function(name, factory, options) {
10140    if (modules[name]) {
10141        unbindModule(modules[name]);
10142    }
10143    var instance = modules[name] = factory($, _, options) || {};
10144    bindModule(instance);
10145    return instance;
10146};
10147/**
10148 * Webflow.require - Require a named module
10149 * @param  {string} name
10150 * @return {object}
10151 */ Webflow.require = function(name) {
10152    return modules[name];
10153};
10154function bindModule(module1) {
10155    // If running in Webflow app, subscribe to design/preview events
10156    if (Webflow.env()) {
10157        isFunction(module1.design) && $win.on('__wf_design', module1.design);
10158        isFunction(module1.preview) && $win.on('__wf_preview', module1.preview);
10159    }
10160    // Subscribe to front-end destroy event
10161    isFunction(module1.destroy) && $win.on('__wf_destroy', module1.destroy);
10162    // Look for ready method on module
10163    if (module1.ready && isFunction(module1.ready)) {
10164        addReady(module1);
10165    }
10166}
10167function addReady(module1) {
10168    // If domready has already happened, run ready method
10169    if (domready) {
10170        module1.ready();
10171        return;
10172    }
10173    // Otherwise add ready method to the primary queue (only once)
10174    if (_.contains(primary, module1.ready)) {
10175        return;
10176    }
10177    primary.push(module1.ready);
10178}
10179function unbindModule(module1) {
10180    // Unsubscribe module from window events
10181    isFunction(module1.design) && $win.off('__wf_design', module1.design);
10182    isFunction(module1.preview) && $win.off('__wf_preview', module1.preview);
10183    isFunction(module1.destroy) && $win.off('__wf_destroy', module1.destroy);
10184    // Remove ready method from primary queue
10185    if (module1.ready && isFunction(module1.ready)) {
10186        removeReady(module1);
10187    }
10188}
10189function removeReady(module1) {
10190    primary = _.filter(primary, function(readyFn) {
10191        return readyFn !== module1.ready;
10192    });
10193}
10194/**
10195 * Webflow.push - Add a ready handler into secondary queue
10196 * @param {function} ready  Callback to invoke on domready
10197 */ Webflow.push = function(ready) {
10198    // If domready has already happened, invoke handler
10199    if (domready) {
10200        isFunction(ready) && ready();
10201        return;
10202    }
10203    // Otherwise push into secondary queue
10204    secondary.push(ready);
10205};
10206/**
10207 * Webflow.env - Get the state of the Webflow app
10208 * @param {string} mode [optional]
10209 * @return {boolean}
10210 */ Webflow.env = function(mode) {
10211    var designFlag = window.__wf_design;
10212    var inApp = typeof designFlag !== 'undefined';
10213    if (!mode) {
10214        return inApp;
10215    }
10216    if (mode === 'design') {
10217        return inApp && designFlag;
10218    }
10219    if (mode === 'preview') {
10220        return inApp && !designFlag;
10221    }
10222    if (mode === 'slug') {
10223        return inApp && window.__wf_slug;
10224    }
10225    if (mode === 'editor') {
10226        return window.WebflowEditor;
10227    }
10228    if (mode === 'test') {
10229        return  false || window.__wf_test;
10230    }
10231    if (mode === 'frame') {
10232        return window !== window.top;
10233    }
10234};
10235// Feature detects + browser sniffs  ಠ_ಠ
10236var userAgent = navigator.userAgent.toLowerCase();
10237var touch = Webflow.env.touch = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;
10238var chrome = Webflow.env.chrome = /chrome/.test(userAgent) && /Google/.test(navigator.vendor) && parseInt(userAgent.match(/chrome\/(\d+)\./)[1], 10);
10239var ios = Webflow.env.ios = /(ipod|iphone|ipad)/.test(userAgent);
10240Webflow.env.safari = /safari/.test(userAgent) && !chrome && !ios;
10241// Maintain current touch target to prevent late clicks on touch devices
10242var touchTarget;
10243// Listen for both events to support touch/mouse hybrid devices
10244touch && $doc.on('touchstart mousedown', function(evt) {
10245    touchTarget = evt.target;
10246});
10247/**
10248 * Webflow.validClick - validate click target against current touch target
10249 * @param  {HTMLElement} clickTarget  Element being clicked
10250 * @return {Boolean}  True if click target is valid (always true on non-touch)
10251 */ Webflow.validClick = touch ? function(clickTarget) {
10252    return clickTarget === touchTarget || $.contains(clickTarget, touchTarget);
10253} : function() {
10254    return true;
10255};
10256/**
10257 * Webflow.resize, Webflow.scroll - throttled event proxies
10258 */ var resizeEvents = 'resize.webflow orientationchange.webflow load.webflow';
10259var scrollEvents = 'scroll.webflow ' + resizeEvents;
10260Webflow.resize = eventProxy($win, resizeEvents);
10261Webflow.scroll = eventProxy($win, scrollEvents);
10262Webflow.redraw = eventProxy();
10263// Create a proxy instance for throttled events
10264function eventProxy(target, types) {
10265    // Set up throttled method (using custom frame-based _.throttle)
10266    var handlers = [];
10267    var proxy = {};
10268    proxy.up = _.throttle(function(evt) {
10269        _.each(handlers, function(h) {
10270            h(evt);
10271        });
10272    });
10273    // Bind events to target
10274    if (target && types) {
10275        target.on(types, proxy.up);
10276    }
10277    /**
10278   * Add an event handler
10279   * @param  {function} handler
10280   */ proxy.on = function(handler) {
10281        if (typeof handler !== 'function') {
10282            return;
10283        }
10284        if (_.contains(handlers, handler)) {
10285            return;
10286        }
10287        handlers.push(handler);
10288    };
10289    /**
10290   * Remove an event handler
10291   * @param  {function} handler
10292   */ proxy.off = function(handler) {
10293        // If no arguments supplied, clear all handlers
10294        if (!arguments.length) {
10295            handlers = [];
10296            return;
10297        }
10298        // Otherwise, remove handler from the list
10299        handlers = _.filter(handlers, function(h) {
10300            return h !== handler;
10301        });
10302    };
10303    return proxy;
10304}
10305// Webflow.location - Wrap window.location in api
10306Webflow.location = function(url) {
10307    window.location = url;
10308};
10309if (Webflow.env()) {
10310    // Ignore redirects inside a Webflow design/edit environment
10311    Webflow.location = function() {};
10312}
10313// Webflow.ready - Call primary and secondary handlers
10314Webflow.ready = function() {
10315    domready = true;
10316    // Restore modules after destroy
10317    if (destroyed) {
10318        restoreModules();
10319    // Otherwise run primary ready methods
10320    } else {
10321        _.each(primary, callReady);
10322    }
10323    // Run secondary ready methods
10324    _.each(secondary, callReady);
10325    // Trigger resize
10326    Webflow.resize.up();
10327};
10328function callReady(readyFn) {
10329    isFunction(readyFn) && readyFn();
10330}
10331function restoreModules() {
10332    destroyed = false;
10333    _.each(modules, bindModule);
10334}
10335/**
10336 * Webflow.load - Add a window load handler that will run even if load event has already happened
10337 * @param  {function} handler
10338 */ var deferLoad;
10339Webflow.load = function(handler) {
10340    deferLoad.then(handler);
10341};
10342function bindLoad() {
10343    // Reject any previous deferred (to support destroy)
10344    if (deferLoad) {
10345        deferLoad.reject();
10346        $win.off('load', deferLoad.resolve);
10347    }
10348    // Create deferred and bind window load event
10349    deferLoad = new $.Deferred();
10350    $win.on('load', deferLoad.resolve);
10351}
10352// Webflow.destroy - Trigger a destroy event for all modules
10353Webflow.destroy = function(options) {
10354    options = options || {};
10355    destroyed = true;
10356    $win.triggerHandler('__wf_destroy');
10357    // Allow domready reset for tests
10358    if (options.domready != null) {
10359        domready = options.domready;
10360    }
10361    // Unbind modules
10362    _.each(modules, unbindModule);
10363    // Clear any proxy event handlers
10364    Webflow.resize.off();
10365    Webflow.scroll.off();
10366    Webflow.redraw.off();
10367    // Clear any queued ready methods
10368    primary = [];
10369    secondary = [];
10370    // If load event has not yet fired, replace the deferred
10371    if (deferLoad.state() === 'pending') {
10372        bindLoad();
10373    }
10374};
10375// Listen for domready
10376$(Webflow.ready);
10377// Listen for window.onload and resolve deferred
10378bindLoad();
10379// Export commonjs module
10380module.exports = window.Webflow = Webflow;
10381
10382//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbGliLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCwgbmF2aWdhdG9yLCBXRUJGTE9XX0VOVl9URVNUICovXG5cbi8qKlxuICogV2ViZmxvdzogQ29yZSBzaXRlIGxpYnJhcnlcbiAqL1xudmFyIFdlYmZsb3cgPSB7fTtcbnZhciBtb2R1bGVzID0ge307XG52YXIgcHJpbWFyeSA9IFtdO1xudmFyIHNlY29uZGFyeSA9IHdpbmRvdy5XZWJmbG93IHx8IFtdO1xudmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyICR3aW4gPSAkKHdpbmRvdyk7XG52YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xudmFyIGlzRnVuY3Rpb24gPSAkLmlzRnVuY3Rpb247XG52YXIgXyA9IChXZWJmbG93Ll8gPSByZXF1aXJlKCcuL3VuZGVyc2NvcmUtY3VzdG9tJykpO1xudmFyIHRyYW0gPSAoV2ViZmxvdy50cmFtID0gcmVxdWlyZSgnLi90cmFtLW1pbicpICYmICQudHJhbSk7XG52YXIgZG9tcmVhZHkgPSBmYWxzZTtcbnZhciBkZXN0cm95ZWQgPSBmYWxzZTtcblxudHJhbS5jb25maWcuaGlkZUJhY2tmYWNlID0gZmFsc2U7XG50cmFtLmNvbmZpZy5rZWVwSW5oZXJpdGVkID0gdHJ1ZTtcblxuLyoqXG4gKiBXZWJmbG93LmRlZmluZSAtIERlZmluZSBhIG5hbWVkIG1vZHVsZVxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZmFjdG9yeVxuICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuV2ViZmxvdy5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZmFjdG9yeSwgb3B0aW9ucykge1xuICBpZiAobW9kdWxlc1tuYW1lXSkge1xuICAgIHVuYmluZE1vZHVsZShtb2R1bGVzW25hbWVdKTtcbiAgfVxuICB2YXIgaW5zdGFuY2UgPSAobW9kdWxlc1tuYW1lXSA9IGZhY3RvcnkoJCwgXywgb3B0aW9ucykgfHwge30pO1xuICBiaW5kTW9kdWxlKGluc3RhbmNlKTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufTtcblxuLyoqXG4gKiBXZWJmbG93LnJlcXVpcmUgLSBSZXF1aXJlIGEgbmFtZWQgbW9kdWxlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuV2ViZmxvdy5yZXF1aXJlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG1vZHVsZXNbbmFtZV07XG59O1xuXG5mdW5jdGlvbiBiaW5kTW9kdWxlKG1vZHVsZSkge1xuICAvLyBJZiBydW5uaW5nIGluIFdlYmZsb3cgYXBwLCBzdWJzY3JpYmUgdG8gZGVzaWduL3ByZXZpZXcgZXZlbnRzXG4gIGlmIChXZWJmbG93LmVudigpKSB7XG4gICAgaXNGdW5jdGlvbihtb2R1bGUuZGVzaWduKSAmJiAkd2luLm9uKCdfX3dmX2Rlc2lnbicsIG1vZHVsZS5kZXNpZ24pO1xuICAgIGlzRnVuY3Rpb24obW9kdWxlLnByZXZpZXcpICYmICR3aW4ub24oJ19fd2ZfcHJldmlldycsIG1vZHVsZS5wcmV2aWV3KTtcbiAgfVxuICAvLyBTdWJzY3JpYmUgdG8gZnJvbnQtZW5kIGRlc3Ryb3kgZXZlbnRcbiAgaXNGdW5jdGlvbihtb2R1bGUuZGVzdHJveSkgJiYgJHdpbi5vb
10382ignX193Zl9kZXN0cm95JywgbW9kdWxlLmRlc3Ryb3kpO1xuICAvLyBMb29rIGZvciByZWFkeSBtZXRob2Qgb24gbW9kdWxlXG4gIGlmIChtb2R1bGUucmVhZHkgJiYgaXNGdW5jdGlvbihtb2R1bGUucmVhZHkpKSB7XG4gICAgYWRkUmVhZHkobW9kdWxlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSZWFkeShtb2R1bGUpIHtcbiAgLy8gSWYgZG9tcmVhZHkgaGFzIGFscmVhZHkgaGFwcGVuZWQsIHJ1biByZWFkeSBtZXRob2RcbiAgaWYgKGRvbXJlYWR5KSB7XG4gICAgbW9kdWxlLnJlYWR5KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE90aGVyd2lzZSBhZGQgcmVhZHkgbWV0aG9kIHRvIHRoZSBwcmltYXJ5IHF1ZXVlIChvbmx5IG9uY2UpXG4gIGlmIChfLmNvbnRhaW5zKHByaW1hcnksIG1vZHVsZS5yZWFkeSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbWFyeS5wdXNoKG1vZHVsZS5yZWFkeSk7XG59XG5cbmZ1bmN0aW9uIHVuYmluZE1vZHVsZShtb2R1bGUpIHtcbiAgLy8gVW5zdWJzY3JpYmUgbW9kdWxlIGZyb20gd2luZG93IGV2ZW50c1xuICBpc0Z1bmN0aW9uKG1vZHVsZS5kZXNpZ24pICYmICR3aW4ub2ZmKCdfX3dmX2Rlc2lnbicsIG1vZHVsZS5kZXNpZ24pO1xuICBpc0Z1bmN0aW9uKG1vZHVsZS5wcmV2aWV3KSAmJiAkd2luLm9mZignX193Zl9wcmV2aWV3JywgbW9kdWxlLnByZXZpZXcpO1xuICBpc0Z1bmN0aW9uKG1vZHVsZS5kZXN0cm95KSAmJiAkd2luLm9mZignX193Zl9kZXN0cm95JywgbW9kdWxlLmRlc3Ryb3kpO1xuICAvLyBSZW1vdmUgcmVhZHkgbWV0aG9kIGZyb20gcHJpbWFyeSBxdWV1ZVxuICBpZiAobW9kdWxlLnJlYWR5ICYmIGlzRnVuY3Rpb24obW9kdWxlLnJlYWR5KSkge1xuICAgIHJlbW92ZVJlYWR5KG1vZHVsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVhZHkobW9kdWxlKSB7XG4gIHByaW1hcnkgPSBfLmZpbHRlcihwcmltYXJ5LCBmdW5jdGlvbiAocmVhZHlGbikge1xuICAgIHJldHVybiByZWFkeUZuICE9PSBtb2R1bGUucmVhZHk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdlYmZsb3cucHVzaCAtIEFkZCBhIHJlYWR5IGhhbmRsZXIgaW50byBzZWNvbmRhcnkgcXVldWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlYWR5ICBDYWxsYmFjayB0byBpbnZva2Ugb24gZG9tcmVhZHlcbiAqL1xuV2ViZmxvdy5wdXNoID0gZnVuY3Rpb24gKHJlYWR5KSB7XG4gIC8vIElmIGRvbXJlYWR5IGhhcyBhbHJlYWR5IGhhcHBlbmVkLCBpbnZva2UgaGFuZGxlclxuICBpZiAoZG9tcmVhZHkpIHtcbiAgICBpc0Z1bmN0aW9uKHJlYWR5KSAmJiByZWFkeSgpO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBPdGhlcndpc2UgcHVzaCBpbnRvIHNlY29uZGFyeSBxdWV1ZVxuICBzZWNvbmRhcnkucHVzaChyZWFkeSk7XG59O1xuXG4vKipcbiAqIFdlYmZsb3cuZW52IC0gR2V0IHRoZSBzdGF0ZSBvZiB0aGUgV2ViZmxvdyBhcHBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIFtvcHRpb25hbF1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbldlYmZsb3cuZW52ID0gZnVuY3Rpb24gKG1vZGUpIHtcbiAgdmFyIGRlc2lnbkZsYWcgPSB3aW5kb3cuX193Zl9kZXNpZ247XG4gIHZhciBpbkFwcCA9IHR5cGVvZiBkZXNpZ25GbGFnICE9PSAndW5kZWZpbmVkJztcbiAgaWYgKCFtb2RlKSB7XG4gICAgcmV0dXJuIGluQXBwO1xuICB9XG4gIGlmIChtb2RlID09PSAnZGVzaWduJykge1xuICAgIHJldHVybiBpbkFwcCAmJiBkZXNpZ25GbGFnO1xuICB9XG4gIGlmIChtb2RlID09PSAncHJldmlldycpIHtcbiAgICByZXR1cm4gaW5BcHAgJiYgIWRlc2lnbkZsYWc7XG4gIH1cbiAgaWYgKG1vZGUgPT09ICdzbHVnJykge1xuICAgIHJldHVybiBpbkFwcCAmJiB3aW5kb3cuX193Zl9zbHVnO1xuICB9XG4gIGlmIChtb2RlID09PSAnZWRpdG9yJykge1xuICAgIHJldHVybiB3aW5kb3cuV2ViZmxvd0VkaXRvcjtcbiAgfVxuICBpZiAobW9kZSA9PT0gJ3Rlc3QnKSB7XG4gICAgcmV0dXJuIFdFQkZMT1dfRU5WX1RFU1QgfHwgd2luZG93Ll9fd2ZfdGVzdDtcbiAgfVxuICBpZiAobW9kZSA9PT0gJ2ZyYW1lJykge1xuICAgIHJldHVybiB3aW5kb3cgIT09IHdpbmRvdy50b3A7XG4gIH1cbn07XG5cbi8vIEZlYXR1cmUgZGV0ZWN0cyArIGJyb3dzZXIgc25pZmZzICDgsqBf4LKgXG5cbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgdG91Y2ggPSAoV2ViZmxvdy5lbnYudG91Y2ggPVxuICAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHxcbiAgKHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpKTtcbnZhciBjaHJvbWUgPSAoV2ViZmxvdy5lbnYuY2hyb21lID1cbiAgL2Nocm9tZS8udGVzdCh1c2VyQWdlbnQpICYmXG4gIC9Hb29nbGUvLnRlc3QobmF2aWdhdG9yLnZlbmRvcikgJiZcbiAgcGFyc2VJbnQodXNlckFnZW50Lm1hdGNoKC9jaHJvbWVcXC8oXFxkKylcXC4vKVsxXSwgMTApKTtcbnZhciBpb3MgPSAoV2ViZmxvdy5lbnYuaW9zID0gLyhpcG9kfGlwaG9uZXxpcGFkKS8udGVzdCh1c2VyQWdlbnQpKTtcbldlYmZsb3cuZW52LnNhZmFyaSA9IC9zYWZhcmkvLnRlc3QodXNlckFnZW50KSAmJiAhY2hyb21lICYmICFpb3M7XG5cbi8vIE1haW50YWluIGN1cnJlbnQgdG91Y2ggdGFyZ2V0IHRvIHByZXZlbnQgbGF0ZSBjbGlja3Mgb24gdG91Y2ggZGV2aWNlc1xudmFyIHRvdWNoVGFyZ2V0O1xuLy8gTGlzdGVuIGZvciBib3RoIGV2ZW50cyB0byBzdXBwb3J0IHRvdWNoL21vdXNlIGh5YnJpZCBkZXZpY2VzXG50b3VjaCAmJlxuICAkZG9jLm9uKCd0b3VjaHN0YXJ0IG1vdXNlZG93bicsIGZ1bmN0aW9uIChldnQpIHtcbiAgICB0b3VjaFRhcmdldCA9IGV2dC50YXJnZXQ7XG4gIH0pO1xuXG4vKipcbiAqIFdlYmZsb3cudmFsaWRDbGljayAtIHZhbGlkYXRlIGNsaWNrIHRhcmdldCBhZ2FpbnN0IGN1cnJlbnQgdG91Y2ggdGFyZ2V0XG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gY2xpY2tUYXJnZXQgIEVsZW1lbnQgYmVpbmcgY2xpY2tlZFxuICogQHJldHVybiB7Qm9vbGVhbn0gIFRydWUgaWYgY2xpY2sgdGFyZ2V0IGlzIHZhbGlkIChhbHdheXMgdHJ1ZSBvbiBub24tdG91Y2gpXG4gKi9cbldlYmZsb3cudmFsaWRDbGljayA9IHRvdWNoXG4gID8gZnVuY3Rpb24gKGNsaWNrVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjbGlja1RhcmdldCA9PT0gdG91Y2hUYXJnZXQgfHwgJC5jb250YWlucyhjbGlja1RhcmdldCwgdG91Y2hUYXJnZXQpXG4gICAgICApO1xuICAgIH1cbiAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4vKipcbiAqIFdlYmZsb3cucmVzaXplLCBXZWJmbG93LnNjcm9sbCAtIHRocm90dGxlZCBldmVudCBwcm94aWVzXG4gKi9cblxudmFyIHJlc2l6ZUV2ZW50cyA9ICdyZXNpemUud2ViZmxvdyBvcmllbnRhdGlvbmNoYW5nZS53ZWJmbG93IGxvYWQud2ViZmxvdyc7XG52YXIgc2Nyb2xsRXZlbnRzID0gJ3Njcm9sbC53ZWJmbG93ICcgKyByZXNpemVFdmVudHM7XG5XZWJmbG93LnJlc2l6ZSA9IGV2ZW50UHJveHkoJHdpbiwgcmVzaXplRXZlbnRzKTtcbldlYmZsb3cuc2Nyb2xsID0gZXZlbnRQcm94eSgkd2luLCBzY3JvbGxFdmVudHMpO1xuV2ViZmxvdy5yZWRyYXcgPSBldmVudFByb3h5KCk7XG5cbi8vIENyZWF0ZSBhIHByb3h5IGluc3RhbmNlIGZvciB0aHJvdHRsZWQgZXZlbnRzXG5mdW5jdGlvbiBldmVudFByb3h5KHRhcmdldCwgdHlwZXMpIHtcbiAgLy8gU2V0IHVwIHRocm90dGxlZCBtZXRob2QgKHVzaW5nIGN1c3RvbSBmcmFtZS1iYXNlZCBfLnRocm90dGxlKVxuXG4gIHZhciBoYW5kbGVycyA9IFtdO1xuICB2YXIgcHJveHkgPSB7fTtcbiAgcHJveHkudXAgPSBfLnRocm90dGxlKGZ1bmN0aW9uIChldnQpIHtcbiAgICBfLmVhY2goaGFuZGxlcnMsIGZ1bmN0aW9uIChoKSB7XG4gICAgICBoKGV2dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEJpbmQgZXZlbnRzIHRvIHRhcmdldFxuICBpZiAodGFyZ2V0ICYmIHR5cGVzKSB7XG4gICAgdGFyZ2V0Lm9uKHR5cGVzLCBwcm94eS51cCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGhhbmRsZXJcbiAgICogQHBhcmFtICB7ZnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG4gIHByb3h5Lm9uID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uY29udGFpbnMoaGFuZGxlcnMsIGhhbmRsZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyXG4gICAqIEBwYXJhbSAge2Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqL1xuICBwcm94eS5vZmYgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgIC8vIElmIG5vIGFyZ3VtZW50cyBzdXBwbGllZCwgY2xlYXIgYWxsIGhhbmRsZXJzXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVycyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHJlbW92ZSBoYW5kbGVyIGZyb20gdGhlIGxpc3RcbiAgICBoYW5kbGVycyA9IF8uZmlsdGVyKGhhbmRsZXJzLCBmdW5jdGlvbiAoaCkge1xuICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIHByb3h5O1xufVxuXG4vLyBXZWJmbG93LmxvY2F0aW9uIC0gV3JhcCB3aW5kb3cubG9jYXRpb24gaW4gYXBpXG5XZWJmbG93LmxvY2F0aW9uID0gZnVuY3Rpb24gKHVybCkge1xuICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XG59O1xuXG5pZiAoV2ViZmxvdy5lbnYoKSkge1xuICAvLyBJZ25vcmUgcmVkaXJlY3RzIGluc2lkZSBhIFdlYmZsb3cgZGVzaWduL2VkaXQgZW52aXJvbm1lbnRcbiAgV2ViZmxvdy5sb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHt9O1xufVxuXG4vLyBXZWJmbG93LnJlYWR5IC0gQ2FsbCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgaGFuZGxlcnNcbldlYmZsb3cucmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gIGRvbXJlYWR5ID0gdHJ1ZTtcblxuICAvLyBSZXN0b3JlIG1vZHVsZXMgYWZ0ZXIgZGVzdHJveVxuICBpZiAoZGVzdHJveWVkKSB7XG4gICAgcmVzdG9yZU1vZHVsZXMoKTtcblxuICAgIC8vIE90aGVyd2lzZSBydW4gcHJpbWFyeSByZWFkeSBtZXRob2RzXG4gIH0gZWxzZSB7XG4gICAgXy5lYWNoKHByaW1hcnksIGNhbGxSZWFkeSk7XG4gIH1cblxuICAvLyBSdW4gc2Vjb25kYXJ5IHJlYWR5IG1ldGhvZHNcbiAgXy5lYWNoKHNlY29uZGFyeSwgY2FsbFJlYWR5KTtcblxuICAvLyBUcmlnZ2VyIHJlc2l6ZVxuICBXZWJmbG93LnJlc2l6ZS51cCgpO1xufTtcblxuZnVuY3Rpb24gY2FsbFJlYWR5KHJlYWR5Rm4pIHtcbiAgaXNGdW5jdGlvbihyZWFkeUZuKSAmJiByZWFkeUZuKCk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVNb2R1bGVzKCkge1xuICBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgXy5lYWNoKG1vZHVsZXMsIGJpbmRNb2R1bGUpO1xufVxuXG4vKipcbiAqIFdlYmZsb3cubG9hZCAtIEFkZCBhIHdpbmRvdyBsb2FkIGhhbmRsZXIgdGhhdCB3aWxsIHJ1biBldmVuIGlmIGxvYWQgZXZlbnQgaGFzIGFscmVhZHkgaGFwcGVuZWRcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cbnZhciBkZWZlckxvYWQ7XG5XZWJmbG93LmxvYWQgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICBkZWZlckxvYWQudGhlbihoYW5kbGVyKTtcbn07XG5cbmZ1bmN0aW9uIGJpbmRMb2FkKCkge1xuICAvLyBSZWplY3QgYW55IHByZXZpb3VzIGRlZmVycmVkICh0byBzdXBwb3J0IGRlc3Ryb3kpXG4gIGlmIChkZWZlckxvYWQpIHtcbiAgICBkZWZlckxvYWQucmVqZWN0KCk7XG4gICAgJHdpbi5vZmYoJ2xvYWQnLCBkZWZlckxvYWQucmVzb2x2ZSk7XG4gIH1cbiAgLy8gQ3JlYXRlIGRlZmVycmVkIGFuZCBiaW5kIHdpbmRvdyBsb2FkIGV2ZW50XG4gIGRlZmVyTG9hZCA9IG5ldyAkLkRlZmVycmVkKCk7XG4gICR3aW4ub24oJ2xvYWQnLCBkZWZlckxvYWQucmVzb2x2ZSk7XG59XG5cbi8vIFdlYmZsb3cuZGVzdHJveSAtIFRyaWdnZXIgYSBkZXN0cm95IGV2ZW50IGZvciBhbGwgbW9kdWxlc1xuV2ViZmxvdy5kZXN0cm95ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGRlc3Ryb3llZCA9IHRydWU7XG4gICR3aW4udHJpZ2dlck
10382hhbmRsZXIoJ19fd2ZfZGVzdHJveScpO1xuXG4gIC8vIEFsbG93IGRvbXJlYWR5IHJlc2V0IGZvciB0ZXN0c1xuICBpZiAob3B0aW9ucy5kb21yZWFkeSAhPSBudWxsKSB7XG4gICAgZG9tcmVhZHkgPSBvcHRpb25zLmRvbXJlYWR5O1xuICB9XG5cbiAgLy8gVW5iaW5kIG1vZHVsZXNcbiAgXy5lYWNoKG1vZHVsZXMsIHVuYmluZE1vZHVsZSk7XG5cbiAgLy8gQ2xlYXIgYW55IHByb3h5IGV2ZW50IGhhbmRsZXJzXG4gIFdlYmZsb3cucmVzaXplLm9mZigpO1xuICBXZWJmbG93LnNjcm9sbC5vZmYoKTtcbiAgV2ViZmxvdy5yZWRyYXcub2ZmKCk7XG5cbiAgLy8gQ2xlYXIgYW55IHF1ZXVlZCByZWFkeSBtZXRob2RzXG4gIHByaW1hcnkgPSBbXTtcbiAgc2Vjb25kYXJ5ID0gW107XG5cbiAgLy8gSWYgbG9hZCBldmVudCBoYXMgbm90IHlldCBmaXJlZCwgcmVwbGFjZSB0aGUgZGVmZXJyZWRcbiAgaWYgKGRlZmVyTG9hZC5zdGF0ZSgpID09PSAncGVuZGluZycpIHtcbiAgICBiaW5kTG9hZCgpO1xuICB9XG59O1xuXG4vLyBMaXN0ZW4gZm9yIGRvbXJlYWR5XG4kKFdlYmZsb3cucmVhZHkpO1xuXG4vLyBMaXN0ZW4gZm9yIHdpbmRvdy5vbmxvYWQgYW5kIHJlc29sdmUgZGVmZXJyZWRcbmJpbmRMb2FkKCk7XG5cbi8vIEV4cG9ydCBjb21tb25qcyBtb2R1bGVcbm1vZHVsZS5leHBvcnRzID0gd2luZG93LldlYmZsb3cgPSBXZWJmbG93O1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJtb2R1bGVzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsIndpbmRvdyIsIiQiLCJqUXVlcnkiLCIkd2luIiwiJGRvYyIsImRvY3VtZW50IiwiaXNGdW5jdGlvbiIsIl8iLCJyZXF1aXJlIiwidHJhbSIsImRvbXJlYWR5IiwiZGVzdHJveWVkIiwiY29uZmlnIiwiaGlkZUJhY2tmYWNlIiwia2VlcEluaGVyaXRlZCIsImRlZmluZSIsIm5hbWUiLCJmYWN0b3J5Iiwib3B0aW9ucyIsInVuYmluZE1vZHVsZSIsImluc3RhbmNlIiwiYmluZE1vZHVsZSIsIm1vZHVsZSIsImVudiIsImRlc2lnbiIsIm9uIiwicHJldmlldyIsImRlc3Ryb3kiLCJyZWFkeSIsImFkZFJlYWR5IiwiY29udGFpbnMiLCJwdXNoIiwib2ZmIiwicmVtb3ZlUmVhZHkiLCJmaWx0ZXIiLCJyZWFkeUZuIiwibW9kZSIsImRlc2lnbkZsYWciLCJfX3dmX2Rlc2lnbiIsImluQXBwIiwiX193Zl9zbHVnIiwiV2ViZmxvd0VkaXRvciIsIldFQkZMT1dfRU5WX1RFU1QiLCJfX3dmX3Rlc3QiLCJ0b3AiLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJ0b0xvd2VyQ2FzZSIsInRvdWNoIiwiRG9jdW1lbnRUb3VjaCIsIm
10382Nocm9tZSIsInRlc3QiLCJ2ZW5kb3IiLCJwYXJzZUludCIsIm1hdGNoIiwiaW9zIiwic2FmYXJpIiwidG91Y2hUYXJnZXQiLCJldnQiLCJ0YXJnZXQiLCJ2YWxpZENsaWNrIiwiY2xpY2tUYXJnZXQiLCJyZXNpemVFdmVudHMiLCJzY3JvbGxFdmVudHMiLCJyZXNpemUiLCJldmVudFByb3h5Iiwic2Nyb2xsIiwicmVkcmF3IiwidHlwZXMiLCJoYW5kbGVycyIsInByb3h5IiwidXAiLCJ0aHJvdHRsZSIsImVhY2giLCJoIiwiaGFuZGxlciIsImFyZ3VtZW50cyIsImxlbmd0aCIsImxvY2F0aW9uIiwidXJsIiwicmVzdG9yZU1vZHVsZXMiLCJjYWxsUmVhZHkiLCJkZWZlckxvYWQiLCJsb2FkIiwidGhlbiIsImJpbmRMb2FkIiwicmVqZWN0IiwicmVzb2x2ZSIsIkRlZmVycmVkIiwidHJpZ2dlckhhbmRsZXIiLCJzdGF0ZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RCxHQUV6RDs7Q0FFQztBQUNELElBQUlBLFVBQVUsQ0FBQztBQUNmLElBQUlDLFVBQVUsQ0FBQztBQUNmLElBQUlDLFVBQVUsRUFBRTtBQUNoQixJQUFJQyxZQUFZQyxPQUFPSixPQUFPLElBQUksRUFBRTtBQUNwQyxJQUFJSyxJQUFJRCxPQUFPRSxNQUFNO0FBQ3JCLElBQUlDLE9BQU9GLEVBQUVEO0FBQ2IsSUFBSUksT0FBT0gsRUFBRUk7QUFDYixJQUFJQyxhQUFhTCxFQUFFSyxVQUFVO0FBQzdCLElBQUlDLElBQUtYLFFBQVFXLENBQUMsR0FBR0MsUUFBUTtBQUM3QixJQUFJQyxPQUFRYixRQUFRYSxJQUFJLEdBQUdELFFBQVEsaUJBQWlCUCxFQUFFUSxJQUFJO0FBQzFELElBQUlDLFdBQVc7QUFDZixJQUFJQyxZQUFZO0FBRWhCRixLQUFLRyxNQUFNLENBQUNDLFlBQVksR0FBRztBQUMzQkosS0FBS0csTUFBTSxDQUFDRSxhQUFhLEdBQUc7QUFFNUI7Ozs7OztDQU1DLEdBQ0RsQixRQUFRbUIsTUFBTSxHQ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
10383
10384}),
10385"7624": (function (module, __unused_webpack_exports, __webpack_require__) {
10386"use strict";
10387/* globals window, document */ /**
10388 * Webflow: Auto-select links to current page or section
10389 */ 
10390var Webflow = __webpack_require__(3949);
10391Webflow.define('links', module.exports = function($, _) {
10392    var api = {};
10393    var $win = $(window);
10394    var designer;
10395    var inApp = Webflow.env();
10396    var location = window.location;
10397    var tempLink = document.createElement('a');
10398    var linkCurrent = 'w--current';
10399    var indexPage = /index\.(html|php)$/;
10400    var dirList = /\/$/;
10401    var anchors;
10402    var slug;
10403    // -----------------------------------
10404    // Module methods
10405    api.ready = api.design = api.preview = init;
10406    // -----------------------------------
10407    // Private methods
10408    function init() {
10409        designer = inApp && Webflow.env('design');
10410        slug = Webflow.env('slug') || location.pathname || '';
10411        // Reset scroll listener, init anchors
10412        Webflow.scroll.off(scroll);
10413        anchors = [];
10414        // Test all links for a selectable href
10415        var links = document.links;
10416        for(var i = 0; i < links.length; ++i){
10417            select(links[i]);
10418        }
10419        // Listen for scroll if any anchors exist
10420        if (anchors.length) {
10421            Webflow.scroll.on(scroll);
10422            scroll();
10423        }
10424    }
10425    function select(link) {
10426        // Ignore localized links
10427        if (link.getAttribute('hreflang')) {
10428            return;
10429        }
10430        var href = designer && link.getAttribute('href-disabled') || link.getAttribute('href');
10431        tempLink.href = href;
10432        // Ignore any hrefs with a colon to safely avoid all uri schemes
10433        if (href.indexOf(':') >= 0) {
10434            return;
10435        }
10436        var $link = $(link);
10437        // Check for all links with hash (eg (this-host)(/this-path)#section) to this page
10438        if (tempLink.hash.length > 1 && tempLink.host + tempLink.pathname === location.host + location.pathname) {
10439            // Ignore any hrefs with Google Translate type hash
10440            // Example: jQuery can't parse $('#googtrans(en|es)')
10441            // https://forum.webflow.com/t/dropdown-menus-not-working-on-site/87140
10442            if (!/^#[a-zA-Z0-9\-\_]+$/.test(tempLink.hash)) {
10443                return;
10444            }
10445            var $section = $(tempLink.hash);
10446            $section.length && anchors.push({
10447                link: $link,
10448                sec: $section,
10449                active: false
10450            });
10451            return;
10452        }
10453        // Ignore empty # links
10454        if (href === '#' || href === '') {
10455            return;
10456        }
10457        // Determine whether the link should be selected
10458        var match = tempLink.href === location.href || href === slug || indexPage.test(href) && dirList.test(slug);
10459        setClass($link, linkCurrent, match);
10460    }
10461    function scroll() {
10462        var viewTop = $win.scrollTop();
10463        var viewHeight = $win.height();
10464        // Check each anchor for a section in view
10465        _.each(anchors, function(anchor) {
10466            // Ignore localized links
10467            if (anchor.link.attr('hreflang')) {
10468                return;
10469            }
10470            var $link = anchor.link;
10471            var $section = anchor.sec;
10472            var top = $section.offset().top;
10473            var height = $section.outerHeight();
10474            var offset = viewHeight * 0.5;
10475            var active = $section.is(':visible') && top + height - offset >= viewTop && top + offset <= viewTop + viewHeight;
10476            if (anchor.active === active) {
10477                return;
10478            }
10479            anchor.active = active;
10480            setClass($link, linkCurrent, active);
10481        });
10482    }
10483    function setClass($elem, className, add) {
10484        var exists = $elem.hasClass(className);
10485        if (add && exists) {
10486            return;
10487        }
10488        if (!add && !exists) {
10489            return;
10490        }
10491        add ? $elem.addClass(className) : $elem.removeClass(className);
10492    }
10493    // Export module
10494    return api;
10495});
10496
10497//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbGlua3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3csIGRvY3VtZW50ICovXG5cbi8qKlxuICogV2ViZmxvdzogQXV0by1zZWxlY3QgbGlua3MgdG8gY3VycmVudCBwYWdlIG9yIHNlY3Rpb25cbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdsaW5rcycsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkLCBfKSB7XG4gICAgdmFyIGFwaSA9IHt9O1xuICAgIHZhciAkd2luID0gJCh3aW5kb3cpO1xuICAgIHZhciBkZXNpZ25lcjtcbiAgICB2YXIgaW5BcHAgPSBXZWJmbG93LmVudigpO1xuICAgIHZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgdGVtcExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgdmFyIGxpbmtDdXJyZW50ID0gJ3ctLWN1cnJlbnQnO1xuICAgIHZhciBpbmRleFBhZ2UgPSAvaW5kZXhcXC4oaHRtbHxwaHApJC87XG4gICAgdmFyIGRpckxpc3QgPSAvXFwvJC87XG4gICAgdmFyIGFuY2hvcnM7XG4gICAgdmFyIHNsdWc7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE1vZHVsZSBtZXRob2RzXG5cbiAgICBhcGkucmVhZHkgPSBhcGkuZGVzaWduID0gYXBpLnByZXZpZXcgPSBpbml0O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBkZXNpZ25lciA9IGluQXBwICYmIFdlYmZsb3cuZW52KCdkZXNpZ24nKTtcbiAgICAgIHNsdWcgPSBXZWJmbG93LmVudignc2x1ZycpIHx8IGxvY2F0aW9uLnBhdGhuYW1lIHx8ICcnO1xuXG4gICAgICAvLyBSZXNldCBzY3JvbGwgbGlzdGVuZXIsIGluaXQgYW5jaG9yc1xuICAgICAgV2ViZmxvdy5zY3JvbGwub2ZmKHNjcm9sbCk7XG4gICAgICBhbmNob3JzID0gW107XG5cbiAgICAgIC8vIFRlc3QgYWxsIGxpbmtzIGZvciBhIHNlbGVjdGFibGUgaHJlZlxuICAgICAgdmFyIGxpbmtzID0gZG9jdW1lbnQubGlua3M7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgI
10497HNlbGVjdChsaW5rc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3RlbiBmb3Igc2Nyb2xsIGlmIGFueSBhbmNob3JzIGV4aXN0XG4gICAgICBpZiAoYW5jaG9ycy5sZW5ndGgpIHtcbiAgICAgICAgV2ViZmxvdy5zY3JvbGwub24oc2Nyb2xsKTtcbiAgICAgICAgc2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2VsZWN0KGxpbmspIHtcbiAgICAgIC8vIElnbm9yZSBsb2NhbGl6ZWQgbGlua3NcbiAgICAgIGlmIChsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZmxhbmcnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBocmVmID1cbiAgICAgICAgKGRlc2lnbmVyICYmIGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmLWRpc2FibGVkJykpIHx8XG4gICAgICAgIGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICB0ZW1wTGluay5ocmVmID0gaHJlZjtcblxuICAgICAgLy8gSWdub3JlIGFueSBocmVmcyB3aXRoIGEgY29sb24gdG8gc2FmZWx5IGF2b2lkIGFsbCB1cmkgc2NoZW1lc1xuICAgICAgaWYgKGhyZWYuaW5kZXhPZignOicpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgJGxpbmsgPSAkKGxpbmspO1xuXG4gICAgICAvLyBDaGVjayBmb3IgYWxsIGxpbmtzIHdpdGggaGFzaCAoZWcgKHRoaXMtaG9zdCkoL3RoaXMtcGF0aCkjc2VjdGlvbikgdG8gdGhpcyBwYWdlXG4gICAgICBpZiAoXG4gICAgICAgIHRlbXBMaW5rLmhhc2gubGVuZ3RoID4gMSAmJlxuICAgICAgICB0ZW1wTGluay5ob3N0ICsgdGVtcExpbmsucGF0aG5hbWUgPT09IGxvY2F0aW9uLmhvc3QgKyBsb2NhdGlvbi5wYXRobmFtZVxuICAgICAgKSB7XG4gICAgICAgIC8vIElnbm9yZSBhbnkgaHJlZnMgd2l0aCBHb29nbGUgVHJhbnNsYXRlIHR5cGUgaGFzaFxuICAgICAgICAvLyBFeGFtcGxlOiBqUXVlcnkgY2FuJ3QgcGFyc2UgJCgnI2dvb2d0cmFucyhlbnxlcyknKVxuICAgICAgICAvLyBodHRwczovL2ZvcnVtLndlYmZsb3cuY29tL3QvZHJvcGRvd24tbWVudXMtbm90LXdvcmtpbmctb24tc2l0ZS84NzE0MFxuICAgICAgICBpZiAoIS9eI1thLXpBLVowLTlcXC1cXF9dKyQvLnRlc3QodGVtcExpbmsuaGFzaCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2Y
10497XIgJHNlY3Rpb24gPSAkKHRlbXBMaW5rLmhhc2gpO1xuICAgICAgICAkc2VjdGlvbi5sZW5ndGggJiZcbiAgICAgICAgICBhbmNob3JzLnB1c2goe1xuICAgICAgICAgICAgbGluazogJGxpbmssXG4gICAgICAgICAgICBzZWM6ICRzZWN0aW9uLFxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZ25vcmUgZW1wdHkgIyBsaW5rc1xuICAgICAgaWYgKGhyZWYgPT09ICcjJyB8fCBocmVmID09PSAnJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRoZSBsaW5rIHNob3VsZCBiZSBzZWxlY3RlZFxuICAgICAgdmFyIG1hdGNoID1cbiAgICAgICAgdGVtcExpbmsuaHJlZiA9PT0gbG9jYXRpb24uaHJlZiB8fFxuICAgICAgICBocmVmID09PSBzbHVnIHx8XG4gICAgICAgIChpbmRleFBhZ2UudGVzdChocmVmKSAmJiBkaXJMaXN0LnRlc3Qoc2x1ZykpO1xuICAgICAgc2V0Q2xhc3MoJGxpbmssIGxpbmtDdXJyZW50LCBtYXRjaCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsKCkge1xuICAgICAgdmFyIHZpZXdUb3AgPSAkd2luLnNjcm9sbFRvcCgpO1xuICAgICAgdmFyIHZpZXdIZWlnaHQgPSAkd2luLmhlaWdodCgpO1xuXG4gICAgICAvLyBDaGVjayBlYWNoIGFuY2hvciBmb3IgYSBzZWN0aW9uIGluIHZpZXdcbiAgICAgIF8uZWFjaChhbmNob3JzLCBmdW5jdGlvbiAoYW5jaG9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBsb2NhbGl6ZWQgbGlua3NcbiAgICAgICAgaWYgKGFuY2hvci5saW5rLmF0dHIoJ2hyZWZsYW5nJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2Y
10497XIgJGxpbmsgPSBhbmNob3IubGluaztcbiAgICAgICAgdmFyICRzZWN0aW9uID0gYW5jaG9yLnNlYztcbiAgICAgICAgdmFyIHRvcCA9ICRzZWN0aW9uLm9mZnNldCgpLnRvcDtcbiAgICAgICAgdmFyIGhlaWdodCA9ICRzZWN0aW9uLm91dGVySGVpZ2h0KCk7XG4gICAgICAgIHZhciBvZmZzZXQgPSB2aWV3SGVpZ2h0ICogMC41O1xuICAgICAgICB2YXIgYWN0aXZlID1cbiAgICAgICAgICAkc2VjdGlvbi5pcygnOnZpc2libGUnKSAmJlxuICAgICAgICAgIHRvcCArIGhlaWdodCAtIG9mZnNldCA+PSB2aWV3VG9wICYmXG4gICAgICAgICAgdG9wICsgb2Zmc2V0IDw9IHZpZXdUb3AgKyB2aWV3SGVpZ2h0O1xuICAgICAgICBpZiAoYW5jaG9yLmFjdGl2ZSA9PT0gYWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvci5hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIHNldENsYXNzKCRsaW5rLCBsaW5rQ3VycmVudCwgYWN0aXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldENsYXNzKCRlbGVtLCBjbGFzc05hbWUsIGFkZCkge1xuICAgICAgdmFyIGV4aXN0cyA9ICRlbGVtLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG4gICAgICBpZiAoYWRkICYmIGV4aXN0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWFkZCAmJiAhZXhpc3RzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFkZCA/ICRlbGVtLmFkZENsYXNzKGNsYXNzTmFtZSkgOiAkZWxlbS5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwiXyIsImFwaSIsIiR3aW4iLCJ3aW5kb3ciLCJkZXNpZ25lciIsImluQXBwIiwiZW52IiwibG9jYXRpb24iLCJ0ZW1wTGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImxpbmtDdXJyZW50IiwiaW5kZXhQYWdlIiwiZGlyTGlzdCIsImFuY2hvcnMiLCJzbHVnIiwicmVhZHkiLCJkZXNpZ24iLCJwcmV2aWV3IiwiaW5pdCIsInBhdGhuYW1lIiwic2Nyb2xsIiwib2ZmIiwibGlua3MiLCJpIiwibGVuZ3RoIiwic2VsZWN0Iiwib24iLCJsaW5rIiwiZ2V0QXR0cmlidXRlIiwiaHJlZiIsImluZGV4T2YiLCIkbGluayIsImhhc2giLCJob3N0IiwidGVzdCIsIiRzZWN0aW9uIiwicHVzaCIsInNlYyIsImFjdGl2ZSIsIm1hdGNoIiwic2V0Q2xhc3MiLCJ2aWV3VG9wIiwic2Nyb2xsVG9wIiwidmlld0hlaWdodCIsImhlaWdodCIsImVhY2giLCJhbmNob3IiLCJhdHRyIiwidG9wIiwib2Zmc2V0Iiwib3V0ZXJIZWlnaHQiLCJpcyIsIiRlbGVtIiwiY2xhc3NOYW1lIiwiYWRkIiwiZXhpc3RzIiwiaGFzQ2xhc3MiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIl0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUMsRUFBRUMsQ0FBQztJQUM5QixJQUFJQyxNQUFNLENBQUM7SUFDWCxJQUFJQyxPQUFPSCxFQUFFSTtJQUNiLElBQUlDO0lBQ0osSUFBSUMsUUFBUVgsUUFBUVksR0FBRztJQUN2QixJQUFJQyxXQUFXSixPQUFPSSxRQUFRO0lBQzlCLElBQUlDLFdBQVdDLFNBQVNDLGFBQWEsQ0FBQztJQUN0QyxJQUFJQyxjQUFjO0lBQ2xCLElBQUlDLFlBQVk7SUFDaEIsSUFBSUMsVUFBVTtJQUNkLElBQUlDO0lBQ0osSUFB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
10498
10499}),
10500"286": (function (module, __unused_webpack_exports, __webpack_require__) {
10501"use strict";
10502/* globals window, document */ /**
10503 * Webflow: Smooth scroll
10504 */ 
10505var Webflow = __webpack_require__(3949);
10506Webflow.define('scroll', module.exports = function($) {
10507    /**
10508     * A collection of namespaced events found in this module.
10509     * Namespaced events encapsulate our code, and make it safer and easier
10510     * for designers to apply custom code overrides.
10511     * @see https://api.jquery.com/on/#event-names
10512     * @typedef {Object.<string>} NamespacedEventsCollection
10513     */ var NS_EVENTS = {
10514        WF_CLICK_EMPTY: 'click.wf-empty-link',
10515        WF_CLICK_SCROLL: 'click.wf-scroll'
10516    };
10517    var loc = window.location;
10518    var history = inIframe() ? null : window.history;
10519    var $win = $(window);
10520    var $doc = $(document);
10521    var $body = $(document.body);
10522    var animate = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) {
10523        window.setTimeout(fn, 15);
10524    };
10525    var rootTag = Webflow.env('editor') ? '.w-editor-body' : 'body';
10526    var headerSelector = 'header, ' + rootTag + ' > .header, ' + rootTag + ' > .w-nav:not([data-no-scroll])';
10527    var emptyHrefSelector = 'a[href="#"]';
10528    /**
10529     * Select only links whose href:
10530     * - contains a #
10531     * - is not one of our namespaced TabLink elements
10532     * - is not _only_ a #
10533     */ var localHrefSelector = 'a[href*="#"]:not(.w-tab-link):not(' + emptyHrefSelector + ')';
10534    var scrollTargetOutlineCSS = '.wf-force-outline-none[tabindex="-1"]:focus{outline:none;}';
10535    var focusStylesEl = document.createElement('style');
10536    focusStylesEl.appendChild(document.createTextNode(scrollTargetOutlineCSS));
10537    function inIframe() {
10538        try {
10539            return Boolean(window.frameElement);
10540        } catch (e) {
10541            return true;
10542        }
10543    }
10544    var validHash = /^#[a-zA-Z0-9][\w:.-]*$/;
10545    /**
10546     * Determine if link navigates to current page
10547     * @param {HTMLAnchorElement} link
10548     */ function linksToCurrentPage(link) {
10549        return validHash.test(link.hash) && link.host + link.pathname === loc.host + loc.pathname;
10550    }
10551    /**
10552     * Check if the designer has indicated that this page should
10553     * have no scroll animation, or if the end user has set
10554     * prefers-reduced-motion in their OS
10555     */ const reducedMotionMediaQuery = typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)');
10556    function reducedMotionEnabled() {
10557        return document.body.getAttribute('data-wf-scroll-motion') === 'none' || reducedMotionMediaQuery.matches;
10558    }
10559    function setFocusable($el, action) {
10560        var initialTabindex;
10561        switch(action){
10562            case 'add':
10563                initialTabindex = $el.attr('tabindex');
10564                if (initialTabindex) {
10565                    $el.attr('data-wf-tabindex-swap', initialTabindex);
10566                } else {
10567                    $el.attr('tabindex', '-1');
10568                }
10569                break;
10570            case 'remove':
10571                initialTabindex = $el.attr('data-wf-tabindex-swap');
10572                if (initialTabindex) {
10573                    $el.attr('tabindex', initialTabindex);
10574                    $el.removeAttr('data-wf-tabindex-swap');
10575                } else {
10576                    $el.removeAttr('tabindex');
10577                }
10578                break;
10579        }
10580        $el.toggleClass('wf-force-outline-none', action === 'add');
10581    }
10582    /**
10583     * Determine if we should execute custom scroll
10584     */ function validateScroll(evt) {
10585        var target = evt.currentTarget;
10586        if (// Bail if in Designer
10587        Webflow.env('design') || // Ignore links being used by jQuery mobile
10588        window.$.mobile && /(?:^|\s)ui-link(?:$|\s)/.test(target.className)) {
10589            return;
10590        }
10591        var hash = linksToCurrentPage(target) ? target.hash : '';
10592        if (hash === '') return;
10593        var $el = $(hash);
10594        if (!$el.length) {
10595            return;
10596        }
10597        if (evt) {
10598            evt.preventDefault();
10599            evt.stopPropagation();
10600        }
10601        updateHistory(hash, evt);
10602        window.setTimeout(function() {
10603            scroll($el, function setFocus() {
10604                setFocusable($el, 'add');
10605                $el.get(0).focus({
10606                    preventScroll: true
10607                });
10608                setFocusable($el, 'remove');
10609            });
10610        }, evt ? 0 : 300);
10611    }
10612    function updateHistory(hash) {
10613        // Push new history state
10614        if (loc.hash !== hash && history && history.pushState && // Navigation breaks Chrome when the protocol is `file:`.
10615        !(Webflow.env.chrome && loc.protocol === 'file:')) {
10616            var oldHash = history.state && history.state.hash;
10617            if (oldHash !== hash) {
10618                history.pushState({
10619                    hash
10620                }, '', hash);
10621            }
10622        }
10623    }
10624    function scroll($targetEl, cb) {
10625        var start = $win.scrollTop();
10626        var end = calculateScrollEndPosition($targetEl);
10627        if (start === end) return;
10628        var duration = calculateScrollDuration($targetEl, start, end);
10629        var clock = Date.now();
10630        var step = function() {
10631            var elapsed = Date.now() - clock;
10632            window.scroll(0, getY(start, end, elapsed, duration));
10633            if (elapsed <= duration) {
10634                animate(step);
10635            } else if (typeof cb === 'function') {
10636                cb();
10637            }
10638        };
10639        animate(step);
10640    }
10641    function calculateScrollEndPosition($targetEl) {
10642        // If a fixed header exists, offset for the height
10643        var $header = $(headerSelector);
10644        var offsetY = $header.css('position') === 'fixed' ? $header.outerHeight() : 0;
10645        var end = $targetEl.offset().top - offsetY;
10646        // If specified, scroll so that the element ends up in the middle of the viewport
10647        if ($targetEl.data('scroll') === 'mid') {
10648            var available = $win.height() - offsetY;
10649            var elHeight = $targetEl.outerHeight();
10650            if (elHeight < available) {
10651                end -= Math.round((available - elHeight) / 2);
10652            }
10653        }
10654        return end;
10655    }
10656    function calculateScrollDuration($targetEl, start, end) {
10657        if (reducedMotionEnabled()) return 0;
10658        var mult = 1;
10659        // Check for custom time multiplier on the body and the scroll target
10660        $body.add($targetEl).each(function(_, el) {
10661            var time = parseFloat(el.getAttribute('data-scroll-time'));
10662            if (!isNaN(time) && time >= 0) {
10663                mult = time;
10664            }
10665        });
10666        return (472.143 * Math.log(Math.abs(start - end) + 125) - 2000) * mult;
10667    }
10668    function getY(start, end, elapsed, duration) {
10669        if (elapsed > duration) {
10670            return end;
10671        }
10672        return start + (end - start) * ease(elapsed / duration);
10673    }
10674    function ease(t) {
10675        return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
10676    }
10677    function ready() {
10678        var { WF_CLICK_EMPTY, WF_CLICK_SCROLL } = NS_EVENTS;
10679        $doc.on(WF_CLICK_SCROLL, localHrefSelector, validateScroll);
10680        /**
10681       * Prevent empty hash links from triggering scroll.
10682       * Legacy feature to preserve: use the default "#" link
10683       * to trigger an interaction, and do not want the page
10684       * to scroll to the top.
10685       */ $doc.on(WF_CLICK_EMPTY, emptyHrefSelector, function(e) {
10686            e.preventDefault();
10687        });
10688        document.head.insertBefore(focusStylesEl, document.head.firstChild);
10689    }
10690    // Export module
10691    return {
10692        ready
10693    };
10694});
10695
10696//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctc2Nyb2xsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IFNtb290aCBzY3JvbGxcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdzY3JvbGwnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBuYW1lc3BhY2VkIGV2ZW50cyBmb3VuZCBpbiB0aGlzIG1vZHVsZS5cbiAgICAgKiBOYW1lc3BhY2VkIGV2ZW50cyBlbmNhcHN1bGF0ZSBvdXIgY29kZSwgYW5kIG1ha2UgaXQgc2FmZXIgYW5kIGVhc2llclxuICAgICAqIGZvciBkZXNpZ25lcnMgdG8gYXBwbHkgY3VzdG9tIGNvZGUgb3ZlcnJpZGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9vbi8jZXZlbnQtbmFtZXNcbiAgICAgKiBAdHlwZWRlZiB7T2JqZWN0LjxzdHJpbmc+fSBOYW1lc3BhY2VkRXZlbnRzQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHZhciBOU19FVkVOVFMgPSB7XG4gICAgICBXRl9DTElDS19FTVBUWTogJ2NsaWNrLndmLWVtcHR5LWxpbmsnLFxuICAgICAgV0ZfQ0xJQ0tfU0NST0xMOiAnY2xpY2sud2Ytc2Nyb2xsJyxcbiAgICB9O1xuXG4gICAgdmFyIGxvYyA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgaGlzdG9yeSA9IGluSWZyYW1lKCkgPyBudWxsIDogd2luZG93Lmhpc3Rvcnk7XG4gICAgdmFyICR3aW4gPSAkKHdpbmRvdyk7XG4gICAgdmFyICRkb2MgPSAkKGRvY3VtZW50KTtcbiAgICB2YXIgJGJvZHkgPSAkKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgdmFyIGFuaW1hdGUgPVxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZuLCAxNSk7XG4gICAgICB9O1xuICAgIHZhciByb290VGFnID0gV2ViZmxvdy5lbnYoJ2VkaXRvcicpID8gJy53LWVkaXRvci1ib2R5JyA6ICdib2R5JztcbiAgICB2YXIgaGVhZGVyU2VsZWN0b3IgPVxuICAgICAgJ2hlYWRlciwgJyArXG4gICAgICByb290VGFnICtcbiAgICAgICcgPiAuaGVhZGVyLCAnICtcbiAgICAgIHJvb3RUYWcgK1xuICAgICAgJyA+IC53LW5hdjpub3QoW2RhdGEtbm8tc2Nyb2xsXSknO1xuXG4gICAgdmFyIGVtcHR5SHJlZlNlbGVjdG9yID0gJ2FbaHJlZj1cIiNcIl0nO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IG9ubHkgbGlua3Mgd2hvc2UgaHJlZjpcbiAgICAgKiAtIGNvbnRhaW5zIGEgI1xuICAgICAqIC0gaXMgbm90IG9uZSBvZiBvdXIgbmFtZXNwYWNlZCBUYWJMaW5rIGVsZW1lbnRzXG4gICAgICogLSBpcyBub3QgX29ubHlfIGEgI1xuICAgICAqL1xuICAgIHZhciBsb2NhbEhyZWZTZWxlY3RvciA9XG4gICAgICAnYVtocmVmKj1cIiNcIl06bm90KC53LXRhYi1saW5rKTpub3QoJyArIGVtcHR5SHJlZlNlbGVjdG9yICsgJyknO1xuXG4gICAgdmFyIHNjcm9sbFRhcmdldE91dGxpbmVDU1MgPVxuICAgICAgJy53Zi1mb3JjZS1vdXRsaW5lLW5vbmVbdGFiaW5kZXg9XCItMVwiXTpmb2N1c3tvdXRsaW5lOm5vbmU7fSc7XG5cbiAgICB2YXIgZm9jdXNTdHlsZXNFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgZm9jdXNTdHlsZXNFbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzY3JvbGxUYXJnZXRPdXRsaW5lQ1NTKSk7XG5cbiAgICBmdW5jdGlvbiBpbklmcmFtZSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgI
10696HJldHVybiBCb29sZWFuKHdpbmRvdy5mcmFtZUVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmFsaWRIYXNoID0gL14jW2EtekEtWjAtOV1bXFx3Oi4tXSokLztcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiBsaW5rIG5hdmlnYXRlcyB0byBjdXJyZW50IHBhZ2VcbiAgICAgKiBAcGFyYW0ge0hUTUxBbmNob3JFbGVtZW50fSBsaW5rXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlua3NUb0N1cnJlbnRQYWdlKGxpbmspIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbGlkSGFzaC50ZXN0KGxpbmsuaGFzaCkgJiZcbiAgICAgICAgbGluay5ob3N0ICsgbGluay5wYXRobmFtZSA9PT0gbG9jLmhvc3QgKyBsb2MucGF0aG5hbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGRlc2lnbmVyIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGlzIHBhZ2Ugc2hvdWxkXG4gICAgICogaGF2ZSBubyBzY3JvbGwgYW5pbWF0aW9uLCBvciBpZiB0aGUgZW5kIHVzZXIgaGFzIHNldFxuICAgICAqIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gaW4gdGhlaXIgT1NcbiAgICAgKi9cbiAgICBjb25zdCByZWR1Y2VkTW90aW9uTWVkaWFRdWVyeSA9XG4gICAgICB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpO1xuICAgIGZ1bmN0aW9uIHJlZHVjZWRNb3Rpb25FbmFibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2Ytc2Nyb2xsLW1vdGlvbicpID09PSAnbm9uZScgfHxcbiAgICAgICAgcmVkdWNlZE1vdGlvbk1lZGlhUXVlcnkubWF0Y2hlc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRGb2N1c2FibGUoJGVsLCBhY3Rpb24pIHtcbiAgICAgIHZhciBpbml0aWFsVGFiaW5kZXg7XG5cbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgaW5pdGlhbFRhYmluZGV4ID0gJGVsLmF0dHIoJ3RhYmluZGV4Jyk7XG5cbiAgICAgICAgICBpZiAoaW5pdGlhbFRhYmluZGV4KSB7XG4gICAgICAgICAgICAkZWwuYXR0cignZGF0YS13Zi10YWJpbmRleC1zd2FwJywgaW5pdGlhbFRhYmluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGVsLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XG4gICAgICAgICAgaW5pdGlhbFRhYmluZGV4ID0gJGVsLmF0dHIoJ2RhdGEtd2YtdGFiaW5kZXgtc3dhcCcpO1xuICAgICAgICAgIGlmIChpbml0aWFsVGFiaW5kZXgpIHtcbiAgICAgICAgICAgICRlbC5hdHRyKCd0YWJpbmRleCcsIGluaXRpYWxUYWJpbmRleCk7XG4gICAgICAgICAgICAkZWwucmVtb3ZlQXR0cignZGF0YS13Zi10YWJpbmRleC1zd2FwJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRlbC5yZW1vdmVBdHRyKCd0YWJpbmRleCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgJGVsLnRvZ2dsZUNsYXNzKCd3Zi1mb3JjZS1vdXRsaW5lLW5vbmUnLCBhY3Rpb24gPT09ICdhZGQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGV4ZWN1dGUgY3VzdG9tIHNjcm9sbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU2Nyb2xsKGV2dCkge1xuICAgICAgdmFyIHRhcmdldCA9IGV2dC5jdXJyZW50VGFyZ2V0O1xuICAgICAgaWYgKFxuICAgICAgICAvLyBCYWlsIGlmIGluIERlc2lnbmVyXG4gICAgICAgIFdlYmZsb3cuZW52KCdkZXNpZ24nKSB8fFxuICAgICAgICAvLyBJZ25vcmUgbGlua3MgYmVpbmcgdXNlZCBieSBqUXVlcnkgbW9iaWxlXG4gICAgICAgICh3aW5kb3cuJC5tb2JpbGUgJiYgLyg/Ol58XFxzKXVpLWxpbmsoPzokfFxccykvLnRlc3QodGFyZ2V0LmNsYXNzTmFtZSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
10696XIgaGFzaCA9IGxpbmtzVG9DdXJyZW50UGFnZSh0YXJnZXQpID8gdGFyZ2V0Lmhhc2ggOiAnJztcbiAgICAgIGlmIChoYXNoID09PSAnJykgcmV0dXJuO1xuXG4gICAgICB2YXIgJGVsID0gJChoYXNoKTtcbiAgICAgIGlmICghJGVsLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldnQpIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlSGlzdG9yeShoYXNoLCBldnQpO1xuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNjcm9sbCgkZWwsIGZ1bmN0aW9uIHNldEZvY3VzKCkge1xuICAgICAgICAgICAgc2V0Rm9jdXNhYmxlKCRlbCwgJ2FkZCcpO1xuICAgICAgICAgICAgJGVsLmdldCgwKS5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgICAgICAgICAgc2V0Rm9jdXNhYmxlKCRlbCwgJ3JlbW92ZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBldnQgPyAwIDogMzAwXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhpc3RvcnkoaGFzaCkge1xuICAgICAgLy8gUHVzaCBuZXcgaGlzdG9yeSBzdGF0ZVxuICAgICAgaWYgKFxuICAgICAgICBsb2MuaGFzaCAhPT0gaGFzaCAmJlxuICAgICAgICBoaXN0b3J5ICYmXG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlICYmXG4gICAgICAgIC8vIE5hdmlnYXRpb24gYnJlYWtzIENocm9tZSB3aGVuIHRoZSBwcm90b2NvbCBpcyBgZmlsZTpgLlxuICAgICAgICAhKFdlYmZsb3cuZW52LmNocm9tZSAmJiBsb2MucHJvdG9jb2wgPT09ICdmaWxlOicpXG4gICAgICApIHtcbiAgICAgICAgdmFyIG9sZEhhc2ggPSBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuaGFzaDtcbiAgICAgICAgaWYgKG9sZEhhc2ggIT09IGhhc2gpIHtcbiAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7aGFzaH0sICcnLCBoYXNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbCgkdGFyZ2V0RWwsIGNiKSB7XG4gICAgICB2Y
10696XIgc3RhcnQgPSAkd2luLnNjcm9sbFRvcCgpO1xuICAgICAgdmFyIGVuZCA9IGNhbGN1bGF0ZVNjcm9sbEVuZFBvc2l0aW9uKCR0YXJnZXRFbCk7XG5cbiAgICAgIGlmIChzdGFydCA9PT0gZW5kKSByZXR1cm47XG5cbiAgICAgIHZhciBkdXJhdGlvbiA9IGNhbGN1bGF0ZVNjcm9sbER1cmF0aW9uKCR0YXJnZXRFbCwgc3RhcnQsIGVuZCk7XG5cbiAgICAgIHZhciBjbG9jayA9IERhdGUubm93KCk7XG4gICAgICB2YXIgc3RlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gY2xvY2s7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgZ2V0WShzdGFydCwgZW5kLCBlbGFwc2VkLCBkdXJhdGlvbikpO1xuXG4gICAgICAgIGlmIChlbGFwc2VkIDw9IGR1cmF0aW9uKSB7XG4gICAgICAgICAgYW5pbWF0ZShzdGVwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhbmltYXRlKHN0ZXApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbEVuZFBvc2l0aW9uKCR0YXJnZXRFbCkge1xuICAgICAgLy8gSWYgYSBmaXhlZCBoZWFkZXIgZXhpc3RzLCBvZmZzZXQgZm9yIHRoZSBoZWlnaHRcbiAgICAgIHZhciAkaGVhZGVyID0gJChoZWFkZXJTZWxlY3Rvcik7XG4gICAgICB2YXIgb2Zmc2V0WSA9XG4gICAgICAgICRoZWFkZXIuY3NzKCdwb3NpdGlvbicpID09PSAnZml4ZWQnID8gJGhlYWRlci5vdXRlckhlaWdodCgpIDogMDtcbiAgICAgIHZhciBlbmQgPSAkdGFyZ2V0RWwub2Zmc2V0KCkudG9wIC0gb2Zmc2V0WTtcblxuICAgICAgLy8gSWYgc3BlY2lmaWVkLCBzY3JvbGwgc28gdGhhdCB0aGUgZWxlbWVudCBlbmRzIHVwIGluIHRoZSBtaWRkbGUgb2YgdGhlIHZpZXdwb3J0XG4gICAgICBpZiAoJHRhcmdldEVsLmRhdGEoJ3Njcm9sbCcpID09PSAnbWlkJykge1xuICAgICAgICB2Y
10696XIgYXZhaWxhYmxlID0gJHdpbi5oZWlnaHQoKSAtIG9mZnNldFk7XG4gICAgICAgIHZhciBlbEhlaWdodCA9ICR0YXJnZXRFbC5vdXRlckhlaWdodCgpO1xuICAgICAgICBpZiAoZWxIZWlnaHQgPCBhdmFpbGFibGUpIHtcbiAgICAgICAgICBlbmQgLT0gTWF0aC5yb3VuZCgoYXZhaWxhYmxlIC0gZWxIZWlnaHQpIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlU2Nyb2xsRHVyYXRpb24oJHRhcmdldEVsLCBzdGFydCwgZW5kKSB7XG4gICAgICBpZiAocmVkdWNlZE1vdGlvbkVuYWJsZWQoKSkgcmV0dXJuIDA7XG5cbiAgICAgIHZhciBtdWx0ID0gMTtcbiAgICAgIC8vIENoZWNrIGZvciBjdXN0b20gdGltZSBtdWx0aXBsaWVyIG9uIHRoZSBib2R5IGFuZCB0aGUgc2Nyb2xsIHRhcmdldFxuICAgICAgJGJvZHkuYWRkKCR0YXJnZXRFbCkuZWFjaChmdW5jdGlvbiAoXywgZWwpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBwYXJzZUZsb2F0KGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zY3JvbGwtdGltZScpKTtcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID49IDApIHtcbiAgICAgICAgICBtdWx0ID0gdGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoNDcyLjE0MyAqIE1hdGgubG9nKE1hdGguYWJzKHN0YXJ0IC0gZW5kKSArIDEyNSkgLSAyMDAwKSAqIG11bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0WShzdGFydCwgZW5kLCBlbGFwc2VkLCBkdXJhdGlvbikge1xuICAgICAgaWYgKGVsYXBzZWQgPiBkdXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZW5kO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogZWFzZShlbGFwc2VkIC8gZHVyYXRpb24pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVhc2UodCkge1xuICAgICAgcmV0dXJuIHQgPCAwLjUgPyA0ICogdCAqIHQgKiB0IDogKHQgLSAxKSAqICgyICogdCAtIDIpICogKDIgKiB0IC0gMikgKyAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgIHZhciB7V0ZfQ0xJQ0tfRU1QVFksIFdGX0NMSUNLX1NDUk9MTH0gPSBOU19FVkVOVFM7XG5cbiAgICAgICRkb2Mub24oV0ZfQ0xJQ0tfU0NST0xMLCBsb2NhbEhyZWZTZWxlY3RvciwgdmFsaWRhdGVTY3JvbGwpO1xuXG4gICAgICAvKipcbiAgICAgICAqIFByZXZlbnQgZW1wdHkgaGFzaCBsaW5rcyBmcm9tIHRyaWdnZXJpbmcgc2Nyb2xsLlxuICAgICAgICogTGVnYWN5IGZlYXR1cmUgdG8gcHJlc2VydmU6IHVzZSB0aGUgZGVmYXVsdCBcIiNcIiBsaW5rXG4gICAgICAgKiB0byB0cmlnZ2VyIGFuIGludGVyYWN0aW9uLCBhbmQgZG8gbm90IHdhbnQgdGhlIHBhZ2VcbiAgICAgICAqIHRvIHNjcm9sbCB0byB0aGUgdG9wLlxuICAgICAgICovXG4gICAgICAkZG9jLm9uKFdGX0NMSUNLX0VNUFRZLCBlbXB0eUhyZWZTZWxlY3RvciwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuaW5zZXJ0QmVmb3JlKGZvY3VzU3R5bGVzRWwsIGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IG1vZHVsZVxuICAgIHJldHVybiB7cmVhZHl9O1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwiTlNfRVZFTlRTIiwiV0ZfQ0xJQ0tfRU1QVFkiLCJXRl9DTElDS19TQ1JPTEwiLCJsb2MiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhpc3RvcnkiLCJpbklmcmFtZSIsIiR3aW4iLCIkZG9jIiwiZG9jdW1lbnQiLCIkYm9keSIsImJvZHkiLCJhbmltYXRlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZm4iLCJzZXRUaW1lb3V0Iiwicm9vdFRhZyIsImVudiIsImhlYWRlclNlbGVjdG9yIiwiZW1wdHlIcmVmU2VsZWN0b3IiLCJsb2NhbEhyZWZTZWxlY3RvciIsInNjcm9sbFRhcmdldE91dGxpbmVDU1MiLCJmb2N1c1N0eWxlc0VsIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJCb29sZWFuIiwiZnJhbWVFbGVtZW50IiwiZSIsInZhbGlkSGFzaCIsImxpbmtzVG9DdXJyZW50UGFnZSIsImxpbmsiLCJ0ZXN0IiwiaGFzaCIsImhvc3QiLCJwYXRobmFtZSIsInJlZHVjZWRNb3Rpb25NZWRpYVF1ZXJ5IiwibWF0Y2hNZWRpYSIsInJlZHVjZWRNb3Rpb25FbmFibGVkIiwiZ2V0QXR0cmlidXRlIiwibWF0Y2hlcyIsInNldEZvY3VzYWJsZSIsIiRlbCIsImFjdGlvbiIsImluaXRpYWxUYWJpbmRleCIsImF0dHIiLCJyZW1vdmVBdHRyIiwidG9nZ2xlQ2xhc3MiLCJ2YWxpZGF0ZVNjcm9sbCIsImV2dCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJtb2JpbGUiLCJjbGFzc05hbWUiLCJsZW5ndGgiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInVwZGF0ZUhpc3RvcnkiLCJzY3JvbGwiLCJzZXRGb2N1cyIsImdldCIsImZvY3VzIiwicHJldmVudFNjcm9sbCIsInB1c2hTdGF0ZSIsImNocm9tZSIsInByb3RvY29sIiwib2xkSGFzaCIsInN0YXRlIiwiJHRhcmdldEVsIiwiY2IiLCJzdGFydCIsInNjcm9sbFRvcCIsImVuZCIsImNhbGN1bGF0ZVNjcm9sbEVuZFBvc2l0aW9uIiwiZHVyYXRpb24iLCJjYWxjdWxhdGVTY3JvbGxEdXJhdGlvbiIsImNsb2NrIiwiRGF0ZSIsIm5vdyIsInN0ZXAiLCJlbGFwc2VkIiwiZ2V0WSIsIiRoZWFkZXIiLCJvZmZzZXRZIiwiY3NzIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXQiLCJ0b3AiLCJkYXRhIiwiYXZhaWxhYmxlIiwiaGVpZ2h0IiwiZWxIZWlnaHQiLCJNYXRoIiwicm91bmQiLCJtdWx0IiwiYWRkIiwiZWFjaCIsIl8iLCJlbCIsInRpbWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJsb2ciLCJhYnMiLCJlYXNlIiwidCIsInJlYWR5Iiwib24iLCJoZWFkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0QkQsUUFBUUUsTUFBTSxDQUNaLFVBQ0NDLE9BQU9DLE9BQU8sR0FBRyxTQUFVQyxDQUFDO0lBQzNCOzs7Ozs7S0FNQyxHQUNELElBQUlDLFlBQVk7UUFDZEMsZ0JBQWdCO1FBQ2hCQyxpQkFBaUI7SUFDbkI7SUFFQSxJQUFJQyxNQUFNQyxPQUFPQyxRQUFRO0lBQ3pCLElBQUlDLFVBQVVDLGFBQWEsT0FBT0gsT0FBT0UsT0FBTztJQUNoRCxJQUFJRSxPQUFPVCxFQUFFSztJQUNiLElBQUlLLE9BQU9WLEVBQUVXO0lBQ2IsSUFBSUMsUUFBUVosRUFBRVcsU0FBU0UsSUFBSTtJQUUzQixJQUFJQyxVQUNGVCxPQUFPVSxxQkFBcUIsSUFDNUJWLE9BQU9XLHdCQUF3QixJQUMvQlgsT0FBT1ksMkJBQTJCLElBQ2xDLFNBQVVDLEVBQUU7UUFDVmIsT0FBT2MsVUFBVSxDQUFDRCxJQUFJO0lBQ3hCO0lBQ0YsSUFBSUUsVUFBVXpCLFF
10696BQVEwQixHQUFHLENBQUMsWUFBWSxtQkFBbUI7SUFDekQsSUFBSUMsaUJBQ0YsYUFDQUYsVUFDQSxpQkFDQUEsVUFDQTtJQUVGLElBQUlHLG9CQUFvQjtJQUV4Qjs7Ozs7S0FLQyxHQUNELElBQUlDLG9CQUNGLHVDQUF1Q0Qsb0JBQW9CO0lBRTdELElBQUlFLHlCQUNGO0lBRUYsSUFBSUMsZ0JBQWdCZixTQUFTZ0IsYUFBYSxDQUFDO0lBQzNDRCxjQUFjRSxXQUFXLENBQUNqQixTQUFTa0IsY0FBYyxDQUFDSjtJQUVsRCxTQUFTakI7UUFDUCxJQUFJO1lBQ0YsT0FBT3NCLFFBQVF6QixPQUFPMEIsWUFBWTtRQUNwQyxFQUFFLE9BQU9DLEdBQUc7WUFDVixPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQUlDLFlBQVk7SUFFaEI7OztLQUdDLEdBQ0QsU0FBU0MsbUJBQW1CQyxJQUFJO1FBQzlCLE9BQ0VGLFVBQVVHLElBQUksQ0FBQ0QsS0FBS0UsSUFBSSxLQUN4QkYsS0FBS0csSUFBSSxHQUFHSCxLQUFLSSxRQUFRLEtBQUtuQyxJQUFJa0MsSUFBSSxHQUFHbEMsSUFBSW1DLFFBQVE7SUFFekQ7SUFFQTs7OztLQUlDLEdBQ0QsTUFBTUMsMEJBQ0osT0FBT25DLE9BQU9vQyxVQUFVLEtBQUssY0FDN0JwQyxPQUFPb0MsVUFBVSxDQUFDO0lBQ3BCLFNBQVNDO1FBQ1AsT0FDRS9CLFNBQVNFLElBQUksQ0FBQzhCLFlBQVksQ0FBQyw2QkFBNkIsVUFDeERILHdCQUF3QkksT0FBTztJQUVuQztJQUVBLFNBQVNDLGFBQWFDLEdBQUcsRUFBRUMsTUFBTTtRQUMvQixJQUFJQztRQUVKLE9BQVFEO1lBQ04sS0FBSztnQkFDSEMsa0JBQWtCRixJQUFJRyxJQUFJLENBQUM7Z0JBRTNCLElBQUlELGlCQUFpQjtvQkFDbkJGLElBQUlHLElBQUksQ0FBQyx5QkFBeUJEO2dCQUNwQyxPQUFPO29CQUNMRixJQUFJRyxJQUFJLENBQUMsWUFBWTtnQkFDdkI7Z0JBQ0E7WUFFRixLQUFLO2dCQUNIRCxrQkFBa0JGLElBQUlHLElBQUksQ0FBQztnQkFDM0IsSUFBSUQsaUJBQWlCO29CQUNuQkYsSUFBSUcsSUFBSSxDQUFDLFlBQVlEO29CQUNyQkYsSUFBSUksVUFBVSxDQUFDO2dCQUNqQixPQUFPO29CQUNMSixJQUFJSSxVQUFVLENBQUM7Z0JBQ2pCO2dCQUNBO1FBQ0o7UUFFQUosSUFBSUssV0FBVyxDQUFDLHlCQUF5QkosV0FBVztJQUN0RDtJQUVBOztLQUVDLEdBQ0QsU0FBU0ssZUFBZUMsR0FBRztRQUN6QixJQUFJQyxTQUFTRCxJQUFJRSxhQUFhO1FBQzlCLElBQ0Usc0JBQXNCO1FBQ3RCNUQsUUFBUTBCLEdBQUcsQ0FBQyxhQUNaLDJDQUEyQztRQUMxQ2hCLE9BQU9MLENBQUMsQ0FBQ3dELE1BQU0sSUFBSSwwQkFBMEJwQixJQUFJLENBQUNrQixPQUFPRyxTQUFTLEdBQ25FO1lBQ0E7UUFDRjtRQUVBLElBQUlwQixPQUFPSCxtQkFBbUJvQixVQUFVQSxPQUFPakIsSUFBSSxHQUFHO1FBQ3RELElBQUlBLFNBQVMsSUFBSTtRQUVqQixJQUFJUyxNQUFNOUMsRUFBRXFDO1FBQ1osSUFBSSxDQUFDUyxJQUFJWSxNQUFNLEVBQUU7WUFDZjtRQUNGO1FBRUEsSUFBSUwsS0FBSztZQUNQQSxJQUFJTSxjQUFjO1lBQ2xCTixJQUFJTyxlQUFlO1FBQ3JCO1FBRUFDLGNBQWN4QixNQUFNZ0I7UUFFcEJoRCxPQUFPYyxVQUFVLENBQ2Y7WUFDRTJDLE9BQU9oQixLQUFLLFNBQVNpQjtnQkFDbkJsQixhQUFhQyxLQUFLO2dCQUNsQkEsSUFBSWtCLEdBQUcsQ0FBQyxHQUFHQyxLQUFLLENBQUM7b0JBQUNDLGVBQWU7Z0JBQUk7Z0JBQ3JDckIsYUFBYUMsS0FBSztZQUNwQjtRQUNGLEdBQ0FPLE1BQU0sSUFBSTtJQUVkO0lBRUEsU0FBU1EsY0FBY3hCLElBQUk7UUFDekIseUJBQXlCO1FBQ3pCLElBQ0VqQyxJQUFJaUMsSUFBSSxLQUFLQSxRQUNiOUIsV0FDQUEsUUFBUTRELFNBQVMsSUFDakIseURBQXlEO1FBQ3pELENBQUV4RSxDQUFBQSxRQUFRMEIsR0FBRyxDQUFDK0MsTUFBTSxJQUFJaEUsSUFBSWlFLFFBQVEsS0FBSyxPQUFNLEdBQy9DO1lBQ0EsSUFBSUMsVUFBVS9ELFFBQVFnRSxLQUFLLElBQUloRSxRQUFRZ0UsS0FBSyxDQUFDbEMsSUFBSTtZQUNqRCxJQUFJaUMsWUFBWWpDLE1BQU07Z0JBQ3BCOUIsUUFBUTRELFNBQVMsQ0FBQztvQkFBQzlCO2dCQUFJLEdBQUcsSUFBSUE7WUFDaEM7UUFDRjtJQUNGO0lBRUEsU0FBU3lCLE9BQU9VLFNBQVMsRUFBRUMsRUFBRTtRQUMzQixJQUFJQyxRQUFRakUsS0FBS2tFLFNBQVM7UUFDMUIsSUFBSUMsTUFBTUMsMkJBQTJCTDtRQUVyQyxJQUFJRSxVQUFVRSxLQUFLO1FBRW5CLElBQUlFLFdBQVdDLHdCQUF3QlAsV0FBV0UsT0FBT0U7UUFFekQsSUFBSUksUUFBUUMsS0FBS0MsR0FBRztRQUNwQixJQUFJQyxPQUFPO1lBQ1QsSUFBSUMsVUFBVUgsS0FBS0MsR0FBRyxLQUFLRjtZQUMzQjNFLE9BQU95RCxNQUFNLENBQUMsR0FBR3VCLEtBQUtYLE9BQU9FLEtBQUtRLFNBQVNOO1lBRTNDLElBQUlNLFdBQVdOLFVBQVU7Z0JBQ3ZCaEUsUUFBUXFFO1lBQ1YsT0FBTyxJQUFJLE9BQU9WLE9BQU8sWUFBWTtnQkFDbkNBO1lBQ0Y7UUFDRjtRQUVBM0QsUUFBUXFFO0lBQ1Y7SUFFQSxTQUFTTiwyQkFBMkJMLFNBQVM7UUFDM0Msa0RBQWtEO1FBQ2xELElBQUljLFVBQVV0RixFQUFFc0I7UUFDaEIsSUFBSWlFLFVBQ0ZELFFBQVFFLEdBQUcsQ0FBQyxnQkFBZ0IsVUFBVUYsUUFBUUcsV0FBVyxLQUFLO1FBQ2hFLElBQUliLE1BQU1KLFVBQVVrQixNQUFNLEdBQUdDLEdBQUcsR0FBR0o7UUFFbkMsaUZBQWlGO1FBQ2pGLElBQUlmLFVBQVVvQixJQUFJLENBQUMsY0FBYyxPQUFPO1lBQ3RDLElBQUlDLFlBQVlwRixLQUFLcUYsTUFBTSxLQUFLUDtZQUNoQyxJQUFJUSxXQUFXdkIsVUFBVWlCLFdBQVc7WUFDcEMsSUFBSU0sV0FBV0YsV0FBVztnQkFDeEJqQixPQUFPb0IsS0FBS0MsS0FBSyxDQUFDLEFBQUNKLENBQUFBLFlBQVlFLFFBQU8sSUFBSztZQUM3QztRQUNGO1FBQ0EsT0FBT25CO0lBQ1Q7SUFFQSxTQUFTRyx3QkFBd0JQLFNBQVMsRUFBRUUsS0FBSyxFQUFFRSxHQUFHO1FBQ3BELElBQUlsQyx3QkFBd0IsT0FBTztRQUVuQyxJQUFJd0QsT0FBTztRQUNYLHFFQUFxRTtRQUNyRXRGLE1BQU11RixHQUFHLENBQUMzQixXQUFXNEIsSUFBSSxDQUFDLFNBQVVDLENBQUMsRUFBRUMsRUFBRTtZQUN2QyxJQUFJQyxPQUFPQyxXQUFXRixHQUFHM0QsWUFBWSxDQUFDO1lBQ3RDLElBQUksQ0FBQzhELE1BQU1GLFNBQVNBLFFBQVEsR0FBRztnQkFDN0JMLE9BQU9LO1lBQ1Q7UUFDRjtRQUVBLE9BQU8sQUFBQyxDQUFBLFVBQVVQLEtBQUtVLEdBQUcsQ0FBQ1YsS0FBS1csR0FBRyxDQUFDakMsUUFBUUUsT0FBTyxPQUFPLElBQUcsSUFBS3NCO0lBQ3BFO0lBRUEsU0FBU2IsS0FBS1gsS0FBSyxFQUFFRSxHQUFHLEVBQUVRLE9BQU8sRUFBRU4sUUFBUTtRQUN6QyxJQUFJTSxVQUFVTixVQUFVO1lBQ3RCLE9BQU9GO1FBQ1Q7UUFFQSxPQUFPRixRQUFRLEFBQUNFLENBQUFBLE1BQU1GLEtBQUksSUFBS2tDLEtBQUt4QixVQUFVTjtJQUNoRDtJQUVBLFNBQVM4QixLQUFLQyxDQUFDO1F
10696BQ2IsT0FBT0EsSUFBSSxNQUFNLElBQUlBLElBQUlBLElBQUlBLElBQUksQUFBQ0EsQ0FBQUEsSUFBSSxDQUFBLElBQU0sQ0FBQSxJQUFJQSxJQUFJLENBQUEsSUFBTSxDQUFBLElBQUlBLElBQUksQ0FBQSxJQUFLO0lBQ3pFO0lBQ0EsU0FBU0M7UUFDUCxJQUFJLEVBQUM1RyxjQUFjLEVBQUVDLGVBQWUsRUFBQyxHQUFHRjtRQUV4Q1MsS0FBS3FHLEVBQUUsQ0FBQzVHLGlCQUFpQnFCLG1CQUFtQjRCO1FBRTVDOzs7OztPQUtDLEdBQ0QxQyxLQUFLcUcsRUFBRSxDQUFDN0csZ0JBQWdCcUIsbUJBQW1CLFNBQVVTLENBQUM7WUFDcERBLEVBQUUyQixjQUFjO1FBQ2xCO1FBRUFoRCxTQUFTcUcsSUFBSSxDQUFDQyxZQUFZLENBQUN2RixlQUFlZixTQUFTcUcsSUFBSSxDQUFDRSxVQUFVO0lBQ3BFO0lBRUEsZ0JBQWdCO0lBQ2hCLE9BQU87UUFBQ0o7SUFBSztBQUNmIn0=
10697
10698}),
10699"3695": (function (module, __unused_webpack_exports, __webpack_require__) {
10700"use strict";
10701/* globals document, window */ /**
10702 * Webflow: Touch events
10703 * Supports legacy 'tap' event
10704 * Adds a 'swipe' event to desktop and mobile
10705 */ 
10706var Webflow = __webpack_require__(3949);
10707Webflow.define('touch', module.exports = function($) {
10708    var api = {};
10709    var getSelection = window.getSelection;
10710    // Delegate all legacy 'tap' events to 'click'
10711    $.event.special.tap = {
10712        bindType: 'click',
10713        delegateType: 'click'
10714    };
10715    api.init = function(el) {
10716        el = typeof el === 'string' ? $(el).get(0) : el;
10717        return el ? new Touch(el) : null;
10718    };
10719    function Touch(el) {
10720        var active = false;
10721        var useTouch = false;
10722        var thresholdX = Math.min(Math.round(window.innerWidth * 0.04), 40);
10723        var startX;
10724        var lastX;
10725        el.addEventListener('touchstart', start, false);
10726        el.addEventListener('touchmove', move, false);
10727        el.addEventListener('touchend', end, false);
10728        el.addEventListener('touchcancel', cancel, false);
10729        el.addEventListener('mousedown', start, false);
10730        el.addEventListener('mousemove', move, false);
10731        el.addEventListener('mouseup', end, false);
10732        el.addEventListener('mouseout', cancel, false);
10733        function start(evt) {
10734            // We don’t handle multi-touch events yet.
10735            var touches = evt.touches;
10736            if (touches && touches.length > 1) {
10737                return;
10738            }
10739            active = true;
10740            if (touches) {
10741                useTouch = true;
10742                startX = touches[0].clientX;
10743            } else {
10744                startX = evt.clientX;
10745            }
10746            lastX = startX;
10747        }
10748        function move(evt) {
10749            if (!active) {
10750                return;
10751            }
10752            if (useTouch && evt.type === 'mousemove') {
10753                evt.preventDefault();
10754                evt.stopPropagation();
10755                return;
10756            }
10757            var touches = evt.touches;
10758            var x = touches ? touches[0].clientX : evt.clientX;
10759            var velocityX = x - lastX;
10760            lastX = x;
10761            // Allow swipes while pointer is down, but prevent them during text selection
10762            if (Math.abs(velocityX) > thresholdX && getSelection && String(getSelection()) === '') {
10763                triggerEvent('swipe', evt, {
10764                    direction: velocityX > 0 ? 'right' : 'left'
10765                });
10766                cancel();
10767            }
10768        }
10769        function end(evt) {
10770            if (!active) {
10771                return;
10772            }
10773            active = false;
10774            if (useTouch && evt.type === 'mouseup') {
10775                evt.preventDefault();
10776                evt.stopPropagation();
10777                useTouch = false;
10778                return;
10779            }
10780        }
10781        function cancel() {
10782            active = false;
10783        }
10784        function destroy() {
10785            el.removeEventListener('touchstart', start, false);
10786            el.removeEventListener('touchmove', move, false);
10787            el.removeEventListener('touchend', end, false);
10788            el.removeEventListener('touchcancel', cancel, false);
10789            el.removeEventListener('mousedown', start, false);
10790            el.removeEventListener('mousemove', move, false);
10791            el.removeEventListener('mouseup', end, false);
10792            el.removeEventListener('mouseout', cancel, false);
10793            el = null;
10794        }
10795        // Public instance methods
10796        this.destroy = destroy;
10797    }
10798    // Wrap native event to supoprt preventdefault + stopPropagation
10799    function triggerEvent(type, evt, data) {
10800        var newEvent = $.Event(type, {
10801            originalEvent: evt
10802        });
10803        $(evt.target).trigger(newEvent, data);
10804    }
10805    // Listen for touch events on all nodes by default.
10806    api.instance = api.init(document);
10807    // Export module
10808    return api;
10809});
10810
10811//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctdG91Y2guanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBkb2N1bWVudCwgd2luZG93ICovXG5cbi8qKlxuICogV2ViZmxvdzogVG91Y2ggZXZlbnRzXG4gKiBTdXBwb3J0cyBsZWdhY3kgJ3RhcCcgZXZlbnRcbiAqIEFkZHMgYSAnc3dpcGUnIGV2ZW50IHRvIGRlc2t0b3AgYW5kIG1vYmlsZVxuICovXG5cbnZhciBXZWJmbG93ID0gcmVxdWlyZSgnLi93ZWJmbG93LWxpYicpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ3RvdWNoJyxcbiAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCQpIHtcbiAgICB2YXIgYXBpID0ge307XG4gICAgdmFyIGdldFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb247XG5cbiAgICAvLyBEZWxlZ2F0ZSBhbGwgbGVnYWN5ICd0YXAnIGV2ZW50cyB0byAnY2xpY2snXG4gICAgJC5ldmVudC5zcGVjaWFsLnRhcCA9IHtiaW5kVHlwZTogJ2NsaWNrJywgZGVsZWdhdGVUeXBlOiAnY2xpY2snfTtcblxuICAgIGFwaS5pbml0ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbCA9IHR5cGVvZiBlbCA9PT0gJ3N0cmluZycgPyAkKGVsKS5nZXQoMCkgOiBlbDtcbiAgICAgIHJldHVybi
10811BlbCA/IG5ldyBUb3VjaChlbCkgOiBudWxsO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBUb3VjaChlbCkge1xuICAgICAgdmFyIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdmFyIHVzZVRvdWNoID0gZmFsc2U7XG4gICAgICB2YXIgdGhyZXNob2xkWCA9IE1hdGgubWluKE1hdGgucm91bmQod2luZG93LmlubmVyV2lkdGggKiAwLjA0KSwgNDApO1xuICAgICAgdmFyIHN0YXJ0WDtcbiAgICAgIHZhciBsYXN0WDtcblxuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHN0YXJ0LCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBtb3ZlLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZCwgZmFsc2UpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCBjYW5jZWwsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHN0YXJ0LCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGNhbmNlbCwgZmFsc2UpO1xuXG4gICAgICBmdW5jdGlvbiBzdGFydChldnQpIHtcbiAgICAgICAgLy8gV2UgZG9u4oCZdCBoYW5kbGUgbXVsdGktdG91Y2ggZXZlbnRzIHlldC5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldnQudG91Y2hlcztcbiAgICAgICAgaWYgKHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBpZiAodG91Y2hlcykge1xuICAgICAgICAgIHVzZVRvdWNoID0gdHJ1ZTtcbiAgICAgICAgICBzdGFydFggPSB0b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRYID0gZXZ0LmNsaWVudFg7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHN0YXJ0WDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbW92ZShldnQpIHtcbiAgICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlVG91Y2ggJiYgZXZ0LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbn
10811REZWZhdWx0KCk7XG4gICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b3VjaGVzID0gZXZ0LnRvdWNoZXM7XG4gICAgICAgIHZhciB4ID0gdG91Y2hlcyA/IHRvdWNoZXNbMF0uY2xpZW50WCA6IGV2dC5jbGllbnRYO1xuICAgICAgICB2YXIgdmVsb2NpdHlYID0geCAtIGxhc3RYO1xuXG4gICAgICAgIGxhc3RYID0geDtcblxuICAgICAgICAvLyBBbGxvdyBzd2lwZXMgd2hpbGUgcG9pbnRlciBpcyBkb3duLCBidXQgcHJldmVudCB0aGVtIGR1cmluZyB0ZXh0IHNlbGVjdGlvblxuICAgICAgICBpZiAoXG4gICAgICAgICAgTWF0aC5hYnModmVsb2NpdHlYKSA+IHRocmVzaG9sZFggJiZcbiAgICAgICAgICBnZXRTZWxlY3Rpb24gJiZcbiAgICAgICAgICBTdHJpbmcoZ2V0U2VsZWN0aW9uKCkpID09PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnQoJ3N3aXBlJywgZXZ0LCB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IHZlbG9jaXR5WCA+IDAgPyAncmlnaHQnIDogJ2xlZnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChldnQpIHtcbiAgICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHVzZVRvdWNoICYmIGV2dC50eXBlID09PSAnbW91c2V1cCcpIHtcbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXNlVG91Y2ggPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG1vdmUsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBlbmQsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCBjYW5jZWwsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZSwgZmFsc2UpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kLCBmYWxzZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgY2FuY2VsLCBmYWxzZSk7XG4gICAgICAgIGVsID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljIGluc3RhbmNlIG1ldGhvZHNcbiAgICAgIHRoaXMuZGVzdHJveSA9IGRlc3Ryb3k7XG4gICAgfVxuXG4gICAgLy8gV3JhcCBuYXRpdmUgZXZlbnQgdG8gc3Vwb3BydCBwcmV2ZW50ZGVmYXVsdCArIHN0b3BQcm9wYWdhdGlvblxuICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudCh0eXBlLCBldnQsIGRhdGEpIHtcbiAgICAgIHZhciBuZXdFdmVudCA9ICQuRXZlbnQodHlwZSwge29yaWdpbmFsRXZlbnQ6IGV2dH0pO1xuICAgICAgJChldnQudGFyZ2V0KS50cmlnZ2VyKG5ld0V2ZW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHRvdWNoIGV2ZW50cyBvbiBhbGwgbm9kZXMgYnkgZGVmYXVsdC5cbiAgICBhcGkuaW5zdGFuY2UgPSBhcGkuaW5pdChkb2N1bWVudCk7XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsImFwaSIsImdldFNlbGVjdGlvbiIsIndpbmRvdyIsImV2ZW50Iiwic3BlY2lhbCIsInRhcCIsImJpbmRUeXBlIiwiZGVsZWdhdGVUeXBlIiwiaW5pdCIsImVsIiwiZ2V0IiwiVG91Y2giLCJhY3RpdmUiLCJ1c2VUb3VjaCIsInRocmVzaG9sZFgiLCJNYXRoIiwibWluIiwicm91bmQiLCJpbm5lcldpZHRoIiwic3RhcnRYIiwibGFzdFgiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhcnQiLCJtb3ZlIiwiZW5kIiwiY2FuY2VsIiwi
10811ZXZ0IiwidG91Y2hlcyIsImxlbmd0aCIsImNsaWVudFgiLCJ0eXBlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ4IiwidmVsb2NpdHlYIiwiYWJzIiwiU3RyaW5nIiwidHJpZ2dlckV2ZW50IiwiZGlyZWN0aW9uIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkYXRhIiwibmV3RXZlbnQiLCJFdmVudCIsIm9yaWdpbmFsRXZlbnQiLCJ0YXJnZXQiLCJ0cmlnZ2VyIiwiaW5zdGFuY2UiLCJkb2N1bWVudCJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOzs7O0NBSUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osU0FDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUM7SUFDM0IsSUFBSUMsTUFBTSxDQUFDO0lBQ1gsSUFBSUMsZUFBZUMsT0FBT0QsWUFBWTtJQUV0Qyw4Q0FBOEM7SUFDOUNGLEVBQUVJLEtBQUssQ0FBQ0MsT0FBTyxDQUFDQyxHQUFHLEdBQUc7UUFBQ0MsVUFBVTtRQUFTQyxjQUFjO0lBQU87SUFFL0RQLElBQUlRLElBQUksR0FBRyxTQUFVQyxFQUFFO1FBQ3JCQSxLQUFLLE9BQU9BLE9BQU8sV0FBV1YsRUFBRVUsSUFBSUMsR0FBRyxDQUFDLEtBQUtEO1FBQzdDLE9BQU9BLEtBQUssSUFBSUUsTUFBTUYsTUFBTTtJQUM5QjtJQUVBLFNBQVNFLE1BQU1GLEVBQUU7UUFDZixJQUFJRyxTQUFTO1FBQ2IsSUFBSUMsV0FBVztRQUNmLElBQUlDLGFBQWFDLEtBQUtDLEdBQUcsQ0FBQ0QsS0FBS0UsS0FBSyxDQUFDZixPQUFPZ0IsVUFBVSxHQUFHLE9BQU87UUFDaEUsSUFBSUM7UUFDSixJQUFJQztRQUVKWCxHQUFHWSxnQkFBZ0IsQ0FBQyxjQUFjQyxPQUFPO1FBQ3pDYixHQUFHWSxnQkFBZ0IsQ0FBQyxhQUFhRSxNQUFNO1FBQ3ZDZCxHQUFHWSxnQkFBZ0IsQ0FBQyxZQUFZRyxLQUFLO1FBQ3JDZix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
10812
10813}),
10814"9858": (function (module, __unused_webpack_exports, __webpack_require__) {
10815"use strict";
10816/* globals window, document */ /**
10817 * Webflow: Dropdown component
10818 */ 
10819var Webflow = __webpack_require__(3949);
10820var IXEvents = __webpack_require__(5134);
10821const KEY_CODES = {
10822    ARROW_LEFT: 37,
10823    ARROW_UP: 38,
10824    ARROW_RIGHT: 39,
10825    ARROW_DOWN: 40,
10826    ESCAPE: 27,
10827    SPACE: 32,
10828    ENTER: 13,
10829    HOME: 36,
10830    END: 35
10831};
10832const FORCE_CLOSE = true;
10833/**
10834 * This pattern matches links that begin with a `#` AND have some alphanumeric
10835 * characters after it, including also hyphens and underscores
10836 *
10837 * Matches:
10838 * #foo
10839 * #999
10840 * #foo-bar_baz
10841 *
10842 * Does not match:
10843 * #
10844 */ const INTERNAL_PAGE_LINK_HASHES_PATTERN = /^#[a-zA-Z0-9\-_]+$/;
10845Webflow.define('dropdown', module.exports = function($, _) {
10846    var debounce = _.debounce;
10847    var api = {};
10848    var inApp = Webflow.env();
10849    var inPreview = false;
10850    var inDesigner;
10851    var touch = Webflow.env.touch;
10852    var namespace = '.w-dropdown';
10853    var openStateClassName = 'w--open';
10854    var ix = IXEvents.triggers;
10855    var defaultZIndex = 900; // @dropdown-depth
10856    var focusOutEvent = 'focusout' + namespace;
10857    var keydownEvent = 'keydown' + namespace;
10858    var mouseEnterEvent = 'mouseenter' + namespace;
10859    var mouseMoveEvent = 'mousemove' + namespace;
10860    var mouseLeaveEvent = 'mouseleave' + namespace;
10861    var mouseUpEvent = (touch ? 'click' : 'mouseup') + namespace;
10862    var closeEvent = 'w-close' + namespace;
10863    var settingEvent = 'setting' + namespace;
10864    var $doc = $(document);
10865    var $dropdowns;
10866    // -----------------------------------
10867    // Module methods
10868    api.ready = init;
10869    api.design = function() {
10870        // Close all when returning from preview
10871        if (inPreview) {
10872            closeAll();
10873        }
10874        inPreview = false;
10875        init();
10876    };
10877    api.preview = function() {
10878        inPreview = true;
10879        init();
10880    };
10881    // -----------------------------------
10882    // Private methods
10883    function init() {
10884        inDesigner = inApp && Webflow.env('design');
10885        // Find all instances on the page
10886        $dropdowns = $doc.find(namespace);
10887        $dropdowns.each(build);
10888    }
10889    function build(i, el) {
10890        var $el = $(el);
10891        // Store state in data
10892        var data = $.data(el, namespace);
10893        if (!data) {
10894            data = $.data(el, namespace, {
10895                open: false,
10896                el: $el,
10897                config: {},
10898                selectedIdx: -1
10899            });
10900        }
10901        data.toggle = data.el.children('.w-dropdown-toggle');
10902        data.list = data.el.children('.w-dropdown-list');
10903        data.links = data.list.find('a:not(.w-dropdown .w-dropdown a)');
10904        data.complete = complete(data);
10905        data.mouseLeave = makeMouseLeaveHandler(data);
10906        data.mouseUpOutside = outside(data);
10907        data.mouseMoveOutside = moveOutside(data);
10908        // Set config from data attributes
10909        configure(data);
10910        // Store the IDs of the toggle button & list
10911        var toggleId = data.toggle.attr('id');
10912        var listId = data.list.attr('id');
10913        // If user did not provide toggle ID, set it
10914        if (!toggleId) {
10915            toggleId = 'w-dropdown-toggle-' + i;
10916        }
10917        // If user did not provide list ID, set it
10918        if (!listId) {
10919            listId = 'w-dropdown-list-' + i;
10920        }
10921        // Add attributes to toggle element
10922        data.toggle.attr('id', toggleId);
10923        data.toggle.attr('aria-controls', listId);
10924        data.toggle.attr('aria-haspopup', 'menu');
10925        data.toggle.attr('aria-expanded', 'false');
10926        // Hide toggle icon from ATs
10927        data.toggle.find('.w-icon-dropdown-toggle').attr('aria-hidden', 'true');
10928        // If toggle element is not a button
10929        if (data.toggle.prop('tagName') !== 'BUTTON') {
10930            // Give it an appropriate role
10931            data.toggle.attr('role', 'button');
10932            // And give it a tabindex if user has not provided one
10933            if (!data.toggle.attr('tabindex')) {
10934                data.toggle.attr('tabindex', '0');
10935            }
10936        }
10937        // Add attributes to list element
10938        data.list.attr('id', listId);
10939        data.list.attr('aria-labelledby', toggleId);
10940        data.links.each(function(idx, link) {
10941            /**
10942         * In macOS Safari, links don't take focus on click unless they have
10943         * a tabindex. Without this, the dropdown will break.
10944         * @see https://gist.github.com/cvrebert/68659d0333a578d75372
10945         */ if (!link.hasAttribute('tabindex')) link.setAttribute('tabindex', '0');
10946            // We want to close the drop down if the href links somewhere internally
10947            // to the page
10948            if (INTERNAL_PAGE_LINK_HASHES_PATTERN.test(link.hash)) {
10949                link.addEventListener('click', close.bind(null, data));
10950            }
10951        });
10952        // Remove old events
10953        data.el.off(namespace);
10954        data.toggle.off(namespace);
10955        if (data.nav) {
10956            data.nav.off(namespace);
10957        }
10958        var initialToggler = makeToggler(data, FORCE_CLOSE);
10959        if (inDesigner) {
10960            data.el.on(settingEvent, makeSettingEventHandler(data));
10961        }
10962        if (!inDesigner) {
10963            // Close in preview mode and clean the data.hovering state
10964            if (inApp) {
10965                data.hovering = false;
10966                close(data);
10967            }
10968            if (data.config.hover) {
10969                data.toggle.on(mouseEnterEvent, makeMouseEnterHandler(data));
10970            }
10971            data.el.on(closeEvent, initialToggler);
10972            data.el.on(keydownEvent, makeDropdownKeydownHandler(data));
10973            data.el.on(focusOutEvent, makeDropdownFocusOutHandler(data));
10974            data.toggle.on(mouseUpEvent, initialToggler);
10975            data.toggle.on(keydownEvent, makeToggleKeydownHandler(data));
10976            data.nav = data.el.closest('.w-nav');
10977            data.nav.on(closeEvent, initialToggler);
10978        }
10979    }
10980    /**
10981     * Mutate the data object with a new config property
10982     */ function configure(data) {
10983        // Determine if z-index should be managed
10984        var zIndex = Number(data.el.css('z-index'));
10985        data.manageZ = zIndex === defaultZIndex || zIndex === defaultZIndex + 1;
10986        data.config = {
10987            hover: data.el.attr('data-hover') === 'true' && !touch,
10988            delay: data.el.attr('data-delay')
10989        };
10990    }
10991    function makeSettingEventHandler(data) {
10992        return function(evt, options) {
10993            options = options || {};
10994            configure(data);
10995            options.open === true && open(data);
10996            options.open === false && close(data, {
10997                immediate: true
10998            });
10999        };
11000    }
11001    function makeToggler(data, forceClose) {
11002        return debounce(function(evt) {
11003            if (data.open || evt && evt.type === 'w-close') {
11004                return close(data, {
11005                    forceClose
11006                });
11007            }
11008            open(data);
11009        });
11010    }
11011    function open(data) {
11012        if (data.open) {
11013            return;
11014        }
11015        closeOthers(data);
11016        data.open = true;
11017        data.list.addClass(openStateClassName);
11018        data.toggle.addClass(openStateClassName);
11019        data.toggle.attr('aria-expanded', 'true'); // ARIA
11020        ix.intro(0, data.el[0]);
11021        Webflow.redraw.up();
11022        // Increase z-index to keep above other managed dropdowns
11023        data.manageZ && data.el.css('z-index', defaultZIndex + 1);
11024        // Listen for click outside events
11025        var isEditor = Webflow.env('editor');
11026        if (!inDesigner) {
11027            $doc.on(mouseUpEvent, data.mouseUpOutside);
11028        }
11029        if (data.hovering && !isEditor) {
11030            data.el.on(mouseLeaveEvent, data.mouseLeave);
11031        }
11032        if (data.hovering && isEditor) {
11033            $doc.on(mouseMoveEvent, data.mouseMoveOutside);
11034        }
11035        // Clear previous delay
11036        window.clearTimeout(data.delayId);
11037    }
11038    function close(data, { immediate, forceClose } = {}) {
11039        if (!data.open) {
11040            return;
11041        }
11042        // Do not close hover-based menus if currently hovering
11043        if (data.config.hover && data.hovering && !forceClose) {
11044            return;
11045        }
11046        data.toggle.attr('aria-expanded', 'false');
11047        data.open = false;
11048        var config = data.config;
11049        ix.outro(0, data.el[0]);
11050        // Stop listening for click outside events
11051        $doc.off(mouseUpEvent, data.mouseUpOutside);
11052        $doc.off(mouseMoveEvent, data.mouseMoveOutside);
11053        data.el.off(mouseLeaveEvent, data.mouseLeave);
11054        // Clear previous delay
11055        window.clearTimeout(data.delayId);
11056        // Skip delay during immediate
11057        if (!config.delay || immediate) {
11058            return data.complete();
11059        }
11060        // Optionally wait for delay before close
11061        data.delayId = window.setTimeout(data.complete, config.delay);
11062    }
11063    function closeAll() {
11064        $doc.find(namespace).each(function(i, el) {
11065            $(el).triggerHandler(closeEvent);
11066        });
11067    }
11068    function closeOthers(data) {
11069        var self = data.el[0];
11070        $dropdowns.each(function(i, other) {
11071            var $other = $(other);
11072            if ($other.is(self) || $other.has(self).length) {
11073                return;
11074            }
11075            $other.triggerHandler(closeEvent);
11076        });
11077    }
11078    function outside(data) {
11079        // Unbind previous click handler if it exists
11080        if (data.mouseUpOutside) {
11081            $doc.off(mouseUpEvent, data.mouseUpOutside);
11082        }
11083        // Close menu when clicked outside
11084        return debounce(function(evt) {
11085            if (!data.open) {
11086                return;
11087            }
11088            var $target = $(evt.target);
11089            if ($target.closest('.w-dropdown-toggle').length) {
11090                return;
11091            }
11092            var isEventOutsideDropdowns = $.inArray(data.el[0], $target.parents(namespace)) === -1;
11093            var isEditor = Webflow.env('editor');
11094            if (isEventOutsideDropdowns) {
11095                if (isEditor) {
11096                    var isEventOnDetachedSvg = $target.parents().length === 1 && $target.parents('svg').length === 1;
11097                    var isEventOnHoverControls = $target.parents('.w-editor-bem-EditorHoverControls').length;
11098                    if (isEventOnDetachedSvg || isEventOnHoverControls) {
11099                        return;
11100                    }
11101                }
11102                close(data);
11103            }
11104        });
11105    }
11106    function complete(data) {
11107        return function() {
11108            data.list.removeClass(openStateClassName);
11109            data.toggle.removeClass(openStateClassName);
11110            // Reset z-index for managed dropdowns
11111            data.manageZ && data.el.css('z-index', '');
11112        };
11113    }
11114    function makeMouseEnterHandler(data) {
11115        return function() {
11116            data.hovering = true;
11117            open(data);
11118        };
11119    }
11120    function makeMouseLeaveHandler(data) {
11121        return function() {
11122            data.hovering = false;
11123            // We do not want the list to close upon mouseleave
11124            // if one of the links has focus
11125            if (!data.links.is(':focus')) {
11126                close(data);
11127            }
11128        };
11129    }
11130    function moveOutside(data) {
11131        return debounce(function(evt) {
11132            if (!data.open) {
11133                return;
11134            }
11135            var $target = $(evt.target);
11136            var isEventOutsideDropdowns = $.inArray(data.el[0], $target.parents(namespace)) === -1;
11137            if (isEventOutsideDropdowns) {
11138                var isEventOnHoverControls = $target.parents('.w-editor-bem-EditorHoverControls').length;
11139                var isEventOnHoverToolbar = $target.parents('.w-editor-bem-RTToolbar').length;
11140                var $editorOverlay = $('.w-editor-bem-EditorOverlay');
11141                var isDropdownInEdition = $editorOverlay.find('.w-editor-edit-outline').length || $editorOverlay.find('.w-editor-bem-RTToolbar').length;
11142                if (isEventOnHoverControls || isEventOnHoverToolbar || isDropdownInEdition) {
11143                    return;
11144                }
11145                data.hovering = false;
11146                close(data);
11147            }
11148        });
11149    }
11150    function makeDropdownKeydownHandler(data) {
11151        return function(evt) {
11152            // Don't respond to keyboard in designer or if the list is not open
11153            if (inDesigner || !data.open) {
11154                return;
11155            }
11156            // Realign selectedIdx with the menu item that is currently in focus.
11157            // We need this because we do not track the `Tab` key activity!
11158            data.selectedIdx = data.links.index(document.activeElement);
11159            // Evaluate item-selection logic
11160            switch(evt.keyCode){
11161                case KEY_CODES.HOME:
11162                    {
11163                        if (!data.open) return;
11164                        data.selectedIdx = 0;
11165                        focusSelectedLink(data);
11166                        return evt.preventDefault();
11167                    }
11168                case KEY_CODES.END:
11169                    {
11170                        if (!data.open) return;
11171                        data.selectedIdx = data.links.length - 1;
11172                        focusSelectedLink(data);
11173                        return evt.preventDefault();
11174                    }
11175                case KEY_CODES.ESCAPE:
11176                    {
11177                        close(data);
11178                        data.toggle.focus();
11179                        return evt.stopPropagation();
11180                    }
11181                case KEY_CODES.ARROW_RIGHT:
11182                case KEY_CODES.ARROW_DOWN:
11183                    {
11184                        data.selectedIdx = Math.min(data.links.length - 1, data.selectedIdx + 1);
11185                        focusSelectedLink(data);
11186                        return evt.preventDefault();
11187                    }
11188                case KEY_CODES.ARROW_LEFT:
11189                case KEY_CODES.ARROW_UP:
11190                    {
11191                        data.selectedIdx = Math.max(-1, data.selectedIdx - 1);
11192                        focusSelectedLink(data);
11193                        return evt.preventDefault();
11194                    }
11195            }
11196        };
11197    }
11198    function focusSelectedLink(data) {
11199        if (data.links[data.selectedIdx]) {
11200            data.links[data.selectedIdx].focus();
11201        }
11202    }
11203    function makeToggleKeydownHandler(data) {
11204        // We want to close immediately
11205        // if interacting via keyboard
11206        var toggler = makeToggler(data, FORCE_CLOSE);
11207        return function(evt) {
11208            if (inDesigner) return;
11209            // If the menu is not open, we don't want
11210            // the up or Down arrows to do anything
11211            if (!data.open) {
11212                switch(evt.keyCode){
11213                    case KEY_CODES.ARROW_UP:
11214                    case KEY_CODES.ARROW_DOWN:
11215                        {
11216                            return evt.stopPropagation();
11217                        }
11218                }
11219            }
11220            switch(evt.keyCode){
11221                case KEY_CODES.SPACE:
11222                case KEY_CODES.ENTER:
11223                    {
11224                        toggler();
11225                        evt.stopPropagation();
11226                        return evt.preventDefault();
11227                    }
11228            }
11229        };
11230    }
11231    function makeDropdownFocusOutHandler(data) {
11232        return debounce(function(evt) {
11233            var { relatedTarget, target } = evt;
11234            var menuEl = data.el[0];
11235            /**
11236         * Close menu
11237         * With focusout events, the `relatedTarget` is the element that will next receive focus.
11238         * @see: https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/relatedTarget
11239         */ var menuContainsFocus = menuEl.contains(relatedTarget) || menuEl.contains(target);
11240            if (!menuContainsFocus) {
11241                close(data);
11242            }
11243            return evt.stopPropagation();
11244        });
11245    }
11246    // Export module
11247    return api;
11248});
11249
11250//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctZHJvcGRvd24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3csIGRvY3VtZW50ICovXG5cbi8qKlxuICogV2ViZmxvdzogRHJvcGRvd24gY29tcG9uZW50XG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuLi9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1saWInKTtcbnZhciBJWEV2ZW50cyA9IHJlcXVpcmUoJy4uL0Jhc2VTaXRlTW9kdWxlcy93ZWJmbG93LWl4Mi1ldmVud
11250HMnKTtcblxuY29uc3QgS0VZX0NPREVTID0ge1xuICBBUlJPV19MRUZUOiAzNyxcbiAgQVJST1dfVVA6IDM4LFxuICBBUlJPV19SSUdIVDogMzksXG4gIEFSUk9XX0RPV046IDQwLFxuICBFU0NBUEU6IDI3LFxuICBTUEFDRTogMzIsXG4gIEVOVEVSOiAxMyxcbiAgSE9NRTogMzYsXG4gIEVORDogMzUsXG59O1xuXG5jb25zdCBGT1JDRV9DTE9TRSA9IHRydWU7XG5cbi8qKlxuICogVGhpcyBwYXR0ZXJuIG1hdGNoZXMgbGlua3MgdGhhdCBiZWdpbiB3aXRoIGEgYCNgIEFORCBoYXZlIHNvbWUgYWxwaGFudW1lcmljXG4gKiBjaGFyYWN0ZXJzIGFmdGVyIGl0LCBpbmNsdWRpbmcgYWxzbyBoeXBoZW5zIGFuZCB1bmRlcnNjb3Jlc1xuICpcbiAqIE1hdGNoZXM6XG4gKiAjZm9vXG4gKiAjOTk5XG4gKiAjZm9vLWJhcl9iYXpcbiAqXG4gKiBEb2VzIG5vdCBtYXRjaDpcbiAqICNcbiAqL1xuY29uc3QgSU5URVJOQUxfUEFHRV9MSU5LX0hBU0hFU19QQVRURVJOID0gL14jW2EtekEtWjAtOVxcLV9dKyQvO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ2Ryb3Bkb3duJyxcbiAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCQsIF8pIHtcbiAgICB2YXIgZGVib3VuY2UgPSBfLmRlYm91bmNlO1xuXG4gICAgdmFyIGFwaSA9IHt9O1xuICAgIHZhciBpbkFwcCA9IFdlYmZsb3cuZW52KCk7XG4gICAgdmFyIGluUHJldmlldyA9IGZhbHNlO1xuICAgIHZhciBpbkRlc2lnbmVyO1xuICAgIHZhciB0b3VjaCA9IFdlYmZsb3cuZW52LnRvdWNoO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctZHJvcGRvd24nO1xuICAgIHZhciBvcGVuU3RhdGVDbGFzc05hbWUgPSAndy0tb3Blbic7XG4gICAgdmFyIGl4ID0gSVhFdmVudHMudHJpZ2dlcnM7XG4gICAgdmFyIGRlZmF1bHRaSW5kZXggPSA5MDA7IC8vIEBkcm9wZG93bi1kZXB0aFxuXG4gICAgdmFyIGZvY3VzT3V0RXZlbnQgPSAnZm9jdXNvdXQnICsgbmFtZXNwYWNlO1xuICAgIHZhciBrZXlkb3duRXZlbnQgPSAna2V5ZG93bicgKyBuYW1lc3BhY2U7XG4gICAgdmFyIG1vdXNlRW50ZXJFdmVudCA9ICdtb3VzZWVudGVyJyArIG5hbWVzcGFjZTtcbiAgICB2YXIgbW91c2VNb3ZlRXZlbnQgPSAnbW91c2Vtb3ZlJyArIG5hbWVzcGFjZTtcbiAgICB2YXIgbW91c2VMZWF2ZUV2ZW50ID0gJ21vdXNlbGVhdmUnICsgbmFtZXNwYWNlO1xuICAgIHZhciBtb3VzZVVwRXZlbnQgPSAodG91Y2ggPyAnY2xpY2snIDogJ21vdXNldXAnKSArIG5hbWVzcGFjZTtcblxuICAgIHZhciBjbG9zZUV2ZW50ID0gJ3ctY2xvc2UnICsgbmFtZXNwYWNlO1xuICAgIHZhciBzZXR0aW5nRXZlbnQgPSAnc2V0dGluZycgKyBuYW1lc3BhY2U7XG5cbiAgICB2YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xuICAgIHZhciAkZHJvcGRvd25zO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGluaXQ7XG5cbiAgICBhcGkuZGVzaWduID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQ2xvc2UgYWxsIHdoZW4gcmV0dXJuaW5nIGZyb20gcHJldmlld1xuICAgICAgaWYgKGluUHJldmlldykge1xuICAgICAgICBjbG9zZUFsbCgpO1xuICAgICAgfVxuICAgICAgaW5QcmV2aWV3ID0gZmFsc2U7XG4gICAgICBpbml0KCk7XG4gICAgfTtcblxuICAgIGFwaS5wcmV2aWV3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5QcmV2aWV3ID0gdHJ1ZTtcbiAgICAgIGluaXQoKTtcbiAgICB9O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBpbkRlc2lnbmVyID0gaW5BcHAgJiYgV2ViZmxvdy5lbnYoJ2Rlc2lnbicpO1xuXG4gICAgICAvLyBGaW5kIGFsbCBpbnN0YW5jZXMgb24gdGhlIHBhZ2VcbiAgICAgICRkcm9wZG93bnMgPSAkZG9jLmZpbmQobmFtZXNwYWNlKTtcbiAgICAgICRkcm9wZG93bnMuZWFjaChidWlsZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGQoaSwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcblxuICAgICAgLy8gU3RvcmUgc3RhdGUgaW4gZGF0YVxuICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlLCB7XG4gICAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgICAgZWw6ICRlbCxcbiAgICAgICAgICBjb25maWc6IHt9LFxuICAgICAgICAgIHNlbGVjdGVkSWR4OiAtMSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkYXRhLnRvZ2dsZSA9IGRhdGEuZWwuY2hpbGRyZW4oJy53LWRyb3Bkb3duLXRvZ2dsZScpO1xuICAgICAgZGF0YS5saXN0ID0gZGF0YS5lbC5jaGlsZHJlbignLnctZHJvcGRvd24tbGlzdCcpO1xuICAgICAgZGF0YS5saW5rcyA9IGRhdGEubGlzdC5maW5kKCdhOm5vdCgudy1kcm9wZG93biAudy1kcm9wZG93biBhKScpO1xuICAgICAgZGF0YS5jb21wbGV0ZSA9IGNvbXBsZXRlKGRhdGEpO1xuICAgICAgZGF0YS5tb3VzZUxlYXZlID0gbWFrZU1vdXNlTGVhdmVIYW5kbGVyKGRhdGEpO1xuICAgICAgZGF0YS5tb3VzZVVwT3V0c2lkZSA9IG91dHNpZGUoZGF0YSk7XG4gICAgICBkYXRhLm1vdXNlTW92ZU91dHNpZGUgPSBtb3ZlT3V0c2lkZShkYXRhKTtcblxuICAgICAgLy8gU2V0IGNvbmZpZyBmcm9tIGRhdGEgYXR0cmlidXRlc1xuICAgICAgY29uZmlndXJlKGRhdGEpO1xuXG4gICAgICAvLyBTdG9yZSB0aGUgSURzIG9mIHRoZSB0b2dnbGUgYnV0dG9uICYgbGlzdFxuICAgICAgdmFyIHRvZ2dsZUlkID0gZGF0YS50b2dnbGUuYXR0cignaWQnKTtcbiAgICAgIHZhciBsaXN0SWQgPSBkYXRhLmxpc3QuYXR0cignaWQnKTtcblxuICAgICAgLy8gSWYgdXNlciBkaWQgbm90IHByb3ZpZGUgdG9nZ2xlIElELCBzZXQgaXRcbiAgICAgIGlmICghdG9nZ2xlSWQpIHtcbiAgICAgICAgdG9nZ2xlSWQgPSAndy1kcm9wZG93bi10b2dnbGUtJyArIGk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzZXIgZGlkIG5vdCBwcm92aWRlIGxpc3QgSUQsIHNldCBpdFxuICAgICAgaWYgKCFsaXN0SWQpIHtcbiAgICAgICAgbGlzdElkID0gJ3ctZHJvcGRvd24tbGlzdC0nICsgaTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGF0dHJpYnV0ZXMgdG8gdG9nZ2xlIGVsZW1lbnRcbiAgICAgIGRhdGEudG9nZ2xlLmF0dHIoJ2lkJywgdG9nZ2xlSWQpO1xuICAgICAgZGF0YS50b2dnbGUuYXR0cignYXJpYS1jb250cm9scycsIGxpc3RJZCk7XG4gICAgICBkYXRhLnRvZ2dsZS5hdHRyKCdhcmlhLWhhc3BvcHVwJywgJ21lbnUnKTtcbiAgICAgIGRhdGEudG9nZ2xlLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgICAgLy8gSGlkZSB0b2dnbGUgaWNvbiBmcm9tIEFUc1xuICAgICAgZGF0YS50b2dnbGUuZmluZCgnLnctaWNvbi1kcm9wZG93bi10b2dnbGUnKS5hdHRyKCdhcmlhLWh
11250pZGRlbicsICd0cnVlJyk7XG5cbiAgICAgIC8vIElmIHRvZ2dsZSBlbGVtZW50IGlzIG5vdCBhIGJ1dHRvblxuICAgICAgaWYgKGRhdGEudG9nZ2xlLnByb3AoJ3RhZ05hbWUnKSAhPT0gJ0JVVFRPTicpIHtcbiAgICAgICAgLy8gR2l2ZSBpdCBhbiBhcHByb3ByaWF0ZSByb2xlXG4gICAgICAgIGRhdGEudG9nZ2xlLmF0dHIoJ3JvbGUnLCAnYnV0dG9uJyk7XG5cbiAgICAgICAgLy8gQW5kIGdpdmUgaXQgYSB0YWJpbmRleCBpZiB1c2VyIGhhcyBub3QgcHJvdmlkZWQgb25lXG4gICAgICAgIGlmICghZGF0YS50b2dnbGUuYXR0cigndGFiaW5kZXgnKSkge1xuICAgICAgICAgIGRhdGEudG9nZ2xlLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYXR0cmlidXRlcyB0byBsaXN0IGVsZW1lbnRcbiAgICAgIGRhdGEubGlzdC5hdHRyKCdpZCcsIGxpc3RJZCk7XG4gICAgICBkYXRhLmxpc3QuYXR0cignYXJpYS1sYWJlbGxlZGJ5JywgdG9nZ2xlSWQpO1xuXG4gICAgICBkYXRhLmxpbmtzLmVhY2goZnVuY3Rpb24gKGlkeCwgbGluaykge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW4gbWFjT1MgU2FmYXJpLCBsaW5rcyBkb24ndCB0YWtlIGZvY3VzIG9uIGNsaWNrIHVubGVzcyB0aGV5IGhhdmVcbiAgICAgICAgICogYSB0YWJpbmRleC4gV2l0aG91dCB0aGlzLCB0aGUgZHJvcGRvd24gd2lsbCBicmVhay5cbiAgICAgICAgICogQHNlZSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9jdnJlYmVydC82ODY1OWQwMzMzYTU3OGQ3NTM3MlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKCFsaW5rLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkgbGluay5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcblxuICAgICAgICAvLyBXZSB3YW50IHRvIGNsb3NlIHRoZSBkcm9wIGRvd24gaWYgdGhlIGhyZWYgbGlua3Mgc29tZXdoZXJlIGludGVybmFsbHlcbiAgICAgICAgLy8gdG8gdGhlIHBhZ2VcbiAgICAgICAgaWYgKElOVEVSTkFMX1BBR0VfTElOS19IQVNIRVNfUEFUVEVSTi50ZXN0KGxpbmsuaGFzaCkpIHtcbiAgICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2UuYmluZChudWxsLCBkYXRhKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZW1vdmUgb2xkIGV2ZW50c1xuICAgICAgZGF0YS5lbC5vZmYobmFtZXNwYWNlKTtcbiAgICAgIGRhdGEudG9nZ2xlLm9mZihuYW1lc3BhY2UpO1xuXG4gICAgICBpZiAoZGF0YS5uYXYpIHtcbiAgICAgICAgZGF0YS5uYXYub2ZmKG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgICB2Y
11250XIgaW5pdGlhbFRvZ2dsZXIgPSBtYWtlVG9nZ2xlcihkYXRhLCBGT1JDRV9DTE9TRSk7XG5cbiAgICAgIGlmIChpbkRlc2lnbmVyKSB7XG4gICAgICAgIGRhdGEuZWwub24oc2V0dGluZ0V2ZW50LCBtYWtlU2V0dGluZ0V2ZW50SGFuZGxlcihkYXRhKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWluRGVzaWduZXIpIHtcbiAgICAgICAgLy8gQ2xvc2UgaW4gcHJldmlldyBtb2RlIGFuZCBjbGVhbiB0aGUgZGF0YS5ob3ZlcmluZyBzdGF0ZVxuICAgICAgICBpZiAoaW5BcHApIHtcbiAgICAgICAgICBkYXRhLmhvdmVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgY2xvc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuY29uZmlnLmhvdmVyKSB7XG4gICAgICAgICAgZGF0YS50b2dnbGUub24obW91c2VFbnRlckV2ZW50LCBtYWtlTW91c2VFbnRlckhhbmRsZXIoZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuZWwub24oY2xvc2VFdmVudCwgaW5pdGlhbFRvZ2dsZXIpO1xuICAgICAgICBkYXRhLmVsLm9uKGtleWRvd25FdmVudCwgbWFrZURyb3Bkb3duS2V5ZG93bkhhbmRsZXIoZGF0YSkpO1xuICAgICAgICBkYXRhLmVsLm9uKGZvY3VzT3V0RXZlbnQsIG1ha2VEcm9wZG93bkZvY3VzT3V0SGFuZGxlcihkYXRhKSk7XG5cbiAgICAgICAgZGF0YS50b2dnbGUub24obW91c2VVcEV2ZW50LCBpbml0aWFsVG9nZ2xlcik7XG4gICAgICAgIGRhdGEudG9nZ2xlLm9uKGtleWRvd25FdmVudCwgbWFrZVRvZ2dsZUtleWRvd25IYW5kbGVyKGRhdGEpKTtcblxuICAgICAgICBkYXRhLm5hdiA9IGRhdGEuZWwuY2xvc2VzdCgnLnctbmF2Jyk7XG4gICAgICAgIGRhdGEubmF2Lm9uKGNsb3NlRXZlbnQsIGluaXRpYWxUb2dnbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNdXRhdGUgdGhlIGRhdGEgb2JqZWN0IHdpdGggYSBuZXcgY29uZmlnIHByb3BlcnR5XG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGRhdGEpIHtcbiAgICAgIC8vIERldGVybWluZSBpZiB6LWluZGV4IHNob3VsZCBiZSBtYW5hZ2VkXG4gICAgICB2Y
11250XIgekluZGV4ID0gTnVtYmVyKGRhdGEuZWwuY3NzKCd6LWluZGV4JykpO1xuICAgICAgZGF0YS5tYW5hZ2VaID0gekluZGV4ID09PSBkZWZhdWx0WkluZGV4IHx8IHpJbmRleCA9PT0gZGVmYXVsdFpJbmRleCArIDE7XG4gICAgICBkYXRhLmNvbmZpZyA9IHtcbiAgICAgICAgaG92ZXI6IGRhdGEuZWwuYXR0cignZGF0YS1ob3ZlcicpID09PSAndHJ1ZScgJiYgIXRvdWNoLFxuICAgICAgICBkZWxheTogZGF0YS5lbC5hdHRyKCdkYXRhLWRlbGF5JyksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VTZXR0aW5nRXZlbnRIYW5kbGVyKGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0LCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25maWd1cmUoZGF0YSk7XG4gICAgICAgIG9wdGlvbnMub3BlbiA9PT0gdHJ1ZSAmJiBvcGVuKGRhdGEpO1xuICAgICAgICBvcHRpb25zLm9wZW4gPT09IGZhbHNlICYmIGNsb3NlKGRhdGEsIHtpbW1lZGlhdGU6IHRydWV9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZVRvZ2dsZXIoZGF0YSwgZm9yY2VDbG9zZSkge1xuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgaWYgKGRhdGEub3BlbiB8fCAoZXZ0ICYmIGV2dC50eXBlID09PSAndy1jbG9zZScpKSB7XG4gICAgICAgICAgcmV0dXJuIGNsb3NlKGRhdGEsIHtmb3JjZUNsb3NlfSk7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbihkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW4oZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsb3NlT3RoZXJzKGRhdGEpO1xuICAgICAgZGF0YS5vcGVuID0gdHJ1ZTtcbiAgICAgIGRhdGEubGlzdC5hZGRDbGFzcyhvcGVuU3RhdGVDbGFzc05hbWUpO1xuICAgICAgZGF0YS50b2dnbGUuYWRkQ2xhc3Mob3BlblN0YXRlQ2xhc3NOYW1lKTtcbiAgICAgIGRhdGEudG9nZ2xlLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpOyAvLyBBUklBXG4gICAgICBpeC5pbnRybygwLCBkYXRhLmVsWzBdKTtcbiAgICAgIFdlYmZsb3cucmVkcmF3LnVwKCk7XG5cbiAgICAgIC8vIEluY3JlYXNlIHotaW5kZXggdG8ga2VlcCBhYm92ZSBvdGhlciBtYW5hZ2VkIGRyb3Bkb3duc1xuICAgICAgZGF0YS5tYW5hZ2VaICYmIGRhdGEuZWwuY3NzKCd6LWluZGV4JywgZGVmYXVsdFpJbmRleCArIDEpO1xuXG4gICAgICAvLyBMaXN0ZW4gZm9yIGNsaWNrIG91dHNpZGUgZXZlbnRzXG4gICAgICB2Y
11250XIgaXNFZGl0b3IgPSBXZWJmbG93LmVudignZWRpdG9yJyk7XG4gICAgICBpZiAoIWluRGVzaWduZXIpIHtcbiAgICAgICAgJGRvYy5vbihtb3VzZVVwRXZlbnQsIGRhdGEubW91c2VVcE91dHNpZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuaG92ZXJpbmcgJiYgIWlzRWRpdG9yKSB7XG4gICAgICAgIGRhdGEuZWwub24obW91c2VMZWF2ZUV2ZW50LCBkYXRhLm1vdXNlTGVhdmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuaG92ZXJpbmcgJiYgaXNFZGl0b3IpIHtcbiAgICAgICAgJGRvYy5vbihtb3VzZU1vdmVFdmVudCwgZGF0YS5tb3VzZU1vdmVPdXRzaWRlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgZGVsYXlcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZGF0YS5kZWxheUlkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZShkYXRhLCB7aW1tZWRpYXRlLCBmb3JjZUNsb3NlfSA9IHt9KSB7XG4gICAgICBpZiAoIWRhdGEub3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERvIG5vdCBjbG9zZSBob3Zlci1iYXNlZCBtZW51cyBpZiBjdXJyZW50bHkgaG92ZXJpbmdcbiAgICAgIGlmIChkYXRhLmNvbmZpZy5ob3ZlciAmJiBkYXRhLmhvdmVyaW5nICYmICFmb3JjZUNsb3NlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGF0YS50b2dnbGUuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgICBkYXRhLm9wZW4gPSBmYWxzZTtcbiAgICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIGl4Lm91dHJvKDAsIGRhdGEuZWxbMF0pO1xuXG4gICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgY2xpY2sgb3V0c2lkZSBldmVudHNcbiAgICAgICRkb2Mub2ZmKG1vdXNlVXBFdmVudCwgZGF0YS5tb3VzZVVwT3V0c2lkZSk7XG4gICAgICAkZG9jLm9mZihtb3VzZU1vdmVFdmVudCwgZGF0YS5tb3VzZU1vdmVPdXRzaWRlKTtcbiAgICAgIGRhdGEuZWwub2ZmKG1vdXNlTGVhdmVFdmVudCwgZGF0YS5tb3VzZUxlYXZlKTtcblxuICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgZGVsYXlcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZGF0YS5kZWxheUlkKTtcblxuICAgICAgLy8gU2tpcCBkZWxheSBkdXJpbmcgaW1tZWRpYXRlXG4gICAgICBpZiAoIWNvbmZpZy5kZWxheSB8fCBpbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3B0aW9uYWxseSB3YWl0IGZvciBkZWxheSBiZWZvcmUgY2xvc2VcbiAgICAgIGRhdGEuZGVsYXlJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGRhdGEuY29tcGxldGUsIGNvbmZpZy5kZWxheSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvc2VBbGwoKSB7XG4gICAgICAkZG9jLmZpbmQobmFtZXNwYWNlKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICAkKGVsKS50cmlnZ2VySGFuZGxlcihjbG9zZUV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb3NlT3RoZXJzKGRhdGEpIHtcbiAgICAgIHZhciBzZWxmID0gZGF0YS5lbFswXTtcbiAgICAgICRkcm9wZG93bnMuZWFjaChmdW5jdGlvbiAoaSwgb3RoZXIpIHtcbiAgICAgICAgdmFyICRvdGhlciA9ICQob3RoZXIpO1xuICAgICAgICBpZiAoJG90aGVyLmlzKHNlbGYpIHx8ICRvdGhlci5oYXMoc2VsZikubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRvdGhlci50cmlnZ2VySGFuZGxlcihjbG9zZUV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG91dHNpZGUoZGF0YSkge1xuICAgICAgLy8gVW5iaW5kIHByZXZpb3VzIGNsaWNrIGhhbmRsZXIgaWYgaXQgZXhpc3RzXG4gICAgICBpZiAoZGF0YS5tb3VzZVVwT3V0c2lkZSkge1xuICAgICAgICAkZG9jLm9mZihtb3VzZVVwRXZlbnQsIGRhdGEubW91c2VVcE91dHNpZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbG9zZSBtZW51IHdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gICAgICByZXR1cm4gZGVib3VuY2UoZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBpZiAoIWRhdGEub3Blbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2Y
11250XIgJHRhcmdldCA9ICQoZXZ0LnRhcmdldCk7XG4gICAgICAgIGlmICgkdGFyZ2V0LmNsb3Nlc3QoJy53LWRyb3Bkb3duLXRvZ2dsZScpLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNFdmVudE91dHNpZGVEcm9wZG93bnMgPVxuICAgICAgICAgICQuaW5BcnJheShkYXRhLmVsWzBdLCAkdGFyZ2V0LnBhcmVudHMobmFtZXNwYWNlKSkgPT09IC0xO1xuICAgICAgICB2YXIgaXNFZGl0b3IgPSBXZWJmbG93LmVudignZWRpdG9yJyk7XG4gICAgICAgIGlmIChpc0V2ZW50T3V0c2lkZURyb3Bkb3ducykge1xuICAgICAgICAgIGlmIChpc0VkaXRvcikge1xuICAgICAgICAgICAgdmFyIGlzRXZlbnRPbkRldGFjaGVkU3ZnID1cbiAgICAgICAgICAgICAgJHRhcmdldC5wYXJlbnRzKCkubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICR0YXJnZXQucGFyZW50cygnc3ZnJykubGVuZ3RoID09PSAxO1xuICAgICAgICAgICAgdmFyIGlzRXZlbnRPbkhvdmVyQ29udHJvbHMgPSAkdGFyZ2V0LnBhcmVudHMoXG4gICAgICAgICAgICAgICcudy1lZGl0b3ItYmVtLUVkaXRvckhvdmVyQ29udHJvbHMnXG4gICAgICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChpc0V2ZW50T25EZXRhY2hlZFN2ZyB8fCBpc0V2ZW50T25Ib3ZlckNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2xvc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlKGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRhdGEubGlzdC5yZW1vdmVDbGFzcyhvcGVuU3RhdGVDbGFzc05hbWUpO1xuICAgICAgICBkYXRhLnRvZ2dsZS5yZW1vdmVDbGFzcyhvcGVuU3RhdGVDbGFzc05hbWUpO1xuXG4gICAgICAgIC8vIFJlc2V0IHotaW5kZXggZm9yIG1hbmFnZWQgZHJvcGRvd25zXG4gICAgICAgIGRhdGEubWFuYWdlWiAmJiBkYXRhLmVsLmNzcygnei1pbmRleCcsICcnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZU1vdXNlRW50ZXJIYW5kbGVyKGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRhdGEuaG92ZXJpbmcgPSB0cnVlO1xuICAgICAgICBvcGVuKGRhdGEpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlTW91c2VMZWF2ZUhhbmRsZXIoZGF0YSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGF0YS5ob3ZlcmluZyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBsaXN0IHRvIGNsb3NlIHVwb24gbW91c2VsZWF2ZVxuICAgICAgICAvLyBpZiBvbmUgb2YgdGhlIGxpbmtzIGhhcyBmb2N1c1xuICAgICAgICBpZiAoIWRhdGEubGlua3MuaXMoJzpmb2N1cycpKSB7XG4gICAgICAgICAgY2xvc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZU91dHNpZGUoZGF0YSkge1xuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgaWYgKCFkYXRhLm9wZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyICR0YXJnZXQgPSAkKGV2dC50YXJnZXQpO1xuICAgICAgICB2Y
11250XIgaXNFdmVudE91dHNpZGVEcm9wZG93bnMgPVxuICAgICAgICAgICQuaW5BcnJheShkYXRhLmVsWzBdLCAkdGFyZ2V0LnBhcmVudHMobmFtZXNwYWNlKSkgPT09IC0xO1xuICAgICAgICBpZiAoaXNFdmVudE91dHNpZGVEcm9wZG93bnMpIHtcbiAgICAgICAgICB2YXIgaXNFdmVudE9uSG92ZXJDb250cm9scyA9ICR0YXJnZXQucGFyZW50cyhcbiAgICAgICAgICAgICcudy1lZGl0b3ItYmVtLUVkaXRvckhvdmVyQ29udHJvbHMnXG4gICAgICAgICAgKS5sZW5ndGg7XG4gICAgICAgICAgdmFyIGlzRXZlbnRPbkhvdmVyVG9vbGJhciA9ICR0YXJnZXQucGFyZW50cyhcbiAgICAgICAgICAgICcudy1lZGl0b3ItYmVtLVJUVG9vbGJhcidcbiAgICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgICB2YXIgJGVkaXRvck92ZXJsYXkgPSAkKCcudy1lZGl0b3ItYmVtLUVkaXRvck92ZXJsYXknKTtcbiAgICAgICAgICB2YXIgaXNEcm9wZG93bkluRWRpdGlvbiA9XG4gICAgICAgICAgICAkZWRpdG9yT3ZlcmxheS5maW5kKCcudy1lZGl0b3ItZWRpdC1vdXRsaW5lJykubGVuZ3RoIHx8XG4gICAgICAgICAgICAkZWRpdG9yT3ZlcmxheS5maW5kKCcudy1lZGl0b3ItYmVtLVJUVG9vbGJhcicpLmxlbmd0aDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0V2ZW50T25Ib3ZlckNvbnRyb2xzIHx8XG4gICAgICAgICAgICBpc0V2ZW50T25Ib3ZlclRvb2xiYXIgfHxcbiAgICAgICAgICAgIGlzRHJvcGRvd25JbkVkaXRpb25cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YS5ob3ZlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIGNsb3NlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRHJvcGRvd25LZXlkb3duSGFuZGxlcihkYXRhKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAvLyBEb24ndCByZXNwb25kIHRvIGtleWJvYXJkIGluIGRlc2lnbmVyIG9yIGlmIHRoZSBsaXN0IGlzIG5vdCBvcGVuXG4gICAgICAgIGlmIChpbkRlc2lnbmVyIHx8ICFkYXRhLm9wZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWFsaWduIHNlbGVjdGVkSWR4IHdpdGggdGhlIG1lbnUgaXRlbSB0aGF0IGlzIGN1cnJlbnRseSBpbiBmb2N1cy5cbiAgICAgICAgLy8gV2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2UgZG8gbm90IHRyYWNrIHRoZSBgVGFiYCBrZXkgYWN0aXZpdHkhXG4gICAgICAgIGRhdGEuc2VsZWN0ZWRJZHggPSBkYXRhLmxpbmtzLmluZGV4KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIC8vIEV2YWx1YXRlIGl0ZW0tc2VsZWN0aW9uIGxvZ2ljXG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleUNvZGUpIHtcbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5IT01FOiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEub3BlbikgcmV0dXJuO1xuXG4gICAgICAgICAgICBkYXRhLnNlbGVjdGVkSWR4ID0gMDtcbiAgICAgICAgICAgIGZvY3VzU2VsZWN0ZWRMaW5rKGRhdGEpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXZ0LnByZXZlbn
11250REZWZhdWx0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBLRVlfQ09ERVMuRU5EOiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEub3BlbikgcmV0dXJuO1xuXG4gICAgICAgICAgICBkYXRhLnNlbGVjdGVkSWR4ID0gZGF0YS5saW5rcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgZm9jdXNTZWxlY3RlZExpbmsoZGF0YSk7XG5cbiAgICAgICAgICAgIHJldHVybiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5FU0NBUEU6IHtcbiAgICAgICAgICAgIGNsb3NlKGRhdGEpO1xuICAgICAgICAgICAgZGF0YS50b2dnbGUuZm9jdXMoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19SSUdIVDpcbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICBkYXRhLnNlbGVjdGVkSWR4ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgIGRhdGEubGlua3MubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgZGF0YS5zZWxlY3RlZElkeCArIDFcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvY3VzU2VsZWN0ZWRMaW5rKGRhdGEpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBLRVlfQ09ERVMuQVJST1dfTEVGVDpcbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19VUDoge1xuICAgICAgICAgICAgZGF0YS5zZWxlY3RlZElkeCA9IE1hdGgubWF4KC0xLCBkYXRhLnNlbGVjdGVkSWR4IC0gMSk7XG4gICAgICAgICAgICBmb2N1c1NlbGVjdGVkTGluayhkYXRhKTtcblxuICAgICAgICAgICAgcmV0dXJuIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb2N1c1NlbGVjdGVkTGluayhkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5saW5rc1tkYXRhLnNlbGVjdGVkSWR4XSkge1xuICAgICAgICBkYXRhLmxpbmtzW2RhdGEuc2VsZWN0ZWRJZHhdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZVRvZ2dsZUtleWRvd25IYW5kbGVyKGRhdGEpIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gY2xvc2UgaW1tZWRpYXRlbHlcbiAgICAgIC8vIGlmIGludGVyYWN0aW5nIHZpYSBrZXlib2FyZFxuICAgICAgdmFyIHRvZ2dsZXIgPSBtYWtlVG9nZ2xlcihkYXRhLCBGT1JDRV9DTE9TRSk7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgIGlmIChpbkRlc2lnbmVyKSByZXR1cm47XG5cbiAgICAgICAgLy8gSWYgdGhlIG1lbnUgaXMgbm90IG9wZW4sIHdlIGRvbid0IHdhbnRcbiAgICAgICAgLy8gdGhlIHVwIG9yIERvd24gYXJyb3dzIHRvIGRvIGFueXRoaW5nXG4gICAgICAgIGlmICghZGF0YS5vcGVuKSB7XG4gICAgICAgICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSBLRVlfQ09ERVMuQVJST1dfVVA6XG4gICAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICAgIHJldHVybiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLlNQQUNFOlxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkVOVEVSOiB7XG4gICAgICAgICAgICB0b2dnbGVyKCk7XG4gICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gZXZ0LnByZXZlbn
11250REZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VEcm9wZG93bkZvY3VzT3V0SGFuZGxlcihkYXRhKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2UoZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICB2YXIge3JlbGF0ZWRUYXJnZXQsIHRhcmdldH0gPSBldnQ7XG4gICAgICAgIHZhciBtZW51RWwgPSBkYXRhLmVsWzBdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2xvc2UgbWVudVxuICAgICAgICAgKiBXaXRoIGZvY3Vzb3V0IGV2ZW50cywgdGhlIGByZWxhdGVkVGFyZ2V0YCBpcyB0aGUgZWxlbWVudCB0aGF0IHdpbGwgbmV4dCByZWNlaXZlIGZvY3VzLlxuICAgICAgICAgKiBAc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRm9jdXNFdmVudC9yZWxhdGVkVGFyZ2V0XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgbWVudUNvbnRhaW5zRm9jdXMgPVxuICAgICAgICAgIG1lbnVFbC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSB8fCBtZW51RWwuY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgaWYgKCFtZW51Q29udGFpbnNGb2N1cykge1xuICAgICAgICAgIGNsb3NlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJJWEV2ZW50cyIsIktFWV9DT0RFUyIsIkFSUk9XX0xFRlQiLCJBUlJPV19VUCIsIkFSUk9XX1JJR0hUIiwiQVJST1dfRE9XTiIsIkVTQ0FQRSIsIlNQQUNFIiwiRU5URVIiLCJIT01FIiwiRU5EIiwiRk9SQ0VfQ0xPU0UiLCJJTlRFUk5BTF9QQUdFX0xJTktfSEFTSEVTX1BBVFRFUk4iLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsIl8iLCJkZWJvdW5jZSIsImFwaSIsImluQXBwIiwiZW52IiwiaW5QcmV2aWV3IiwiaW5EZXNpZ25lciIsInRvdWNoIiwibmFtZXNwYWNlIiwib3BlblN0YXRlQ2xhc3NOYW1lIiwiaXgiLCJ0cmlnZ2VycyIsImRlZmF1bHRaSW5kZXgiLCJmb2N1c091dEV2ZW50Iiwia2V5ZG93bkV2ZW50IiwibW91c2VFbnRlckV2ZW50IiwibW91c2VNb3ZlRXZlbnQiLCJtb3VzZUxlYXZlRXZlbnQiLCJtb3VzZVVwRXZlbnQiLCJjbG9zZUV2ZW50Iiwic2V0dGluZ0V2ZW50IiwiJGRvYyIsImRvY3VtZW50IiwiJGRyb3Bkb3ducyIsInJlYWR5IiwiaW5pdCIsImRlc2lnbiIsImNsb3NlQWxsIiwicHJldmlldyIsImZpbmQiLCJlYWNoIiwiYnVpbGQiLCJpIiwiZWwiLCIkZWwiLCJkYXRhIiwib3BlbiIsImNvbmZpZyIsInNlbGVjdGVkSWR4IiwidG9nZ2xlIiwiY2hpbGRyZW4iLCJsaXN0IiwibGlua3MiLCJjb21wbGV0ZSIsIm1vdXNlTGVhdmUiLCJtYWtlTW91c2VMZWF2ZUhhbmRsZXIiLCJtb3VzZVVwT3V0c2lkZSIsIm91dHNpZGUiLCJtb3VzZU1vdmVPdXRzaWRlIiwibW92ZU91dHNpZGUiLCJjb25maWd1cmUiLCJ0b2dnbGVJZCIsImF0dHIiLCJsaXN0SWQiLCJwcm9wIiwiaWR4IiwibGluayIsImhhc0F0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInRlc3QiLCJoYXNoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsb3NlIiwiYmluZCIsIm9mZiIsIm5hdiIsImluaXRpYWxUb2dnbGVyIiwibWFrZVRvZ2dsZXIiLCJvbiIsIm1ha2VTZXR0aW5nRXZlbnRIYW5kbGVyIiwiaG92ZXJpbmciLCJob3ZlciIsIm1ha2VNb3VzZUVudGVySGFuZGxlciIsIm1ha2VEcm9wZG93bktleWRvd25IYW5kbGVyIiwibWFrZURyb3Bkb3duRm9jdXNPdXRIYW5kbGVyIiwibWFrZVRvZ2dsZUtleWRvd25IYW5kbGVyIiwiY2xvc2VzdCIsInpJbmRleCIsIk51bWJlciIsImNzcyIsIm1hbmFnZVoiLCJkZWxheSIsImV2dCIsIm9wdGlvbnMiLCJpbW1lZGlhdGUiLCJmb3JjZUNsb3NlIiwidHlwZSIsImNsb3NlT3RoZXJzIiwiYWRkQ2xhc3MiLCJpbnRybyIsInJlZHJhdyIsInVwIiwiaXNFZGl0b3IiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJkZWxheUlkIiwib3V0cm8iLCJzZXRUaW1lb3V0IiwidHJpZ2dlckhhbmRsZXIiLCJzZWxmIiwib3RoZXIiLCIkb3RoZXIiLCJpcyIsImhhcyIsImxlbmd0aCIsIiR0YXJnZXQiLCJ0YXJnZXQiLCJpc0V2ZW50T3V0c2lkZURyb3Bkb3ducyIsImluQXJyYXkiLCJwYXJlbnRzIiwiaXNFdmVudE9uRGV0YWNoZWRTdmciLCJpc0V2ZW50T25Ib3ZlckNvbnRyb2xzIiwicmVtb3ZlQ2xhc3MiLCJpc0V2ZW50T25Ib3ZlclRvb2xiYXIiLCIkZWRpdG9yT3ZlcmxheSIsImlzRHJvcGRvd25JbkVkaXRpb24iLCJpbmRleCIsImFjdGl2ZUVsZW1lbnQiLCJrZXlDb2RlIiwiZm9jdXNTZWxlY3RlZExpbmsiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzIiwic3RvcFByb3BhZ2F0aW9uIiwiTWF0aCIsIm1pbiIsIm1heCIsInRvZ2dsZXIiLCJyZWxhdGVkVGFyZ2V0IiwibWVudUVsIiwibWVudUNvbnRhaW5zRm9jdXMiLCJjb250YWlucyJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUN0QixJQUFJQyxXQUFXRCxRQUFRO0FBRXZCLE1BQU1FLFlBQVk7SUFDaEJDLFlBQVk7SUFDWkMsVUFBVTtJQUNWQyxhQUFhO0lBQ2JDLFlBQVk7SUFDWkMsUUFBUTtJQUNSQyxPQUFPO0lBQ1BDLE9BQU87SUFDUEMsTUFBT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
11251
11252}),
11253"7527": (function (module, __unused_webpack_exports, __webpack_require__) {
11254"use strict";
11255/* globals
11256  window,
11257  document,
11258  WEBFLOW_FORM_API_HOST,
11259  WEBFLOW_FORM_OLDIE_HOST,
11260  WEBFLOW_EXPORT_MODE,
11261  turnstile
11262*/ /**
11263 * Webflow: Forms
11264 */ 
11265var Webflow = __webpack_require__(3949);
11266const renderTurnstileCaptcha = (siteKey, formElement, cb, errorCallback // () => void | boolean
11267)=>{
11268    const captchaContainer = document.createElement('div');
11269    formElement.appendChild(captchaContainer);
11270    // Render the captcha
11271    turnstile.render(captchaContainer, {
11272        sitekey: siteKey,
11273        callback: function(token) {
11274            cb(token);
11275        },
11276        'error-callback': function() {
11277            errorCallback();
11278        }
11279    });
11280};
11281Webflow.define('forms', module.exports = function($, _) {
11282    const TURNSTILE_LOADED_EVENT = 'TURNSTILE_LOADED';
11283    var api = {};
11284    var $doc = $(document);
11285    var $forms;
11286    var loc = window.location;
11287    var retro = window.XDomainRequest && !window.atob;
11288    var namespace = '.w-form';
11289    var siteId;
11290    var emailField = /e(-)?mail/i;
11291    var emailValue = /^\S+@\S+$/;
11292    var alert = window.alert;
11293    var inApp = Webflow.env();
11294    var listening;
11295    var formUrl;
11296    var signFileUrl;
11297    const turnstileSiteKey = $doc.find('[data-turnstile-sitekey]').data('turnstile-sitekey');
11298    let turnstileScript;
11299    // MailChimp domains: list-manage.com + mirrors
11300    var chimpRegex = /list-manage[1-9]?.com/i;
11301    var disconnected = _.debounce(function() {
11302        alert('Oops! This page has improperly configured forms. Please contact your website administrator to fix this issue.');
11303    }, 100);
11304    api.ready = api.design = api.preview = function() {
11305        // start by loading the turnstile script (if the user has the feature enabled)
11306        loadTurnstileScript();
11307        // Init forms
11308        init();
11309        // Wire document events on published and in preview workflow only once
11310        if ((!inApp || Webflow.env('preview')) && !listening) {
11311            addListeners();
11312        }
11313    };
11314    function init() {
11315        siteId = $('html').attr('data-wf-site');
11316        formUrl = "https://webflow.com" + '/api/v1/form/' + siteId;
11317        // Work around same-protocol IE XDR limitation - without this IE9 and below forms won't submit
11318        if (retro && formUrl.indexOf("https://webflow.com") >= 0) {
11319            formUrl = formUrl.replace("https://webflow.com", "https://formdata.webflow.com");
11320        }
11321        signFileUrl = `${formUrl}/signFile`;
11322        $forms = $(namespace + ' form');
11323        if (!$forms.length) {
11324            return;
11325        }
11326        $forms.each(build);
11327    }
11328    function loadTurnstileScript() {
11329        if (turnstileSiteKey) {
11330            // Create script tag for turnstile
11331            turnstileScript = document.createElement('script');
11332            turnstileScript.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js';
11333            document.head.appendChild(turnstileScript);
11334            turnstileScript.onload = ()=>{
11335                // after the script loads, emit an event that we listen to below.
11336                // this enables us to listen for the event on each form on the page and render the turnstile token for each of them.
11337                $doc.trigger(TURNSTILE_LOADED_EVENT);
11338            };
11339        }
11340    }
11341    function build(i, el) {
11342        // Store form state using namespace
11343        var $el = $(el);
11344        var data = $.data(el, namespace);
11345        if (!data) {
11346            data = $.data(el, namespace, {
11347                form: $el
11348            });
11349        } // data.form
11350        reset(data);
11351        var wrap = $el.closest('div.w-form');
11352        data.done = wrap.find('> .w-form-done');
11353        data.fail = wrap.find('> .w-form-fail');
11354        data.fileUploads = wrap.find('.w-file-upload');
11355        data.fileUploads.each(function(j) {
11356            initFileUpload(j, data);
11357        });
11358        if (turnstileSiteKey) {
11359            // while we load the script, disable the submit button
11360            // but do not show the "Please wait" text
11361            data.wait = false;
11362            disableBtn(data);
11363            // this is probably overkill, but if the turnstile script has already loaded and we reached this point then
11364            // we'll fire the callback below immediately. Otherwise we'll wait for the TURNSTILE_LOADED_EVENT to fire.
11365            $doc.on(typeof turnstile !== 'undefined' ? 'ready' : TURNSTILE_LOADED_EVENT, function() {
11366                // render the hidden input with the turnstile token for each form on the page
11367                renderTurnstileCaptcha(turnstileSiteKey, el, (token)=>{
11368                    // The turnstile token gets automatically attached to the form as a hidden input field & sent on submission to the server.
11369                    // Here we are using this `data.turnstileToken` value to decide whether or not the submit button should be enabled.
11370                    data.turnstileToken = token;
11371                    // enable the submit button once turnstile is done rendering
11372                    reset(data);
11373                }, ()=>{
11374                    disableBtn(data);
11375                });
11376            });
11377        }
11378        // Accessibility fixes
11379        var formName = data.form.attr('aria-label') || data.form.attr('data-name') || 'Form';
11380        if (!data.done.attr('aria-label')) {
11381            data.form.attr('aria-label', formName);
11382        }
11383        data.done.attr('tabindex', '-1');
11384        data.done.attr('role', 'region');
11385        if (!data.done.attr('aria-label')) {
11386            data.done.attr('aria-label', formName + ' success');
11387        }
11388        data.fail.attr('tabindex', '-1');
11389        data.fail.attr('role', 'region');
11390        if (!data.fail.attr('aria-label')) {
11391            data.fail.attr('aria-label', formName + ' failure');
11392        }
11393        var action = data.action = $el.attr('action');
11394        data.handler = null;
11395        data.redirect = $el.attr('data-redirect');
11396        // MailChimp form
11397        if (chimpRegex.test(action)) {
11398            data.handler = submitMailChimp;
11399            return;
11400        }
11401        // Custom form action
11402        if (action) {
11403            return;
11404        }
11405        // Webflow forms for hosting accounts
11406        if (siteId) {
11407            data.handler =  true ? exportedSubmitWebflow : 0;
11408            return;
11409        }
11410        // Alert for disconnected Webflow forms
11411        disconnected();
11412    }
11413    function addListeners() {
11414        listening = true;
11415        $doc.on('submit', namespace + ' form', function(evt) {
11416            var data = $.data(this, namespace);
11417            if (data.handler) {
11418                data.evt = evt;
11419                data.handler(data);
11420            }
11421        });
11422        // handle checked ui for custom checkbox and radio button
11423        const CHECKBOX_CLASS_NAME = '.w-checkbox-input';
11424        const RADIO_INPUT_CLASS_NAME = '.w-radio-input';
11425        const CHECKED_CLASS = 'w--redirected-checked';
11426        const FOCUSED_CLASS = 'w--redirected-focus';
11427        const FOCUSED_VISIBLE_CLASS = 'w--redirected-focus-visible';
11428        const focusVisibleSelectors = ':focus-visible, [data-wf-focus-visible]';
11429        const CUSTOM_CONTROLS = [
11430            [
11431                'checkbox',
11432                CHECKBOX_CLASS_NAME
11433            ],
11434            [
11435                'radio',
11436                RADIO_INPUT_CLASS_NAME
11437            ]
11438        ];
11439        $doc.on('change', namespace + ` form input[type="checkbox"]:not(` + CHECKBOX_CLASS_NAME + ')', (evt)=>{
11440            $(evt.target).siblings(CHECKBOX_CLASS_NAME).toggleClass(CHECKED_CLASS);
11441        });
11442        $doc.on('change', namespace + ` form input[type="radio"]`, (evt)=>{
11443            $(`input[name="${evt.target.name}"]:not(${CHECKBOX_CLASS_NAME})`).map((i, el)=>$(el).siblings(RADIO_INPUT_CLASS_NAME).removeClass(CHECKED_CLASS));
11444            const $target = $(evt.target);
11445            if (!$target.hasClass('w-radio-input')) {
11446                $target.siblings(RADIO_INPUT_CLASS_NAME).addClass(CHECKED_CLASS);
11447            }
11448        });
11449        CUSTOM_CONTROLS.forEach(([controlType, customControlClassName])=>{
11450            $doc.on('focus', namespace + ` form input[type="${controlType}"]:not(` + customControlClassName + ')', (evt)=>{
11451                $(evt.target).siblings(customControlClassName).addClass(FOCUSED_CLASS);
11452                $(evt.target).filter(focusVisibleSelectors).siblings(customControlClassName).addClass(FOCUSED_VISIBLE_CLASS);
11453            });
11454            $doc.on('blur', namespace + ` form input[type="${controlType}"]:not(` + customControlClassName + ')', (evt)=>{
11455                $(evt.target).siblings(customControlClassName).removeClass(`${FOCUSED_CLASS} ${FOCUSED_VISIBLE_CLASS}`);
11456            });
11457        });
11458    }
11459    // Reset data common to all submit handlers
11460    function reset(data) {
11461        var btn = data.btn = data.form.find(':input[type="submit"]');
11462        data.wait = data.btn.attr('data-wait') || null;
11463        data.success = false;
11464        // only enable the button if the turnstileToken has finished minting (and if the feature itself is enabled)
11465        btn.prop('disabled', Boolean(turnstileSiteKey && !data.turnstileToken));
11466        data.label && btn.val(data.label);
11467    }
11468    // Disable submit button
11469    function disableBtn(data) {
11470        var btn = data.btn;
11471        var wait = data.wait;
11472        btn.prop('disabled', true);
11473        // Show wait text and store previous label
11474        if (wait) {
11475            data.label = btn.val();
11476            btn.val(wait);
11477        }
11478    }
11479    // Find form fields, validate, and set value pairs
11480    function findFields(form, result) {
11481        var status = null;
11482        result = result || {};
11483        // The ":input" selector is a jQuery shortcut to select all inputs, selects, textareas
11484        form.find(':input:not([type="submit"]):not([type="file"]):not([type="button"])').each(function(i, el) {
11485            var field = $(el);
11486            var type = field.attr('type');
11487            var name = field.attr('data-name') || field.attr('name') || 'Field ' + (i + 1);
11488            // Encoding the field name will prevent fields that have brackets
11489            // in their name from being parsed by `bodyParser.urlencoded` as
11490            // objects which would have unintended consequences like not saving
11491            // the content of the field.
11492            // https://webflow.atlassian.net/browse/CMSAUTH-2495
11493            name = encodeURIComponent(name);
11494            var value = field.val();
11495            if (type === 'checkbox') {
11496                value = field.is(':checked');
11497            } else if (type === 'radio') {
11498                // Radio group value already processed
11499                if (result[name] === null || typeof result[name] === 'string') {
11500                    return;
11501                }
11502                value = form.find('input[name="' + field.attr('name') + '"]:checked').val() || null;
11503            }
11504            if (typeof value === 'string') {
11505                value = $.trim(value);
11506            }
11507            result[name] = value;
11508            status = status || getStatus(field, type, name, value);
11509        });
11510        return status;
11511    }
11512    function findFileUploads(form) {
11513        var result = {};
11514        form.find(':input[type="file"]').each(function(i, el) {
11515            var field = $(el);
11516            var name = field.attr('data-name') || field.attr('name') || 'File ' + (i + 1);
11517            var value = field.attr('data-value');
11518            if (typeof value === 'string') {
11519                value = $.trim(value);
11520            }
11521            result[name] = value;
11522        });
11523        return result;
11524    }
11525    const trackingCookieNameMap = {
11526        _mkto_trk: 'marketo'
11527    };
11528    function collectEnterpriseTrackingCookies() {
11529        const cookies = document.cookie.split('; ').reduce(function(acc, cookie) {
11530            const splitCookie = cookie.split('=');
11531            const name = splitCookie[0];
11532            if (name in trackingCookieNameMap) {
11533                const mappedName = trackingCookieNameMap[name];
11534                const value = splitCookie.slice(1).join('=');
11535                acc[mappedName] = value;
11536            }
11537            return acc;
11538        }, {});
11539        return cookies;
11540    }
11541    function getStatus(field, type, name, value) {
11542        var status = null;
11543        if (type === 'password') {
11544            status = 'Passwords cannot be submitted.';
11545        } else if (field.attr('required')) {
11546            if (!value) {
11547                status = 'Please fill out the required field: ' + name;
11548            } else if (emailField.test(field.attr('type'))) {
11549                if (!emailValue.test(value)) {
11550                    status = 'Please enter a valid email address for: ' + name;
11551                }
11552            }
11553        } else if (name === 'g-recaptcha-response' && !value) {
11554            status = 'Please confirm you’re not a robot.';
11555        }
11556        return status;
11557    }
11558    function exportedSubmitWebflow(data) {
11559        preventDefault(data);
11560        afterSubmit(data);
11561    }
11562    // Submit form to MailChimp
11563    function submitMailChimp(data) {
11564        reset(data);
11565        var form = data.form;
11566        var payload = {};
11567        // Skip Ajax submission if http/s mismatch, fallback to POST instead
11568        if (/^https/.test(loc.href) && !/^https/.test(data.action)) {
11569            form.attr('method', 'post');
11570            return;
11571        }
11572        preventDefault(data);
11573        // Find & populate all fields
11574        var status = findFields(form, payload);
11575        if (status) {
11576            return alert(status);
11577        }
11578        // Disable submit button
11579        disableBtn(data);
11580        // Use special format for MailChimp params
11581        var fullName;
11582        _.each(payload, function(value, key) {
11583            if (emailField.test(key)) {
11584                payload.EMAIL = value;
11585            }
11586            if (/^((full[ _-]?)?name)$/i.test(key)) {
11587                fullName = value;
11588            }
11589            if (/^(first[ _-]?name)$/i.test(key)) {
11590                payload.FNAME = value;
11591            }
11592            if (/^(last[ _-]?name)$/i.test(key)) {
11593                payload.LNAME = value;
11594            }
11595        });
11596        if (fullName && !payload.FNAME) {
11597            fullName = fullName.split(' ');
11598            payload.FNAME = fullName[0];
11599            payload.LNAME = payload.LNAME || fullName[1];
11600        }
11601        // Use the (undocumented) MailChimp jsonp api
11602        var url = data.action.replace('/post?', '/post-json?') + '&c=?';
11603        // Add special param to prevent bot signups
11604        var userId = url.indexOf('u=') + 2;
11605        userId = url.substring(userId, url.indexOf('&', userId));
11606        var listId = url.indexOf('id=') + 3;
11607        listId = url.substring(listId, url.indexOf('&', listId));
11608        payload['b_' + userId + '_' + listId] = '';
11609        $.ajax({
11610            url,
11611            data: payload,
11612            dataType: 'jsonp'
11613        }).done(function(resp) {
11614            data.success = resp.result === 'success' || /already/.test(resp.msg);
11615            if (!data.success) {
11616                console.info('MailChimp error: ' + resp.msg);
11617            }
11618            afterSubmit(data);
11619        }).fail(function() {
11620            afterSubmit(data);
11621        });
11622    }
11623    // Common callback which runs after all Ajax submissions
11624    function afterSubmit(data) {
11625        var form = data.form;
11626        var redirect = data.redirect;
11627        var success = data.success;
11628        // Redirect to a success url if defined
11629        if (success && redirect) {
11630            Webflow.location(redirect);
11631            return;
11632        }
11633        // Show or hide status divs
11634        data.done.toggle(success);
11635        data.fail.toggle(!success);
11636        if (success) {
11637            data.done.focus();
11638        } else {
11639            data.fail.focus();
11640        }
11641        // Hide form on success
11642        form.toggle(!success);
11643        // Reset data and enable submit button
11644        reset(data);
11645    }
11646    function preventDefault(data) {
11647        data.evt && data.evt.preventDefault();
11648        data.evt = null;
11649    }
11650    function initFileUpload(i, form) {
11651        if (!form.fileUploads || !form.fileUploads[i]) {
11652            return;
11653        }
11654        var file;
11655        var $el = $(form.fileUploads[i]);
11656        var $defaultWrap = $el.find('> .w-file-upload-default');
11657        var $uploadingWrap = $el.find('> .w-file-upload-uploading');
11658        var $successWrap = $el.find('> .w-file-upload-success');
11659        var $errorWrap = $el.find('> .w-file-upload-error');
11660        var $input = $defaultWrap.find('.w-file-upload-input');
11661        var $label = $defaultWrap.find('.w-file-upload-label');
11662        var $labelChildren = $label.children();
11663        var $errorMsgEl = $errorWrap.find('.w-file-upload-error-msg');
11664        var $fileEl = $successWrap.find('.w-file-upload-file');
11665        var $removeEl = $successWrap.find('.w-file-remove-link');
11666        var $fileNameEl = $fileEl.find('.w-file-upload-file-name');
11667        var sizeErrMsg = $errorMsgEl.attr('data-w-size-error');
11668        var typeErrMsg = $errorMsgEl.attr('data-w-type-error');
11669        var genericErrMsg = $errorMsgEl.attr('data-w-generic-error');
11670        // Accessibility fixes
11671        // The file upload Input is not stylable by the designer, so we are
11672        // going to pretend the Label is the input. ¯\_(ツ)_/¯
11673        if (!inApp) {
11674            $label.on('click keydown', function(e) {
11675                if (e.type === 'keydown' && e.which !== 13 && e.which !== 32) {
11676                    return;
11677                }
11678                e.preventDefault();
11679                $input.click();
11680            });
11681        }
11682        // Both of these are added through CSS
11683        $label.find('.w-icon-file-upload-icon').attr('aria-hidden', 'true');
11684        $removeEl.find('.w-icon-file-upload-remove').attr('aria-hidden', 'true');
11685        if (!inApp) {
11686            $removeEl.on('click keydown', function(e) {
11687                if (e.type === 'keydown') {
11688                    if (e.which !== 13 && e.which !== 32) {
11689                        return;
11690                    }
11691                    e.preventDefault();
11692                }
11693                $input.removeAttr('data-value');
11694                $input.val('');
11695                $fileNameEl.html('');
11696                $defaultWrap.toggle(true);
11697                $successWrap.toggle(false);
11698                $label.focus();
11699            });
11700            $input.on('change', function(e) {
11701                file = e.target && e.target.files && e.target.files[0];
11702                if (!file) {
11703                    return;
11704                }
11705                // Show uploading
11706                $defaultWrap.toggle(false);
11707                $errorWrap.toggle(false);
11708                $uploadingWrap.toggle(true);
11709                $uploadingWrap.focus();
11710                // Set filename
11711                $fileNameEl.text(file.name);
11712                // Disable submit button
11713                if (!isUploading()) {
11714                    disableBtn(form);
11715                }
11716                form.fileUploads[i].uploading = true;
11717                signFile(file, afterSign);
11718            });
11719            // Setting input width 1px and height equal label
11720            // This is so the browser required error will show up
11721            var height = $label.outerHeight();
11722            $input.height(height);
11723            $input.width(1);
11724        } else {
11725            $input.on('click', function(e) {
11726                e.preventDefault();
11727            });
11728            $label.on('click', function(e) {
11729                e.preventDefault();
11730            });
11731            $labelChildren.on('click', function(e) {
11732                e.preventDefault();
11733            });
11734        }
11735        function parseError(err) {
11736            var errorMsg = err.responseJSON && err.responseJSON.msg;
11737            var userError = genericErrMsg;
11738            if (typeof errorMsg === 'string' && errorMsg.indexOf('InvalidFileTypeError') === 0) {
11739                userError = typeErrMsg;
11740            } else if (typeof errorMsg === 'string' && errorMsg.indexOf('MaxFileSizeError') === 0) {
11741                userError = sizeErrMsg;
11742            }
11743            $errorMsgEl.text(userError);
11744            $input.removeAttr('data-value');
11745            $input.val('');
11746            $uploadingWrap.toggle(false);
11747            $defaultWrap.toggle(true);
11748            $errorWrap.toggle(true);
11749            $errorWrap.focus();
11750            form.fileUploads[i].uploading = false;
11751            if (!isUploading()) {
11752                reset(form);
11753            }
11754        }
11755        function afterSign(err, data) {
11756            if (err) {
11757                return parseError(err);
11758            }
11759            var fileName = data.fileName;
11760            var postData = data.postData;
11761            var fileId = data.fileId;
11762            var s3Url = data.s3Url;
11763            $input.attr('data-value', fileId);
11764            uploadS3(s3Url, postData, file, fileName, afterUpload);
11765        }
11766        function afterUpload(err) {
11767            if (err) {
11768                return parseError(err);
11769            }
11770            // Show success
11771            $uploadingWrap.toggle(false);
11772            $successWrap.css('display', 'inline-block');
11773            $successWrap.focus();
11774            form.fileUploads[i].uploading = false;
11775            if (!isUploading()) {
11776                reset(form);
11777            }
11778        }
11779        function isUploading() {
11780            var uploads = form.fileUploads && form.fileUploads.toArray() || [];
11781            return uploads.some(function(value) {
11782                return value.uploading;
11783            });
11784        }
11785    }
11786    function signFile(file, cb) {
11787        var payload = new URLSearchParams({
11788            name: file.name,
11789            size: file.size
11790        });
11791        $.ajax({
11792            type: 'GET',
11793            url: `${signFileUrl}?${payload}`,
11794            crossDomain: true
11795        }).done(function(data) {
11796            cb(null, data);
11797        }).fail(function(err) {
11798            cb(err);
11799        });
11800    }
11801    function uploadS3(url, data, file, fileName, cb) {
11802        var formData = new FormData();
11803        for(var k in data){
11804            formData.append(k, data[k]);
11805        }
11806        formData.append('file', file, fileName);
11807        $.ajax({
11808            type: 'POST',
11809            url,
11810            data: formData,
11811            processData: false,
11812            contentType: false
11813        }).done(function() {
11814            cb(null);
11815        }).fail(function(err) {
11816            cb(err);
11817        });
11818    }
11819    // Export module
11820    return api;
11821});
11822
11823//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctZm9ybXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsc1xuICB3aW5kb3csXG4gIGRvY3VtZW50LFxuICBXRUJGTE9XX0ZPUk1fQVBJX0hPU1QsXG4gIFdFQkZMT1dfRk9STV9PTERJRV9IT1NULFxuICBXRUJGTE9XX0VYUE9SVF9NT0RFLFxuICB0dXJuc3RpbGVcbiovXG5cbi8qKlxuICogV2ViZmxvdzogRm9ybXNcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4uL0Jhc2VTaXRlTW9kdWxlcy93ZWJmbG93LWxpYicpO1xuXG5jb25zdCByZW5kZXJUdXJuc3RpbGVDYXB0Y2hhID0gKFxuICBzaXRlS2V5LCAvLyBzdHJpbmdcbiAgZm9ybUVsZW1lbnQsIC8vIEhUTUxGb3JtRWxlbWVudFxuICBjYiwgLy8gKHRva2VuOiBzdHJpbmcpID0+IHZvaWRcbiAgZXJyb3JDYWxsYmFjayAvLyAoKSA9PiB2b2lkIHwgYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IGNhcHRjaGFDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZm9ybUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FwdGNoYUNvbnRhaW5lcik7XG5cbiAgLy8gUmVuZGVyIHRoZSBjYXB0Y2hhXG4gIHR1cm5zdGlsZS5yZW5kZXIoY2FwdGNoYUNvbnRhaW5lciwge1xuICAgIHNpdGVrZXk6IHNpdGVLZXksXG4gICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgY2IodG9rZW4pO1xuICAgIH0sXG4gICAgJ2Vycm9yLWNhbGxiYWNrJzogZnVuY3Rpb24gKCkge1xuICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdmb3JtcycsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkLCBfKSB7XG4gICAgY29uc3QgVFVSTlNUSUxFX0xPQURFRF9FVkVOVCA9ICdUVVJOU1RJTEVfTE9BREVEJztcbiAgICB2YXIgYXBpID0ge307XG5cbiAgICB2YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xuICAgIHZhciAkZm9ybXM7XG4gICAgdmFyIGxvYyA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICB2YXIgcmV0cm8gPSB3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgIXdpbmRvdy5hdG9iO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctZm9ybSc7XG4gICAgdmFyIHNpdGVJZDtcbiAgICB2YXIgZW1haWxGaWVsZCA9IC9lKC0pP21haWwvaTtcbiAgICB2YXIgZW1haWxWYWx1ZSA9IC9eXFxTK0BcXFMrJC87XG4gICAgdmFyIGFsZXJ0ID0gd2luZG93LmFsZXJ0O1xuICAgIHZhciBpbkFwcCA9IFdlYmZsb3cuZW52KCk7XG4gICAgdmFyIGxpc3RlbmluZztcblxuICAgIHZhciBmb3JtVXJsO1xuICAgIHZhciBzaWduRmlsZVVybDtcblxuICAgIGNvbnN0IHR1cm5zdGlsZVNpdGVLZXkgPSAkZG9jXG4gICAgICAuZmluZCgnW2RhdGEtdHVybnN0aWxlLXNpdGVrZXldJylcbiAgICAgIC5kYXRhKCd0dXJuc3RpbGUtc2l0ZWtleScpO1xuICAgIGxldCB0dXJuc3RpbGVTY3JpcHQ7XG5cbiAgICAvLyBNYWlsQ2hpbXAgZG9tYWluczogbGlzdC1tYW5hZ2UuY29tICsgbWlycm9yc1xuICAgIHZhciBjaGltcFJlZ2V4ID0gL2xpc3QtbWFuYWdlWzEtOV0/LmNvbS9pO1xuXG4gICAgdmFyIGRpc2Nvbm5lY3RlZCA9IF8uZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgYWxlcnQoXG4gICAgICAgICdPb3BzISBUaGlzIHBhZ2UgaGFzIGltcHJvcGVybHkgY29uZmlndXJlZCBmb3Jtcy4gUGxlYXNlIGNvbnRhY3QgeW91ciB3ZWJzaXRlIGFkbWluaXN0cmF0b3IgdG8gZml4IHRoaXMgaXNzdWUuJ1xuICAgICAgKTtcbiAgICB9LCAxMDApO1xuXG4gICAgYXBpLnJlYWR5ID1cbiAgICAgIGFwaS5kZXNpZ24gPVxuICAgICAgYXBpLnByZXZpZXcgPVxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gc3RhcnQgYnkgbG9hZGluZyB0aGUgdHVybnN0aWxlIHNjcmlwdCAoaWYgdGhlIHVzZXIgaGFzIHRoZSBmZWF0dXJlIGVuYWJsZWQpXG4gICAgICAgICAgbG9hZFR1cm5zdGlsZVNjcmlwdCgpO1xuXG4gICAgICAgICAgLy8gSW5pdCBmb3Jtc1xuICAgICAgICAgIGluaXQoKTtcblxuICAgICAgICAgIC8vIFdpcmUgZG9jdW1lbnQgZXZlbnRzIG9uIHB1Ymxpc2hlZCBhbmQgaW4gcHJldmlldyB3b3JrZmxvdyBvbmx5IG9uY2VcbiAgICAgICAgICBpZiAoKCFpbkFwcCB8fCBXZWJmbG93LmVudigncHJldmlldycpKSAmJiAhbGlzdGVuaW5nKSB7XG4gICAgICAgICAgICBhZGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgI
11823H07XG5cbiAgICBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgc2l0ZUlkID0gJCgnaHRtbCcpLmF0dHIoJ2RhdGEtd2Ytc2l0ZScpO1xuXG4gICAgICBmb3JtVXJsID0gV0VCRkxPV19GT1JNX0FQSV9IT1NUICsgJy9hcGkvdjEvZm9ybS8nICsgc2l0ZUlkO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBzYW1lLXByb3RvY29sIElFIFhEUiBsaW1pdGF0aW9uIC0gd2l0aG91dCB0aGlzIElFOSBhbmQgYmVsb3cgZm9ybXMgd29uJ3Qgc3VibWl0XG4gICAgICBpZiAocmV0cm8gJiYgZm9ybVVybC5pbmRleE9mKFdFQkZMT1dfRk9STV9BUElfSE9TVCkgPj0gMCkge1xuICAgICAgICBmb3JtVXJsID0gZm9ybVVybC5yZXBsYWNlKFxuICAgICAgICAgIFdFQkZMT1dfRk9STV9BUElfSE9TVCxcbiAgICAgICAgICBXRUJGTE9XX0ZPUk1fT0xESUVfSE9TVFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzaWduRmlsZVVybCA9IGAke2Zvcm1Vcmx9L3NpZ25GaWxlYDtcblxuICAgICAgJGZvcm1zID0gJChuYW1lc3BhY2UgKyAnIGZvcm0nKTtcbiAgICAgIGlmICghJGZvcm1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAkZm9ybXMuZWFjaChidWlsZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZFR1cm5zdGlsZVNjcmlwdCgpIHtcbiAgICAgIGlmICh0dXJuc3RpbGVTaXRlS2V5KSB7XG4gICAgICAgIC8vIENyZWF0ZSBzY3JpcHQgdGFnIGZvciB0dXJuc3RpbGVcbiAgICAgICAgdHVybnN0aWxlU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHR1cm5zdGlsZVNjcmlwdC5zcmMgPVxuICAgICAgICAgICdodHRwczovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vdHVybnN0aWxlL3YwL2FwaS5qcyc7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodHVybnN0aWxlU2NyaXB0KTtcbiAgICAgICAgdHVybnN0aWxlU2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAvLyBhZnRlciB0aGUgc2NyaXB0IGxvYWRzLCBlbWl0IGFuIGV2ZW50IHRoYXQgd2UgbGlzdGVuIHRvIGJlbG93LlxuICAgICAgICAgIC8vIHRoaXMgZW5hYmxlcyB1cyB0byBsaXN0ZW4gZm9yIHRoZSBldmVudCBvbiBlYWNoIGZvcm0gb24gdGhlIHBhZ2UgYW5kIHJlbmRlciB0aGUgdHVybnN0aWxlIHRva2VuIGZvciBlYWNoIG9mIHRoZW0uXG4gICAgICAgICAgJGRvYy50cmlnZ2VyKFRVUk5TVElMRV9MT0FERURfRVZFTlQpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkKGksIGVsKSB7XG4gICAgICAvLyBTdG9yZSBmb3JtIHN0YXRlIHVzaW5nIG5hbWVzcGFjZVxuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlLCB7Zm9ybTogJGVsfSk7XG4gICAgICB9IC8vIGRhdGEuZm9ybVxuXG4gICAgICByZXNldChkYXRhKTtcbiAgICAgIHZhciB3cmFwID0gJGVsLmNsb3Nlc3QoJ2Rpdi53LWZvcm0nKTtcbiAgICAgIGRhdGEuZG9uZSA9IHdyYXAuZmluZCgnPiAudy1mb3JtLWRvbmUnKTtcbiAgICAgIGRhdGEuZmFpbCA9IHdyYXAuZmluZCgnPiAudy1mb3JtLWZhaWwnKTtcbiAgICAgIGRhdGEuZmlsZVVwbG9hZHMgP
11823SB3cmFwLmZpbmQoJy53LWZpbGUtdXBsb2FkJyk7XG5cbiAgICAgIGRhdGEuZmlsZVVwbG9hZHMuZWFjaChmdW5jdGlvbiAoaikge1xuICAgICAgICBpbml0RmlsZVVwbG9hZChqLCBkYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHVybnN0aWxlU2l0ZUtleSkge1xuICAgICAgICAvLyB3aGlsZSB3ZSBsb2FkIHRoZSBzY3JpcHQsIGRpc2FibGUgdGhlIHN1Ym1pdCBidXR0b25cbiAgICAgICAgLy8gYnV0IGRvIG5vdCBzaG93IHRoZSBcIlBsZWFzZSB3YWl0XCIgdGV4dFxuICAgICAgICBkYXRhLndhaXQgPSBmYWxzZTtcbiAgICAgICAgZGlzYWJsZUJ0bihkYXRhKTtcblxuICAgICAgICAvLyB0aGlzIGlzIHByb2JhYmx5IG92ZXJraWxsLCBidXQgaWYgdGhlIHR1cm5zdGlsZSBzY3JpcHQgaGFzIGFscmVhZHkgbG9hZGVkIGFuZCB3ZSByZWFjaGVkIHRoaXMgcG9pbnQgdGhlblxuICAgICAgICAvLyB3ZSdsbCBmaXJlIHRoZSBjYWxsYmFjayBiZWxvdyBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHdlJ2xsIHdhaXQgZm9yIHRoZSBUVVJOU1RJTEVfTE9BREVEX0VWRU5UIHRvIGZpcmUuXG4gICAgICAgICRkb2Mub24oXG4gICAgICAgICAgdHlwZW9mIHR1cm5zdGlsZSAhPT0gJ3VuZGVmaW5lZCcgPyAncmVhZHknIDogVFVSTlNUSUxFX0xPQURFRF9FVkVOVCxcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyByZW5kZXIgdGhlIGhpZGRlbiBpbnB1dCB3aXRoIHRoZSB0dXJuc3RpbGUgdG9rZW4gZm9yIGVhY2ggZm9ybSBvbiB0aGUgcGFnZVxuICAgICAgICAgICAgcmVuZGVyVHVybnN0aWxlQ2FwdGNoYShcbiAgICAgICAgICAgICAgdHVybnN0aWxlU2l0ZUtleSxcbiAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoZSB0dXJuc3RpbGUgdG9rZW4gZ2V0cyBhdXRvbWF0aWNhbGx5IGF0dGFjaGVkIHRvIHRoZSBmb3JtIGFzIGEgaGlkZGVuIGlucHV0IGZpZWxkICYgc2VudCBvbiBzdWJtaXNzaW9uIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBhcmUgdXNpbmcgdGhpcyBgZGF0YS50dXJuc3RpbGVUb2tlbmAgdmFsdWUgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRoZSBzdWJtaXQgYnV0dG9uIHNob3VsZCBiZSBlbmFibGVkLlxuICAgICAgICAgICAgICAgIGRhdGEudHVybnN0aWxlVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAvLyBlbmFibGUgdGhlIHN1Ym1pdCBidXR0b24gb25jZSB0dXJuc3RpbGUgaXMgZG9uZSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgICByZXNldChkYXRhKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpc2FibGVCdG4oZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBBY2Nlc3NpYmlsaXR5IGZpeGVzXG4gICAgICB2Y
11823XIgZm9ybU5hbWUgPVxuICAgICAgICBkYXRhLmZvcm0uYXR0cignYXJpYS1sYWJlbCcpIHx8IGRhdGEuZm9ybS5hdHRyKCdkYXRhLW5hbWUnKSB8fCAnRm9ybSc7XG4gICAgICBpZiAoIWRhdGEuZG9uZS5hdHRyKCdhcmlhLWxhYmVsJykpIHtcbiAgICAgICAgZGF0YS5mb3JtLmF0dHIoJ2FyaWEtbGFiZWwnLCBmb3JtTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEuZG9uZS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgZGF0YS5kb25lLmF0dHIoJ3JvbGUnLCAncmVnaW9uJyk7XG4gICAgICBpZiAoIWRhdGEuZG9uZS5hdHRyKCdhcmlhLWxhYmVsJykpIHtcbiAgICAgICAgZGF0YS5kb25lLmF0dHIoJ2FyaWEtbGFiZWwnLCBmb3JtTmFtZSArICcgc3VjY2VzcycpO1xuICAgICAgfVxuICAgICAgZGF0YS5mYWlsLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICBkYXRhLmZhaWwuYXR0cigncm9sZScsICdyZWdpb24nKTtcbiAgICAgIGlmICghZGF0YS5mYWlsLmF0dHIoJ2FyaWEtbGFiZWwnKSkge1xuICAgICAgICBkYXRhLmZhaWwuYXR0cignYXJpYS1sYWJlbCcsIGZvcm1OYW1lICsgJyBmYWlsdXJlJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY3Rpb24gPSAoZGF0YS5hY3Rpb24gPSAkZWwuYXR0cignYWN0aW9uJykpO1xuICAgICAgZGF0YS5oYW5kbGVyID0gbnVsbDtcbiAgICAgIGRhdGEucmVkaXJlY3QgPSAkZWwuYXR0cignZGF0YS1yZWRpcmVjdCcpO1xuXG4gICAgICAvLyBNYWlsQ2hpbXAgZm9ybVxuICAgICAgaWYgKGNoaW1wUmVnZXgudGVzdChhY3Rpb24pKSB7XG4gICAgICAgIGRhdGEuaGFuZGxlciA9IHN1Ym1pdE1haWxDaGltcDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDdXN0b20gZm9ybSBhY3Rpb25cbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBXZWJmbG93IGZvcm1zIGZvciBob3N0aW5nIGFjY291bnRzXG4gICAgICBpZiAoc2l0ZUlkKSB7XG4gICAgICAgIGRhdGEuaGFuZGxlciA9IFdFQkZMT1dfRVhQT1JUX01PREVcbiAgICAgICAgICA/IGV4cG9ydGVkU3VibWl0V2ViZmxvd1xuICAgICAgICAgIDogKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaG9zdGVkU3VibWl0SGFuZGxlciA9XG4gICAgICAgICAgICAgICAgcmVxdWlyZSgnLi93ZWJmbG93LWZvcm1zLWhvc3RlZCcpLmRlZmF1bHQ7XG4gICAgICAgICAgICAgIHJldHVybiBob3N0ZWRTdWJtaXRIYW5kbGVyKFxuICAgICAgICAgICAgICAgIHJlc2V0LFxuICAgICAgICAgICAgICAgIGxvYyxcbiAgICAgICAgICAgICAgICBXZWJmbG93LFxuICAgICAgICAgICAgICAgIGNvbGxlY3RFbnRlcnByaXNlVHJhY2tpbmdDb29raWVzLFxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0LFxuICAgICAgICAgICAgICAgIGZpbmRGaWVsZHMsXG4gICAgICAgICAgICAgICAgYWxlcnQsXG4gICAgICAgICAgICAgICAgZmluZEZpbGVVcGxvYWRzLFxuICAgICAgICAgICAgICAgIGRpc2FibGVCdG4sXG4gICAgICAgICAgICAgICAgc2l0ZUlkLFxuICAgICAgICAgICAgICAgIGFmdGVyU3VibWl0LFxuICAgICAgICAgICAgICAgICQsXG4gICAgICAgICAgICAgICAgZm9ybVVybFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBbGVydCBmb3IgZGlzY29ubmVjdGVkIFdlYmZsb3cgZm9ybXNcbiAgICAgIGRpc2Nvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVycygpIHtcbiAgICAgIGxpc3RlbmluZyA9IHRydWU7XG5cbiAgICAgICRkb2Mub24oJ3N1Ym1pdCcsIG5hbWVzcGFjZSArICcgZm9ybScsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkLmRhdGEodGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKGRhdGEuaGFuZGxlcikge1xuICAgICAgICAgIGRhdGEuZXZ0ID0gZXZ0O1xuICAgICAgICAgIGRhdGEuaGFuZGxlcihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGhhbmRsZSBjaGVja2VkIHVpIGZvciBjdXN0b20gY2hlY2tib3ggYW5kIHJhZGlvIGJ1dHRvblxuICAgICAgY29uc3QgQ0hFQ0tCT1hfQ0xBU1NfTkFNRSA9ICcudy1jaGVja2JveC1pbnB1dCc7XG4gICAgICBjb25zdCBSQURJT19JTlBVVF9DTEFTU19OQU1FID0gJy53LXJhZGlvLWlucHV0JztcbiAgICAgIGNvbnN0IENIRUNLRURfQ0xBU1MgPSAndy0tcmVkaXJlY3RlZC1jaGVja2VkJztcbiAgICAgIGNvbnN0IEZPQ1VTRURfQ0xBU1MgPSAndy0tcmVkaXJlY3RlZC1mb2N1cyc7XG4gICAgICBjb25zdCBGT0NVU0VEX1ZJU0lCTEVfQ0xBU1MgPSAndy0tcmVkaXJlY3RlZC1mb2N1cy12aXNpYmxlJztcbiAgICAgIGNvbnN0IGZvY3VzVmlzaWJsZVNlbGVjdG9ycyA9ICc6Zm9jdXMtdmlzaWJsZSwgW2RhdGEtd2YtZm9jdXMtdmlzaWJsZV0nO1xuXG4gICAgICBjb25zdCBDVVNUT01fQ09OVFJPTFMgPSBbXG4gICAgICAgIFsnY2hlY2tib3gnLCBDSEVDS0JPWF9DTEFTU19OQU1FXSxcbiAgICAgICAgWydyYWRpbycsIFJBRElPX0lOUFVUX0NMQVNTX05BTUVdLFxuICAgICAgXTtcblxuICAgICAgJGRvYy5vbihcbiAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgIG5hbWVzcGFjZSArXG4gICAgICAgICAgYCBmb3JtIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpub3QoYCArXG4gICAgICAgICAgQ0hFQ0tCT1hfQ0xBU1NfTkFNRSArXG4gICAgICAgICAgJyknLFxuICAgICAgICAoZXZ0KSA9PiB7XG4gICAgICAgICAgJChldnQudGFyZ2V0KVxuICAgICAgICAgICAgLnNpYmxpbmdzKENIRUNLQk9YX0NMQVNTX05BTUUpXG4gICAgICAgICAgICAudG9nZ2xlQ2xhc3MoQ0hFQ0tFRF9DTEFTUyk7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgICRkb2Mub24oJ2NoYW5nZScsIG5hbWVzcGFjZSArIGAgZm9ybSBpbnB1dFt0eXBlPVwicmFkaW9cIl1gLCAoZXZ0KSA9PiB7XG4gICAgICAgICQoYGlucHV0W25hbWU9XCIke2V2dC50YXJnZXQubmFtZX1cIl06bm90KCR7Q0hFQ0tCT1hfQ0xBU1NfTkFNRX0pYCkubWFwKFxuICAgICAgICAgIChpLCBlbCkgPT5cbiAgICAgICAgICAgICQoZWwpLnNpYmxpbmdzKFJBRElPX0lOUFVUX0NMQVNTX05BTUUpLnJlbW92ZUNsYXNzKENIRUNLRURfQ0xBU1MpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZ0LnRhcmdldCk7XG5cbiAgICAgICAgaWYgKCEkdGFyZ2V0Lmhhc0NsYXNzKCd3LXJhZGlvLWlucHV0JykpIHtcbiAgICAgICAgICAkdGFyZ2V0LnNpYmxpbmdzKFJBRElPX0lOUFVUX0NMQVNTX05BTUUpLmFkZENsYXNzKENIRUNLRURfQ0xBU1MpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgQ1VTVE9NX0NPTlRST0xTLmZvckVhY2goKFtjb250cm9sVHlwZSwgY3VzdG9tQ29udHJvbENsYXNzTmFtZV0pID0+IHtcbiAgICAgICAgJGRvYy5vbihcbiAgICAgICAgICAnZm9jdXMnLFxuICAgICAgICAgIG5hbWVzcGFjZSArXG4gICAgICAgICAgICBgIGZvcm0gaW5wdXRbdHlwZT1cIiR7Y29udHJvbFR5cGV9XCJdOm5vdChgICtcbiAgICAgICAgICAgIGN1c3RvbUNvbnRyb2xDbGFzc05hbWUgK1xuICAgICAgICAgICAgJyknLFxuICAgICAgICAgIChldnQpID0+IHtcbiAgICAgICAgICAgICQoZXZ0LnRhcmdldClcbiAgICAgICAgICAgICAgLnNpYmxpbmdzKGN1c3RvbUNvbnRyb2xDbGFzc05hbWUpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcyhGT0NVU0VEX0NMQVNTKTtcbiAgICAgICAgICAgICQoZXZ0LnRhcmdldClcbiAgICAgICAgICAgICAgLmZpbHRlcihmb2N1c1Zpc2libGVTZWxlY3RvcnMpXG4gICAgICAgICAgICAgIC5zaWJsaW5ncyhjdXN0b21Db250cm9sQ2xhc3NOYW1lKVxuICAgICAgICAgICAgICAuYWRkQ2xhc3MoRk9DVVNFRF9WSVNJQkxFX0NMQVNTKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgICRkb2Mub24oXG4gICAgICAgICAgJ2JsdXInLFxuICAgICAgICAgIG5hbWVzcGFjZSArXG4gICAgICAgICAgICBgIGZvcm0gaW5wdXRbdHlwZT1cIiR7Y29udHJvbFR5cGV9XCJdOm5vdChgICtcbiAgICAgICAgICAgIGN1c3RvbUNvbnRyb2xDbGFzc05hbWUgK1xuICAgICAgICAgICAgJyknLFxuICAgICAgICAgIChldnQpID0+IHtcbiAgICAgICAgICAgICQoZXZ0LnRhcmdldClcbiAgICAgICAgICAgICAgLnNpYmxpbmdzKGN1c3RvbUNvbnRyb2xDbGFzc05hbWUpXG4gICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhgJHtGT0NVU0VEX0NMQVNTfSAke0ZPQ1VTRURfVklTSUJMRV9DTEFTU31gKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBkYXRhIGNvbW1vbiB0byBhbGwgc3VibWl0IGhhbmRsZXJzXG4gICAgZnVuY3Rpb24gcmVzZXQoZGF0YSkge1xuICAgICAgdmFyIGJ0biA9IChkYXRhLmJ0biA9IGRhdGEuZm9ybS5maW5kKCc6aW5wdXRbdHlwZT1cInN1Ym1pdFwiXScpKTtcbiAgICAgIGRhdGEud2FpdCA9IGRhdGEuYnRuLmF0dHIoJ2RhdGEtd2FpdCcpIHx8IG51bGw7XG4gICAgICBkYXRhLnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIC8vIG9ubHkgZW5hYmxlIHRoZSBidXR0b24gaWYgdGhlIHR1cm5zdGlsZVRva2VuIGhhcyBmaW5pc2hlZCBtaW50aW5nIChhbmQgaWYgdGhlIGZlYXR1cmUgaXRzZWxmIGlzIGVuYWJsZWQpXG4gICAgICBidG4ucHJvcCgnZGlzYWJsZWQnLCBCb29sZWFuKHR1cm5zdGlsZVNpdGVLZXkgJiYgIWRhdGEudHVybnN0aWxlVG9rZW4pKTtcbiAgICAgIGRhdGEubGFiZWwgJiYgYnRuLnZhbChkYXRhLmxhYmVsKTtcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIHN1Ym1pdCBidXR0b25cbiAgICBmdW5jdGlvbiBkaXNhYmxlQnRuKGRhdGEpIHtcbiAgICAgIHZhciBidG4gPSBkYXRhLmJ0bjtcbiAgICAgIHZhciB3YWl0ID0gZGF0YS53YWl0O1xuICAgICAgYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAvLyBTaG93IHdhaXQgdGV4dCBhbmQgc3RvcmUgcHJldmlvdXMgbGFiZWxcbiAgICAgIGlmICh3YWl0KSB7XG4gICAgICAgIGRhdGEubGFiZWwgPSBidG4udmFsKCk7XG4gICAgICAgIGJ0bi52YWwod2FpdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmluZCBmb3JtIGZpZWxkcywgdmFsaWRhdGUsIGFuZCBzZXQgdmFsdWUgcGFpcnNcbiAgICBmdW5jdGlvbiBmaW5kRmllbGRzKGZvcm0sIHJlc3VsdCkge1xuICAgICAgdmFyIHN0YXR1cyA9IG51bGw7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG5cbiAgICAgIC8vIFRoZSBcIjppbnB1dFwiIHNlbGVjdG9yIGlzIGEgalF1ZXJ5IHNob3J0Y3V0IHRvIHNlbGVjdCBhbGwgaW5wdXRzLCBzZWxlY3RzLCB0ZXh0YXJlYXNcbiAgICAgIGZvcm1cbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgJzppbnB1dDpub3QoW3R5cGU9XCJzdWJtaXRcIl0pOm5vdChbdHlwZT1cImZpbGVcIl0pOm5vdChbdHlwZT1cImJ1dHRvblwiXSknXG4gICAgICAgIClcbiAgICAgICAgLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgdmFyIGZpZWxkID0gJChlbCk7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaWVsZC5hdHRyKCd0eXBlJyk7XG4gICAgICAgICAgdmFyIG5hbWUgPVxuICAgICAgICAgICAgZmllbGQuYXR0cignZGF0YS1uYW1lJykgfHwgZmllbGQuYXR0cignbmFtZScpIHx8ICdGaWVsZCAnICsgKGkgKyAxKTtcbiAgICAgICAgICAvLyBFbmNvZGluZyB0aGUgZmllbGQgbmFtZSB3aWxsIHByZXZlbnQgZmllbGRzIHRoYXQgaGF2ZSBicmFja2V0c1xuICAgICAgICAgIC8vIGluIHRoZWlyIG5hbWUgZnJvbSBiZWluZyBwYXJzZWQgYnkgYGJvZHlQYXJzZXIudXJsZW5jb2RlZGAgYXNcbiAgICAgICAgICAvLyBvYmplY3RzIHdoaWNoIHdvdWxkIGhh
11823dmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgbGlrZSBub3Qgc2F2aW5nXG4gICAgICAgICAgLy8gdGhlIGNvbnRlbnQgb2YgdGhlIGZpZWxkLlxuICAgICAgICAgIC8vIGh0dHBzOi8vd2ViZmxvdy5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9DTVNBVVRILTI0OTVcbiAgICAgICAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGZpZWxkLnZhbCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmllbGQuaXMoJzpjaGVja2VkJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAvLyBSYWRpbyBncm91cCB2YWx1ZSBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXSA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0W25hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5maW5kKCdpbnB1dFtuYW1lPVwiJyArIGZpZWxkLmF0dHIoJ25hbWUnKSArICdcIl06Y2hlY2tlZCcpXG4gICAgICAgICAgICAgICAgLnZhbCgpIHx8IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gJC50cmltKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0W25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgc3RhdHVzID0gc3RhdHVzIHx8IGdldFN0YXR1cyhmaWVsZCwgdHlwZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kRmlsZVVwbG9hZHMoZm9ybSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gICAgICBmb3JtLmZpbmQoJzppbnB1dFt0eXBlPVwiZmlsZVwiXScpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIHZhciBmaWVsZCA9ICQoZWwpO1xuICAgICAgICB2Y
11823XIgbmFtZSA9XG4gICAgICAgICAgZmllbGQuYXR0cignZGF0YS1uYW1lJykgfHwgZmllbGQuYXR0cignbmFtZScpIHx8ICdGaWxlICcgKyAoaSArIDEpO1xuICAgICAgICB2YXIgdmFsdWUgPSBmaWVsZC5hdHRyKCdkYXRhLXZhbHVlJyk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFsdWUgPSAkLnRyaW0odmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhY2tpbmdDb29raWVOYW1lTWFwID0ge1xuICAgICAgX21rdG9fdHJrOiAnbWFya2V0bycsXG4gICAgICAvLyBfX2hzdGM6ICdodWJzcG90JyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY29sbGVjdEVudGVycHJpc2VUcmFja2luZ0Nvb2tpZXMoKSB7XG4gICAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpLnJlZHVjZShmdW5jdGlvbiAoXG4gICAgICAgIGFjYyxcbiAgICAgICAgY29va2llXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc3BsaXRDb29raWUgPSBjb29raWUuc3BsaXQoJz0nKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNwbGl0Q29va2llWzBdO1xuICAgICAgICBpZiAobmFtZSBpbiB0cmFja2luZ0Nvb2tpZU5hbWVNYXApIHtcbiAgICAgICAgICBjb25zdCBtYXBwZWROYW1lID0gdHJhY2tpbmdDb29raWVOYW1lTWFwW25hbWVdO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3BsaXRDb29raWUuc2xpY2UoMSkuam9pbignPScpO1xuICAgICAgICAgIGFjY1ttYXBwZWROYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHJldHVybiBjb29raWVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0YXR1cyhmaWVsZCwgdHlwZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0dXMgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICBzdGF0dXMgPSAnUGFzc3dvcmRzIGNhbm5vdCBiZSBzdWJtaXR0ZWQuJztcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQuYXR0cigncmVxdWlyZWQnKSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ1BsZWFzZSBmaWxsIG91dCB0aGUgcmVxdWlyZWQgZmllbGQ6ICcgKyBuYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKGVtYWlsRmllbGQudGVzdChmaWVsZC5hdHRyKCd0eXBlJykpKSB7XG4gICAgICAgICAgaWYgKCFlbWFpbFZhbHVlLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcyBmb3I6ICcgKyBuYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZy1yZWNhcHRjaGEtcmVzcG9uc2UnICYmICF2YWx1ZSkge1xuICAgICAgICBzdGF0dXMgPSAnUGxlYXNlIGNvbmZpcm0geW914oCZcmUgbm90IGEgcm9ib3QuJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBvcnRlZFN1Ym1pdFdlYmZsb3coZGF0YSkge1xuICAgICAgcHJldmVudERlZmF1bHQoZGF0YSk7XG4gICAgICBhZnRlclN1Ym1pdChkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBTdWJtaXQgZm9ybSB0byBNYWlsQ2hpbXBcbiAgICBmdW5jdGlvbiBzdWJtaXRNYWlsQ2hpbXAoZGF0YSkge1xuICAgICAgcmVzZXQoZGF0YSk7XG5cbiAgICAgIHZhciBmb3JtID0gZGF0YS5mb3JtO1xuICAgICAgdmFyIHBheWxvYWQgPSB7fTtcblxuICAgICAgLy8gU2tpcCBBamF4IHN1Ym1pc3Npb24gaWYgaHR0cC9zIG1pc21hdGNoLCBmYWxsYmFjayB0byBQT1NUIGluc3RlYWRcbiAgICAgIGlmICgvXmh0dHBzLy50ZXN0KGxvYy5ocmVmKSAmJiAhL15odHRwcy8udGVzdChkYXRhLmFjdGlvbikpIHtcbiAgICAgICAgZm9ybS5hdHRyKCdtZXRob2QnLCAncG9zdCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByZXZlbnREZWZhdWx0KGRhdGEpO1xuXG4gICAgICAvLyBGaW5kICYgcG9wdWxhdGUgYWxsIGZpZWxkc1xuICAgICAgdmFyIHN0YXR1cyA9IGZpbmRGaWVsZHMoZm9ybSwgcGF5bG9hZCk7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiBhbGVydChzdGF0dXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBEaXNhYmxlIHN1Ym1pdCBidXR0b25cbiAgICAgIGRpc2FibGVCdG4oZGF0YSk7XG5cbiAgICAgIC8vIFVzZSBzcGVjaWFsIGZvcm1hdCBmb3IgTWFpbENoaW1wIHBhcmFtc1xuICAgICAgdmFyIGZ1bGxOYW1lO1xuICAgICAgXy5lYWNoKHBheWxvYWQsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChlbWFpbEZpZWxkLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIHBheWxvYWQuRU1BSUwgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL14oKGZ1bGxbIF8tXT8pP25hbWUpJC9pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGZ1bGxOYW1lID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9eKGZpcnN0WyBfLV0/bmFtZSkkL2kudGVzdChrZXkpKSB7XG4gICAgICAgICAgcGF5bG9hZC5GTkFNRSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXihsYXN0WyBfLV0/bmFtZSkkL2kudGVzdChrZXkpKSB7XG4gICAgICAgICAgcGF5bG9hZC5MTkFNRSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZ1bGxOYW1lICYmICFwYXlsb2FkLkZOQU1FKSB7XG4gICAgICAgIGZ1bGxOYW1lID0gZnVsbE5hbWUuc3BsaXQoJyAnKTtcbiAgICAgICAgcGF5bG9hZC5GTkFNRSA9IGZ1bGxOYW1lWzBdO1xuICAgICAgICBwYXlsb2FkLkxOQU1FID0gcGF5bG9hZC5MTkFNRSB8fCBmdWxsTmFtZVsxXTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoZSAodW5kb2N1bWVudGVkKSBNYWlsQ2hpbXAganNvbnAgYXBpXG4gICAgICB2Y
11823XIgdXJsID0gZGF0YS5hY3Rpb24ucmVwbGFjZSgnL3Bvc3Q/JywgJy9wb3N0LWpzb24/JykgKyAnJmM9Pyc7XG4gICAgICAvLyBBZGQgc3BlY2lhbCBwYXJhbSB0byBwcmV2ZW50IGJvdCBzaWdudXBzXG4gICAgICB2YXIgdXNlcklkID0gdXJsLmluZGV4T2YoJ3U9JykgKyAyO1xuICAgICAgdXNlcklkID0gdXJsLnN1YnN0cmluZyh1c2VySWQsIHVybC5pbmRleE9mKCcmJywgdXNlcklkKSk7XG4gICAgICB2YXIgbGlzdElkID0gdXJsLmluZGV4T2YoJ2lkPScpICsgMztcbiAgICAgIGxpc3RJZCA9IHVybC5zdWJzdHJpbmcobGlzdElkLCB1cmwuaW5kZXhPZignJicsIGxpc3RJZCkpO1xuICAgICAgcGF5bG9hZFsnYl8nICsgdXNlcklkICsgJ18nICsgbGlzdElkXSA9ICcnO1xuXG4gICAgICAkLmFqYXgoe1xuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGE6IHBheWxvYWQsXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbnAnLFxuICAgICAgfSlcbiAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICBkYXRhLnN1Y2Nlc3MgPSByZXNwLnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnIHx8IC9hbHJlYWR5Ly50ZXN0KHJlc3AubXNnKTtcbiAgICAgICAgICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdNYWlsQ2hpbXAgZXJyb3I6ICcgKyByZXNwLm1zZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFmdGVyU3VibWl0KGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuZmFpbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYWZ0ZXJTdWJtaXQoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbW1vbiBjYWxsYmFjayB3aGljaCBydW5zIGFmdGVyIGFsbCBBamF4IHN1Ym1pc3Npb25zXG4gICAgZnVuY3Rpb24gYWZ0ZXJTdWJtaXQoZGF0YSkge1xuICAgICAgdmFyIGZvcm0gPSBkYXRhLmZvcm07XG4gICAgICB2Y
11823XIgcmVkaXJlY3QgPSBkYXRhLnJlZGlyZWN0O1xuICAgICAgdmFyIHN1Y2Nlc3MgPSBkYXRhLnN1Y2Nlc3M7XG5cbiAgICAgIC8vIFJlZGlyZWN0IHRvIGEgc3VjY2VzcyB1cmwgaWYgZGVmaW5lZFxuICAgICAgaWYgKHN1Y2Nlc3MgJiYgcmVkaXJlY3QpIHtcbiAgICAgICAgV2ViZmxvdy5sb2NhdGlvbihyZWRpcmVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBvciBoaWRlIHN0YXR1cyBkaXZzXG4gICAgICBkYXRhLmRvbmUudG9nZ2xlKHN1Y2Nlc3MpO1xuICAgICAgZGF0YS5mYWlsLnRvZ2dsZSghc3VjY2Vzcyk7XG5cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGRhdGEuZG9uZS5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5mYWlsLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhpZGUgZm9ybSBvbiBzdWNjZXNzXG4gICAgICBmb3JtLnRvZ2dsZSghc3VjY2Vzcyk7XG5cbiAgICAgIC8vIFJlc2V0IGRhdGEgYW5kIGVuYWJsZSBzdWJtaXQgYnV0dG9uXG4gICAgICByZXNldChkYXRhKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChkYXRhKSB7XG4gICAgICBkYXRhLmV2dCAmJiBkYXRhLmV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZGF0YS5ldnQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRGaWxlVXBsb2FkKGksIGZvcm0pIHtcbiAgICAgIGlmICghZm9ybS5maWxlVXBsb2FkcyB8fCAhZm9ybS5maWxlVXBsb2Fkc1tpXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWxlO1xuICAgICAgdmFyICRlbCA9ICQoZm9ybS5maWxlVXBsb2Fkc1tpXSk7XG4gICAgICB2Y
11823XIgJGRlZmF1bHRXcmFwID0gJGVsLmZpbmQoJz4gLnctZmlsZS11cGxvYWQtZGVmYXVsdCcpO1xuICAgICAgdmFyICR1cGxvYWRpbmdXcmFwID0gJGVsLmZpbmQoJz4gLnctZmlsZS11cGxvYWQtdXBsb2FkaW5nJyk7XG4gICAgICB2YXIgJHN1Y2Nlc3NXcmFwID0gJGVsLmZpbmQoJz4gLnctZmlsZS11cGxvYWQtc3VjY2VzcycpO1xuICAgICAgdmFyICRlcnJvcldyYXAgPSAkZWwuZmluZCgnPiAudy1maWxlLXVwbG9hZC1lcnJvcicpO1xuICAgICAgdmFyICRpbnB1dCA9ICRkZWZhdWx0V3JhcC5maW5kKCcudy1maWxlLXVwbG9hZC1pbnB1dCcpO1xuICAgICAgdmFyICRsYWJlbCA9ICRkZWZhdWx0V3JhcC5maW5kKCcudy1maWxlLXVwbG9hZC1sYWJlbCcpO1xuICAgICAgdmFyICRsYWJlbENoaWxkcmVuID0gJGxhYmVsLmNoaWxkcmVuKCk7XG4gICAgICB2YXIgJGVycm9yTXNnRWwgPSAkZXJyb3JXcmFwLmZpbmQoJy53LWZpbGUtdXBsb2FkLWVycm9yLW1zZycpO1xuICAgICAgdmFyICRmaWxlRWwgPSAkc3VjY2Vzc1dyYXAuZmluZCgnLnctZmlsZS11cGxvYWQtZmlsZScpO1xuICAgICAgdmFyICRyZW1vdmVFbCA9ICRzdWNjZXNzV3JhcC5maW5kKCcudy1maWxlLXJlbW92ZS1saW5rJyk7XG4gICAgICB2YXIgJGZpbGVOYW1lRWwgPSAkZmlsZUVsLmZpbmQoJy53LWZpbGUtdXBsb2FkLWZpbGUtbmFtZScpO1xuXG4gICAgICB2YXIgc2l6ZUVyck1zZyA9ICRlcnJvck1zZ0VsLmF0dHIoJ2RhdGEtdy1zaXplLWVycm9yJyk7XG4gICAgICB2YXIgdHlwZUVyck1zZyA9ICRlcnJvck1zZ0VsLmF0dHIoJ2RhdGEtdy10eXBlLWVycm9yJyk7XG4gICAgICB2Y
11823XIgZ2VuZXJpY0Vyck1zZyA9ICRlcnJvck1zZ0VsLmF0dHIoJ2RhdGEtdy1nZW5lcmljLWVycm9yJyk7XG5cbiAgICAgIC8vIEFjY2Vzc2liaWxpdHkgZml4ZXNcbiAgICAgIC8vIFRoZSBmaWxlIHVwbG9hZCBJbnB1dCBpcyBub3Qgc3R5bGFibGUgYnkgdGhlIGRlc2lnbmVyLCBzbyB3ZSBhcmVcbiAgICAgIC8vIGdvaW5nIHRvIHByZXRlbmQgdGhlIExhYmVsIGlzIHRoZSBpbnB1dC4gwq9cXF8o44OEKV8vwq9cbiAgICAgIGlmICghaW5BcHApIHtcbiAgICAgICAgJGxhYmVsLm9uKCdjbGljayBrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS53aGljaCAhPT0gMTMgJiYgZS53aGljaCAhPT0gMzIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgJGlucHV0LmNsaWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBCb3RoIG9mIHRoZXNlIGFyZSBhZGRlZCB0aHJvdWdoIENTU1xuICAgICAgJGxhYmVsLmZpbmQoJy53LWljb24tZmlsZS11cGxvYWQtaWNvbicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICRyZW1vdmVFbC5maW5kKCcudy1pY29uLWZpbGUtdXBsb2FkLXJlbW92ZScpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblxuICAgICAgaWYgKCFpbkFwcCkge1xuICAgICAgICAkcmVtb3ZlRWwub24oJ2NsaWNrIGtleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJykge1xuICAgICAgICAgICAgaWYgKGUud2hpY2ggIT09IDEzICYmIGUud2hpY2ggIT09IDMyKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICRpbnB1dC5yZW1vdmVBdHRyKCdkYXRhLXZhbHVlJyk7XG4gICAgICAgICAgJGlucHV0LnZhbCgnJyk7XG4gICAgICAgICAgJGZpbGVOYW1lRWwuaHRtbCgnJyk7XG4gICAgICAgICAgJGRlZmF1bHRXcmFwLnRvZ2dsZSh0cnVlKTtcbiAgICAgICAgICAkc3VjY2Vzc1dyYXAudG9nZ2xlKGZhbHNlKTtcbiAgICAgICAgICAkbGFiZWwuZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGlucHV0Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGZpbGUgPSBlLnRhcmdldCAmJiBlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlc1swXTtcbiAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IHVwbG9hZGluZ1xuICAgICAgICAgICRkZWZhdWx0V3JhcC50b2dnbGUoZmFsc2UpO1xuICAgICAgICAgICRlcnJvcldyYXAudG9nZ2xlKGZhbHNlKTtcbiAgICAgICAgICAkdXBsb2FkaW5nV3JhcC50b2dnbGUodHJ1ZSk7XG4gICAgICAgICAgJHVwbG9hZGluZ1dyYXAuZm9jdXMoKTtcblxuICAgICAgICAgIC8vIFNldCBmaWxlbmFtZVxuICAgICAgICAgICRmaWxlTmFtZUVsLnRleHQoZmlsZS5uYW1lKTtcblxuICAgICAgICAgIC8vIERpc2FibGUgc3VibWl0IGJ1dHRvblxuICAgICAgICAgIGlmICghaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgZGlzYWJsZUJ0bihmb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybS5maWxlVXBsb2Fkc1tpXS51cGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgc2lnbkZpbGUoZmlsZSwgYWZ0ZXJTaWduKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2V0dGluZyBpbnB1dCB3aWR0aCAxcHggYW5kIGhlaWdodCBlcXVhbCBsYWJlbFxuICAgICAgICAvLyBUaGlzIGlzIHNvIHRoZSBicm93c2VyIHJlcXVpcmVkIGVycm9yIHdpbGwgc2hvdyB1cFxuICAgICAgICB2Y
11823XIgaGVpZ2h0ID0gJGxhYmVsLm91dGVySGVpZ2h0KCk7XG4gICAgICAgICRpbnB1dC5oZWlnaHQoaGVpZ2h0KTtcbiAgICAgICAgJGlucHV0LndpZHRoKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGlucHV0Lm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgJGxhYmVsLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgJGxhYmVsQ2hpbGRyZW4ub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwYXJzZUVycm9yKGVycikge1xuICAgICAgICB2YXIgZXJyb3JNc2cgPSBlcnIucmVzcG9uc2VKU09OICYmIGVyci5yZXNwb25zZUpTT04ubXNnO1xuICAgICAgICB2YXIgdXNlckVycm9yID0gZ2VuZXJpY0Vyck1zZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBlcnJvck1zZyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBlcnJvck1zZy5pbmRleE9mKCdJbnZhbGlkRmlsZVR5cGVFcnJvcicpID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHVzZXJFcnJvciA9IHR5cGVFcnJNc2c7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIGVycm9yTXNnID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGVycm9yTXNnLmluZGV4T2YoJ01heEZpbGVTaXplRXJyb3InKSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB1c2VyRXJyb3IgPSBzaXplRXJyTXNnO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVycm9yTXNnRWwudGV4dCh1c2VyRXJyb3IpO1xuXG4gICAgICAgICRpbnB1dC5yZW1vdmVBdHRyKCdkYXRhLXZhbHVlJyk7XG4gICAgICAgICRpbnB1dC52YWwoJycpO1xuICAgICAgICAkdXBsb2FkaW5nV3JhcC50b2dnbGUoZmFsc2UpO1xuICAgICAgICAkZGVmYXVsdFdyYXAudG9nZ2xlKHRydWUpO1xuICAgICAgICAkZXJyb3JXcmFwLnRvZ2dsZSh0cnVlKTtcbiAgICAgICAgJGVycm9yV3JhcC5mb2N1cygpO1xuXG4gICAgICAgIGZvcm0uZmlsZVVwbG9hZHNbaV0udXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmICghaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgIHJlc2V0KGZvcm0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGFmdGVyU2lnbihlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBwYXJzZUVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
11823XIgZmlsZU5hbWUgPSBkYXRhLmZpbGVOYW1lO1xuICAgICAgICB2YXIgcG9zdERhdGEgPSBkYXRhLnBvc3REYXRhO1xuICAgICAgICB2YXIgZmlsZUlkID0gZGF0YS5maWxlSWQ7XG4gICAgICAgIHZhciBzM1VybCA9IGRhdGEuczNVcmw7XG4gICAgICAgICRpbnB1dC5hdHRyKCdkYXRhLXZhbHVlJywgZmlsZUlkKTtcblxuICAgICAgICB1cGxvYWRTMyhzM1VybCwgcG9zdERhdGEsIGZpbGUsIGZpbGVOYW1lLCBhZnRlclVwbG9hZCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGFmdGVyVXBsb2FkKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3cgc3VjY2Vzc1xuICAgICAgICAkdXBsb2FkaW5nV3JhcC50b2dnbGUoZmFsc2UpO1xuICAgICAgICAkc3VjY2Vzc1dyYXAuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuICAgICAgICAkc3VjY2Vzc1dyYXAuZm9jdXMoKTtcblxuICAgICAgICBmb3JtLmZpbGVVcGxvYWRzW2ldLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoIWlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICByZXNldChmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpc1VwbG9hZGluZygpIHtcbiAgICAgICAgdmFyIHVwbG9hZHMgPSAoZm9ybS5maWxlVXBsb2FkcyAmJiBmb3JtLmZpbGVVcGxvYWRzLnRvQXJyYXkoKSkgfHwgW107XG4gICAgICAgIHJldHVybiB1cGxvYWRzLnNvbWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnVwbG9hZGluZztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2lnbkZpbGUoZmlsZSwgY2IpIHtcbiAgICAgIHZhciBwYXlsb2FkID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgfSk7XG5cbiAgICAgICQuYWpheCh7dHlwZTogJ0dFVCcsIHVybDogYCR7c2lnbkZpbGVVcmx9PyR7cGF5bG9hZH1gLCBjcm9zc0RvbWFpbjogdHJ1ZX0pXG4gICAgICAgIC5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgY2IobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5mYWlsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGxvYWRTMyh1cmwsIGRhdGEsIGZpbGUsIGZpbGVOYW1lLCBjYikge1xuICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3IgKHZhciBrIGluIGRhdGEpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGssIGRhdGFba10pO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSwgZmlsZU5hbWUpO1xuXG4gICAgICAkLmFqYXgoe1xuICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgICAgLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgICAuZmFpbChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IG1vZHVsZVxuICAgIHJldHVybiBhcGk7XG4gIH0pXG4pO1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJyZXF1aXJlIiwicmVuZGVyVHVybnN0aWxlQ2FwdGNoYSIsInNpdGVLZXkiLCJmb3JtRWxlbWVudCIsImNiIiwiZXJyb3JDYWxsYmFjayIsImNhcHRjaGFDb250YWluZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsInR1cm5zdGlsZSIsInJlbmRlciIsInNpdGVrZXkiLCJjYWxsYmFjayIsInRva2VuIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJfIiwiVFVSTlNUSUxFX0xPQURFRF9FVkVOVCIsImFwaSIsIiRkb2MiLCIkZm9ybXMiLCJsb2MiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInJldHJvIiwiWERvbWFpblJlcXVlc3QiLCJhdG9iIiwibmFtZXNwYWNlIiwic2l0ZUlkIiwiZW1haWxGaWVsZCIsImVtYWlsVmFsdWUiLCJhbGVydCIsImluQXBwIiwiZW52IiwibGlzdGVuaW5nIiwiZm9ybVVybCIsInNpZ25GaWxlVXJsIiwidHVybnN0aWxlU2l0ZUtleSIsImZpbmQiLCJkYXRhIiwidHVybnN0aWxlU2NyaXB0IiwiY2hpbXBSZWdleCIsImRpc2Nvbm5lY3RlZCIsImRlYm91bmNlIiwicmVhZHkiLCJkZXNpZ24iLCJwcmV2aWV3IiwibG9hZFR1cm5zdGlsZVNjcmlwdCIsImluaXQiLCJhZGRMaXN0ZW5lcnMiLCJhdHRyIiwiV0VCRkxPV19GT1JNX0FQSV9IT1NUIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJXRUJGTE9XX0ZPUk1fT0xESUVfSE9TVCIsImxlbmd0aCIsImVhY2giLCJidWlsZCIsInNyYyIsImhlYWQiLCJvbmxvYWQiLCJ0cmlnZ2VyIiwiaSIsImVsIiwiJGVsIiwiZm9ybSIsInJlc2V0Iiwid3JhcCIsImNsb3Nlc3QiLCJkb25lIiwiZmFpbCIsImZpbGVVcGxvYWRzIiwiaiIsImluaXRGaWxlVXBsb2FkIiwid2FpdCIsImRpc2FibGVCdG4iLCJvbiIsInR1cm5zdGlsZVRva2VuIiwiZm9ybU5hbWUiLCJhY3Rpb24iLCJoYW5kbGVyIiwicmVkaXJlY3QiLCJ0ZXN0Iiwic3VibWl0TWFpbENoaW1wIiwiV0VCRkxPV19FWFBPUlRfTU9ERSIsImV4cG9ydGVkU3VibWl0V2ViZmxvdyIsImhvc3RlZFN1Ym1pdEhhbmRsZXIiLCJkZWZhdWx0IiwiY29sbGVjdEVudGVycHJpc2VUcmFja2luZ0Nvb2tpZXMiLCJwcmV2ZW50RGVmYXVsdCIsImZpbmRGaWVsZHMiLCJmaW5kRmlsZVVwbG9hZHMiLCJhZnRlclN1Ym1pdCIsImV2dCIsIkNIRUNLQk9YX0NMQVNTX05BTUUiLCJSQURJT19JTlBVVF9DTEFTU19OQU1FIiwiQ0hFQ0tFRF9DTEFTUyIsIkZPQ1VTRURfQ0xBU1MiLCJGT0NVU0VEX1ZJU0lCTEVfQ0xBU1MiLCJmb2N1c1Zpc2libGVTZWxlY3RvcnMiLCJDVVNUT01fQ09OVFJPTFMiLCJ0YXJnZXQiLCJzaWJsaW5ncyIsInRvZ2dsZUNsYXNzIiwibmFtZSIsIm1hcCIsInJlbW92ZUNsYXNzIiwiJHRhcmdldCIsImhhc0NsYXNzIiwiYWRkQ2xhc3MiLCJmb3JFYWNoIiwiY29udHJvbFR5cGUiLCJjdXN0b21Db250cm9sQ2xhc3NOYW1lIiwiZmlsdGVyIiwiYnRuIiwic3VjY2VzcyIsInByb3AiLCJCb29sZWFuIiwibGFiZWwiLCJ2YWwiLCJyZXN1bHQiLCJzdGF0dXMiLCJmaWVsZCIsInR5cGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ2YWx1ZSIsImlzIiwidHJpbSIsImdldFN0YXR1cyIsInRyYWNraW5nQ29va2llTmFtZU1hcCIsIl9ta3RvX3RyayIsImNvb2tpZXMiLCJjb29raWUiLCJzcGxpdCIsInJlZHVjZSIsImFjYyIsInNwbGl0Q29va2llIiwibWFwcGVkTmFtZSIsInNsaWNlIiwiam9pbiIsInBheWxvYWQiLCJocmVmIiwiZnVsbE5hbWUiLCJrZXkiLCJFTUFJTCIsIkZOQU1FIiwiTE5BTUUiLCJ1cmwiLCJ1c2VySWQiLCJzdWJzdHJpbmciLCJsaXN0SWQiLCJhamF4IiwiZGF0YVR5cGUiLCJyZXNwIiwibXNnIiwiY29uc29sZSIsImluZm8iLCJ0b2dnbGUiLCJmb2N1cyIsImZpbGUiLCIkZGVmYXVsdFdyYXAiLCIkdXBsb2FkaW5nV3JhcCIsIiRzdWNjZXNzV3JhcCIsIiRlcnJvcldyYXAiLCIkaW5wdXQiLCIkbGFiZWwiLCIkbGFiZWxDaGlsZHJlbiIsImNoaWxkcmVuIiwiJGVycm9yTXNnRWwiLCIkZmlsZUVsIiwiJHJlbW92ZUVsIiwiJGZpbGVOYW1lRWwiLCJzaXplRXJyTXNnIiwidHlwZUVyck1zZyIsImdlbmVyaWNFcnJNc2ciLCJlIiwid2hpY2giLCJjbGljayIsInJlbW92ZUF0dHIiLCJodG1sIiwiZmlsZXMiLCJ0ZXh0IiwiaXNVcGxvYWRpbmciLCJ1cGxvYWRpbmciLCJzaWduRmlsZSIsImFmdGVyU2lnbiIsImhlaWdodCIsIm91dGVySGVpZ2h0Iiwid2lkdGgiLCJwYXJzZUVycm9yIiwiZXJyIiwiZXJyb3JNc2ciLCJyZXNwb25zZUpTT04iLCJ1c2VyRXJyb3IiLCJmaWxlTmFtZSIsInBvc3REYXRhIiwiZmlsZUlkIiwiczNVcmwiLCJ1cGxvYWRTMyIsImFmdGVyVXBsb2FkIiwiY3NzIiwidXBsb2FkcyIsInRvQXJyYXkiLCJzb21lIiwiVVJMU2VhcmNoUGFyYW1zIiwic2l6ZSIsImNyb3NzRG9tYWluIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImsiLCJhcHBlbmQiLCJwcm9jZXNzRGF0YSIsImNvbn
11823RlbnRUeXBlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQU9BLEdBRUE7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCLE1BQU1DLHlCQUF5QixDQUM3QkMsU0FDQUMsYUFDQUMsSUFDQUMsY0FBYyx1QkFBdUI7O0lBRXJDLE1BQU1DLG1CQUFtQkMsU0FBU0MsYUFBYSxDQUFDO0lBQ2hETCxZQUFZTSxXQUFXLENBQUNIO0lBRXhCLHFCQUFxQjtJQUNyQkksVUFBVUMsTUFBTSxDQUFDTCxrQkFBa0I7UUFDakNNLFNBQVNWO1FBQ1RXLFVBQVUsU0FBVUMsS0FBSztZQUN2QlYsR0FBR1U7UUFDTDtRQUNBLGtCQUFrQjtZQUNoQlQ7UUFDRjtJQUNGO0FBQ0Y7QUFFQU4sUUFBUWdCLE1BQU0sQ0FDWixTQUNDQyxPQUFPQyxPQUFPLEdBQUcsU0FBVUMsQ0FBQyxFQUFFQyxDQUFDO0lBQzlCLE1BQU1DLHlCQUF5QjtJQUMvQixJQUFJQyxNQUFNLENBQUM7SUFFWCxJQUFJQyxPQUFPSixFQUFFWDtJQUNiLElBQUlnQjtJQUNKLElBQUlDLE1BQU1DLE9BQU9DLFFBQVE7SUFDekIsSUFBSUMsUUFBUUYsT0FBT0csY0FBYyxJQUFJLENBQUNILE9BQU9JLElBQUk7SUFDakQsSUFBSUMsWUFBWTtJQUNoQixJQUFJQztJQUNKLElBQUlDLGFBQWE7SUFDakIsSUFBSUMsYUFBYTtJQUNqQixJQUFJQyxRQUFRVCxPQUFPUyxLQUFLO0lBQ3hCLElBQUlDLFFBQVFwQyxRQUFRcUMsR0FBRztJQUN2QixJQUFJQztJQUVKLElBQUlDO0lBQ0osSUFBSUM7SUFFSixNQUFNQyxtQkFBbUJsQixLQUN0Qm1CLElBQUksQ0FBQyw0QkFDTEMsSUFBSSxDQUFDO0lBQ1IsSUFBSUM7SUFFSiwrQ0FBK0M7SUFDL0MsSUFBSUMsYUFBYTtJQUVqQixJQUFJQyxlQUFlMUIsRUFBRTJCLFFBQVEsQ0FBQztRQUM1QlosTUFDRTtJQUVKLEdBQUc7SUFFSGIsSUFBSTBCLEtBQUssR0FDUDFCLElBQUkyQixNQUFNLEdBQ1YzQixJQUFJNEIsT0FBTyxHQUNUO1FBQ0UsOEVBQThFO1FBQzlFQztRQUVBLGFBQWE7UUFDYkM7UUFFQSxzRUFBc0U7UUFDdEUsSUFBSSxBQUFDLENBQUEsQ0FBQ2hCLFNBQVNwQyxRQUFRcUMsR0FBRyxDQUFDLFVBQVMsS0FBTSxDQUFDQyxXQUFXO1lBQ3BEZTtRQUNGO0lBQ0Y7SUFFSixTQUFTRDtRQUNQcEIsU0FBU2IsRUFBRSxRQUFRbUMsSUFBSSxDQUFDO1FBRXhCZixVQUFVZ0Isd0JBQXdCLGtCQUFrQnZCO1FBRXBELDhGQUE4RjtRQUM5RixJQUFJSixTQUFTVyxRQUFRaUIsT0FBTyxDQUFDRCwwQkFBMEIsR0FBRztZQUN4RGhCLFVBQVVBLFFBQVFrQixPQUFPLENBQ3ZCRix1QkFDQUc7UUFFSjtRQUVBbEIsY0FBYyxDQUFDLEVBQUVELFFBQVEsU0FBUyxDQUFDO1FBRW5DZixTQUFTTCxFQUFFWSxZQUFZO1FBQ3ZCLElBQUksQ0FBQ1AsT0FBT21DLE1BQU0sRUFBRTtZQUNsQjtRQUNGO1FBQ0FuQyxPQUFPb0MsSUFBSSxDQUFDQztJQUNkO0lBRUEsU0FBU1Y7UUFDUCxJQUFJVixrQkFBa0I7WUFDcEIsa0NBQWtDO1lBQ2xDRyxrQkFBa0JwQyxTQUFTQyxhQUFhLENBQUM7WUFDekNtQyxnQkFBZ0JrQixHQUFHLEdBQ2pCO1lBQ0Z0RCxTQUFTdUQsSUFBSSxDQUFDckQsV0FBVyxDQUFDa0M7WUFDMUJBLGdCQUFnQm9CLE1BQU0sR0FBRztnQkFDdkIsaUVBQWlFO2dCQUNqRSxvSEFBb0g7Z0JBQ3BIekMsS0FBSzBDLE9BQU8sQ0FBQzVDO1lBQ2Y7UUFDRjtJQUNGO0lBRUEsU0FBU3dDLE1BQU1LLENBQUMsRUFBRUMsRUFBRTtRQUNsQixtQ0FBbUM7UUFDbkMsSUFBSUMsTUFBTWpELEVBQUVnRDtRQUNaLElBQUl4QixPQUFPeEIsRUFBRXdCLElBQUksQ0FBQ3dCLElBQUlwQztRQUN0QixJQUFJLENBQUNZLE1BQU07WUFDVEEsT0FBT3hCLEVBQUV3QixJQUFJLENBQUN3QixJQUFJcEMsV0FBVztnQkFBQ3NDLE1BQU1EO1lBQUc7UUFDekMsRUFBRSxZQUFZO1FBRWRFLE1BQU0zQjtRQUNOLElBQUk0QixPQUFPSCxJQUFJSSxPQUFPLENBQUM7UUFDdkI3QixLQUFLOEIsSUFBSSxHQUFHRixLQUFLN0IsSUFBSSxDQUFDO1FBQ3RCQyxLQUFLK0IsSUFBSSxHQUFHSCxLQUFLN0IsSUFBSSxDQUFDO1FBQ3RCQyxLQUFLZ0MsV0FBVyxHQUFHSixLQUFLN0IsSUFBSSxDQUFDO1FBRTdCQyxLQUFLZ0MsV0FBVyxDQUFDZixJQUFJLENBQUMsU0FBVWdCLENBQUM7WUFDL0JDLGVBQWVELEdBQUdqQztRQUNwQjtRQUVBLElBQUlGLGtCQUFrQjtZQUNwQixzREFBc0Q7WUFDdEQseUNBQXlDO1lBQ3pDRSxLQUFLbUMsSUFBSSxHQUFHO1lBQ1pDLFdBQVdwQztZQUVYLDJHQUEyRztZQUMzRywwR0FBMEc7WUFDMUdwQixLQUFLeUQsRUFBRSxDQUNMLE9BQU9yRSxjQUFjLGNBQWMsVUFBVVUsd0JBQzdDO2dCQUNFLDZFQUE2RTtnQkFDN0VuQix1QkFDRXVDLGtCQUNBMEIsSUFDQSxDQUFDcEQ7b0JBQ0MsMEhBQTBIO29CQUMxSCxtSEFBbUg7b0JBQ25INEIsS0FBS3NDLGNBQWMsR0FBR2xFO29CQUN0Qiw0REFBNEQ7b0JBQzVEdUQsTUFBTTNCO2dCQUNSLEdBQ0E7b0JBQ0VvQyxXQUFXcEM7Z0JBQ2I7WUFFSjtRQUVKO1FBRUEsc0JBQXNCO1FBQ3RCLElBQUl1QyxXQUNGdkMsS0FBSzBCLElBQUksQ0FBQ2YsSUFBSSxDQUFDLGlCQUFpQlgsS0FBSzBCLElBQUksQ0FBQ2YsSUFBSSxDQUFDLGdCQUFnQjtRQUNqRSxJQUFJLENBQUNYLEtBQUs4QixJQUFJLENBQUNuQixJQUFJLENBQUMsZUFBZTtZQUNqQ1gsS0FBSzBCLElBQUksQ0FBQ2YsSUFBSSxDQUFDLGNBQWM0QjtRQUMvQjtRQUVBdkMsS0FBSzhCLElBQUksQ0FBQ25CLElBQUksQ0FBQyxZQUFZO1FBQzNCWCxLQUFLOEIsSUFBSSxDQUFDbkIsSUFBSSxDQUFDLFFBQVE7UUFDdkIsSUFBSSxDQUFDWCxLQUFLOEIsSUFBSSxDQUFDbkIsSUFBSSxDQUFDLGVBQWU7WUFDakNYLEtBQUs4QixJQUFJLENBQUNuQixJQUFJLENBQUMsY0FBYzRCLFdBQVc7UUFDMUM7UUFDQXZDLEtBQUsrQixJQUFJLENBQUNwQixJQUFJLENBQUMsWUFBWTtRQUMzQlgsS0FBSytCLElBQUksQ0FBQ3BCLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLElBQUksQ0FBQ1gsS0FBSytCLElBQUksQ0FBQ3BCLElBQUksQ0FBQyxlQUFlO1lBQ2pDWCxLQUFLK0IsSUFBSSxDQUFDcEIsSUFBSSxDQUFDLGNBQWM0QixXQUFXO1FBQzFDO1FBRUEsSUFBSUMsU0FBVXhDLEtBQUt3QyxNQUFNLEdBQUdmLElBQUlkLElBQUksQ0FBQztRQUNyQ1gsS0FBS3lDLE9BQU8sR0FBRztRQUNmekMsS0FBSzBDLFFBQVEsR0FBR2pCLElBQUlkLElBQUksQ0FBQztRQUV6QixpQkFBaUI7UUFDakIsSUFBSVQsV0FBV3lDLElBQUksQ0FBQ0gsU0FBUztZQUMzQnhDLEtBQUt5QyxPQUFPLEdBQUdHO1lBQ2Y7UUFDRjtRQUVBLHFCQUFxQjtRQUNyQixJQUFJSixRQUFRO1lBQ1Y7UUFDRjtRQUVBLHFDQUFxQztRQUNyQyxJQUFJbkQsUUFBUTtZ
11823QUNWVyxLQUFLeUMsT0FBTyxHQUFHSSxzQkFDWEMsd0JBQ0EsQUFBQyxDQUFBO2dCQUNDLE1BQU1DLHNCQUNKekYsUUFBUSwwQkFBMEIwRixPQUFPO2dCQUMzQyxPQUFPRCxvQkFDTHBCLE9BQ0E3QyxLQUNBekIsU0FDQTRGLGtDQUNBQyxnQkFDQUMsWUFDQTNELE9BQ0E0RCxpQkFDQWhCLFlBQ0EvQyxRQUNBZ0UsYUFDQTdFLEdBQ0FvQjtZQUVKLENBQUE7WUFDSjtRQUNGO1FBRUEsdUNBQXVDO1FBQ3ZDTztJQUNGO0lBRUEsU0FBU087UUFDUGYsWUFBWTtRQUVaZixLQUFLeUQsRUFBRSxDQUFDLFVBQVVqRCxZQUFZLFNBQVMsU0FBVWtFLEdBQUc7WUFDbEQsSUFBSXRELE9BQU94QixFQUFFd0IsSUFBSSxDQUFDLElBQUksRUFBRVo7WUFDeEIsSUFBSVksS0FBS3lDLE9BQU8sRUFBRTtnQkFDaEJ6QyxLQUFLc0QsR0FBRyxHQUFHQTtnQkFDWHRELEtBQUt5QyxPQUFPLENBQUN6QztZQUNmO1FBQ0Y7UUFFQSx5REFBeUQ7UUFDekQsTUFBTXVELHNCQUFzQjtRQUM1QixNQUFNQyx5QkFBeUI7UUFDL0IsTUFBTUMsZ0JBQWdCO1FBQ3RCLE1BQU1DLGdCQUFnQjtRQUN0QixNQUFNQyx3QkFBd0I7UUFDOUIsTUFBTUMsd0JBQXdCO1FBRTlCLE1BQU1DLGtCQUFrQjtZQUN0QjtnQkFBQztnQkFBWU47YUFBb0I7WUFDakM7Z0JBQUM7Z0JBQVNDO2FBQXVCO1NBQ2xDO1FBRUQ1RSxLQUFLeUQsRUFBRSxDQUNMLFVBQ0FqRCxZQUNFLENBQUMsaUNBQWlDLENBQUMsR0FDbkNtRSxzQkFDQSxLQUNGLENBQUNEO1lBQ0M5RSxFQUFFOEUsSUFBSVEsTUFBTSxFQUNUQyxRQUFRLENBQUNSLHFCQUNUUyxXQUFXLENBQUNQO1FBQ2pCO1FBR0Y3RSxLQUFLeUQsRUFBRSxDQUFDLFVBQVVqRCxZQUFZLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDa0U7WUFDMUQ5RSxFQUFFLENBQUMsWUFBWSxFQUFFOEUsSUFBSVEsTUFBTSxDQUFDRyxJQUFJLENBQUMsT0FBTyxFQUFFVixvQkFBb0IsQ0FBQyxDQUFDLEVBQUVXLEdBQUcsQ0FDbkUsQ0FBQzNDLEdBQUdDLEtBQ0ZoRCxFQUFFZ0QsSUFBSXVDLFFBQVEsQ0FBQ1Asd0JBQXdCVyxXQUFXLENBQUNWO1lBR3ZELE1BQU1XLFVBQVU1RixFQUFFOEUsSUFBSVEsTUFBTTtZQUU1QixJQUFJLENBQUNNLFFBQVFDLFFBQVEsQ0FBQyxrQkFBa0I7Z0JBQ3RDRCxRQUFRTCxRQUFRLENBQUNQLHdCQUF3QmMsUUFBUSxDQUFDYjtZQUNwRDtRQUNGO1FBRUFJLGdCQUFnQlUsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsYUFBYUMsdUJBQXVCO1lBQzVEN0YsS0FBS3lELEVBQUUsQ0FDTCxTQUNBakQsWUFDRSxDQUFDLGtCQUFrQixFQUFFb0YsWUFBWSxPQUFPLENBQUMsR0FDekNDLHlCQUNBLEtBQ0YsQ0FBQ25CO2dCQUNDOUUsRUFBRThFLElBQUlRLE1BQU0sRUFDVEMsUUFBUSxDQUFDVSx3QkFDVEgsUUFBUSxDQUFDWjtnQkFDWmxGLEVBQUU4RSxJQUFJUSxNQUFNLEVBQ1RZLE1BQU0sQ0FBQ2QsdUJBQ1BHLFFBQVEsQ0FBQ1Usd0JBQ1RILFFBQVEsQ0FBQ1g7WUFDZDtZQUVGL0UsS0FBS3lELEVBQUUsQ0FDTCxRQUNBakQsWUFDRSxDQUFDLGtCQUFrQixFQUFFb0YsWUFBWSxPQUFPLENBQUMsR0FDekNDLHlCQUNBLEtBQ0YsQ0FBQ25CO2dCQUNDOUUsRUFBRThFLElBQUlRLE1BQU0sRUFDVEMsUUFBUSxDQUFDVSx3QkFDVE4sV0FBVyxDQUFDLENBQUMsRUFBRVQsY0FBYyxDQUFDLEVBQUVDLHNCQUFzQixDQUFDO1lBQzVEO1FBRUo7SUFDRjtJQUVBLDJDQUEyQztJQUMzQyxTQUFTaEMsTUFBTTNCLElBQUk7UUFDakIsSUFBSTJFLE1BQU8zRSxLQUFLMkUsR0FBRyxHQUFHM0UsS0FBSzBCLElBQUksQ0FBQzNCLElBQUksQ0FBQztRQUNyQ0MsS0FBS21DLElBQUksR0FBR25DLEtBQUsyRSxHQUFHLENBQUNoRSxJQUFJLENBQUMsZ0JBQWdCO1FBQzFDWCxLQUFLNEUsT0FBTyxHQUFHO1FBQ2YsMkdBQTJHO1FBQzNHRCxJQUFJRSxJQUFJLENBQUMsWUFBWUMsUUFBUWhGLG9CQUFvQixDQUFDRSxLQUFLc0MsY0FBYztRQUNyRXRDLEtBQUsrRSxLQUFLLElBQUlKLElBQUlLLEdBQUcsQ0FBQ2hGLEtBQUsrRSxLQUFLO0lBQ2xDO0lBRUEsd0JBQXdCO0lBQ3hCLFNBQVMzQyxXQUFXcEMsSUFBSTtRQUN0QixJQUFJMkUsTUFBTTNFLEtBQUsyRSxHQUFHO1FBQ2xCLElBQUl4QyxPQUFPbkMsS0FBS21DLElBQUk7UUFDcEJ3QyxJQUFJRSxJQUFJLENBQUMsWUFBWTtRQUNyQiwwQ0FBMEM7UUFDMUMsSUFBSTFDLE1BQU07WUFDUm5DLEtBQUsrRSxLQUFLLEdBQUdKLElBQUlLLEdBQUc7WUFDcEJMLElBQUlLLEdBQUcsQ0FBQzdDO1FBQ1Y7SUFDRjtJQUVBLGtEQUFrRDtJQUNsRCxTQUFTZ0IsV0FBV3pCLElBQUksRUFBRXVELE1BQU07UUFDOUIsSUFBSUMsU0FBUztRQUNiRCxTQUFTQSxVQUFVLENBQUM7UUFFcEIsc0ZBQXNGO1FBQ3RGdkQsS0FDRzNCLElBQUksQ0FDSCx1RUFFRGtCLElBQUksQ0FBQyxTQUFVTSxDQUFDLEVBQUVDLEVBQUU7WUFDbkIsSUFBSTJELFFBQVEzRyxFQUFFZ0Q7WUFDZCxJQUFJNEQsT0FBT0QsTUFBTXhFLElBQUksQ0FBQztZQUN0QixJQUFJc0QsT0FDRmtCLE1BQU14RSxJQUFJLENBQUMsZ0JBQWdCd0UsTUFBTXhFLElBQUksQ0FBQyxXQUFXLFdBQVlZLENBQUFBLElBQUksQ0FBQTtZQUNuRSxpRUFBaUU7WUFDakUsZ0VBQWdFO1lBQ2hFLG1FQUFtRTtZQUNuRSw0QkFBNEI7WUFDNUIsb0RBQW9EO1lBQ3BEMEMsT0FBT29CLG1CQUFtQnBCO1lBQzFCLElBQUlxQixRQUFRSCxNQUFNSCxHQUFHO1lBRXJCLElBQUlJLFNBQVMsWUFBWTtnQkFDdkJFLFFBQVFILE1BQU1JLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUlILFNBQVMsU0FBUztnQkFDM0Isc0NBQXNDO2dCQUN0QyxJQUFJSCxNQUFNLENBQUNoQixLQUFLLEtBQUssUUFBUSxPQUFPZ0IsTUFBTSxDQUFDaEIsS0FBSyxLQUFLLFVBQVU7b0JBQzdEO2dCQUNGO2dCQUVBcUIsUUFDRTVELEtBQ0czQixJQUFJLENBQUMsaUJBQWlCb0YsTUFBTXhFLElBQUksQ0FBQyxVQUFVLGNBQzNDcUUsR0FBRyxNQUFNO1lBQ2hCO1lBRUEsSUFBSSxPQUFPTSxVQUFVLFVBQVU7Z0JBQzdCQSxRQUFROUcsRUFBRWdILElBQUksQ0FBQ0Y7WUFDakI7WUFDQUwsTUFBTSxDQUFDaEIsS0FBSyxHQUFHcUI7WUFDZkosU0FBU0EsVUFBVU8sVUFBVU4sT0FBT0MsTUFBTW5CLE1BQU1xQjtRQUNsRDtRQUVGLE9BQU9KO0lBQ1Q7SUFFQSxTQUFTOUIsZ0JBQWdCMUIsSUFBSTtRQUMzQixJQUFJdUQsU0FBUyxDQUFDO1F
11823BRWR2RCxLQUFLM0IsSUFBSSxDQUFDLHVCQUF1QmtCLElBQUksQ0FBQyxTQUFVTSxDQUFDLEVBQUVDLEVBQUU7WUFDbkQsSUFBSTJELFFBQVEzRyxFQUFFZ0Q7WUFDZCxJQUFJeUMsT0FDRmtCLE1BQU14RSxJQUFJLENBQUMsZ0JBQWdCd0UsTUFBTXhFLElBQUksQ0FBQyxXQUFXLFVBQVdZLENBQUFBLElBQUksQ0FBQTtZQUNsRSxJQUFJK0QsUUFBUUgsTUFBTXhFLElBQUksQ0FBQztZQUN2QixJQUFJLE9BQU8yRSxVQUFVLFVBQVU7Z0JBQzdCQSxRQUFROUcsRUFBRWdILElBQUksQ0FBQ0Y7WUFDakI7WUFDQUwsTUFBTSxDQUFDaEIsS0FBSyxHQUFHcUI7UUFDakI7UUFFQSxPQUFPTDtJQUNUO0lBRUEsTUFBTVMsd0JBQXdCO1FBQzVCQyxXQUFXO0lBRWI7SUFFQSxTQUFTMUM7UUFDUCxNQUFNMkMsVUFBVS9ILFNBQVNnSSxNQUFNLENBQUNDLEtBQUssQ0FBQyxNQUFNQyxNQUFNLENBQUMsU0FDakRDLEdBQUcsRUFDSEgsTUFBTTtZQUVOLE1BQU1JLGNBQWNKLE9BQU9DLEtBQUssQ0FBQztZQUNqQyxNQUFNN0IsT0FBT2dDLFdBQVcsQ0FBQyxFQUFFO1lBQzNCLElBQUloQyxRQUFReUIsdUJBQXVCO2dCQUNqQyxNQUFNUSxhQUFhUixxQkFBcUIsQ0FBQ3pCLEtBQUs7Z0JBQzlDLE1BQU1xQixRQUFRVyxZQUFZRSxLQUFLLENBQUMsR0FBR0MsSUFBSSxDQUFDO2dCQUN4Q0osR0FBRyxDQUFDRSxXQUFXLEdBQUdaO1lBQ3BCO1lBQ0EsT0FBT1U7UUFDVCxHQUFHLENBQUM7UUFFSixPQUFPSjtJQUNUO0lBRUEsU0FBU0gsVUFBVU4sS0FBSyxFQUFFQyxJQUFJLEVBQUVuQixJQUFJLEVBQUVxQixLQUFLO1FBQ3pDLElBQUlKLFNBQVM7UUFFYixJQUFJRSxTQUFTLFlBQVk7WUFDdkJGLFNBQVM7UUFDWCxPQUFPLElBQUlDLE1BQU14RSxJQUFJLENBQUMsYUFBYTtZQUNqQyxJQUFJLENBQUMyRSxPQUFPO2dCQUNWSixTQUFTLHlDQUF5Q2pCO1lBQ3BELE9BQU8sSUFBSTNFLFdBQVdxRCxJQUFJLENBQUN3QyxNQUFNeEUsSUFBSSxDQUFDLFVBQVU7Z0JBQzlDLElBQUksQ0FBQ3BCLFdBQVdvRCxJQUFJLENBQUMyQyxRQUFRO29CQUMzQkosU0FBUyw2Q0FBNkNqQjtnQkFDeEQ7WUFDRjtRQUNGLE9BQU8sSUFBSUEsU0FBUywwQkFBMEIsQ0FBQ3FCLE9BQU87WUFDcERKLFNBQVM7UUFDWDtRQUVBLE9BQU9BO0lBQ1Q7SUFFQSxTQUFTcEMsc0JBQXNCOUMsSUFBSTtRQUNqQ2tELGVBQWVsRDtRQUNmcUQsWUFBWXJEO0lBQ2Q7SUFFQSwyQkFBMkI7SUFDM0IsU0FBUzRDLGdCQUFnQjVDLElBQUk7UUFDM0IyQixNQUFNM0I7UUFFTixJQUFJMEIsT0FBTzFCLEtBQUswQixJQUFJO1FBQ3BCLElBQUkyRSxVQUFVLENBQUM7UUFFZixvRUFBb0U7UUFDcEUsSUFBSSxTQUFTMUQsSUFBSSxDQUFDN0QsSUFBSXdILElBQUksS0FBSyxDQUFDLFNBQVMzRCxJQUFJLENBQUMzQyxLQUFLd0MsTUFBTSxHQUFHO1lBQzFEZCxLQUFLZixJQUFJLENBQUMsVUFBVTtZQUNwQjtRQUNGO1FBRUF1QyxlQUFlbEQ7UUFFZiw2QkFBNkI7UUFDN0IsSUFBSWtGLFNBQVMvQixXQUFXekIsTUFBTTJFO1FBQzlCLElBQUluQixRQUFRO1lBQ1YsT0FBTzFGLE1BQU0wRjtRQUNmO1FBRUEsd0JBQXdCO1FBQ3hCOUMsV0FBV3BDO1FBRVgsMENBQTBDO1FBQzFDLElBQUl1RztRQUNKOUgsRUFBRXdDLElBQUksQ0FBQ29GLFNBQVMsU0FBVWYsS0FBSyxFQUFFa0IsR0FBRztZQUNsQyxJQUFJbEgsV0FBV3FELElBQUksQ0FBQzZELE1BQU07Z0JBQ3hCSCxRQUFRSSxLQUFLLEdBQUduQjtZQUNsQjtZQUNBLElBQUkseUJBQXlCM0MsSUFBSSxDQUFDNkQsTUFBTTtnQkFDdENELFdBQVdqQjtZQUNiO1lBQ0EsSUFBSSx1QkFBdUIzQyxJQUFJLENBQUM2RCxNQUFNO2dCQUNwQ0gsUUFBUUssS0FBSyxHQUFHcEI7WUFDbEI7WUFDQSxJQUFJLHNCQUFzQjNDLElBQUksQ0FBQzZELE1BQU07Z0JBQ25DSCxRQUFRTSxLQUFLLEdBQUdyQjtZQUNsQjtRQUNGO1FBRUEsSUFBSWlCLFlBQVksQ0FBQ0YsUUFBUUssS0FBSyxFQUFFO1lBQzlCSCxXQUFXQSxTQUFTVCxLQUFLLENBQUM7WUFDMUJPLFFBQVFLLEtBQUssR0FBR0gsUUFBUSxDQUFDLEVBQUU7WUFDM0JGLFFBQVFNLEtBQUssR0FBR04sUUFBUU0sS0FBSyxJQUFJSixRQUFRLENBQUMsRUFBRTtRQUM5QztRQUVBLDZDQUE2QztRQUM3QyxJQUFJSyxNQUFNNUcsS0FBS3dDLE1BQU0sQ0FBQzFCLE9BQU8sQ0FBQyxVQUFVLGlCQUFpQjtRQUN6RCwyQ0FBMkM7UUFDM0MsSUFBSStGLFNBQVNELElBQUkvRixPQUFPLENBQUMsUUFBUTtRQUNqQ2dHLFNBQVNELElBQUlFLFNBQVMsQ0FBQ0QsUUFBUUQsSUFBSS9GLE9BQU8sQ0FBQyxLQUFLZ0c7UUFDaEQsSUFBSUUsU0FBU0gsSUFBSS9GLE9BQU8sQ0FBQyxTQUFTO1FBQ2xDa0csU0FBU0gsSUFBSUUsU0FBUyxDQUFDQyxRQUFRSCxJQUFJL0YsT0FBTyxDQUFDLEtBQUtrRztRQUNoRFYsT0FBTyxDQUFDLE9BQU9RLFNBQVMsTUFBTUUsT0FBTyxHQUFHO1FBRXhDdkksRUFBRXdJLElBQUksQ0FBQztZQUNMSjtZQUNBNUcsTUFBTXFHO1lBQ05ZLFVBQVU7UUFDWixHQUNHbkYsSUFBSSxDQUFDLFNBQVVvRixJQUFJO1lBQ2xCbEgsS0FBSzRFLE9BQU8sR0FBR3NDLEtBQUtqQyxNQUFNLEtBQUssYUFBYSxVQUFVdEMsSUFBSSxDQUFDdUUsS0FBS0MsR0FBRztZQUNuRSxJQUFJLENBQUNuSCxLQUFLNEUsT0FBTyxFQUFFO2dCQUNqQndDLFFBQVFDLElBQUksQ0FBQyxzQkFBc0JILEtBQUtDLEdBQUc7WUFDN0M7WUFDQTlELFlBQVlyRDtRQUNkLEdBQ0MrQixJQUFJLENBQUM7WUFDSnNCLFlBQVlyRDtRQUNkO0lBQ0o7SUFFQSx3REFBd0Q7SUFDeEQsU0FBU3FELFlBQVlyRCxJQUFJO1FBQ3ZCLElBQUkwQixPQUFPMUIsS0FBSzBCLElBQUk7UUFDcEIsSUFBSWdCLFdBQVcxQyxLQUFLMEMsUUFBUTtRQUM1QixJQUFJa0MsVUFBVTVFLEtBQUs0RSxPQUFPO1FBRTFCLHVDQUF1QztRQUN2QyxJQUFJQSxXQUFXbEMsVUFBVTtZQUN2QnJGLFFBQVEyQixRQUFRLENBQUMwRDtZQUNqQjtRQUNGO1FBRUEsMkJBQTJCO1FBQzNCMUMsS0FBSzhCLElBQUksQ0FBQ3dGLE1BQU0sQ0FBQzFDO1FBQ2pCNUUsS0FBSytCLElBQUksQ0FBQ3VGLE1BQU0sQ0FBQyxDQUFDMUM7UUFFbEIsSUFBSUEsU0FBUztZQUNYNUUsS0FBSzhCLElBQUksQ0FBQ3lGLEtBQUs7UUFDakIsT0FBTztZQUNMdkgsS0FBSytCLElBQUksQ0FBQ3dGLEtBQUs7UUFDakI7UUFFQSx1QkFBdUI7UUFDdkI3RixLQUFLNEYsTUFBTSxDQUFDLENBQUMxQztRQUViLHNDQUFzQztRQUN0Q2pELE1BQU0zQjtJQUNSO0lBRUEsU0FBU2tELGVBQWVsRCxJQUFJO1FBQzFCQSxLQUFLc0QsR0FBRyxJQUFJdEQsS0FBS3NELEdBQUcsQ0FBQ0osY0FBYztRQUNuQ2xELEtBQUtzRCxHQUFHLEdBQUc7SUFDYjtJQUVBLFNBQVNwQixlQUFlWCxDQUFDLEVBQUVHLElBQUk7UUFDN0IsSUFBSSxDQUFDQSxLQUFLTSxXQUFXLElBQUksQ0FBQ04sS0FBS00sV0FBVyxDQUFDVCxFQUFFLEVBQUU7WUFDN0M7UUFDRjtRQUVBLElBQUlpRztRQUNKLElBQUkvRixNQUFNakQsRUFBRWtELEtBQUtNLFdBQVcsQ0FBQ1QsRUFBRTtRQUMvQixJQUFJa0csZUFBZWhHLElBQUkxQixJQUFJLENBQUM7UUFDNUIsSUFBSTJILGlCQUFpQmpHLElBQUkxQixJQUFJLENBQUM7UUFDOUIsSUFBSTRILGVBQWVsRyxJQUFJMUIsSUFBSSxDQUFDO1F
11823BQzVCLElBQUk2SCxhQUFhbkcsSUFBSTFCLElBQUksQ0FBQztRQUMxQixJQUFJOEgsU0FBU0osYUFBYTFILElBQUksQ0FBQztRQUMvQixJQUFJK0gsU0FBU0wsYUFBYTFILElBQUksQ0FBQztRQUMvQixJQUFJZ0ksaUJBQWlCRCxPQUFPRSxRQUFRO1FBQ3BDLElBQUlDLGNBQWNMLFdBQVc3SCxJQUFJLENBQUM7UUFDbEMsSUFBSW1JLFVBQVVQLGFBQWE1SCxJQUFJLENBQUM7UUFDaEMsSUFBSW9JLFlBQVlSLGFBQWE1SCxJQUFJLENBQUM7UUFDbEMsSUFBSXFJLGNBQWNGLFFBQVFuSSxJQUFJLENBQUM7UUFFL0IsSUFBSXNJLGFBQWFKLFlBQVl0SCxJQUFJLENBQUM7UUFDbEMsSUFBSTJILGFBQWFMLFlBQVl0SCxJQUFJLENBQUM7UUFDbEMsSUFBSTRILGdCQUFnQk4sWUFBWXRILElBQUksQ0FBQztRQUVyQyxzQkFBc0I7UUFDdEIsbUVBQW1FO1FBQ25FLHFEQUFxRDtRQUNyRCxJQUFJLENBQUNsQixPQUFPO1lBQ1ZxSSxPQUFPekYsRUFBRSxDQUFDLGlCQUFpQixTQUFVbUcsQ0FBQztnQkFDcEMsSUFBSUEsRUFBRXBELElBQUksS0FBSyxhQUFhb0QsRUFBRUMsS0FBSyxLQUFLLE1BQU1ELEVBQUVDLEtBQUssS0FBSyxJQUFJO29CQUM1RDtnQkFDRjtnQkFFQUQsRUFBRXRGLGNBQWM7Z0JBQ2hCMkUsT0FBT2EsS0FBSztZQUNkO1FBQ0Y7UUFFQSxzQ0FBc0M7UUFDdENaLE9BQU8vSCxJQUFJLENBQUMsNEJBQTRCWSxJQUFJLENBQUMsZUFBZTtRQUM1RHdILFVBQVVwSSxJQUFJLENBQUMsOEJBQThCWSxJQUFJLENBQUMsZUFBZTtRQUVqRSxJQUFJLENBQUNsQixPQUFPO1lBQ1YwSSxVQUFVOUYsRUFBRSxDQUFDLGlCQUFpQixTQUFVbUcsQ0FBQztnQkFDdkMsSUFBSUEsRUFBRXBELElBQUksS0FBSyxXQUFXO29CQUN4QixJQUFJb0QsRUFBRUMsS0FBSyxLQUFLLE1BQU1ELEVBQUVDLEtBQUssS0FBSyxJQUFJO3dCQUNwQztvQkFDRjtvQkFFQUQsRUFBRXRGLGNBQWM7Z0JBQ2xCO2dCQUVBMkUsT0FBT2MsVUFBVSxDQUFDO2dCQUNsQmQsT0FBTzdDLEdBQUcsQ0FBQztnQkFDWG9ELFlBQVlRLElBQUksQ0FBQztnQkFDakJuQixhQUFhSCxNQUFNLENBQUM7Z0JBQ3BCSyxhQUFhTCxNQUFNLENBQUM7Z0JBQ3BCUSxPQUFPUCxLQUFLO1lBQ2Q7WUFFQU0sT0FBT3hGLEVBQUUsQ0FBQyxVQUFVLFNBQVVtRyxDQUFDO2dCQUM3QmhCLE9BQU9nQixFQUFFMUUsTUFBTSxJQUFJMEUsRUFBRTFFLE1BQU0sQ0FBQytFLEtBQUssSUFBSUwsRUFBRTFFLE1BQU0sQ0FBQytFLEtBQUssQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLENBQUNyQixNQUFNO29CQUNUO2dCQUNGO2dCQUVBLGlCQUFpQjtnQkFDakJDLGFBQWFILE1BQU0sQ0FBQztnQkFDcEJNLFdBQVdOLE1BQU0sQ0FBQztnQkFDbEJJLGVBQWVKLE1BQU0sQ0FBQztnQkFDdEJJLGVBQWVILEtBQUs7Z0JBRXBCLGVBQWU7Z0JBQ2ZhLFlBQVlVLElBQUksQ0FBQ3RCLEtBQUt2RCxJQUFJO2dCQUUxQix3QkFBd0I7Z0JBQ3hCLElBQUksQ0FBQzhFLGVBQWU7b0JBQ2xCM0csV0FBV1Y7Z0JBQ2I7Z0JBQ0FBLEtBQUtNLFdBQVcsQ0FBQ1QsRUFBRSxDQUFDeUgsU0FBUyxHQUFHO2dCQUVoQ0MsU0FBU3pCLE1BQU0wQjtZQUNqQjtZQUVBLGlEQUFpRDtZQUNqRCxxREFBcUQ7WUFDckQsSUFBSUMsU0FBU3JCLE9BQU9zQixXQUFXO1lBQy9CdkIsT0FBT3NCLE1BQU0sQ0FBQ0E7WUFDZHRCLE9BQU93QixLQUFLLENBQUM7UUFDZixPQUFPO1lBQ0x4QixPQUFPeEYsRUFBRSxDQUFDLFNBQVMsU0FBVW1HLENBQUM7Z0JBQzVCQSxFQUFFdEYsY0FBYztZQUNsQjtZQUNBNEUsT0FBT3pGLEVBQUUsQ0FBQyxTQUFTLFNBQVVtRyxDQUFDO2dCQUM1QkEsRUFBRXRGLGNBQWM7WUFDbEI7WUFDQTZFLGVBQWUxRixFQUFFLENBQUMsU0FBUyxTQUFVbUcsQ0FBQztnQkFDcENBLEVBQUV0RixjQUFjO1lBQ2xCO1FBQ0Y7UUFFQSxTQUFTb0csV0FBV0MsR0FBRztZQUNyQixJQUFJQyxXQUFXRCxJQUFJRSxZQUFZLElBQUlGLElBQUlFLFlBQVksQ0FBQ3RDLEdBQUc7WUFDdkQsSUFBSXVDLFlBQVluQjtZQUNoQixJQUNFLE9BQU9pQixhQUFhLFlBQ3BCQSxTQUFTM0ksT0FBTyxDQUFDLDRCQUE0QixHQUM3QztnQkFDQTZJLFlBQVlwQjtZQUNkLE9BQU8sSUFDTCxPQUFPa0IsYUFBYSxZQUNwQkEsU0FBUzNJLE9BQU8sQ0FBQyx3QkFBd0IsR0FDekM7Z0JBQ0E2SSxZQUFZckI7WUFDZDtZQUVBSixZQUFZYSxJQUFJLENBQUNZO1lBRWpCN0IsT0FBT2MsVUFBVSxDQUFDO1lBQ2xCZCxPQUFPN0MsR0FBRyxDQUFDO1lBQ1gwQyxlQUFlSixNQUFNLENBQUM7WUFDdEJHLGFBQWFILE1BQU0sQ0FBQztZQUNwQk0sV0FBV04sTUFBTSxDQUFDO1lBQ2xCTSxXQUFXTCxLQUFLO1lBRWhCN0YsS0FBS00sV0FBVyxDQUFDVCxFQUFFLENBQUN5SCxTQUFTLEdBQUc7WUFDaEMsSUFBSSxDQUFDRCxlQUFlO2dCQUNsQnBILE1BQU1EO1lBQ1I7UUFDRjtRQUVBLFNBQVN3SCxVQUFVSyxHQUFHLEVBQUV2SixJQUFJO1lBQzFCLElBQUl1SixLQUFLO2dCQUNQLE9BQU9ELFdBQVdDO1lBQ3BCO1lBRUEsSUFBSUksV0FBVzNKLEtBQUsySixRQUFRO1lBQzVCLElBQUlDLFdBQVc1SixLQUFLNEosUUFBUTtZQUM1QixJQUFJQyxTQUFTN0osS0FBSzZKLE1BQU07WUFDeEIsSUFBSUMsUUFBUTlKLEtBQUs4SixLQUFLO1lBQ3RCakMsT0FBT2xILElBQUksQ0FBQyxjQUFja0o7WUFFMUJFLFNBQVNELE9BQU9GLFVBQVVwQyxN
11823QUFNbUMsVUFBVUs7UUFDNUM7UUFFQSxTQUFTQSxZQUFZVCxHQUFHO1lBQ3RCLElBQUlBLEtBQUs7Z0JBQ1AsT0FBT0QsV0FBV0M7WUFDcEI7WUFFQSxlQUFlO1lBQ2Y3QixlQUFlSixNQUFNLENBQUM7WUFDdEJLLGFBQWFzQyxHQUFHLENBQUMsV0FBVztZQUM1QnRDLGFBQWFKLEtBQUs7WUFFbEI3RixLQUFLTSxXQUFXLENBQUNULEVBQUUsQ0FBQ3lILFNBQVMsR0FBRztZQUNoQyxJQUFJLENBQUNELGVBQWU7Z0JBQ2xCcEgsTUFBTUQ7WUFDUjtRQUNGO1FBRUEsU0FBU3FIO1lBQ1AsSUFBSW1CLFVBQVUsQUFBQ3hJLEtBQUtNLFdBQVcsSUFBSU4sS0FBS00sV0FBVyxDQUFDbUksT0FBTyxNQUFPLEVBQUU7WUFDcEUsT0FBT0QsUUFBUUUsSUFBSSxDQUFDLFNBQVU5RSxLQUFLO2dCQUNqQyxPQUFPQSxNQUFNMEQsU0FBUztZQUN4QjtRQUNGO0lBQ0Y7SUFFQSxTQUFTQyxTQUFTekIsSUFBSSxFQUFFOUosRUFBRTtRQUN4QixJQUFJMkksVUFBVSxJQUFJZ0UsZ0JBQWdCO1lBQ2hDcEcsTUFBTXVELEtBQUt2RCxJQUFJO1lBQ2ZxRyxNQUFNOUMsS0FBSzhDLElBQUk7UUFDakI7UUFFQTlMLEVBQUV3SSxJQUFJLENBQUM7WUFBQzVCLE1BQU07WUFBT3dCLEtBQUssQ0FBQyxFQUFFL0csWUFBWSxDQUFDLEVBQUV3RyxRQUFRLENBQUM7WUFBRWtFLGFBQWE7UUFBSSxHQUNyRXpJLElBQUksQ0FBQyxTQUFVOUIsSUFBSTtZQUNsQnRDLEdBQUcsTUFBTXNDO1FBQ1gsR0FDQytCLElBQUksQ0FBQyxTQUFVd0gsR0FBRztZQUNqQjdMLEdBQUc2TDtRQUNMO0lBQ0o7SUFFQSxTQUFTUSxTQUFTbkQsR0FBRyxFQUFFNUcsSUFBSSxFQUFFd0gsSUFBSSxFQUFFbUMsUUFBUSxFQUFFak0sRUFBRTtRQUM3QyxJQUFJOE0sV0FBVyxJQUFJQztRQUNuQixJQUFLLElBQUlDLEtBQUsxSyxLQUFNO1lBQ2xCd0ssU0FBU0csTUFBTSxDQUFDRCxHQUFHMUssSUFBSSxDQUFDMEssRUFBRTtRQUM1QjtRQUNBRixTQUFTRyxNQUFNLENBQUMsUUFBUW5ELE1BQU1tQztRQUU5Qm5MLEVBQUV3SSxJQUFJLENBQUM7WUFDTDVCLE1BQU07WUFDTndCO1lBQ0E1RyxNQUFNd0s7WUFDTkksYUFBYTtZQUNiQyxhQUFhO1FBQ2YsR0FDRy9JLElBQUksQ0FBQztZQUNKcEUsR0FBRztRQUNMLEdBQ0NxRSxJQUFJLENBQUMsU0FBVXdILEdBQUc7WUFDakI3TCxHQUFHNkw7UUFDTDtJQUNKO0lBRUEsZ0JBQWdCO0lBQ2hCLE9BQU81SztBQUNUIn0=
11824
11825}),
11826"2458": (function (module, __unused_webpack_exports, __webpack_require__) {
11827"use strict";
11828/* globals window, document, jQuery */ /**
11829 * Webflow: Lightbox component
11830 */ 
11831var Webflow = __webpack_require__(3949);
11832var CONDITION_INVISIBLE_CLASS = 'w-condition-invisible';
11833var CONDVIS_SELECTOR = '.' + CONDITION_INVISIBLE_CLASS;
11834function withoutConditionallyHidden(items) {
11835    return items.filter(function(item) {
11836        return !isConditionallyHidden(item);
11837    });
11838}
11839function isConditionallyHidden(item) {
11840    return Boolean(item.$el && item.$el.closest(CONDVIS_SELECTOR).length);
11841}
11842function getPreviousVisibleIndex(start, items) {
11843    for(var i = start; i >= 0; i--){
11844        if (!isConditionallyHidden(items[i])) {
11845            return i;
11846        }
11847    }
11848    return -1;
11849}
11850function getNextVisibleIndex(start, items) {
11851    for(var i = start; i <= items.length - 1; i++){
11852        if (!isConditionallyHidden(items[i])) {
11853            return i;
11854        }
11855    }
11856    return -1;
11857}
11858function shouldSetArrowLeftInactive(currentIndex, items) {
11859    return getPreviousVisibleIndex(currentIndex - 1, items) === -1;
11860}
11861function shouldSetArrowRightInactive(currentIndex, items) {
11862    return getNextVisibleIndex(currentIndex + 1, items) === -1;
11863}
11864function setAriaLabelIfEmpty($element, labelText) {
11865    if (!$element.attr('aria-label')) {
11866        $element.attr('aria-label', labelText);
11867    }
11868}
11869function createLightbox(window1, document1, $, container) {
11870    var tram = $.tram;
11871    var isArray = Array.isArray;
11872    var namespace = 'w-lightbox';
11873    var prefix = namespace + '-';
11874    var prefixRegex = /(^|\s+)/g;
11875    // Array of objects describing items to be displayed.
11876    var items = [];
11877    // Index of the currently displayed item.
11878    var currentIndex;
11879    // Object holding references to jQuery wrapped nodes.
11880    var $refs;
11881    // Instance of Spinner
11882    var spinner;
11883    // Tracks data on element visiblity modified when lightbox opens
11884    var resetVisibilityState = [];
11885    function lightbox(thing, index) {
11886        items = isArray(thing) ? thing : [
11887            thing
11888        ];
11889        if (!$refs) {
11890            lightbox.build();
11891        }
11892        if (withoutConditionallyHidden(items).length > 1) {
11893            $refs.items = $refs.empty;
11894            items.forEach(function(item, idx) {
11895                var $thumbnail = dom('thumbnail');
11896                var $item = dom('item').prop('tabIndex', 0).attr('aria-controls', 'w-lightbox-view').attr('role', 'tab').append($thumbnail);
11897                setAriaLabelIfEmpty($item, `show item ${idx + 1} of ${items.length}`);
11898                if (isConditionallyHidden(item)) {
11899                    $item.addClass(CONDITION_INVISIBLE_CLASS);
11900                }
11901                $refs.items = $refs.items.add($item);
11902                loadImage(item.thumbnailUrl || item.url, function($image) {
11903                    if ($image.prop('width') > $image.prop('height')) {
11904                        addClass($image, 'wide');
11905                    } else {
11906                        addClass($image, 'tall');
11907                    }
11908                    $thumbnail.append(addClass($image, 'thumbnail-image'));
11909                });
11910            });
11911            $refs.strip.empty().append($refs.items);
11912            addClass($refs.content, 'group');
11913        }
11914        tram(// Focus the lightbox to receive keyboard events.
11915        removeClass($refs.lightbox, 'hide').trigger('focus')).add('opacity .3s').start({
11916            opacity: 1
11917        });
11918        // Prevent document from scrolling while lightbox is active.
11919        addClass($refs.html, 'noscroll');
11920        return lightbox.show(index || 0);
11921    }
11922    /**
11923   * Creates the DOM structure required by the lightbox.
11924   */ lightbox.build = function() {
11925        // In case `build` is called more than once.
11926        lightbox.destroy();
11927        $refs = {
11928            html: $(document1.documentElement),
11929            // Empty jQuery object can be used to build new ones using `.add`.
11930            empty: $()
11931        };
11932        $refs.arrowLeft = dom('control left inactive').attr('role', 'button').attr('aria-hidden', true).attr('aria-controls', 'w-lightbox-view');
11933        $refs.arrowRight = dom('control right inactive').attr('role', 'button').attr('aria-hidden', true).attr('aria-controls', 'w-lightbox-view');
11934        $refs.close = dom('control close').attr('role', 'button');
11935        // Only set `aria-label` values if not already present
11936        setAriaLabelIfEmpty($refs.arrowLeft, 'previous image');
11937        setAriaLabelIfEmpty($refs.arrowRight, 'next image');
11938        setAriaLabelIfEmpty($refs.close, 'close lightbox');
11939        $refs.spinner = dom('spinner').attr('role', 'progressbar').attr('aria-live', 'polite').attr('aria-hidden', false).attr('aria-busy', true).attr('aria-valuemin', 0).attr('aria-valuemax', 100).attr('aria-valuenow', 0).attr('aria-valuetext', 'Loading image');
11940        $refs.strip = dom('strip').attr('role', 'tablist');
11941        spinner = new Spinner($refs.spinner, prefixed('hide'));
11942        $refs.content = dom('content').append($refs.spinner, $refs.arrowLeft, $refs.arrowRight, $refs.close);
11943        $refs.container = dom('container').append($refs.content, $refs.strip);
11944        $refs.lightbox = dom('backdrop hide').append($refs.container);
11945        // We are delegating events for performance reasons and also
11946        // to not have to reattach handlers when images change.
11947        $refs.strip.on('click', selector('item'), itemTapHandler);
11948        $refs.content.on('swipe', swipeHandler).on('click', selector('left'), handlerPrev).on('click', selector('right'), handlerNext).on('click', selector('close'), handlerHide).on('click', selector('image, caption'), handlerNext);
11949        $refs.container.on('click', selector('view'), handlerHide)// Prevent images from being dragged around.
11950        .on('dragstart', selector('img'), preventDefault);
11951        $refs.lightbox.on('keydown', keyHandler)// IE loses focus to inner nodes without letting us know.
11952        .on('focusin', focusThis);
11953        $(container).append($refs.lightbox);
11954        return lightbox;
11955    };
11956    /**
11957   * Dispose of DOM nodes created by the lightbox.
11958   */ lightbox.destroy = function() {
11959        if (!$refs) {
11960            return;
11961        }
11962        // Event handlers are also removed.
11963        removeClass($refs.html, 'noscroll');
11964        $refs.lightbox.remove();
11965        $refs = undefined;
11966    };
11967    /**
11968   * Show a specific item.
11969   */ lightbox.show = function(index) {
11970        // Bail if we are already showing this item.
11971        if (index === currentIndex) {
11972            return;
11973        }
11974        var item = items[index];
11975        if (!item) {
11976            return lightbox.hide();
11977        }
11978        if (isConditionallyHidden(item)) {
11979            if (index < currentIndex) {
11980                var previousVisibleIndex = getPreviousVisibleIndex(index - 1, items);
11981                index = previousVisibleIndex > -1 ? previousVisibleIndex : index;
11982            } else {
11983                var nextVisibleIndex = getNextVisibleIndex(index + 1, items);
11984                index = nextVisibleIndex > -1 ? nextVisibleIndex : index;
11985            }
11986            item = items[index];
11987        }
11988        var previousIndex = currentIndex;
11989        currentIndex = index;
11990        $refs.spinner.attr('aria-hidden', false).attr('aria-busy', true).attr('aria-valuenow', 0).attr('aria-valuetext', 'Loading image');
11991        spinner.show();
11992        // For videos, load an empty SVG with the video dimensions to preserve
11993        // the video’s aspect ratio while being responsive.
11994        var url = item.html && svgDataUri(item.width, item.height) || item.url;
11995        loadImage(url, function($image) {
11996            // Make sure this is the last item requested to be shown since
11997            // images can finish loading in a different order than they were
11998            // requested in.
11999            if (index !== currentIndex) {
12000                return;
12001            }
12002            var $figure = dom('figure', 'figure').append(addClass($image, 'image'));
12003            var $frame = dom('frame').append($figure);
12004            var $newView = dom('view').prop('tabIndex', 0).attr('id', 'w-lightbox-view').append($frame);
12005            var $html;
12006            var isIframe;
12007            if (item.html) {
12008                $html = $(item.html);
12009                isIframe = $html.is('iframe');
12010                if (isIframe) {
12011                    $html.on('load', transitionToNewView);
12012                }
12013                $figure.append(addClass($html, 'embed'));
12014            }
12015            if (item.caption) {
12016                $figure.append(dom('caption', 'figcaption').text(item.caption));
12017            }
12018            $refs.spinner.before($newView);
12019            if (!isIframe) {
12020                transitionToNewView();
12021            }
12022            function transitionToNewView() {
12023                $refs.spinner.attr('aria-hidden', true).attr('aria-busy', false).attr('aria-valuenow', 100).attr('aria-valuetext', 'Loaded image');
12024                spinner.hide();
12025                if (index !== currentIndex) {
12026                    $newView.remove();
12027                    return;
12028                }
12029                const shouldHideLeftArrow = shouldSetArrowLeftInactive(index, items);
12030                toggleClass($refs.arrowLeft, 'inactive', shouldHideLeftArrow);
12031                toggleHidden($refs.arrowLeft, shouldHideLeftArrow);
12032                if (shouldHideLeftArrow && $refs.arrowLeft.is(':focus')) {
12033                    // Refocus on right arrow as left arrow is hidden
12034                    $refs.arrowRight.focus();
12035                }
12036                const shouldHideRightArrow = shouldSetArrowRightInactive(index, items);
12037                toggleClass($refs.arrowRight, 'inactive', shouldHideRightArrow);
12038                toggleHidden($refs.arrowRight, shouldHideRightArrow);
12039                if (shouldHideRightArrow && $refs.arrowRight.is(':focus')) {
12040                    // Refocus on left arrow as right arrow is hidden
12041                    $refs.arrowLeft.focus();
12042                }
12043                if ($refs.view) {
12044                    tram($refs.view).add('opacity .3s').start({
12045                        opacity: 0
12046                    }).then(remover($refs.view));
12047                    tram($newView).add('opacity .3s').add('transform .3s').set({
12048                        x: index > previousIndex ? '80px' : '-80px'
12049                    }).start({
12050                        opacity: 1,
12051                        x: 0
12052                    });
12053                } else {
12054                    $newView.css('opacity', 1);
12055                }
12056                $refs.view = $newView;
12057                $refs.view.prop('tabIndex', 0);
12058                if ($refs.items) {
12059                    removeClass($refs.items, 'active');
12060                    $refs.items.removeAttr('aria-selected');
12061                    // Mark proper thumbnail as active
12062                    var $activeThumb = $refs.items.eq(index);
12063                    addClass($activeThumb, 'active');
12064                    $activeThumb.attr('aria-selected', true);
12065                    // Scroll into view
12066                    maybeScroll($activeThumb);
12067                }
12068            }
12069        });
12070        $refs.close.prop('tabIndex', 0);
12071        // Track the focused item on page prior to lightbox opening,
12072        // so we can return focus on hide
12073        $(':focus').addClass('active-lightbox');
12074        // Build is only called once per site (across multiple lightboxes),
12075        // while the show function is called when opening lightbox but also
12076        // when changing image.
12077        // So checking resetVisibilityState seems to be one approach to
12078        // trigger something only when the lightbox is opened
12079        if (resetVisibilityState.length === 0) {
12080            // Take all elements on the page out of the accessibility flow by marking
12081            // them hidden and preventing tab index while lightbox is open.
12082            $('body').children().each(function() {
12083                // We don't include the lightbox wrapper or script tags
12084                if ($(this).hasClass('w-lightbox-backdrop') || $(this).is('script')) {
12085                    return;
12086                }
12087                // Store the elements previous visiblity state
12088                resetVisibilityState.push({
12089                    node: $(this),
12090                    hidden: $(this).attr('aria-hidden'),
12091                    tabIndex: $(this).attr('tabIndex')
12092                });
12093                // Hide element from the accessiblity tree
12094                $(this).attr('aria-hidden', true).attr('tabIndex', -1);
12095            });
12096            // Start focus on the close icon
12097            $refs.close.focus();
12098        }
12099        return lightbox;
12100    };
12101    /**
12102   * Hides the lightbox.
12103   */ lightbox.hide = function() {
12104        tram($refs.lightbox).add('opacity .3s').start({
12105            opacity: 0
12106        }).then(hideLightbox);
12107        return lightbox;
12108    };
12109    lightbox.prev = function() {
12110        var previousVisibleIndex = getPreviousVisibleIndex(currentIndex - 1, items);
12111        if (previousVisibleIndex > -1) {
12112            lightbox.show(previousVisibleIndex);
12113        }
12114    };
12115    lightbox.next = function() {
12116        var nextVisibleIndex = getNextVisibleIndex(currentIndex + 1, items);
12117        if (nextVisibleIndex > -1) {
12118            lightbox.show(nextVisibleIndex);
12119        }
12120    };
12121    function createHandler(action) {
12122        return function(event) {
12123            // We only care about events triggered directly on the bound selectors.
12124            if (this !== event.target) {
12125                return;
12126            }
12127            event.stopPropagation();
12128            event.preventDefault();
12129            action();
12130        };
12131    }
12132    var handlerPrev = createHandler(lightbox.prev);
12133    var handlerNext = createHandler(lightbox.next);
12134    var handlerHide = createHandler(lightbox.hide);
12135    var itemTapHandler = function(event) {
12136        var index = $(this).index();
12137        event.preventDefault();
12138        lightbox.show(index);
12139    };
12140    var swipeHandler = function(event, data) {
12141        // Prevent scrolling.
12142        event.preventDefault();
12143        if (data.direction === 'left') {
12144            lightbox.next();
12145        } else if (data.direction === 'right') {
12146            lightbox.prev();
12147        }
12148    };
12149    var focusThis = function() {
12150        this.focus();
12151    };
12152    function preventDefault(event) {
12153        event.preventDefault();
12154    }
12155    function keyHandler(event) {
12156        var keyCode = event.keyCode;
12157        // [esc] or ([enter] or [space] while close button is focused)
12158        if (keyCode === 27 || checkForFocusTrigger(keyCode, 'close')) {
12159            lightbox.hide();
12160        // [◀] or ([enter] or [space] while left button is focused)
12161        } else if (keyCode === 37 || checkForFocusTrigger(keyCode, 'left')) {
12162            lightbox.prev();
12163        // [▶] or ([enter] or [space] while right button is focused)
12164        } else if (keyCode === 39 || checkForFocusTrigger(keyCode, 'right')) {
12165            lightbox.next();
12166        // [enter] or [space] while a thumbnail is focused
12167        } else if (checkForFocusTrigger(keyCode, 'item')) {
12168            $(':focus').click();
12169        }
12170    }
12171    /**
12172   * checkForFocusTrigger will check if the current focused element includes the matching class
12173   * and that the user has pressed either enter or space to trigger an action.
12174   * @param  {number} The numerical keyCode from the `keydown` event
12175   * @param  {string} The unique part of the `className` from the element we are checking. E.g. `close` will be prefixed into `w-lightbox-close`
12176   * @return {boolean}
12177   */ function checkForFocusTrigger(keyCode, classMatch) {
12178        if (keyCode !== 13 && keyCode !== 32) {
12179            return false;
12180        }
12181        var currentElementClasses = $(':focus').attr('class');
12182        var classToFind = prefixed(classMatch).trim();
12183        return currentElementClasses.includes(classToFind);
12184    }
12185    function hideLightbox() {
12186        // If the lightbox hasn't been destroyed already
12187        if ($refs) {
12188            // Reset strip scroll, otherwise next lightbox opens scrolled to last position
12189            $refs.strip.scrollLeft(0).empty();
12190            removeClass($refs.html, 'noscroll');
12191            addClass($refs.lightbox, 'hide');
12192            $refs.view && $refs.view.remove();
12193            // Reset some stuff
12194            removeClass($refs.content, 'group');
12195            addClass($refs.arrowLeft, 'inactive');
12196            addClass($refs.arrowRight, 'inactive');
12197            currentIndex = $refs.view = undefined;
12198            // Bring the page elements back into the accessiblity tree
12199            resetVisibilityState.forEach(function(visibilityState) {
12200                var node = visibilityState.node;
12201                if (!node) {
12202                    return;
12203                }
12204                if (visibilityState.hidden) {
12205                    node.attr('aria-hidden', visibilityState.hidden);
12206                } else {
12207                    node.removeAttr('aria-hidden');
12208                }
12209                if (visibilityState.tabIndex) {
12210                    node.attr('tabIndex', visibilityState.tabIndex);
12211                } else {
12212                    node.removeAttr('tabIndex');
12213                }
12214            });
12215            // Clear out the reset visibility state
12216            resetVisibilityState = [];
12217            // Re-focus on the element that triggered the lightbox
12218            $('.active-lightbox').removeClass('active-lightbox').focus();
12219        }
12220    }
12221    function loadImage(url, callback) {
12222        var $image = dom('img', 'img');
12223        $image.one('load', function() {
12224            callback($image);
12225        });
12226        // Start loading image.
12227        $image.attr('src', url);
12228        return $image;
12229    }
12230    function remover($element) {
12231        return function() {
12232            $element.remove();
12233        };
12234    }
12235    function maybeScroll($item) {
12236        var itemElement = $item.get(0);
12237        var stripElement = $refs.strip.get(0);
12238        var itemLeft = itemElement.offsetLeft;
12239        var itemWidth = itemElement.clientWidth;
12240        var stripScrollLeft = stripElement.scrollLeft;
12241        var stripWidth = stripElement.clientWidth;
12242        var stripScrollLeftMax = stripElement.scrollWidth - stripWidth;
12243        var newScrollLeft;
12244        if (itemLeft < stripScrollLeft) {
12245            newScrollLeft = Math.max(0, itemLeft + itemWidth - stripWidth);
12246        } else if (itemLeft + itemWidth > stripWidth + stripScrollLeft) {
12247            newScrollLeft = Math.min(itemLeft, stripScrollLeftMax);
12248        }
12249        if (newScrollLeft != null) {
12250            tram($refs.strip).add('scroll-left 500ms').start({
12251                'scroll-left': newScrollLeft
12252            });
12253        }
12254    }
12255    /**
12256   * Spinner
12257   */ function Spinner($spinner, className, delay) {
12258        this.$element = $spinner;
12259        this.className = className;
12260        this.delay = delay || 200;
12261        this.hide();
12262    }
12263    Spinner.prototype.show = function() {
12264        var spinner = this;
12265        // Bail if we are already showing the spinner.
12266        if (spinner.timeoutId) {
12267            return;
12268        }
12269        spinner.timeoutId = setTimeout(function() {
12270            spinner.$element.removeClass(spinner.className);
12271            // eslint-disable-next-line webflow/no-delete
12272            delete spinner.timeoutId;
12273        }, spinner.delay);
12274    };
12275    Spinner.prototype.hide = function() {
12276        var spinner = this;
12277        if (spinner.timeoutId) {
12278            clearTimeout(spinner.timeoutId);
12279            // eslint-disable-next-line webflow/no-delete
12280            delete spinner.timeoutId;
12281            return;
12282        }
12283        spinner.$element.addClass(spinner.className);
12284    };
12285    function prefixed(string, isSelector) {
12286        return string.replace(prefixRegex, (isSelector ? ' .' : ' ') + prefix);
12287    }
12288    function selector(string) {
12289        return prefixed(string, true);
12290    }
12291    /**
12292   * jQuery.addClass with auto-prefixing
12293   * @param  {jQuery} Element to add class to
12294   * @param  {string}
12294 Class name that will be prefixed and added to element
12295   * @return {jQuery}
12296   */ function addClass($element, className) {
12297        return $element.addClass(prefixed(className));
12298    }
12299    /**
12300   * jQuery.removeClass with auto-prefixing
12301   * @param  {jQuery} Element to remove class from
12302   * @param  {string} Class name that will be prefixed and removed from element
12303   * @return {jQuery}
12304   */ function removeClass($element, className) {
12305        return $element.removeClass(prefixed(className));
12306    }
12307    /**
12308   * jQuery.toggleClass with auto-prefixing
12309   * @param  {jQuery}  Element where class will be toggled
12310   * @param  {string}  Class name that will be prefixed and toggled
12311   * @param  {boolean} Optional boolean that determines if class will be added or removed
12312   * @return {jQuery}
12313   */ function toggleClass($element, className, shouldAdd) {
12314        return $element.toggleClass(prefixed(className), shouldAdd);
12315    }
12316    /**
12317   * jQuery.toggleHidden
12318   * @param  {jQuery}  Element where attribute will be set
12319   * @param  {boolean} Boolean that determines if aria-hidden will be true or false
12320   * @return {jQuery}
12321   */ function toggleHidden($element, isHidden) {
12322        return $element.attr('aria-hidden', isHidden).attr('tabIndex', isHidden ? -1 : 0);
12323    }
12324    /**
12325   * Create a new DOM element wrapped in a jQuery object,
12326   * decorated with our custom methods.
12327   * @param  {string} className
12328   * @param  {string} [tag]
12329   * @return {jQuery}
12330   */ function dom(className, tag) {
12331        return addClass($(document1.createElement(tag || 'div')), className);
12332    }
12333    function svgDataUri(width, height) {
12334        var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + width + '" height="' + height + '"/>';
12335        return 'data:image/svg+xml;charset=utf-8,' + encodeURI(svg);
12336    }
12337    // Compute some dimensions manually for iOS < 8, because of buggy support for VH.
12338    // Also, Android built-in browser does not support viewport units.
12339    (function() {
12340        var ua = window1.navigator.userAgent;
12341        var iOSRegex = /(iPhone|iPad|iPod);[^OS]*OS (\d)/;
12342        var iOSMatches = ua.match(iOSRegex);
12343        var android = ua.indexOf('Android ') > -1 && ua.indexOf('Chrome') === -1;
12344        if (!android && (!iOSMatches || iOSMatches[2] > 7)) {
12345            return;
12346        }
12347        var styleNode = document1.createElement('style');
12348        document1.head.appendChild(styleNode);
12349        window1.addEventListener('resize', refresh, true);
12350        function refresh() {
12351            var vh = window1.innerHeight;
12352            var vw = window1.innerWidth;
12353            var content = '.w-lightbox-content, .w-lightbox-view, .w-lightbox-view:before {' + 'height:' + vh + 'px' + '}' + '.w-lightbox-view {' + 'width:' + vw + 'px' + '}' + '.w-lightbox-group, .w-lightbox-group .w-lightbox-view, .w-lightbox-group .w-lightbox-view:before {' + 'height:' + 0.86 * vh + 'px' + '}' + '.w-lightbox-image {' + 'max-width:' + vw + 'px;' + 'max-height:' + vh + 'px' + '}' + '.w-lightbox-group .w-lightbox-image {' + 'max-height:' + 0.86 * vh + 'px' + '}' + '.w-lightbox-strip {' + 'padding: 0 ' + 0.01 * vh + 'px' + '}' + '.w-lightbox-item {' + 'width:' + 0.1 * vh + 'px;' + 'padding:' + 0.02 * vh + 'px ' + 0.01 * vh + 'px' + '}' + '.w-lightbox-thumbnail {' + 'height:' + 0.1 * vh + 'px' + '}' + '@media (min-width: 768px) {' + '.w-lightbox-content, .w-lightbox-view, .w-lightbox-view:before {' + 'height:' + 0.96 * vh + 'px' + '}' + '.w-lightbox-content {' + 'margin-top:' + 0.02 * vh + 'px' + '}' + '.w-lightbox-group, .w-lightbox-group .w-lightbox-view, .w-lightbox-group .w-lightbox-view:before {' + 'height:' + 0.84 * vh + 'px' + '}' + '.w-lightbox-image {' + 'max-width:' + 0.96 * vw + 'px;' + 'max-height:' + 0.96 * vh + 'px' + '}' + '.w-lightbox-group .w-lightbox-image {' + 'max-width:' + 0.823 * vw + 'px;' + 'max-height:' + 0.84 * vh + 'px' + '}' + '}';
12354            styleNode.textContent = content;
12355        }
12356        refresh();
12357    })();
12358    return lightbox;
12359}
12360Webflow.define('lightbox', module.exports = function($) {
12361    var api = {};
12362    var inApp = Webflow.env();
12363    var lightbox = createLightbox(window, document, $, inApp ? '#lightbox-mountpoint' : 'body');
12364    var $doc = $(document);
12365    var $lightboxes;
12366    var designer;
12367    var namespace = '.w-lightbox';
12368    var groups;
12369    // -----------------------------------
12370    // Module methods
12371    api.ready = api.design = api.preview = init;
12372    // -----------------------------------
12373    // Private methods
12374    function init() {
12375        designer = inApp && Webflow.env('design');
12376        // Reset Lightbox
12377        lightbox.destroy();
12378        // Reset groups
12379        groups = {};
12380        // Find all instances on the page
12381        $lightboxes = $doc.find(namespace);
12382        // Instantiate all lighboxes
12383        $lightboxes.webflowLightBox();
12384        // Set accessibility properties that are useful prior
12385        // to a lightbox being opened
12386        $lightboxes.each(function() {
12387            setAriaLabelIfEmpty($(this), 'open lightbox');
12388            $(this).attr('aria-haspopup', 'dialog');
12389        });
12390    }
12391    jQuery.fn.extend({
12392        webflowLightBox: function() {
12393            var $el = this;
12394            $.each($el, function(i, el) {
12395                // Store state in data
12396                var data = $.data(el, namespace);
12397                if (!data) {
12398                    data = $.data(el, namespace, {
12399                        el: $(el),
12400                        mode: 'images',
12401                        images: [],
12402                        embed: ''
12403                    });
12404                }
12405                // Remove old events
12406                data.el.off(namespace);
12407                // Set config from json script tag
12408                configure(data);
12409                // Add events based on mode
12410                if (designer) {
12411                    data.el.on('setting' + namespace, configure.bind(null, data));
12412                } else {
12413                    data.el.on('click' + namespace, clickHandler(data))// Prevent page scrolling to top when clicking on lightbox triggers.
12414                    .on('click' + namespace, function(e) {
12415                        e.preventDefault();
12416                    });
12417                }
12418            });
12419        }
12420    });
12421    function configure(data) {
12422        var json = data.el.children('.w-json').html();
12423        var groupName;
12424        var groupItems;
12425        if (!json) {
12426            data.items = [];
12427            return;
12428        }
12429        try {
12430            json = JSON.parse(json);
12431        } catch (e) {
12432            console.error('Malformed lightbox JSON configuration.', e);
12433        }
12434        supportOldLightboxJson(json);
12435        json.items.forEach(function(item) {
12436            item.$el = data.el;
12437        });
12438        groupName = json.group;
12439        if (groupName) {
12440            groupItems = groups[groupName];
12441            if (!groupItems) {
12442                groupItems = groups[groupName] = [];
12443            }
12444            data.items = groupItems;
12445            if (json.items.length) {
12446                data.index = groupItems.length;
12447                groupItems.push.apply(groupItems, json.items);
12448            }
12449        } else {
12450            data.items = json.items;
12451            data.index = 0;
12452        }
12453    }
12454    function clickHandler(data) {
12455        return function() {
12456            data.items.length && lightbox(data.items, data.index || 0);
12457        };
12458    }
12459    function supportOldLightboxJson(data) {
12460        if (data.images) {
12461            data.images.forEach(function(item) {
12462                item.type = 'image';
12463            });
12464            data.items = data.images;
12465        }
12466        if (data.embed) {
12467            data.embed.type = 'video';
12468            data.items = [
12469                data.embed
12470            ];
12471        }
12472        if (data.groupId) {
12473            data.group = data.groupId;
12474        }
12475    }
12476    // Export module
12477    return api;
12478});
12479
12480//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbGlnaHRib3guanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3csIGRvY3VtZW50LCBqUXVlcnkgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBMaWdodGJveCBjb21wb25lbnRcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4uL0Jhc2VTaXRlTW9kdWxlcy93ZWJmbG93LWxpYicpO1xuXG52YXIgQ09ORElUSU9OX0lOVklTSUJMRV9DTEFTUyA9ICd3LWNvbmRpdGlvbi1pbnZpc2libGUnO1xudmFyIENPTkRWSVNfU0VMRUNUT1IgPSAnLicgKyBDT05ESVRJT05fSU5WSVNJQkxFX0NMQVNTO1xuXG5mdW5jdGlvbiB3aXRob3V0Q29uZGl0aW9uYWxseUhpZGRlbihpdGVtcykge1xuICByZXR1cm4gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuICFpc0NvbmRpdGlvbmFsbHlIaWRkZW4oaXRlbSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0NvbmRpdGlvbmFsbHlIaWRkZW4oaXRlbSkge1xuICByZXR1cm4gQm9vbGVhbihpdGVtLiRlbCAmJiBpdGVtLiRlbC5jbG9zZXN0KENPTkRWSVNfU0VMRUNUT1IpLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzVmlzaWJsZUluZGV4KHN0YXJ0LCBpdGVtcykge1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKCFpc0NvbmRpdGlvbmFsbHlIaWRkZW4oaXRlbXNbaV0pKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gI
12480H1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0VmlzaWJsZUluZGV4KHN0YXJ0LCBpdGVtcykge1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gaXRlbXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgaWYgKCFpc0NvbmRpdGlvbmFsbHlIaWRkZW4oaXRlbXNbaV0pKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTZXRBcnJvd0xlZnRJbmFjdGl2ZShjdXJyZW50SW5kZXgsIGl0ZW1zKSB7XG4gIHJldHVybiBnZXRQcmV2aW91c1Zpc2libGVJbmRleChjdXJyZW50SW5kZXggLSAxLCBpdGVtcykgPT09IC0xO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTZXRBcnJvd1JpZ2h0SW5hY3RpdmUoY3VycmVudEluZGV4LCBpdGVtcykge1xuICByZXR1cm4gZ2V0TmV4dFZpc2libGVJbmRleChjdXJyZW50SW5kZXggKyAxLCBpdGVtcykgPT09IC0xO1xufVxuXG5mdW5jdGlvbiBzZXRBcmlhTGFiZWxJZkVtcHR5KCRlbGVtZW50LCBsYWJlbFRleHQpIHtcbiAgaWYgKCEkZWxlbWVudC5hdHRyKCdhcmlhLWxhYmVsJykpIHtcbiAgICAkZWxlbWVudC5hdHRyKCdhcmlhLWxhYmVsJywgbGFiZWxUZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaWdodGJveCh3aW5kb3csIGRvY3VtZW50LCAkLCBjb250YWluZXIpIHtcbiAgdmFyIHRyYW0gPSAkLnRyYW07XG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgdmFyIG5hbWVzcGFjZSA9ICd3LWxpZ2h0Ym94JztcbiAgdmFyIHByZWZpeCA9IG5hbWVzcGFjZSArICctJztcbiAgdmFyIHByZWZpeFJlZ2V4ID0gLyhefFxccyspL2c7XG5cbiAgLy8gQXJyYXkgb2Ygb2JqZWN0cyBkZXNjcmliaW5nIGl0ZW1zIHRvIGJlIGRpc3BsYXllZC5cbiAgdmFyIGl0ZW1zID0gW107XG5cbiAgLy8gSW5kZXggb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgaXRlbS5cbiAgdmFyIGN1cnJlbnRJbmRleDtcblxuICAvLyBPYmplY3QgaG9sZGluZyByZWZlcmVuY2VzIHRvIGpRdWVyeSB3cmFwcGVkIG5vZGVzLlxuICB2YXIgJHJlZnM7XG5cbiAgLy8gSW5zdGFuY2Ugb2YgU3Bpbm5lclxuICB2YXIgc3Bpbm5lcjtcblxuICAvLyBUcmFja3MgZGF0YSBvbiBlbGVtZW50IHZpc2libGl0eSBtb2RpZmllZCB3aGVuIGxpZ2h0Ym94IG9wZW5zXG4gIHZhciByZXNldFZpc2liaWxpdHlTdGF0ZSA9IFtdO1xuXG4gIGZ1bmN0aW9uIGxpZ2h0Ym94KHRoaW5nLCBpbmRleCkge1xuICAgIGl0ZW1zID0gaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG5cbiAgICBpZiAoISRyZWZzKSB7XG4gICAgICBsaWdodGJveC5idWlsZCgpO1xuICAgIH1cblxuICAgIGlmICh3aXRob3V0Q29uZGl0aW9uYWxseUhpZGRlbihpdGVtcykubGVuZ3RoID4gMSkge1xuICAgICAgJHJlZnMuaXRlbXMgPSAkcmVmcy5lbXB0eTtcblxuICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaWR4KSB7XG4gICAgICAgIHZhciAkdGh1bWJuYWlsID0gZG9tKCd0aHVtYm5haWwnKTtcbiAgICAgICAgdmFyICRpdGVtID0gZG9tKCdpdGVtJylcbiAgICAgICAgICAucHJvcCgndGFiSW5kZXgnLCAwKVxuICAgICAgICAgIC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgJ3ctbGlnaHRib3gtdmlldycpXG4gICAgICAgICAgLmF0dHIoJ3JvbGUnLCAndGFiJylcbiAgICAgICAgICAuYXBwZW5kKCR0aHVtYm5haWwpO1xuXG4gICAgICAgIHNldEFyaWFMYWJlbElmRW1wdHkoJGl0ZW0sIGBzaG93IGl0ZW0gJHtpZHggKyAxfSBvZiAke2l0ZW1zLmxlbmd0aH1gKTtcblxuICAgICAgICBpZiAoaXNDb25kaXRpb25hbGx5SGlkZGVuKGl0ZW0pKSB7XG4gICAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoQ09ORElUSU9OX0lOVklTSUJMRV9DTEFTUyk7XG4gICAgICAgIH1cblxuICAgICAgICAkcmVmcy5pdGVtcyA9ICRyZWZzLml0ZW1zLmFkZCgkaXRlbSk7XG5cbiAgICAgICAgbG9hZEltYWdlKGl0ZW0udGh1bWJuYWlsVXJsIHx8IGl0ZW0udXJsLCBmdW5jdGlvbiAoJGltYWdlKSB7XG4gICAgICAgICAgaWYgKCRpbWFnZS5wcm9wKCd3aWR0aCcpID4gJGltYWdlLnByb3AoJ2hlaWdodCcpKSB7XG4gICAgICAgICAgICBhZGRDbGFzcygkaW1hZ2UsICd3aWRlJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZENsYXNzKCRpbWFnZSwgJ3RhbGwnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgJHRodW1ibmFpbC5hcHBlbmQoYWRkQ2xhc3MoJGltYWdlLCAndGh1bWJuYWlsLWltYWdlJykpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkcmVmcy5zdHJpcC5lbXB0eSgpLmFwcGVuZCgkcmVmcy5pdGVtcyk7XG4gICAgICBhZGRDbGFzcygkcmVmcy5jb250ZW50LCAnZ3JvdXAnKTtcbiAgICB9XG5cbiAgICB0cmFtKFxuICAgICAgLy8gRm9jdXMgdGhlIGxpZ2h0Ym94IHRvIHJlY2VpdmUga2V5Ym9hcmQgZXZlbnRzLlxuICAgICAgcmVtb3ZlQ2xhc3MoJHJlZnMubGlnaHRib3gsICdoaWRlJykudHJpZ2dlcignZm9jdXMnKVxuICAgIClcbiAgICAgIC5hZGQoJ29wYWNpdHkgLjNzJylcbiAgICAgIC5zdGFydCh7b3BhY2l0eTogMX0pO1xuXG4gICAgLy8gUHJldmVudCBkb2N1bWVudCBmcm9tIHNjcm9sbGluZyB3aGlsZSBsaWdodGJveCBpcyBhY3RpdmUuXG4gICAgYWRkQ2xhc3MoJHJlZnMuaHRtbCwgJ25vc2Nyb2xsJyk7XG5cbiAgICByZXR1cm4gbGlnaHRib3guc2hvdyhpbmRleCB8fCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBET00gc3RydWN0dXJlIHJlcXVpcmVkIGJ5IHRoZSBsaWdodGJveC5cbiAgICovXG4gIGxpZ2h0Ym94LmJ1aWxkID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIEluIGNhc2UgYGJ1aWxkYCBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAgbGlnaHRib3guZGVzdHJveSgpO1xuXG4gICAgJHJlZnMgPSB7XG4gICAgICBodG1sOiAkKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksXG4gICAgICAvLyBFbXB0eSBqUXVlcnkgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIG5ldyBvbmVzIHVzaW5nIGAuYWRkYC5cbiAgICAgIGVtcHR5OiAkKCksXG4gICAgfTtcblxuICAgICRyZWZzLmFycm93TGVmdCA9IGRvbSgnY29udHJvbCBsZWZ0IGluYWN0aXZlJylcbiAgICAgIC5hdHRyKCdyb2xlJywgJ2J1dHRvbicpXG4gICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgICAgLmF0dHIoJ2FyaWEtY29udHJvbHMnLCAndy1saWdodGJveC12aWV3Jyk7XG4gICAgJHJlZnMuYXJyb3dSaWdodCA9IGRvbSgnY29udHJvbCByaWdodCBpbmFjdGl2ZScpXG4gICAgICAuYXR0cigncm9sZScsICdidXR0b24nKVxuICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgICAgIC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgJ3ctbGlnaHRib3gtdmlldycpO1xuICAgICRyZWZzLmNsb3NlID0gZG9tKCdjb250cm9sIGNsb3NlJykuYXR0cigncm9sZScsICdidXR0b24nKTtcblxuICAgIC8vIE9ubHkgc2V0IGBhcmlhLWxhYmVsYCB2YWx1ZXMgaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgIHNldEFyaWFMYWJlbElmRW1wdHkoJHJlZnMuYXJyb3dMZWZ0LCAncHJldmlvdXMgaW1hZ2UnKTtcbiAgICBzZXRBcmlhTGFiZWxJZkVtcHR5KCRyZWZzLmFycm93UmlnaHQsICduZXh0IGltYWdlJyk7XG4gICAgc2V0QXJpYUxhYmVsSWZFbXB0eSgkcmVmcy5jbG9zZSwgJ2Nsb3NlIGxpZ2h0Ym94Jyk7XG5cbiAgICAkcmVmcy5zcGlubmVyID0gZG9tKCdzcGlubmVyJylcbiAgICAgIC5hdHRyKCdyb2xlJywgJ3Byb2dyZXNzYmFyJylcbiAgICAgIC5hdHRyKCdhcmlhLWxpdmUnLCAncG9saXRlJylcbiAgICAgIC5hdHRyKCdhcmlhLWh
12480pZGRlbicsIGZhbHNlKVxuICAgICAgLmF0dHIoJ2FyaWEtYnVzeScsIHRydWUpXG4gICAgICAuYXR0cignYXJpYS12YWx1ZW1pbicsIDApXG4gICAgICAuYXR0cignYXJpYS12YWx1ZW1heCcsIDEwMClcbiAgICAgIC5hdHRyKCdhcmlhLXZhbHVlbm93JywgMClcbiAgICAgIC5hdHRyKCdhcmlhLXZhbHVldGV4dCcsICdMb2FkaW5nIGltYWdlJyk7XG5cbiAgICAkcmVmcy5zdHJpcCA9IGRvbSgnc3RyaXAnKS5hdHRyKCdyb2xlJywgJ3RhYmxpc3QnKTtcblxuICAgIHNwaW5uZXIgPSBuZXcgU3Bpbm5lcigkcmVmcy5zcGlubmVyLCBwcmVmaXhlZCgnaGlkZScpKTtcblxuICAgICRyZWZzLmNvbnRlbnQgPSBkb20oJ2NvbnRlbnQnKS5hcHBlbmQoXG4gICAgICAkcmVmcy5zcGlubmVyLFxuICAgICAgJHJlZnMuYXJyb3dMZWZ0LFxuICAgICAgJHJlZnMuYXJyb3dSaWdodCxcbiAgICAgICRyZWZzLmNsb3NlXG4gICAgKTtcblxuICAgICRyZWZzLmNvbnRhaW5lciA9IGRvbSgnY29udGFpbmVyJykuYXBwZW5kKCRyZWZzLmNvbnRlbnQsICRyZWZzLnN0cmlwKTtcblxuICAgICRyZWZzLmxpZ2h0Ym94ID0gZG9tKCdiYWNrZHJvcCBoaWRlJykuYXBwZW5kKCRyZWZzLmNvbnRhaW5lcik7XG5cbiAgICAvLyBXZSBhcmUgZGVsZWdhdGluZyBldmVudHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW5kIGFsc29cbiAgICAvLyB0byBub3QgaGF2ZSB0byByZWF0dGFjaCBoYW5kbGVycyB3aGVuIGltYWdlcyBjaGFuZ2UuXG4gICAgJHJlZnMuc3RyaXAub24oJ2NsaWNrJywgc2VsZWN0b3IoJ2l0ZW0nKSwgaXRlbVRhcEhhbmRsZXIpO1xuICAgICRyZWZzLmNvbnRlbnRcbiAgICAgIC5vbignc3dpcGUnLCBzd2lwZUhhbmRsZXIpXG4gICAgICAub24oJ2NsaWNrJywgc2VsZWN0b3IoJ2xlZnQnKSwgaGFuZGxlclByZXYpXG4gICAgICAub24oJ2NsaWNrJywgc2VsZWN0b3IoJ3JpZ2h0JyksIGhhbmRsZXJOZXh0KVxuICAgICAgLm9uKCdjbGljaycsIHNlbGVjdG9yKCdjbG9zZScpLCBoYW5kbGVySGlkZSlcbiAgICAgIC5vbignY2xpY2snLCBzZWxlY3RvcignaW1hZ2UsIGNhcHRpb24nKSwgaGFuZGxlck5leHQpO1xuICAgICRyZWZzLmNvbnRhaW5lclxuICAgICAgLm9uKCdjbGljaycsIHNlbGVjdG9yKCd2aWV3JyksIGhhbmRsZXJIaWRlKVxuICAgICAgLy8gUHJldmVudCBpbWFnZXMgZnJvbSBiZWluZyBkcmFnZ2VkIGFyb3VuZC5cbiAgICAgIC5vbignZHJhZ3N0YXJ0Jywgc2VsZWN0b3IoJ2ltZycpLCBwcmV2ZW50RGVmYXVsdCk7XG4gICAgJHJlZnMubGlnaHRib3hcbiAgICAgIC5vbigna2V5ZG93bicsIGtleUhhbmRsZXIpXG4gICAgICAvLyBJRSBsb3NlcyBmb2N1cyB0byBpbm5lciBub2RlcyB3aXRob3V0IGxldHRpbmcgdXMga25vdy5cbiAgICAgIC5vbignZm9jdXNpbicsIGZvY3VzVGhpcyk7XG5cbiAgICAkKGNvbnRhaW5lcikuYXBwZW5kKCRyZWZzLmxpZ2h0Ym94KTtcblxuICAgIHJldHVybiBsaWdodGJveDtcbiAgfTtcblxuICAvKipcbiAgICogRGlzcG9zZSBvZiBET00gbm9kZXMgY3JlYXRlZCBieSB0aGUgbGlnaHRib3guXG4gICAqL1xuICBsaWdodGJveC5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghJHJlZnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGVycyBhcmUgYWxzbyByZW1vdmVkLlxuICAgIHJlbW92ZUNsYXNzKCRyZWZzLmh0bWwsICdub3Njcm9sbCcpO1xuICAgICRyZWZzLmxpZ2h0Ym94LnJlbW92ZSgpO1xuICAgICRyZWZzID0gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTaG93IGEgc3BlY2lmaWMgaXRlbS5cbiAgICovXG4gIGxpZ2h0Ym94LnNob3cgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAvLyBCYWlsIGlmIHdlIGFyZSBhbHJlYWR5IHNob3dpbmcgdGhpcyBpdGVtLlxuICAgIGlmIChpbmRleCA9PT0gY3VycmVudEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIGxpZ2h0Ym94LmhpZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNDb25kaXRpb25hbGx5SGlkZGVuKGl0ZW0pKSB7XG4gICAgICBpZiAoaW5kZXggPCBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzVmlzaWJsZUluZGV4ID0gZ2V0UHJldmlvdXNWaXNpYmxlSW5kZXgoaW5kZXggLSAxLCBpdGVtcyk7XG4gICAgICAgIGluZGV4ID0gcHJldmlvdXNWaXNpYmxlSW5kZXggPiAtMSA/IHByZXZpb3VzVmlzaWJsZUluZGV4IDogaW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2Y
12480XIgbmV4dFZpc2libGVJbmRleCA9IGdldE5leHRWaXNpYmxlSW5kZXgoaW5kZXggKyAxLCBpdGVtcyk7XG4gICAgICAgIGluZGV4ID0gbmV4dFZpc2libGVJbmRleCA+IC0xID8gbmV4dFZpc2libGVJbmRleCA6IGluZGV4O1xuICAgICAgfVxuICAgICAgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNJbmRleCA9IGN1cnJlbnRJbmRleDtcbiAgICBjdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAkcmVmcy5zcGlubmVyXG4gICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSlcbiAgICAgIC5hdHRyKCdhcmlhLWJ1c3knLCB0cnVlKVxuICAgICAgLmF0dHIoJ2FyaWEtdmFsdWVub3cnLCAwKVxuICAgICAgLmF0dHIoJ2FyaWEtdmFsdWV0ZXh0JywgJ0xvYWRpbmcgaW1hZ2UnKTtcbiAgICBzcGlubmVyLnNob3coKTtcblxuICAgIC8vIEZvciB2aWRlb3MsIGxvYWQgYW4gZW1wdHkgU1ZHIHdpdGggdGhlIHZpZGVvIGRpbWVuc2lvbnMgdG8gcHJlc2VydmVcbiAgICAvLyB0aGUgdmlkZW/igJlzIGFzcGVjdCByYXRpbyB3aGlsZSBiZWluZyByZXNwb25zaXZlLlxuICAgIHZhciB1cmwgPSAoaXRlbS5odG1sICYmIHN2Z0RhdGFVcmkoaXRlbS53aWR0aCwgaXRlbS5oZWlnaHQpKSB8fCBpdGVtLnVybDtcbiAgICBsb2FkSW1hZ2UodXJsLCBmdW5jdGlvbiAoJGltYWdlKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhpcyBpcyB0aGUgbGFzdCBpdGVtIHJlcXVlc3RlZCB0byBiZSBzaG93biBzaW5jZVxuICAgICAgLy8gaW1hZ2VzIGNhbiBmaW5pc2ggbG9hZGluZyBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgd2VyZVxuICAgICAgLy8gcmVxdWVzdGVkIGluLlxuICAgICAgaWYgKGluZGV4ICE9PSBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyICRmaWd1cmUgPSBkb20oJ2ZpZ3VyZScsICdmaWd1cmUnKS5hcHBlbmQoYWRkQ2xhc3MoJGltYWdlLCAnaW1hZ2UnKSk7XG4gICAgICB2Y
12480XIgJGZyYW1lID0gZG9tKCdmcmFtZScpLmFwcGVuZCgkZmlndXJlKTtcbiAgICAgIHZhciAkbmV3VmlldyA9IGRvbSgndmlldycpXG4gICAgICAgIC5wcm9wKCd0YWJJbmRleCcsIDApXG4gICAgICAgIC5hdHRyKCdpZCcsICd3LWxpZ2h0Ym94LXZpZXcnKVxuICAgICAgICAuYXBwZW5kKCRmcmFtZSk7XG4gICAgICB2YXIgJGh0bWw7XG4gICAgICB2YXIgaXNJZnJhbWU7XG4gICAgICBpZiAoaXRlbS5odG1sKSB7XG4gICAgICAgICRodG1sID0gJChpdGVtLmh0bWwpO1xuICAgICAgICBpc0lmcmFtZSA9ICRodG1sLmlzKCdpZnJhbWUnKTtcblxuICAgICAgICBpZiAoaXNJZnJhbWUpIHtcbiAgICAgICAgICAkaHRtbC5vbignbG9hZCcsIHRyYW5zaXRpb25Ub05ld1ZpZXcpO1xuICAgICAgICB9XG5cbiAgICAgICAgJGZpZ3VyZS5hcHBlbmQoYWRkQ2xhc3MoJGh0bWwsICdlbWJlZCcpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0uY2FwdGlvbikge1xuICAgICAgICAkZmlndXJlLmFwcGVuZChkb20oJ2NhcHRpb24nLCAnZmlnY2FwdGlvbicpLnRleHQoaXRlbS5jYXB0aW9uKSk7XG4gICAgICB9XG5cbiAgICAgICRyZWZzLnNwaW5uZXIuYmVmb3JlKCRuZXdWaWV3KTtcblxuICAgICAgaWYgKCFpc0lmcmFtZSkge1xuICAgICAgICB0cmFuc2l0aW9uVG9OZXdWaWV3KCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRyYW5zaXRpb25Ub05ld1ZpZXcoKSB7XG4gICAgICAgICRyZWZzLnNwaW5uZXJcbiAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgICAgICAgIC5hdHRyKCdhcmlhLWJ1c3knLCBmYWxzZSlcbiAgICAgICAgICAuYXR0cignYXJpYS12YWx1ZW5vdycsIDEwMClcbiAgICAgICAgICAuYXR0cignYXJpYS12YWx1ZXRleHQnLCAnTG9hZGVkIGltYWdlJyk7XG4gICAgICAgIHNwaW5uZXIuaGlkZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCAhPT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgJG5ld1ZpZXcucmVtb3ZlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkSGlkZUxlZnRBcnJvdyA9IHNob3VsZFNldEFycm93TGVmdEluYWN0aXZlKGluZGV4LCBpdGVtcyk7XG4gICAgICAgIHRvZ2dsZUNsYXNzKCRyZWZzLmFycm93TGVmdCwgJ2luYWN0aXZlJywgc2hvdWxkSGlkZUxlZnRBcnJvdyk7XG4gICAgICAgIHRvZ2dsZUhpZGRlbigkcmVmcy5hcnJvd0xlZnQsIHNob3VsZEhpZGVMZWZ0QXJyb3cpO1xuICAgICAgICBpZiAoc2hvdWxkSGlkZUxlZnRBcnJvdyAmJiAkcmVmcy5hcnJvd0xlZnQuaXMoJzpmb2N1cycpKSB7XG4gICAgICAgICAgLy8gUmVmb2N1cyBvbiByaWdodCBhcnJvdyBhcyBsZWZ0IGFycm93IGlzIGhpZGRlblxuICAgICAgICAgICRyZWZzLmFycm93UmlnaHQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3VsZEhpZGVSaWdodEFycm93ID0gc2hvdWxkU2V0QXJyb3dSaWdodEluYWN0aXZlKGluZGV4LCBpdGVtcyk7XG4gICAgICAgIHRvZ2dsZUNsYXNzKCRyZWZzLmFycm93UmlnaHQsICdpbmFjdGl2ZScsIHNob3VsZEhpZGVSaWdodEFycm93KTtcbiAgICAgICAgdG9nZ2xlSGlkZGVuKCRyZWZzLmFycm93UmlnaHQsIHNob3VsZEhpZGVSaWdodEFycm93KTtcbiAgICAgICAgaWYgKHNob3VsZEhpZGVSaWdodEFycm93ICYmICRyZWZzLmFycm93UmlnaHQuaXMoJzpmb2N1cycpKSB7XG4gICAgICAgICAgLy8gUmVmb2N1cyBvbiBsZWZ0IGFycm93IGFzIHJpZ2h0IGFycm93IGlzIGhpZGRlblxuICAgICAgICAgICRyZWZzLmFycm93TGVmdC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRyZWZzLnZpZXcpIHtcbiAgICAgICAgICB0cmFtKCRyZWZzLnZpZXcpXG4gICAgICAgICAgICAuYWRkKCdvcGFjaXR5IC4zcycpXG4gICAgICAgICAgICAuc3RhcnQoe29wYWNpdHk6IDB9KVxuICAgICAgICAgICAgLnRoZW4ocmVtb3ZlcigkcmVmcy52aWV3KSk7XG5cbiAgICAgICAgICB0cmFtKCRuZXdWaWV3KVxuICAgICAgICAgICAgLmFkZCgnb3BhY2l0eSAuM3MnKVxuICAgICAgICAgICAgLmFkZCgndHJhbnNmb3JtIC4zcycpXG4gICAgICAgICAgICAuc2V0KHt4OiBpbmRleCA+IHByZXZpb3VzSW5kZXggPyAnODBweCcgOiAnLTgwcHgnfSlcbiAgICAgICAgICAgIC5zdGFydCh7b3BhY2l0eTogMSwgeDogMH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRuZXdWaWV3LmNzcygnb3BhY2l0eScsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHJlZnMudmlldyA9ICRuZXdWaWV3O1xuICAgICAgICAkcmVmcy52aWV3LnByb3AoJ3RhYkluZGV4JywgMCk7XG5cbiAgICAgICAgaWYgKCRyZWZzLml0ZW1zKSB7XG4gICAgICAgICAgcmVtb3ZlQ2xhc3MoJHJlZnMuaXRlbXMsICdhY3RpdmUnKTtcbiAgICAgICAgICAkcmVmcy5pdGVtcy5yZW1vdmVBdHRyKCdhcmlhLXNlbGVjdGVkJyk7XG5cbiAgICAgICAgICAvLyBNYXJrIHByb3BlciB0aHVtYm5haWwgYXMgYWN0aXZlXG4gICAgICAgICAgdmFyICRhY3RpdmVUaHVtYiA9ICRyZWZzLml0ZW1zLmVxKGluZGV4KTtcbiAgICAgICAgICBhZGRDbGFzcygkYWN0aXZlVGh1bWIsICdhY3RpdmUnKTtcbiAgICAgICAgICAkYWN0aXZlVGh1bWIuYXR0cignYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICAgIC8vIFNjcm9sbCBpbnRvIHZpZXdcbiAgICAgICAgICBtYXliZVNjcm9sbCgkYWN0aXZlVGh1bWIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkcmVmcy5jbG9zZS5wcm9wKCd0YWJJbmRleCcsIDApO1xuXG4gICAgLy8gVHJhY2sgdGhlIGZvY3VzZWQgaXRlbSBvbiBwYWdlIHByaW9yIHRvIGxpZ2h0Ym94IG9wZW5pbmcsXG4gICAgLy8gc28gd2UgY2FuIHJldHVybiBmb2N1cyBvbiBoaWRlXG4gICAgJCgnOmZvY3VzJykuYWRkQ2xhc3MoJ2FjdGl2ZS1saWdodGJveCcpO1xuXG4gICAgLy8gQnVpbGQgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgc2l0ZSAoYWNyb3NzIG11bHRpcGxlIGxpZ2h0Ym94ZXMpLFxuICAgIC8vIHdoaWxlIHRoZSBzaG93IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIG9wZW5pbmcgbGlnaHRib3ggYnV0IGFsc29cbiAgICAvLyB3aGVuIGNoYW5naW5nIGltYWdlLlxuICAgIC8vIFNvIGNoZWNraW5nIHJlc2V0VmlzaWJpbGl0eVN0YXRlIHNlZW1zIHRvIGJlIG9uZSBhcHByb2FjaCB0b1xuICAgIC8vIHRyaWdnZXIgc29tZXRoaW5nIG9ubHkgd2hlbiB0aGUgbGlnaHRib3ggaXMgb3BlbmVkXG4gICAgaWYgKHJlc2V0VmlzaWJpbGl0eVN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGFrZSBhbGwgZWxlbWVudHMgb24gdGhlIHBhZ2Ugb3V0IG9mIHRoZSBhY2Nlc3NpYmlsaXR5IGZsb3cgYnkgbWFya2luZ1xuICAgICAgLy8gdGhlbSBoaWRkZW4gYW5kIHByZXZlbn
12480RpbmcgdGFiIGluZGV4IHdoaWxlIGxpZ2h0Ym94IGlzIG9wZW4uXG4gICAgICAkKCdib2R5JylcbiAgICAgICAgLmNoaWxkcmVuKClcbiAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIGxpZ2h0Ym94IHdyYXBwZXIgb3Igc2NyaXB0IHRhZ3NcbiAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygndy1saWdodGJveC1iYWNrZHJvcCcpIHx8ICQodGhpcykuaXMoJ3NjcmlwdCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcmUgdGhlIGVsZW1lbnRzIHByZXZpb3VzIHZpc2libGl0eSBzdGF0ZVxuICAgICAgICAgIHJlc2V0VmlzaWJpbGl0eVN0YXRlLnB1c2goe1xuICAgICAgICAgICAgbm9kZTogJCh0aGlzKSxcbiAgICAgICAgICAgIGhpZGRlbjogJCh0aGlzKS5hdHRyKCdhcmlhLWhpZGRlbicpLFxuICAgICAgICAgICAgdGFiSW5kZXg6ICQodGhpcykuYXR0cigndGFiSW5kZXgnKSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEhpZGUgZWxlbWVudCBmcm9tIHRoZSBhY2Nlc3NpYmxpdHkgdHJlZVxuICAgICAgICAgICQodGhpcykuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKS5hdHRyKCd0YWJJbmRleCcsIC0xKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFN0YXJ0IGZvY3VzIG9uIHRoZSBjbG9zZSBpY29uXG4gICAgICAkcmVmcy5jbG9zZS5mb2N1cygpO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodGJveDtcbiAgfTtcblxuICAvKipcbiAgICogSGlkZXMgdGhlIGxpZ2h0Ym94LlxuICAgKi9cbiAgbGlnaHRib3guaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0cmFtKCRyZWZzLmxpZ2h0Ym94KVxuICAgICAgLmFkZCgnb3BhY2l0eSAuM3MnKVxuICAgICAgLnN0YXJ0KHtvcGFjaXR5OiAwfSlcbiAgICAgIC50aGVuKGhpZGVMaWdodGJveCk7XG5cbiAgICByZXR1cm4gbGlnaHRib3g7XG4gIH07XG5cbiAgbGlnaHRib3gucHJldiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldmlvdXNWaXNpYmxlSW5kZXggPSBnZXRQcmV2aW91c1Zpc2libGVJbmRleChjdXJyZW50SW5kZXggLSAxLCBpdGVtcyk7XG4gICAgaWYgKHByZXZpb3VzVmlzaWJsZUluZGV4ID4gLTEpIHtcbiAgICAgIGxpZ2h0Ym94LnNob3cocHJldmlvdXNWaXNpYmxlSW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICBsaWdodGJveC5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXh0VmlzaWJsZUluZGV4ID0gZ2V0TmV4dFZpc2libGVJbmRleChjdXJyZW50SW5kZXggKyAxLCBpdGVtcyk7XG4gICAgaWYgKG5leHRWaXNpYmxlSW5kZXggPiAtMSkge1xuICAgICAgbGlnaHRib3guc2hvdyhuZXh0VmlzaWJsZUluZGV4KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGFuZGxlcihhY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgZXZlbnRzIHRyaWdnZXJlZCBkaXJlY3RseSBvbiB0aGUgYm91bmQgc2VsZWN0b3JzLlxuICAgICAgaWYgKHRoaXMgIT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgYWN0aW9uKCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBoYW5kbGVyUHJldiA9IGNyZWF0ZUhhbmRsZXIobGlnaHRib3gucHJldik7XG4gIHZhciBoYW5kbGVyTmV4dCA9IGNyZWF0ZUhhbmRsZXIobGlnaHRib3gubmV4dCk7XG4gIHZhciBoYW5kbGVySGlkZSA9IGNyZWF0ZUhhbmRsZXIobGlnaHRib3guaGlkZSk7XG5cbiAgdmFyIGl0ZW1UYXBIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleCgpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsaWdodGJveC5zaG93KGluZGV4KTtcbiAgfTtcblxuICB2YXIgc3dpcGVIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50LCBkYXRhKSB7XG4gICAgLy8gUHJldmVudCBzY3JvbGxpbmcuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChkYXRhLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBsaWdodGJveC5uZXh0KCk7XG4gICAgfSBlbHNlIGlmIChkYXRhLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgbGlnaHRib3gucHJldigpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZm9jdXNUaGlzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBrZXlIYW5kbGVyKGV2ZW50KSB7XG4gICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgLy8gW2VzY10gb3IgKFtlbnRlcl0gb3IgW3NwYWNlXSB3aGlsZSBjbG9zZSBidXR0b24gaXMgZm9jdXNlZClcbiAgICBpZiAoa2V5Q29kZSA9PT0gMjcgfHwgY2hlY2tGb3JGb2N1c1RyaWdnZXIoa2V5Q29kZSwgJ2Nsb3NlJykpIHtcbiAgICAgIGxpZ2h0Ym94LmhpZGUoKTtcblxuICAgICAgLy8gW+KXgF0gb3IgKFtlbnRlcl0gb3IgW3NwYWNlXSB3aGlsZSBsZWZ0IGJ1dHRvbiBpcyBmb2N1c2VkKVxuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gMzcgfHwgY2hlY2tGb3JGb2N1c1RyaWdnZXIoa2V5Q29kZSwgJ2xlZnQnKSkge1xuICAgICAgbGlnaHRib3gucHJldigpO1xuXG4gICAgICAvLyBb4pa2XSBvciAoW2VudGVyXSBvciBbc3BhY2VdIHdoaWxlIHJpZ2h0IGJ1dHRvbiBpcyBmb2N1c2VkKVxuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gMzkgfHwgY2hlY2tGb3JGb2N1c1RyaWdnZXIoa2V5Q29kZSwgJ3JpZ2h0JykpIHtcbiAgICAgIGxpZ2h0Ym94Lm5leHQoKTtcbiAgICAgIC8vIFtlbnRlcl0gb3IgW3NwYWNlXSB3aGlsZSBhIHRodW1ibmFpbCBpcyBmb2N1c2VkXG4gICAgfSBlbHNlIGlmIChjaGVja0ZvckZvY3VzVHJpZ2dlcihrZXlDb2RlLCAnaXRlbScpKSB7XG4gICAgICAkKCc6Zm9jdXMnKS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja0ZvckZvY3VzVHJpZ2dlciB3aWxsIGNoZWNrIGlmIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCBpbmNsdWRlcyB0aGUgbWF0Y2hpbmcgY2xhc3NcbiAgICogYW5kIHR
12480oYXQgdGhlIHVzZXIgaGFzIHByZXNzZWQgZWl0aGVyIGVudGVyIG9yIHNwYWNlIHRvIHRyaWdnZXIgYW4gYWN0aW9uLlxuICAgKiBAcGFyYW0gIHtudW1iZXJ9IFRoZSBudW1lcmljYWwga2V5Q29kZSBmcm9tIHRoZSBga2V5ZG93bmAgZXZlbnRcbiAgICogQHBhcmFtICB7c3RyaW5nfSBUaGUgdW5pcXVlIHBhcnQgb2YgdGhlIGBjbGFzc05hbWVgIGZyb20gdGhlIGVsZW1lbnQgd2UgYXJlIGNoZWNraW5nLiBFLmcuIGBjbG9zZWAgd2lsbCBiZSBwcmVmaXhlZCBpbnRvIGB3LWxpZ2h0Ym94LWNsb3NlYFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tGb3JGb2N1c1RyaWdnZXIoa2V5Q29kZSwgY2xhc3NNYXRjaCkge1xuICAgIGlmIChrZXlDb2RlICE9PSAxMyAmJiBrZXlDb2RlICE9PSAzMikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50RWxlbWVudENsYXNzZXMgPSAkKCc6Zm9jdXMnKS5hdHRyKCdjbGFzcycpO1xuICAgIHZhciBjbGFzc1RvRmluZCA9IHByZWZpeGVkKGNsYXNzTWF0Y2gpLnRyaW0oKTtcblxuICAgIHJldHVybiBjdXJyZW50RWxlbWVudENsYXNzZXMuaW5jbHVkZXMoY2xhc3NUb0ZpbmQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGlkZUxpZ2h0Ym94KCkge1xuICAgIC8vIElmIHRoZSBsaWdodGJveCBoYXNuJ3QgYmVlbiBkZXN0cm95ZWQgYWxyZWFkeVxuICAgIGlmICgkcmVmcykge1xuICAgICAgLy8gUmVzZXQgc3RyaXAgc2Nyb2xsLCBvdGhlcndpc2UgbmV4dCBsaWdodGJveCBvcGVucyBzY3JvbGxlZCB0byBsYXN0IHBvc2l0aW9uXG4gICAgICAkcmVmcy5zdHJpcC5zY3JvbGxMZWZ0KDApLmVtcHR5KCk7XG4gICAgICByZW1vdmVDbGFzcygkcmVmcy5odG1sLCAnbm9zY3JvbGwnKTtcbiAgICAgIGFkZENsYXNzKCRyZWZzLmxpZ2h0Ym94LCAnaGlkZScpO1xuICAgICAgJHJlZnMudmlldyAmJiAkcmVmcy52aWV3LnJlbW92ZSgpO1xuXG4gICAgICAvLyBSZXNldCBzb21lIHN0dWZmXG4gICAgICByZW1vdmVDbGFzcygkcmVmcy5jb250ZW50LCAnZ3JvdXAnKTtcbiAgICAgIGFkZENsYXNzKCRyZWZzLmFycm93TGVmdCwgJ2luYWN0aXZlJyk7XG4gICAgICBhZGRDbGFzcygkcmVmcy5hcnJvd1JpZ2h0LCAnaW5hY3RpdmUnKTtcblxuICAgICAgY3VycmVudEluZGV4ID0gJHJlZnMudmlldyA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gQnJpbmcgdGhlIHBhZ2UgZWxlbWVudHMgYmFjayBpbnRvIHRoZSBhY2Nlc3NpYmxpdHkgdHJlZVxuICAgICAgcmVzZXRWaXNpYmlsaXR5U3RhdGUuZm9yRWFjaChmdW5jdGlvbiAodmlzaWJpbGl0eVN0YXRlKSB7XG4gICAgICAgIHZhciBub2RlID0gdmlzaWJpbGl0eVN0YXRlLm5vZGU7XG5cbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc2liaWxpdHlTdGF0ZS5oaWRkZW4pIHtcbiAgICAgICAgICBub2RlLmF0dHIoJ2FyaWEtaGlkZGVuJywgdmlzaWJpbGl0eVN0YXRlLmhpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmVBdHRyKCdhcmlhLWh
12480pZGRlbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc2liaWxpdHlTdGF0ZS50YWJJbmRleCkge1xuICAgICAgICAgIG5vZGUuYXR0cigndGFiSW5kZXgnLCB2aXNpYmlsaXR5U3RhdGUudGFiSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cigndGFiSW5kZXgnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsZWFyIG91dCB0aGUgcmVzZXQgdmlzaWJpbGl0eSBzdGF0ZVxuICAgICAgcmVzZXRWaXNpYmlsaXR5U3RhdGUgPSBbXTtcblxuICAgICAgLy8gUmUtZm9jdXMgb24gdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGxpZ2h0Ym94XG4gICAgICAkKCcuYWN0aXZlLWxpZ2h0Ym94JykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZS1saWdodGJveCcpLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZEltYWdlKHVybCwgY2FsbGJhY2spIHtcbiAgICB2YXIgJGltYWdlID0gZG9tKCdpbWcnLCAnaW1nJyk7XG5cbiAgICAkaW1hZ2Uub25lKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2soJGltYWdlKTtcbiAgICB9KTtcblxuICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2UuXG4gICAgJGltYWdlLmF0dHIoJ3NyYycsIHVybCk7XG5cbiAgICByZXR1cm4gJGltYWdlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlcigkZWxlbWVudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAkZWxlbWVudC5yZW1vdmUoKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVTY3JvbGwoJGl0ZW0pIHtcbiAgICB2YXIgaXRlbUVsZW1lbnQgPSAkaXRlbS5nZXQoMCk7XG4gICAgdmFyIHN0cmlwRWxlbWVudCA9ICRyZWZzLnN0cmlwLmdldCgwKTtcbiAgICB2YXIgaXRlbUxlZnQgPSBpdGVtRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgIHZhciBpdGVtV2lkdGggPSBpdGVtRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB2YXIgc3RyaXBTY3JvbGxMZWZ0ID0gc3RyaXBFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdmFyIHN0cmlwV2lkdGggPSBzdHJpcEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgdmFyIHN0cmlwU2Nyb2xsTGVmdE1heCA9IHN0cmlwRWxlbWVudC5zY3JvbGxXaWR0aCAtIHN0cmlwV2lkdGg7XG5cbiAgICB2YXIgbmV3U2Nyb2xsTGVmdDtcbiAgICBpZiAoaXRlbUxlZnQgPCBzdHJpcFNjcm9sbExlZnQpIHtcbiAgICAgIG5ld1Njcm9sbExlZnQgPSBNYXRoLm1heCgwLCBpdGVtTGVmdCArIGl0ZW1XaWR0aCAtIHN0cmlwV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAoaXRlbUxlZnQgKyBpdGVtV2lkdGggPiBzdHJpcFdpZHRoICsgc3RyaXBTY3JvbGxMZWZ0KSB7XG4gICAgICBuZXdTY3JvbGxMZWZ0ID0gTWF0aC5taW4oaXRlbUxlZnQsIHN0cmlwU2Nyb2xsTGVmdE1heCk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Njcm9sbExlZnQgIT0gbnVsbCkge1xuICAgICAgdHJhbSgkcmVmcy5zdHJpcClcbiAgICAgICAgLmFkZCgnc2Nyb2xsLWxlZnQgNTAwbXMnKVxuICAgICAgICAuc3RhcnQoeydzY3JvbGwtbGVmdCc6IG5ld1Njcm9sbExlZnR9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Bpbm5lclxuICAgKi9cbiAgZnVuY3Rpb24gU3Bpbm5lcigkc3Bpbm5lciwgY2xhc3NOYW1lLCBkZWxheSkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkc3Bpbm5lcjtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICB0aGlzLmRlbGF5ID0gZGVsYXkgfHwgMjAwO1xuICAgIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgU3Bpbm5lci5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3Bpbm5lciA9IHRoaXM7XG5cbiAgICAvLyBCYWlsIGlmIHdlIGFyZSBhbHJlYWR5IHNob3dpbmcgdGhlIHNwaW5uZXIuXG4gICAgaWYgKHNwaW5uZXIudGltZW91dElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3Bpbm5lci50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNwaW5uZXIuJGVsZW1lbnQucmVtb3ZlQ2xhc3Moc3Bpbm5lci5jbGFzc05hbWUpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHdlYmZsb3cvbm8tZGVsZXRlXG4gICAgICBkZWxldGUgc3Bpbm5lci50aW1lb3V0SWQ7XG4gICAgfSwgc3Bpbm5lci5kZWxheSk7XG4gIH07XG5cbiAgU3Bpbm5lci5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3Bpbm5lciA9IHRoaXM7XG4gICAgaWYgKHNwaW5uZXIudGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3Bpbm5lci50aW1lb3V0SWQpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHdlYmZsb3cvbm8tZGVsZXRlXG4gICAgICBkZWxldGUgc3Bpbm5lci50aW1lb3V0SWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3Bpbm5lci4kZWxlbWVudC5hZGRDbGFzcyhzcGlubmVyLmNsYXNzTmFtZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHJlZml4ZWQoc3RyaW5nLCBpc1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHByZWZpeFJlZ2V4LCAoaXNTZWxlY3RvciA/ICcgLicgOiAnICcpICsgcHJlZml4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9yKHN0cmluZykge1xuICAgIHJldHVybiBwcmVmaXhlZChzdHJpbmcsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGpRdWVyeS5hZGRDbGFzcyB3aXRoIGF1dG8tcHJlZml4aW5nXG4gICAqIEBwYXJhbSAge2pRdWVyeX0gRWxlbWVudCB0byBhZGQgY2xhc3MgdG9cbiAgICogQHBhcmFtICB7c3RyaW5nfSBDbGFzcyBuYW1lIHRoYXQgd2lsbCBiZSBwcmVmaXhlZCBhbmQgYWRkZWQgdG8gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtqUXVlcnl9XG4gICAqL1xuICBmdW5jdGlvbiBhZGRDbGFzcygkZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuICRlbGVtZW50LmFkZENsYXNzKHByZWZpeGVkKGNsYXNzTmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGpRdWVyeS5yZW1vdmVDbGFzcyB3aXRoIGF1dG8tcHJlZml4aW5nXG4gICAqIEBwYXJhbSAge2pRdWVyeX0gRWxlbWVudCB0byByZW1vdmUgY2xhc3MgZnJvbVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IENsYXNzIG5hbWUgdGhhdCB3aWxsIGJlIHByZWZpeGVkIGFuZCByZW1vdmVkIGZyb20gZWxlbWVudFxuICAgKiBAcmV0dXJuIHtqUXVlcnl9XG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVDbGFzcygkZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuICRlbGVtZW50LnJlbW92ZUNsYXNzKHByZWZpeGVkKGNsYXNzTmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGpRdWVyeS50b2dnbGVDbGFzcyB3aXRoIGF1dG8tcHJlZml4aW5nXG4gICAqIEBwYXJhbSAge2pRdWVyeX0gIEVsZW1lbnQgd2hlcmUgY2xhc3Mgd2lsbCBiZSB0b2dnbGVkXG4gICAqIEBwYXJhbSAge3N0cmluZ30gIENsYXNzIG5hbWUgdGhhdCB3aWxsIGJlIHByZWZpeGVkIGFuZCB0b2dnbGVkXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IE9wdGlvbmFsIGJvb2xlYW4gdGhhdCBkZXRlcm1pbmVzIGlmIGNsYXNzIHdpbGwgYmUgYWRkZWQgb3IgcmVtb3ZlZFxuICAgKiBAcmV0dXJuIHtqUXVlcnl9XG4gICAqL1xuICBmdW5jdGlvbiB0b2dnbGVDbGFzcygkZWxlbWVudCwgY2xhc3NOYW1lLCBzaG91bGRBZGQpIHtcbiAgICByZXR1cm4gJGVsZW1lbnQudG9nZ2xlQ2xhc3Moc
12480HJlZml4ZWQoY2xhc3NOYW1lKSwgc2hvdWxkQWRkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBqUXVlcnkudG9nZ2xlSGlkZGVuXG4gICAqIEBwYXJhbSAge2pRdWVyeX0gIEVsZW1lbnQgd2hlcmUgYXR0cmlidXRlIHdpbGwgYmUgc2V0XG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IEJvb2xlYW4gdGhhdCBkZXRlcm1pbmVzIGlmIGFyaWEtaGlkZGVuIHdpbGwgYmUgdHJ1ZSBvciBmYWxzZVxuICAgKiBAcmV0dXJuIHtqUXVlcnl9XG4gICAqL1xuICBmdW5jdGlvbiB0b2dnbGVIaWRkZW4oJGVsZW1lbnQsIGlzSGlkZGVuKSB7XG4gICAgcmV0dXJuICRlbGVtZW50XG4gICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCBpc0hpZGRlbilcbiAgICAgIC5hdHRyKCd0YWJJbmRleCcsIGlzSGlkZGVuID8gLTEgOiAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRE9NIGVsZW1lbnQgd3JhcHBlZCBpbiBhIGpRdWVyeSBvYmplY3QsXG4gICAqIGRlY29yYXRlZCB3aXRoIG91ciBjdXN0b20gbWV0aG9kcy5cbiAgICogQHBhcmFtICB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtICB7c3RyaW5nfSBbdGFnXVxuICAgKiBAcmV0dXJuIHtqUXVlcnl9XG4gICAqL1xuICBmdW5jdGlvbiBkb20oY2xhc3NOYW1lLCB0YWcpIHtcbiAgICByZXR1cm4gYWRkQ2xhc3MoJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyB8fCAnZGl2JykpLCBjbGFzc05hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3ZnRGF0YVVyaSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdmFyIHN2ZyA9XG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInICtcbiAgICAgIHdpZHRoICtcbiAgICAgICdcIiBoZWlnaHQ9XCInICtcbiAgICAgIGhlaWdodCArXG4gICAgICAnXCIvPic7XG4gICAgcmV0dXJuICdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJKHN2Zyk7XG4gIH1cblxuICAvLyBDb21wdXRlIHNvbWUgZGltZW5zaW9ucyBtYW51YWxseSBmb3IgaU9TIDwgOCwgYmVjYXVzZSBvZiBidWdneSBzdXBwb3J0IGZvciBWSC5cbiAgLy8gQWxzbywgQW5kcm9pZCBidWlsdC1pbiBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdmlld3BvcnQgdW5pdHMuXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgdmFyIGlPU1JlZ2V4ID0gLyhpUGhvbmV8aVBhZHxpUG9kKTtbXk9TXSpPUyAoXFxkKS87XG4gICAgdmFyIGlPU01hdGNoZXMgPSB1YS5tYXRjaChpT1NSZWdleCk7XG4gICAgdmFyIGFuZHJvaWQgPSB1YS5pbmRleE9mKCdBbmRyb2lkICcpID4gLTEgJiYgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xO1xuXG4gICAgaWYgKCFhbmRyb2lkICYmICghaU9TTWF0Y2hlcyB8fCBpT1NNYXRjaGVzWzJdID4gNykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZWZyZXNoLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICB2Y
12480XIgdmggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICB2YXIgdncgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHZhciBjb250ZW50ID1cbiAgICAgICAgJy53LWxpZ2h0Ym94LWNvbnRlbnQsIC53LWxpZ2h0Ym94LXZpZXcsIC53LWxpZ2h0Ym94LXZpZXc6YmVmb3JlIHsnICtcbiAgICAgICAgJ2hlaWdodDonICtcbiAgICAgICAgdmggK1xuICAgICAgICAncHgnICtcbiAgICAgICAgJ30nICtcbiAgICAgICAgJy53LWxpZ2h0Ym94LXZpZXcgeycgK1xuICAgICAgICAnd2lkdGg6JyArXG4gICAgICAgIHZ3ICtcbiAgICAgICAgJ3B4JyArXG4gICAgICAgICd9JyArXG4gICAgICAgICcudy1saWdodGJveC1ncm91cCwgLnctbGlnaHRib3gtZ3JvdXAgLnctbGlnaHRib3gtdmlldywgLnctbGlnaHRib3gtZ3JvdXAgLnctbGlnaHRib3gtdmlldzpiZWZvcmUgeycgK1xuICAgICAgICAnaGVpZ2h0OicgK1xuICAgICAgICAwLjg2ICogdmggK1xuICAgICAgICAncHgnICtcbiAgICAgICAgJ30nICtcbiAgICAgICAgJy53LWxpZ2h0Ym94LWltYWdlIHsnICtcbiAgICAgICAgJ21heC13aWR0aDonICtcbiAgICAgICAgdncgK1xuICAgICAgICAncHg7JyArXG4gICAgICAgICdtYXgtaGVpZ2h0OicgK1xuICAgICAgICB2aCArXG4gICAgICAgICdweCcgK1xuICAgICAgICAnfScgK1xuICAgICAgICAnLnctbGlnaHRib3gtZ3JvdXAgLnctbGlnaHRib3gtaW1hZ2UgeycgK1xuICAgICAgICAnbWF4LWhlaWdodDonICtcbiAgICAgICAgMC44NiAqIHZoICtcbiAgICAgICAgJ3B4JyArXG4gICAgICAgICd9JyArXG4gICAgICAgICcudy1saWdodGJveC1zdHJpcCB7JyArXG4gICAgICAgICdwYWRkaW5nOiAwICcgK1xuICAgICAgICAwLjAxICogdmggK1xuICAgICAgICAncHgnICtcbiAgICAgICAgJ30nICtcbiAgICAgICAgJy53LWxpZ2h0Ym94LWl0ZW0geycgK1xuICAgICAgICAnd2lkdGg6JyArXG4gICAgICAgIDAuMSAqIHZoICtcbiAgICAgICAgJ3B4OycgK1xuICAgICAgICAncGFkZGluZzonICtcbiAgICAgICAgMC4wMiAqIHZoICtcbiAgICAgICAgJ3B4ICcgK1xuICAgICAgICAwLjAxICogdmggK1xuICAgICAgICAncHgnICtcbiAgICAgICAgJ30nICtcbiAgICAgICAgJy53LWxpZ2h0Ym94LXRodW1ibmFpbCB7JyArXG4gICAgICAgICdoZWlnaHQ6JyArXG4gICAgICAgIDAuMSAqIHZoICtcbiAgICAgICAgJ3B4JyArXG4gICAgICAgICd9JyArXG4gICAgICAgICdAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsnICtcbiAgICAgICAgJy53LWxpZ2h0Ym94LWNvbnRlbnQsIC53LWxpZ2h0Ym94LXZpZXcsIC53LWxpZ2h0Ym94LXZpZXc6YmVmb3JlIHsnICtcbiAgICAgICAgJ2hlaWdodDonICtcbiAgICAgICAgMC45NiAqIHZoICtcbiAgICAgICAgJ3B4JyArXG4gICAgICAgICd9JyArXG4gICAgICAgICcudy1saWdodGJveC1jb250ZW50IHsnICtcbiAgICAgICAgJ21hcmdpbi10b3A6JyArXG4gICAgICAgIDAuMDIgKiB2aCArXG4gICAgICAgICdweCcgK1xuICAgICAgICAnfScgK1xuICAgICAgICAnLnctbGlnaHRib3gtZ3JvdXAsIC53LWxpZ2h0Ym94LWdyb3VwIC53LWxpZ2h0Ym94LXZpZXcsIC53LWxpZ2h0Ym94LWdyb3VwIC53LWxpZ2h0Ym94LXZpZXc6YmVmb3JlIHsnICtcbiAgICAgICAgJ2hlaWdodDonICtcbiAgICAgICAgMC44NCAqIHZoICtcbiAgICAgICAgJ3B4JyArXG4gICAgICAgICd9JyArXG4gICAgICAgICcudy1saWdodGJveC1pbWFnZSB7JyArXG4gICAgICAgICdtYXgtd2lkdGg6JyArXG4gICAgICAgIDAuOTYgKiB2dyArXG4gICAgICAgICdweDsnICtcbiAgICAgICAgJ21heC1oZWlnaHQ6JyArXG4gICAgICAgIDAuOTYgKiB2aCArXG4gICAgICAgICdweCcgK1xuICAgICAgICAnfScgK1xuICAgICAgICAnLnctbGlnaHRib3gtZ3JvdXAgLnctbGlnaHRib3gtaW1hZ2UgeycgK1xuICAgICAgICAnbWF4LXdpZHRoOicgK1xuICAgICAgICAwLjgyMyAqIHZ3ICtcbiAgICAgICAgJ3B4OycgK1xuICAgICAgICAnbWF4LWhlaWdodDonICtcbiAgICAgICAgMC44NCAqIHZoICtcbiAgICAgICAgJ3B4JyArXG4gICAgICAgICd9JyArXG4gICAgICAgICd9JztcblxuICAgICAgc3R5bGVOb2RlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICB9XG5cbiAgICByZWZyZXNoKCk7XG4gIH0pKCk7XG5cbiAgcmV0dXJuIGxpZ2h0Ym94O1xufVxuXG5XZWJmbG93LmRlZmluZShcbiAgJ2xpZ2h0Ym94JyxcbiAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCQpIHtcbiAgICB2YXIgYXBpID0ge307XG4gICAgdmFyIGluQXBwID0gV2ViZmxvdy5lbnYoKTtcbiAgICB2YXIgbGlnaHRib3ggPSBjcmVhdGVMaWdodGJveChcbiAgICAgIHdpbmRvdyxcbiAgICAgIGRvY3VtZW50LFxuICAgICAgJCxcbiAgICAgIGluQXBwID8gJyNsaWdodGJveC1tb3VudHBvaW50JyA6ICdib2R5J1xuICAgICk7XG4gICAgdmFyICRkb2MgPSAkKGRvY3VtZW50KTtcbiAgICB2YXIgJGxpZ2h0Ym94ZXM7XG4gICAgdmFyIGRlc2lnbmVyO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctbGlnaHRib3gnO1xuICAgIHZhciBncm91cHM7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE1vZHVsZSBtZXRob2RzXG5cbiAgICBhcGkucmVhZHkgPSBhcGkuZGVzaWduID0gYXBpLnByZXZpZXcgPSBpbml0O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBkZXNpZ25lciA9IGluQXBwICYmIFdlYmZsb3cuZW52KCdkZXNpZ24nKTtcblxuICAgICAgLy8gUmVzZXQgTGlnaHRib3hcbiAgICAgIGxpZ2h0Ym94LmRlc3Ryb3koKTtcblxuICAgICAgLy8gUmVzZXQgZ3JvdXBzXG4gICAgICBncm91cHMgPSB7fTtcblxuICAgICAgLy8gRmluZCBhbGwgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gICAgICAkbGlnaHRib3hlcyA9ICRkb2MuZmluZChuYW1lc3BhY2UpO1xuXG4gICAgICAvLyBJbnN0YW50aWF0ZSBhbGwgbGlnaGJveGVzXG4gICAgICAkbGlnaHRib3hlcy53ZWJmbG93TGlnaHRCb3goKTtcblxuICAgICAgLy8gU2V0IGFjY2Vzc2liaWxpdHkgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VmdWwgcHJpb3JcbiAgICAgIC8vIHRvIGEgbGlnaHRib3ggYmVpbmcgb3BlbmVkXG4gICAgICAkbGlnaHRib3hlcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0QXJpYUxhYmVsSWZFbXB0eSgkKHRoaXMpLCAnb3BlbiBsaWdodGJveCcpO1xuXG4gICAgICAgICQo
12480dGhpcykuYXR0cignYXJpYS1oYXNwb3B1cCcsICdkaWFsb2cnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGpRdWVyeS5mbi5leHRlbmQoe1xuICAgICAgd2ViZmxvd0xpZ2h0Qm94OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkZWwgPSB0aGlzO1xuICAgICAgICAkLmVhY2goJGVsLCBmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgICAvLyBTdG9yZSBzdGF0ZSBpbiBkYXRhXG4gICAgICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gJC5kYXRhKGVsLCBuYW1lc3BhY2UsIHtcbiAgICAgICAgICAgICAgZWw6ICQoZWwpLFxuICAgICAgICAgICAgICBtb2RlOiAnaW1hZ2VzJyxcbiAgICAgICAgICAgICAgaW1hZ2VzOiBbXSxcbiAgICAgICAgICAgICAgZW1iZWQ6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmVtb3ZlIG9sZCBldmVudHNcbiAgICAgICAgICBkYXRhLmVsLm9mZihuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgLy8gU2V0IGNvbmZpZyBmcm9tIGpzb24gc2NyaXB0IHRhZ1xuICAgICAgICAgIGNvbmZpZ3VyZShkYXRhKTtcblxuICAgICAgICAgIC8vIEFkZCBldmVudHMgYmFzZWQgb24gbW9kZVxuICAgICAgICAgIGlmIChkZXNpZ25lcikge1xuICAgICAgICAgICAgZGF0YS5lbC5vbignc2V0dGluZycgKyBuYW1lc3BhY2UsIGNvbmZpZ3VyZS5iaW5kKG51bGwsIGRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YS5lbFxuICAgICAgICAgICAgICAub24oJ2NsaWNrJyArIG5hbWVzcGFjZSwgY2xpY2tIYW5kbGVyKGRhdGEpKVxuICAgICAgICAgICAgICAvLyBQcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIHRvIHRvcCB3aGVuIGNsaWNraW5nIG9uIGxpZ2h0Ym94IHRyaWdnZXJzLlxuICAgICAgICAgICAgICAub24oJ2NsaWNrJyArIG5hbWVzcGFjZSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGRhdGEpIHtcbiAgICAgIHZhciBqc29uID0gZGF0YS5lbC5jaGlsZHJlbignLnctanNvbicpLmh0bWwoKTtcbiAgICAgIHZhciBncm91cE5hbWU7XG4gICAgICB2Y
12480XIgZ3JvdXBJdGVtcztcblxuICAgICAgaWYgKCFqc29uKSB7XG4gICAgICAgIGRhdGEuaXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTWFsZm9ybWVkIGxpZ2h0Ym94IEpTT04gY29uZmlndXJhdGlvbi4nLCBlKTtcbiAgICAgIH1cblxuICAgICAgc3VwcG9ydE9sZExpZ2h0Ym94SnNvbihqc29uKTtcblxuICAgICAganNvbi5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0uJGVsID0gZGF0YS5lbDtcbiAgICAgIH0pO1xuXG4gICAgICBncm91cE5hbWUgPSBqc29uLmdyb3VwO1xuXG4gICAgICBpZiAoZ3JvdXBOYW1lKSB7XG4gICAgICAgIGdyb3VwSXRlbXMgPSBncm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgaWYgKCFncm91cEl0ZW1zKSB7XG4gICAgICAgICAgZ3JvdXBJdGVtcyA9IGdyb3Vwc1tncm91cE5hbWVdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLml0ZW1zID0gZ3JvdXBJdGVtcztcblxuICAgICAgICBpZiAoanNvbi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhLmluZGV4ID0gZ3JvdXBJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgZ3JvdXBJdGVtcy5wdXNoLmFwcGx5KGdyb3VwSXRlbXMsIGpzb24uaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLml0ZW1zID0ganNvbi5pdGVtcztcbiAgICAgICAgZGF0YS5pbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xpY2tIYW5kbGVyKGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRhdGEuaXRlbXMubGVuZ3RoICYmIGxpZ2h0Ym94KGRhdGEuaXRlbXMsIGRhdGEuaW5kZXggfHwgMCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN1cHBvcnRPbGRMaWdodGJveEpzb24oZGF0YSkge1xuICAgICAgaWYgKGRhdGEuaW1hZ2VzKSB7XG4gICAgICAgIGRhdGEuaW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpdGVtLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0YS5pdGVtcyA9IGRhdGEuaW1hZ2VzO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5lbWJlZCkge1xuICAgICAgICBkYXRhLmVtYmVkLnR5cGUgPSAndmlkZW8nO1xuICAgICAgICBkYXRhLml0ZW1zID0gW2RhdGEuZW1iZWRdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5ncm91cElkKSB7XG4gICAgICAgIGRhdGEuZ3JvdXAgPSBkYXRhLmdyb3VwSWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IG1vZHVsZVxuICAgIHJldHVybiBhcGk7XG4gIH0pXG4pO1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJyZXF1aXJlIiwiQ09ORElUSU9OX0lOVklTSUJMRV9DTEFTUyIsIkNPTkRWSVNfU0VMRUNUT1IiLCJ3aXRob3V0Q29uZGl0aW9uYWxseUhpZGRlbiIsIml0ZW1zIiwiZmlsdGVyIiwiaXRlbSIsImlzQ29uZGl0aW9uYWxseUhpZGRlbiIsIkJvb2xlYW4iLCIkZWwiLCJjbG9zZXN0IiwibGVuZ3RoIiwiZ2V0UHJldmlvdXNWaXNpYmxlSW5kZXgiLCJzdGFydCIsImkiLCJnZXROZXh0VmlzaWJsZUluZGV4Iiwic2hvdWxkU2V0QXJyb3dMZWZ0SW5hY3RpdmUiLCJjdXJyZW50SW5kZXgiLCJzaG91bGRTZXRBcnJvd1JpZ2h0SW5hY3RpdmUiLCJzZXRBcmlhTGFiZWxJZkVtcHR5IiwiJGVsZW1lbnQiLCJsYWJlbFRleHQiLCJhdHRyIiwiY3JlYXRlTGlnaHRib3giLCJ3aW5kb3ciLCJkb2N1bWVudCIsIiQiLCJjb250YWluZXIiLCJ0cmFtIiwiaXNBcnJheSIsIkFycmF5IiwibmFtZXNwYWNlIiwicHJlZml4IiwicHJlZml4UmVnZXgiLCIkcmVmcyIsInNwaW5uZXIiLCJyZXNldFZpc2liaWxpdHlTdGF0ZSIsImxpZ2h0Ym94IiwidGhpbmciLCJpbmRleCIsImJ1aWxkIiwiZW1wdHkiLCJmb3JFYWNoIiwiaWR4IiwiJHRodW1ibmFpbCIsImRvbSIsIiRpdGVtIiwicHJvcCIsImFwcGVuZCIsImFkZENsYXNzIiwiYWRkIiwibG9hZEltYWdlIiwidGh1bWJuYWlsVXJsIiwidXJsIiwiJGltYWdlIiwic3RyaXAiLCJjb250ZW50IiwicmVtb3ZlQ2xhc3MiLCJ0cmlnZ2VyIiwib3BhY2l0eSIsImh0bWwiLCJzaG93IiwiZGVzdHJveSIsImRvY3VtZW50RWxlbWVudCIsImFycm93TGVmdCIsImFycm93UmlnaHQiLCJjbG9zZSIsIlNwaW5uZXIiLCJwcmVmaXhlZCIsIm9uIiwic2VsZWN0b3IiLCJpdGVtVGFwSGFuZGxlciIsInN3aXBlSGFuZGxlciIsImhhbmRsZXJQcmV2IiwiaGFuZGxlck5leHQiLCJoYW5kbGVySGlkZSIsInByZXZlbnREZWZhdWx0Iiwia2V5SGFuZGxlciIsImZvY3VzVGhpcyIsInJlbW92ZSIsInVuZGVmaW5lZCIsImhpZGUiLCJwcmV2aW91c1Zpc2libGVJbmRleCIsIm5leHRWaXNpYmxlSW5kZXgiLCJwcmV2aW91c0luZGV4Iiwic3ZnRGF0YVVyaSIsIndpZHRoIiwiaGVpZ2h0IiwiJGZpZ3VyZSIsIiRmcmFtZSIsIiRuZXdWaWV3IiwiJGh0bWwiLCJpc0lmcmFtZSIsImlzIiwidHJhbnNpdGlvblRvTmV3VmlldyIsImNhcHRpb24iLCJ0ZXh0IiwiYmVmb3JlIiwic2hvdWxkSGlkZUxlZnRBcnJvdyIsInRvZ2dsZUNsYXNzIiwidG9nZ2xlSGlkZGVuIiwiZm9jdXMiLCJzaG91bGRIaWRlUmlnaHRBcnJvdyIsInZpZXciLCJ0aGVuIiwicmVtb3ZlciIsInNldCIsIngiLCJjc3MiLCJyZW1vdmVBdHRyIiwiJGFjdGl2ZVRodW1iIiwiZXEiLCJtYXliZVNjcm9sbCIsImNoaWxkcmVuIiwiZWFjaCIsImhhc0NsYXNzIiwicHVzaCIsIm5vZGUiLCJoaWRkZW4iLCJ0YWJJbmRleCIsImhpZGVMaWdodGJveCIsInByZXYiLCJuZXh0IiwiY3JlYXRlSGFuZGxlciIsImFjdGlvbiIsImV2ZW50IiwidGFyZ2V0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZGF0YSIsImRpcmVjdGlvbiIsImtleUNvZGUiLCJjaGVja0ZvckZvY3VzVHJpZ2dlciIsImNsaWNrIiwiY2xhc3NNYXRjaCIsImN1cnJlbnRFbGVtZW50Q2xhc3NlcyIsImNsYXNzVG9GaW5kIiwidHJpbSIsImluY2x1ZGVzIiwic2Nyb2xsTGVmdCIsInZpc2liaWxpdHlTdGF0ZSIsImNhbGxiYWNrIiwib25lIiwiaXRlbUVsZW1lbnQiLCJnZXQiLCJzdHJpcEVsZW1lbnQiLCJpdGVtTGVmdCIsIm9mZnNldExlZnQiLCJpdGVtV2lkdGgiLCJjbGllbnRXaWR0aCIsInN0cmlwU2Nyb2xsTGVmdCIsInN0cmlwV2lkdGgiLCJzdHJpc
12480FNjcm9sbExlZnRNYXgiLCJzY3JvbGxXaWR0aCIsIm5ld1Njcm9sbExlZnQiLCJNYXRoIiwibWF4IiwibWluIiwiJHNwaW5uZXIiLCJjbGFzc05hbWUiLCJkZWxheSIsInByb3RvdHlwZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHJpbmciLCJpc1NlbGVjdG9yIiwicmVwbGFjZSIsInNob3VsZEFkZCIsImlzSGlkZGVuIiwidGFnIiwiY3JlYXRlRWxlbWVudCIsInN2ZyIsImVuY29kZVVSSSIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiaU9TUmVnZXgiLCJpT1NNYXRjaGVzIiwibWF0Y2giLCJhbmRyb2lkIiwiaW5kZXhPZiIsInN0eWxlTm9kZSIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZWZyZXNoIiwidmgiLCJpbm5lckhlaWdodCIsInZ3IiwiaW5uZXJXaWR0aCIsInRleHRDb250ZW50IiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaSIsImluQXBwIiwiZW52IiwiJGRvYyIsIiRsaWdodGJveGVzIiwiZGVzaWduZXIiLCJncm91cHMiLCJyZWFkeSIsImRlc2lnbiIsInByZXZpZXciLCJpbml0IiwiZmluZCIsIndlYmZsb3dMaWdodEJveCIsImpRdWVyeSIsImZuIiwiZXh0ZW5kIiwiZWwiLCJtb2RlIiwiaW1hZ2VzIiwiZW1iZWQiLCJvZmYiLCJjb25maWd1cmUiLCJiaW5kIiwiY2xpY2tIYW5kbGVyIiwiZSIsImpzb24iLCJncm91cE5hbWUiLCJncm91cEl0ZW1zIiwiSlNPTiIsInBhcnNlIiwiY29uc29sZSIsImVycm9yIiwic3VwcG9ydE9sZExpZ2h0Ym94SnNvbiIsImdyb3VwIiwiYXBwbHkiLCJ0eXBlIiwiZ3JvdXBJZCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DLEdBRXBDOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0QixJQUFJQyw0QkFBNEI7QUFDaEMsSUFBSUMsbUJB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
12481
12482}),
12483"1655": (function (module, __unused_webpack_exports, __webpack_require__) {
12484"use strict";
12485/* globals window, document */ /**
12486 * Webflow: Navbar component
12487 */ 
12488var Webflow = __webpack_require__(3949);
12489var IXEvents = __webpack_require__(5134);
12490const KEY_CODES = {
12491    ARROW_LEFT: 37,
12492    ARROW_UP: 38,
12493    ARROW_RIGHT: 39,
12494    ARROW_DOWN: 40,
12495    ESCAPE: 27,
12496    SPACE: 32,
12497    ENTER: 13,
12498    HOME: 36,
12499    END: 35
12500};
12501Webflow.define('navbar', module.exports = function($, _) {
12502    var api = {};
12503    var tram = $.tram;
12504    var $win = $(window);
12505    var $doc = $(document);
12506    var debounce = _.debounce;
12507    var $body;
12508    var $navbars;
12509    var designer;
12510    var inEditor;
12511    var inApp = Webflow.env();
12512    var overlay = '<div class="w-nav-overlay" data-wf-ignore />';
12513    var namespace = '.w-nav';
12514    var navbarOpenedButton = 'w--open';
12515    var navbarOpenedDropdown = 'w--nav-dropdown-open';
12516    var navbarOpenedDropdownToggle = 'w--nav-dropdown-toggle-open';
12517    var navbarOpenedDropdownList = 'w--nav-dropdown-list-open';
12518    var navbarOpenedLink = 'w--nav-link-open';
12519    var ix = IXEvents.triggers;
12520    var menuSibling = $();
12521    // -----------------------------------
12522    // Module methods
12523    api.ready = api.design = api.preview = init;
12524    api.destroy = function() {
12525        menuSibling = $();
12526        removeListeners();
12527        if ($navbars && $navbars.length) {
12528            $navbars.each(teardown);
12529        }
12530    };
12531    // -----------------------------------
12532    // Private methods
12533    function init() {
12534        designer = inApp && Webflow.env('design');
12535        inEditor = Webflow.env('editor');
12536        $body = $(document.body);
12537        // Find all instances on the page
12538        $navbars = $doc.find(namespace);
12539        if (!$navbars.length) {
12540            return;
12541        }
12542        $navbars.each(build);
12543        // Wire events
12544        removeListeners();
12545        addListeners();
12546    }
12547    function removeListeners() {
12548        Webflow.resize.off(resizeAll);
12549    }
12550    function addListeners() {
12551        Webflow.resize.on(resizeAll);
12552    }
12553    function resizeAll() {
12554        $navbars.each(resize);
12555    }
12556    function build(i, el) {
12557        var $el = $(el);
12558        // Store state in data
12559        var data = $.data(el, namespace);
12560        if (!data) {
12561            data = $.data(el, namespace, {
12562                open: false,
12563                el: $el,
12564                config: {},
12565                selectedIdx: -1
12566            });
12567        }
12568        data.menu = $el.find('.w-nav-menu');
12569        data.links = data.menu.find('.w-nav-link');
12570        data.dropdowns = data.menu.find('.w-dropdown');
12571        data.dropdownToggle = data.menu.find('.w-dropdown-toggle');
12572        data.dropdownList = data.menu.find('.w-dropdown-list');
12573        data.button = $el.find('.w-nav-button');
12574        data.container = $el.find('.w-container');
12575        data.overlayContainerId = 'w-nav-overlay-' + i;
12576        data.outside = outside(data);
12577        //   If the brand links exists and is set to link to the homepage, the
12578        // default setting, then add an aria-label
12579        var navBrandLink = $el.find('.w-nav-brand');
12580        if (navBrandLink && navBrandLink.attr('href') === '/' && navBrandLink.attr('aria-label') == null) {
12581            navBrandLink.attr('aria-label', 'home');
12582        }
12583        //   VoiceOver bug, when items that disallow user selection are focused
12584        // VoiceOver gets confused and scrolls to the end of the page. ¯\_(ツ)_/¯
12585        data.button.attr('style', '-webkit-user-select: text;');
12586        // Add attributes to toggle element
12587        if (data.button.attr('aria-label') == null) {
12588            data.button.attr('aria-label', 'menu');
12589        }
12590        data.button.attr('role', 'button');
12591        data.button.attr('tabindex', '0');
12592        data.button.attr('aria-controls', data.overlayContainerId);
12593        data.button.attr('aria-haspopup', 'menu');
12594        data.button.attr('aria-expanded', 'false');
12595        // Remove old events
12596        data.el.off(namespace);
12597        data.button.off(namespace);
12598        data.menu.off(namespace);
12599        // Set config from data attributes
12600        configure(data);
12601        // Add events based on mode
12602        if (designer) {
12603            removeOverlay(data);
12604            data.el.on('setting' + namespace, handler(data));
12605        } else {
12606            addOverlay(data);
12607            data.button.on('click' + namespace, toggle(data));
12608            data.menu.on('click' + namespace, 'a', navigate(data));
12609            data.button.on('keydown' + namespace, makeToggleButtonKeyboardHandler(data));
12610            data.el.on('keydown' + namespace, makeLinksKeyboardHandler(data));
12611        }
12612        // Trigger initial resize
12613        resize(i, el);
12614    }
12615    function teardown(i, el) {
12616        var data = $.data(el, namespace);
12617        if (data) {
12618            removeOverlay(data);
12619            $.removeData(el, namespace);
12620        }
12621    }
12622    function removeOverlay(data) {
12623        if (!data.overlay) {
12624            return;
12625        }
12626        close(data, true);
12627        data.overlay.remove();
12628        data.overlay = null;
12629    }
12630    function addOverlay(data) {
12631        if (data.overlay) {
12632            return;
12633        }
12634        data.overlay = $(overlay).appendTo(data.el);
12635        data.overlay.attr('id', data.overlayContainerId);
12636        data.parent = data.menu.parent();
12637        close(data, true);
12638    }
12639    function configure(data) {
12640        var config = {};
12641        var old = data.config || {};
12642        // Set config options from data attributes
12643        var animation = config.animation = data.el.attr('data-animation') || 'default';
12644        config.animOver = /^over/.test(animation);
12645        config.animDirect = /left$/.test(animation) ? -1 : 1;
12646        // Re-open menu if the animation type changed
12647        if (old.animation !== animation) {
12648            data.open && _.defer(reopen, data);
12649        }
12650        config.easing = data.el.attr('data-easing') || 'ease';
12651        config.easing2 = data.el.attr('data-easing2') || 'ease';
12652        var duration = data.el.attr('data-duration');
12653        config.duration = duration != null ? Number(duration) : 400;
12654        config.docHeight = data.el.attr('data-doc-height');
12655        // Store config in data
12656        data.config = config;
12657    }
12658    function handler(data) {
12659        return function(evt, options) {
12660            options = options || {};
12661            var winWidth = $win.width();
12662            configure(data);
12663            options.open === true && open(data, true);
12664            options.open === false && close(data, true);
12665            // Reopen if media query changed after setting
12666            data.open && _.defer(function() {
12667                if (winWidth !== $win.width()) {
12668                    reopen(data);
12669                }
12670            });
12671        };
12672    }
12673    function makeToggleButtonKeyboardHandler(data) {
12674        return function(evt) {
12675            switch(evt.keyCode){
12676                case KEY_CODES.SPACE:
12677                case KEY_CODES.ENTER:
12678                    {
12679                        // Toggle returns a function
12680                        toggle(data)();
12681                        evt.preventDefault();
12682                        return evt.stopPropagation();
12683                    }
12684                case KEY_CODES.ESCAPE:
12685                    {
12686                        close(data);
12687                        evt.preventDefault();
12688                        return evt.stopPropagation();
12689                    }
12690                case KEY_CODES.ARROW_RIGHT:
12691                case KEY_CODES.ARROW_DOWN:
12692                case KEY_CODES.HOME:
12693                case KEY_CODES.END:
12694                    {
12695                        if (!data.open) {
12696                            evt.preventDefault();
12697                            return evt.stopPropagation();
12698                        }
12699                        if (evt.keyCode === KEY_CODES.END) {
12700                            data.selectedIdx = data.links.length - 1;
12701                        } else {
12702                            data.selectedIdx = 0;
12703                        }
12704                        focusSelectedLink(data);
12705                        evt.preventDefault();
12706                        return evt.stopPropagation();
12707                    }
12708            }
12709        };
12710    }
12711    function makeLinksKeyboardHandler(data) {
12712        return function(evt) {
12713            if (!data.open) {
12714                return;
12715            }
12716            // Realign selectedIdx with the menu item that is currently in focus.
12717            // We need this because we do not track the `Tab` key activity!
12718            data.selectedIdx = data.links.index(document.activeElement);
12719            switch(evt.keyCode){
12720                case KEY_CODES.HOME:
12721                case KEY_CODES.END:
12722                    {
12723                        if (evt.keyCode === KEY_CODES.END) {
12724                            data.selectedIdx = data.links.length - 1;
12725                        } else {
12726                            data.selectedIdx = 0;
12727                        }
12728                        focusSelectedLink(data);
12729                        evt.preventDefault();
12730                        return evt.stopPropagation();
12731                    }
12732                case KEY_CODES.ESCAPE:
12733                    {
12734                        close(data);
12735                        // Focus toggle button
12736                        data.button.focus();
12737                        evt.preventDefault();
12738                        return evt.stopPropagation();
12739                    }
12740                case KEY_CODES.ARROW_LEFT:
12741                case KEY_CODES.ARROW_UP:
12742                    {
12743                        data.selectedIdx = Math.max(-1, data.selectedIdx 
12743- 1);
12744                        focusSelectedLink(data);
12745                        evt.preventDefault();
12746                        return evt.stopPropagation();
12747                    }
12748                case KEY_CODES.ARROW_RIGHT:
12749                case KEY_CODES.ARROW_DOWN:
12750                    {
12751                        data.selectedIdx = Math.min(data.links.length - 1, data.selectedIdx + 1);
12752                        focusSelectedLink(data);
12753                        evt.preventDefault();
12754                        return evt.stopPropagation();
12755                    }
12756            }
12757        };
12758    }
12759    function focusSelectedLink(data) {
12760        if (data.links[data.selectedIdx]) {
12761            var selectedElement = data.links[data.selectedIdx];
12762            selectedElement.focus();
12763            navigate(selectedElement);
12764        }
12765    }
12766    function reopen(data) {
12767        if (!data.open) {
12768            return;
12769        }
12770        close(data, true);
12771        open(data, true);
12772    }
12773    function toggle(data) {
12774        // Debounce toggle to wait for accurate open state
12775        return debounce(function() {
12776            data.open ? close(data) : open(data);
12777        });
12778    }
12779    function navigate(data) {
12780        return function(evt) {
12781            var link = $(this);
12782            var href = link.attr('href');
12783            // Avoid late clicks on touch devices
12784            if (!Webflow.validClick(evt.currentTarget)) {
12785                evt.preventDefault();
12786                return;
12787            }
12788            // Close when navigating to an in-page anchor
12789            if (href && href.indexOf('#') === 0 && data.open) {
12790                close(data);
12791            }
12792        };
12793    }
12794    function outside(data) {
12795        // Unbind previous click handler if it exists
12796        if (data.outside) {
12797            $doc.off('click' + namespace, data.outside);
12798        }
12799        return function(evt) {
12800            var $target = $(evt.target);
12801            // Ignore clicks on Editor overlay UI
12802            if (inEditor && $target.closest('.w-editor-bem-EditorOverlay').length) {
12803                return;
12804            }
12805            // Close menu when clicked outside, debounced to wait for state
12806            outsideDebounced(data, $target);
12807        };
12808    }
12809    var outsideDebounced = debounce(function(data, $target) {
12810        if (!data.open) {
12811            return;
12812        }
12813        var menu = $target.closest('.w-nav-menu');
12814        if (!data.menu.is(menu)) {
12815            close(data);
12816        }
12817    });
12818    function resize(i, el) {
12819        var data = $.data(el, namespace);
12820        // Check for collapsed state based on button display
12821        var collapsed = data.collapsed = data.button.css('display') !== 'none';
12822        // Close menu if button is no longer visible (and not in designer)
12823        if (data.open && !collapsed && !designer) {
12824            close(data, true);
12825        }
12826        // Set max-width of links + dropdowns to match container
12827        if (data.container.length) {
12828            var updateEachMax = updateMax(data);
12829            data.links.each(updateEachMax);
12830            data.dropdowns.each(updateEachMax);
12831        }
12832        // If currently open, update height to match body
12833        if (data.open) {
12834            setOverlayHeight(data);
12835        }
12836    }
12837    var maxWidth = 'max-width';
12838    function updateMax(data) {
12839        // Set max-width of each element to match container
12840        var containMax = data.container.css(maxWidth);
12841        if (containMax === 'none') {
12842            containMax = '';
12843        }
12844        return function(i, link) {
12845            link = $(link);
12846            link.css(maxWidth, '');
12847            // Don't set the max-width if an upstream value exists
12848            if (link.css(maxWidth) === 'none') {
12849                link.css(maxWidth, containMax);
12850            }
12851        };
12852    }
12853    function addMenuOpen(i, el) {
12854        el.setAttribute('data-nav-menu-open', '');
12855    }
12856    function removeMenuOpen(i, el) {
12857        el.removeAttribute('data-nav-menu-open');
12858    }
12859    function open(data, immediate) {
12860        if (data.open) {
12861            return;
12862        }
12863        data.open = true;
12864        data.menu.each(addMenuOpen);
12865        data.links.addClass(navbarOpenedLink);
12866        data.dropdowns.addClass(navbarOpenedDropdown);
12867        data.dropdownToggle.addClass(navbarOpenedDropdownToggle);
12868        data.dropdownList.addClass(navbarOpenedDropdownList);
12869        data.button.addClass(navbarOpenedButton);
12870        var config = data.config;
12871        var animation = config.animation;
12872        if (animation === 'none' || !tram.support.transform || config.duration <= 0) {
12873            immediate = true;
12874        }
12875        var bodyHeight = setOverlayHeight(data);
12876        var menuHeight = data.menu.outerHeight(true);
12877        var menuWidth = data.menu.outerWidth(true);
12878        var navHeight = data.el.height();
12879        var navbarEl = data.el[0];
12880        resize(0, navbarEl);
12881        ix.intro(0, navbarEl);
12882        Webflow.redraw.up();
12883        // Listen for click outside events
12884        if (!designer) {
12885            $doc.on('click' + namespace, data.outside);
12886        }
12887        // No transition for immediate
12888        if (immediate) {
12889            complete();
12890            return;
12891        }
12892        var transConfig = 'transform ' + config.duration + 'ms ' + config.easing;
12893        // Add menu to overlay
12894        if (data.overlay) {
12895            menuSibling = data.menu.prev();
12896            data.overlay.show().append(data.menu);
12897        }
12898        // Over left/right
12899        if (config.animOver) {
12900            tram(data.menu).add(transConfig).set({
12901                x: config.animDirect * menuWidth,
12902                height: bodyHeight
12903            }).start({
12904                x: 0
12905            }).then(complete);
12906            data.overlay && data.overlay.width(menuWidth);
12907            return;
12908        }
12909        // Drop Down
12910        var offsetY = navHeight + menuHeight;
12911        tram(data.menu).add(transConfig).set({
12912            y: -offsetY
12913        }).start({
12914            y: 0
12915        }).then(complete);
12916        function complete() {
12917            data.button.attr('aria-expanded', 'true');
12918        }
12919    }
12920    function setOverlayHeight(data) {
12921        var config = data.config;
12922        var bodyHeight = config.docHeight ? $doc.height() : $body.height();
12923        if (config.animOver) {
12924            data.menu.height(bodyHeight);
12925        } else if (data.el.css('position') !== 'fixed') {
12926            bodyHeight -= data.el.outerHeight(true);
12927        }
12928        data.overlay && data.overlay.height(bodyHeight);
12929        return bodyHeight;
12930    }
12931    function close(data, immediate) {
12932        if (!data.open) {
12933            return;
12934        }
12935        data.open = false;
12936        data.button.removeClass(navbarOpenedButton);
12937        var config = data.config;
12938        if (config.animation === 'none' || !tram.support.transform || config.duration <= 0) {
12939            immediate = true;
12940        }
12941        ix.outro(0, data.el[0]);
12942        // Stop listening for click outside events
12943        $doc.off('click' + namespace, data.outside);
12944        if (immediate) {
12945            tram(data.menu).stop();
12946            complete();
12947            return;
12948        }
12949        var transConfig = 'transform ' + config.duration + 'ms ' + config.easing2;
12950        var menuHeight = data.menu.outerHeight(true);
12951        var menuWidth = data.menu.outerWidth(true);
12952        var navHeight = data.el.height();
12953        // Over left/right
12954        if (config.animOver) {
12955            tram(data.menu).add(transConfig).start({
12956                x: menuWidth * config.animDirect
12957            }).then(complete);
12958            return;
12959        }
12960        // Drop Down
12961        var offsetY = navHeight + menuHeight;
12962        tram(data.menu).add(transConfig).start({
12963            y: -offsetY
12964        }).then(complete);
12965        function complete() {
12966            data.menu.height('');
12967            tram(data.menu).set({
12968                x: 0,
12969                y: 0
12970            });
12971            data.menu.each(removeMenuOpen);
12972            data.links.removeClass(navbarOpenedLink);
12973            data.dropdowns.removeClass(navbarOpenedDropdown);
12974            data.dropdownToggle.removeClass(navbarOpenedDropdownToggle);
12975            data.dropdownList.removeClass(navbarOpenedDropdownList);
12976            if (data.overlay && data.overlay.children().length) {
12977                // Move menu back to parent at the original location
12978                menuSibling.length ? data.menu.insertAfter(menuSibling) : data.menu.prependTo(data.parent);
12979                data.overlay.attr('style', '').hide();
12980            }
12981            // Trigger event so other components can hook in (dropdown)
12982            data.el.triggerHandler('w-close');
12983            data.button.attr('aria-expanded', 'false');
12984        }
12985    }
12986    // Export module
12987    return api;
12988});
12989
12990//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbmF2YmFyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IE5hdmJhciBjb21wb25lbnRcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4uL0Jhc2VTaXRlTW9kdWxlcy93ZWJmbG93LWxpYicpO1xudmFyIElYRXZlbnRzID0gcmVxdWlyZSgnLi4vQmFzZVNpdGVNb2R1bGVzL3dlYmZsb3ctaXgyLWV2ZW50cycpO1xuXG5jb25zdCBLRVlfQ09ERVMgPSB7XG4gIEFSUk9XX0xFRlQ6IDM3LFxuICBBUlJPV19VUDogMzgsXG4gIEFSUk9XX1JJR0hUOiAzOSxcbiAgQVJST1dfRE9XTjogNDAsXG4gIEVTQ0FQRTogMjcsXG4gIFNQQUNFOiAzMixcbiAgRU5URVI6IDEzLFxuICBIT01FOiAzNixcbiAgRU5EOiAzNSxcbn07XG5cbldlYmZsb3cuZGVmaW5lKFxuICAnbmF2YmFyJyxcbiAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCQsIF8pIHtcbiAgICB2YXIgYXBpID0ge307XG4gICAgdmFyIHRyYW0gPSAkLnRyYW07XG4gICAgdmFyICR3aW4gPSAkKHdpbmRvdyk7XG4gICAgdmFyICRkb2MgPSAkKGRvY3VtZW50KTtcbiAgICB2YXIgZGVib3VuY2UgPSBfLmRlYm91bmNlO1xuICAgIHZhciAkYm9keTtcbiAgICB2YXIgJG5hdmJhcnM7XG4gICAgdmFyIGRlc2lnbmVyO1xuICAgIHZhciBpbkVkaXRvcjtcbiAgICB2YXIgaW5BcHAgPSBXZWJmbG93LmVudigpO1xuICAgIHZhciBvdmVybGF5ID0gJzxkaXYgY2xhc3M9XCJ3LW5hdi1vdmVybGF5XCIgZGF0YS13Zi1pZ25vcmUgLz4nO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctbmF2JztcbiAgICB2YXIgbmF2YmFyT3BlbmVkQnV0dG9uID0gJ3ctLW9wZW4nO1xuICAgIHZhciBuYXZiYXJPcGVuZWREcm9wZG93biA9ICd3LS1uYXYtZHJvcGRvd24tb3Blbic7XG4gICAgdmFyIG5hdmJhck9wZW5lZERyb3Bkb3duVG9nZ2xlID0gJ3ctLW5hdi1kcm9wZG93bi10b2dnbGUtb3Blbic7XG4gICAgdmFyIG5hdmJhck9wZW5lZERyb3Bkb3duTGlzdCA9ICd3LS1uYXYtZHJvcGRvd24tbGlzdC1vcGVuJztcbiAgICB2YXIgbmF2YmFyT3BlbmVkTGluayA9ICd3LS1uYXYtbGluay1vcGVuJztcbiAgICB2YXIgaXggPSBJWEV2ZW50cy50cmlnZ2VycztcbiAgICB2YXIgbWVudVNpYmxpbmcgPSAkKCk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE1vZHVsZSBtZXRob2RzXG5cbiAgICBhcGkucmVhZHkgPSBhcGkuZGVzaWduID0gYXBpLnByZXZpZXcgPSBpbml0O1xuXG4gICAgYXBpLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZW51U2libGluZyA9ICQoKTtcbiAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgaWYgKCRuYXZiYXJzICYmICRuYXZiYXJzLmxlbmd0aCkge1xuICAgICAgICAkbmF2YmFycy5lYWNoKHRlYXJkb3duKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBkZXNpZ25lciA9IGluQXBwICYmIFdlYmZsb3cuZW52KCdkZXNpZ24nKTtcbiAgICAgIGluRWRpdG9yID0gV2ViZmxvdy5lbnYoJ2VkaXRvcicpO1xuICAgICAgJGJvZHkgPSAkKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgICAvLyBGaW5kIGFsbCBpbnN0YW5jZXMgb24gdGhlIHBhZ2VcbiAgICAgICRuYXZiYXJzID0gJGRvYy5maW5kKG5hbWVzcGFjZSk7XG4gICAgICBpZiAoISRuYXZiYXJzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAkbmF2YmFycy5lYWNoKGJ1aWxkKTtcblxuICAgICAgLy8gV2lyZSBldmVudHNcbiAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgYWRkTGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgICAgV2ViZmxvdy5yZXNpemUub2ZmKHJlc2l6ZUFsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTGlzdGVuZXJzKCkge1xuICAgICAgV2ViZmxvdy5yZXNpemUub24ocmVzaXplQWxsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNpemVBbGwoKSB7XG4gICAgICAkbmF2YmFycy5lYWNoKHJlc2l6ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGQoaSwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcblxuICAgICAgLy8gU3RvcmUgc3RhdGUgaW4gZGF0YVxuICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlLCB7XG4gICAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgICAgZWw6ICRlbCxcbiAgICAgICAgICBjb25maWc6IHt9LFxuICAgICAgICAgI
12990HNlbGVjdGVkSWR4OiAtMSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkYXRhLm1lbnUgPSAkZWwuZmluZCgnLnctbmF2LW1lbnUnKTtcbiAgICAgIGRhdGEubGlua3MgPSBkYXRhLm1lbnUuZmluZCgnLnctbmF2LWxpbmsnKTtcbiAgICAgIGRhdGEuZHJvcGRvd25zID0gZGF0YS5tZW51LmZpbmQoJy53LWRyb3Bkb3duJyk7XG4gICAgICBkYXRhLmRyb3Bkb3duVG9nZ2xlID0gZGF0YS5tZW51LmZpbmQoJy53LWRyb3Bkb3duLXRvZ2dsZScpO1xuICAgICAgZGF0YS5kcm9wZG93bkxpc3QgPSBkYXRhLm1lbnUuZmluZCgnLnctZHJvcGRvd24tbGlzdCcpO1xuICAgICAgZGF0YS5idXR0b24gPSAkZWwuZmluZCgnLnctbmF2LWJ1dHRvbicpO1xuICAgICAgZGF0YS5jb250YWluZXIgPSAkZWwuZmluZCgnLnctY29udGFpbmVyJyk7XG4gICAgICBkYXRhLm92ZXJsYXlDb250YWluZXJJZCA9ICd3LW5hdi1vdmVybGF5LScgKyBpO1xuICAgICAgZGF0YS5vdXRzaWRlID0gb3V0c2lkZShkYXRhKTtcblxuICAgICAgLy8gICBJZiB0aGUgYnJhbmQgbGlua3MgZXhpc3RzIGFuZCBpcyBzZXQgdG8gbGluayB0byB0aGUgaG9tZXBhZ2UsIHRoZVxuICAgICAgLy8gZGVmYXVsdCBzZXR0aW5nLCB0aGVuIGFkZCBhbiBhcmlhLWxhYmVsXG4gICAgICB2YXIgbmF2QnJhbmRMaW5rID0gJGVsLmZpbmQoJy53LW5hdi1icmFuZCcpO1xuICAgICAgaWYgKFxuICAgICAgICBuYXZCcmFuZExpbmsgJiZcbiAgICAgICAgbmF2QnJhbmRMaW5rLmF0dHIoJ2hyZWYnKSA9PT0gJy8nICYmXG4gICAgICAgIG5hdkJyYW5kTGluay5hdHRyKCdhcmlhLWxhYmVsJykgPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIG5hdkJyYW5kTGluay5hdHRyKCdhcmlhLWxhYmVsJywgJ2hvbWUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gICBWb2ljZU92ZXIgYnVnLCB3aGVuIGl0ZW1zIHRoYXQgZGlzYWxsb3cgdXNlciBzZWxlY3Rpb24gYXJlIGZvY3VzZWRcbiAgICAgIC8vIFZvaWNlT3ZlciBnZXRzIGNvbmZ1c2VkIGFuZCBzY3JvbGxzIHRvIHRoZSBlbmQgb2YgdGhlIHBhZ2UuIMKvXFxfKOODhClfL8KvXG4gICAgICBkYXRhLmJ1dHRvbi5hdHRyKCdzdHlsZScsICctd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OycpO1xuXG4gICAgICAvLyBBZGQgYXR0cmlidXRlcyB0byB0b2dnbGUgZWxlbWVudFxuICAgICAgaWYgKGRhdGEuYnV0dG9uLmF0dHIoJ2FyaWEtbGFiZWwnKSA9PSBudWxsKSB7XG4gICAgICAgIGRhdGEuYnV0dG9uLmF0dHIoJ2FyaWEtbGFiZWwnLCAnbWVudScpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmJ1dHRvbi5hdHRyKCdyb2xlJywgJ2J1dHRvbicpO1xuICAgICAgZGF0YS5idXR0b24uYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgZGF0YS5idXR0b24uYXR0cignYXJpYS1jb250cm9scycsIGRhdGEub3ZlcmxheUNvbnRhaW5lcklkKTtcbiAgICAgIGRhdGEuYnV0dG9uLmF0dHIoJ2FyaWEtaGFzcG9wdXAnLCAnbWVudScpO1xuICAgICAgZGF0YS5idXR0b24uYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgICAvLyBSZW1vdmUgb2xkIGV2ZW50c1xuICAgICAgZGF0YS5lbC5vZmYobmFtZXNwYWNlKTtcbiAgICAgIGRhdGEuYnV0dG9uLm9mZihuYW1lc3BhY2UpO1xuICAgICAgZGF0YS5tZW51Lm9mZihuYW1lc3BhY2UpO1xuXG4gICAgICAvLyBTZXQgY29uZmlnIGZyb20gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICBjb25maWd1cmUoZGF0YSk7XG5cbiAgICAgIC8vIEFkZCBldmVudHMgYmFzZWQgb24gbW9kZVxuICAgICAgaWYgKGRlc2lnbmVyKSB7XG4gICAgICAgIHJlbW92ZU92ZXJsYXkoZGF0YSk7XG4gICAgICAgIGRhdGEuZWwub24oJ3NldHRpbmcnICsgbmFtZXNwYWNlLCBoYW5kbGVyKGRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZE92ZXJsYXkoZGF0YSk7XG5cbiAgICAgICAgZGF0YS5idXR0b24ub24oJ2NsaWNrJyArIG5hbWVzcGFjZSwgdG9nZ2xlKGRhdGEpKTtcbiAgICAgICAgZGF0YS5tZW51Lm9uKCdjbGljaycgKyBuYW1lc3BhY2UsICdhJywgbmF2aWdhdGUoZGF0YSkpO1xuXG4gICAgICAgIGRhdGEuYnV0dG9uLm9uKFxuICAgICAgICAgICdrZXlkb3duJyArIG5hbWVzcGFjZSxcbiAgICAgICAgICBtYWtlVG9nZ2xlQnV0dG9uS2V5Ym9hcmRIYW5kbGVyKGRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIGRhdGEuZWwub24oJ2tleWRvd24nICsgbmFtZXNwYWNlLCBtYWtlTGlua3NLZXlib2FyZEhhbmRsZXIoZGF0YSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplXG4gICAgICByZXNpemUoaSwgZWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRlYXJkb3duKGksIGVsKSB7XG4gICAgICB2Y
12990XIgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHJlbW92ZU92ZXJsYXkoZGF0YSk7XG4gICAgICAgICQucmVtb3ZlRGF0YShlbCwgbmFtZXNwYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVPdmVybGF5KGRhdGEpIHtcbiAgICAgIGlmICghZGF0YS5vdmVybGF5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlKGRhdGEsIHRydWUpO1xuICAgICAgZGF0YS5vdmVybGF5LnJlbW92ZSgpO1xuICAgICAgZGF0YS5vdmVybGF5ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRPdmVybGF5KGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm92ZXJsYXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5vdmVybGF5ID0gJChvdmVybGF5KS5hcHBlbmRUbyhkYXRhLmVsKTtcbiAgICAgIGRhdGEub3ZlcmxheS5hdHRyKCdpZCcsIGRhdGEub3ZlcmxheUNvbnRhaW5lcklkKTtcbiAgICAgIGRhdGEucGFyZW50ID0gZGF0YS5tZW51LnBhcmVudCgpO1xuICAgICAgY2xvc2UoZGF0YSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGRhdGEpIHtcbiAgICAgIHZhciBjb25maWcgPSB7fTtcbiAgICAgIHZhciBvbGQgPSBkYXRhLmNvbmZpZyB8fCB7fTtcblxuICAgICAgLy8gU2V0IGNvbmZpZyBvcHRpb25zIGZyb20gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICB2YXIgYW5pbWF0aW9uID0gKGNvbmZpZy5hbmltYXRpb24gPVxuICAgICAgICBkYXRhLmVsLmF0dHIoJ2RhdGEtYW5pbWF0aW9uJykgfHwgJ2RlZmF1bHQnKTtcbiAgICAgIGNvbmZpZy5hbmltT3ZlciA9IC9eb3Zlci8udGVzdChhbmltYXRpb24pO1xuICAgICAgY29uZmlnLmFuaW1EaXJlY3QgPSAvbGVmdCQvLnRlc3QoYW5pbWF0aW9uKSA/IC0xIDogMTtcblxuICAgICAgLy8gUmUtb3BlbiBtZW51IGlmIHRoZSBhbmltYXRpb24gdHlwZSBjaGFuZ2VkXG4gICAgICBpZiAob2xkLmFuaW1hdGlvbiAhPT0gYW5pbWF0aW9uKSB7XG4gICAgICAgIGRhdGEub3BlbiAmJiBfLmRlZmVyKHJlb3BlbiwgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGNvbmZpZy5lYXNpbmcgPSBkYXRhLmVsLmF0dHIoJ2RhdGEtZWFzaW5nJykgfHwgJ2Vhc2UnO1xuICAgICAgY29uZmlnLmVhc2luZzIgPSBkYXRhLmVsLmF0dHIoJ2RhdGEtZWFzaW5nMicpIHx8ICdlYXNlJztcblxuICAgICAgdmFyIGR1cmF0aW9uID0gZGF0YS5lbC5hdHRyKCdkYXRhLWR1cmF0aW9uJyk7XG4gICAgICBjb25maWcuZHVyYXRpb24gPSBkdXJhdGlvbiAhPSBudWxsID8gTnVtYmVyKGR1cmF0aW9uKSA6IDQwMDtcblxuICAgICAgY29uZmlnLmRvY0hlaWdodCA9IGRhdGEuZWwuYXR0cignZGF0YS1kb2MtaGVpZ2h0Jyk7XG5cbiAgICAgIC8vIFN0b3JlIGNvbmZpZyBpbiBkYXRhXG4gICAgICBkYXRhLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVyKGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0LCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB2Y
12990XIgd2luV2lkdGggPSAkd2luLndpZHRoKCk7XG4gICAgICAgIGNvbmZpZ3VyZShkYXRhKTtcbiAgICAgICAgb3B0aW9ucy5vcGVuID09PSB0cnVlICYmIG9wZW4oZGF0YSwgdHJ1ZSk7XG4gICAgICAgIG9wdGlvbnMub3BlbiA9PT0gZmFsc2UgJiYgY2xvc2UoZGF0YSwgdHJ1ZSk7XG4gICAgICAgIC8vIFJlb3BlbiBpZiBtZWRpYSBxdWVyeSBjaGFuZ2VkIGFmdGVyIHNldHRpbmdcbiAgICAgICAgZGF0YS5vcGVuICYmXG4gICAgICAgICAgXy5kZWZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAod2luV2lkdGggIT09ICR3aW4ud2lkdGgoKSkge1xuICAgICAgICAgICAgICByZW9wZW4oZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VUb2dnbGVCdXR0b25LZXlib2FyZEhhbmRsZXIoZGF0YSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLlNQQUNFOlxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkVOVEVSOiB7XG4gICAgICAgICAgICAvLyBUb2dnbGUgcmV0dXJucyBhIGZ1bmN0aW9uXG4gICAgICAgICAgICB0b2dnbGUoZGF0YSkoKTtcblxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkVTQ0FQRToge1xuICAgICAgICAgICAgY2xvc2UoZGF0YSk7XG5cbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19SSUdIVDpcbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19ET1dOOlxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkhPTUU6XG4gICAgICAgICAgY2FzZSBLRVlfQ09ERVMuRU5EOiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEub3Blbikge1xuICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV2dC5rZXlDb2RlID09PSBLRVlfQ09ERVMuRU5EKSB7XG4gICAgICAgICAgICAgIGRhdGEuc2VsZWN0ZWRJZHggPSBkYXRhLmxpbmtzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkYXRhLnNlbGVjdGVkSWR4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvY3VzU2VsZWN0ZWRMaW5rKGRhdGEpO1xuXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VMaW5rc0tleWJvYXJkSGFuZGxlcihkYXRhKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBpZiAoIWRhdGEub3Blbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYWxpZ24gc2VsZWN0ZWRJZHggd2l0aCB0aGUgbWVudSBpdGVtIHRoYXQgaXMgY3VycmVudGx5IGluIGZvY3VzLlxuICAgICAgICAvLyBXZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBkbyBub3QgdHJhY2sgdGhlIGBUYWJgIGtleSBhY3Rpdml0eSFcbiAgICAgICAgZGF0YS5zZWxlY3RlZElkeCA9IGRhdGEubGlua3MuaW5kZXgoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkhPTUU6XG4gICAgICAgICAgY2FzZSBLRVlfQ09ERVMuRU5EOiB7XG4gICAgICAgICAgICBpZiAoZXZ0LmtleUNvZGUgPT09IEtFWV9DT0RFUy5FTkQpIHtcbiAgICAgICAgICAgICAgZGF0YS5zZWxlY3RlZElkeCA9IGRhdGEubGlua3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRhdGEuc2VsZWN0ZWRJZHggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9jdXNTZWxlY3RlZExpbmsoZGF0YSk7XG5cbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5FU0NBUEU6IHtcbiAgICAgICAgICAgIGNsb3NlKGRhdGEpO1xuXG4gICAgICAgICAgICAvLyBGb2N1cyB0b2dnbGUgYnV0dG9uXG4gICAgICAgICAgICBkYXRhLmJ1dHRvbi5mb2N1cygpO1xuXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBLRVlfQ09ERVMuQVJST1dfTEVGVDpcbiAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5BUlJPV19VUDoge1xuICAgICAgICAgICAgZGF0YS5zZWxlY3RlZElkeCA9IE1hdGgubWF4KC0xLCBkYXRhLnNlbGVjdGVkSWR4IC0gMSk7XG4gICAgICAgICAgICBmb2N1c1NlbGVjdGVkTGluayhkYXRhKTtcblxuICAgICAgICAgICAgZXZ0LnByZXZlbn
12990REZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkFSUk9XX1JJR0hUOlxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkFSUk9XX0RPV046IHtcbiAgICAgICAgICAgIGRhdGEuc2VsZWN0ZWRJZHggPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgZGF0YS5saW5rcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICBkYXRhLnNlbGVjdGVkSWR4ICsgMVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9jdXNTZWxlY3RlZExpbmsoZGF0YSk7XG5cbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9jdXNTZWxlY3RlZExpbmsoZGF0YSkge1xuICAgICAgaWYgKGRhdGEubGlua3NbZGF0YS5zZWxlY3RlZElkeF0pIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudCA9IGRhdGEubGlua3NbZGF0YS5zZWxlY3RlZElkeF07XG5cbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIG5hdmlnYXRlKHNlbGVjdGVkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVvcGVuKGRhdGEpIHtcbiAgICAgIGlmICghZGF0YS5vcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlKGRhdGEsIHRydWUpO1xuICAgICAgb3BlbihkYXRhLCB0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2dnbGUoZGF0YSkge1xuICAgICAgLy8gRGVib3VuY2UgdG9nZ2xlIHRvIHdhaXQgZm9yIGFjY3VyYXRlIG9wZW4gc3RhdGVcbiAgICAgIHJldHVybiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRhdGEub3BlbiA/IGNsb3NlKGRhdGEpIDogb3BlbihkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5hdmlnYXRlKGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgIHZhciBsaW5rID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGhyZWYgPSBsaW5rLmF0dHIoJ2hyZWYnKTtcblxuICAgICAgICAvLyBBdm9pZCBsYXRlIGNsaWNrcyBvbiB0b3VjaCBkZXZpY2VzXG4gICAgICAgIGlmICghV2ViZmxvdy52YWxpZENsaWNrKGV2dC5jdXJyZW50VGFyZ2V0KSkge1xuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsb3NlIHdoZW4gbmF2aWdhdGluZyB0byBhbiBpbi1wYWdlIGFuY2hvclxuICAgICAgICBpZiAoaHJlZiAmJi
12990BocmVmLmluZGV4T2YoJyMnKSA9PT0gMCAmJiBkYXRhLm9wZW4pIHtcbiAgICAgICAgICBjbG9zZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvdXRzaWRlKGRhdGEpIHtcbiAgICAgIC8vIFVuYmluZCBwcmV2aW91cyBjbGljayBoYW5kbGVyIGlmIGl0IGV4aXN0c1xuICAgICAgaWYgKGRhdGEub3V0c2lkZSkge1xuICAgICAgICAkZG9jLm9mZignY2xpY2snICsgbmFtZXNwYWNlLCBkYXRhLm91dHNpZGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICB2YXIgJHRhcmdldCA9ICQoZXZ0LnRhcmdldCk7XG4gICAgICAgIC8vIElnbm9yZSBjbGlja3Mgb24gRWRpdG9yIG92ZXJsYXkgVUlcbiAgICAgICAgaWYgKGluRWRpdG9yICYmICR0YXJnZXQuY2xvc2VzdCgnLnctZWRpdG9yLWJlbS1FZGl0b3JPdmVybGF5JykubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsb3NlIG1lbnUgd2hlbiBjbGlja2VkIG91dHNpZGUsIGRlYm91bmNlZCB0byB3YWl0IGZvciBzdGF0ZVxuICAgICAgICBvdXRzaWRlRGVib3VuY2VkKGRhdGEsICR0YXJnZXQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIG91dHNpZGVEZWJvdW5jZWQgPSBkZWJvdW5jZShmdW5jdGlvbiAoZGF0YSwgJHRhcmdldCkge1xuICAgICAgaWYgKCFkYXRhLm9wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG1lbnUgPSAkdGFyZ2V0LmNsb3Nlc3QoJy53LW5hdi1tZW51Jyk7XG4gICAgICBpZiAoIWRhdGEubWVudS5pcyhtZW51KSkge1xuICAgICAgICBjbG9zZShkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlc2l6ZShpLCBlbCkge1xuICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICAvLyBDaGVjayBmb3IgY29sbGFwc2VkIHN0YXRlIGJhc2VkIG9uIGJ1dHRvbiBkaXNwbGF5XG4gICAgICB2Y
12990XIgY29sbGFwc2VkID0gKGRhdGEuY29sbGFwc2VkID0gZGF0YS5idXR0b24uY3NzKCdkaXNwbGF5JykgIT09ICdub25lJyk7XG4gICAgICAvLyBDbG9zZSBtZW51IGlmIGJ1dHRvbiBpcyBubyBsb25nZXIgdmlzaWJsZSAoYW5kIG5vdCBpbiBkZXNpZ25lcilcbiAgICAgIGlmIChkYXRhLm9wZW4gJiYgIWNvbGxhcHNlZCAmJiAhZGVzaWduZXIpIHtcbiAgICAgICAgY2xvc2UoZGF0YSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyBTZXQgbWF4LXdpZHRoIG9mIGxpbmtzICsgZHJvcGRvd25zIHRvIG1hdGNoIGNvbnRhaW5lclxuICAgICAgaWYgKGRhdGEuY29udGFpbmVyLmxlbmd0aCkge1xuICAgICAgICB2YXIgdXBkYXRlRWFjaE1heCA9IHVwZGF0ZU1heChkYXRhKTtcbiAgICAgICAgZGF0YS5saW5rcy5lYWNoKHVwZGF0ZUVhY2hNYXgpO1xuICAgICAgICBkYXRhLmRyb3Bkb3ducy5lYWNoKHVwZGF0ZUVhY2hNYXgpO1xuICAgICAgfVxuICAgICAgLy8gSWYgY3VycmVudGx5IG9wZW4sIHVwZGF0ZSBoZWlnaHQgdG8gbWF0Y2ggYm9keVxuICAgICAgaWYgKGRhdGEub3Blbikge1xuICAgICAgICBzZXRPdmVybGF5SGVpZ2h0KGRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtYXhXaWR0aCA9ICdtYXgtd2lkdGgnO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZU1heChkYXRhKSB7XG4gICAgICAvLyBTZXQgbWF4LXdpZHRoIG9mIGVhY2ggZWxlbWVudCB0byBtYXRjaCBjb250YWluZXJcbiAgICAgIHZhciBjb250YWluTWF4ID0gZGF0YS5jb250YWluZXIuY3NzKG1heFdpZHRoKTtcbiAgICAgIGlmIChjb250YWluTWF4ID09PSAnbm9uZScpIHtcbiAgICAgICAgY29udGFpbk1heCA9ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBsaW5rKSB7XG4gICAgICAgIGxpbmsgPSAkKGxpbmspO1xuICAgICAgICBsaW5rLmNzcyhtYXhXaWR0aCwgJycpO1xuICAgICAgICAvLyBEb24ndCBzZXQgdGhlIG1heC13aWR0aCBpZiBhbiB1cHN0cmVhbSB2YWx1ZSBleGlzdHNcbiAgICAgICAgaWYgKGxpbmsuY3NzKG1heFdpZHRoKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgbGluay5jc3MobWF4V2lkdGgsIGNvbnRhaW5NYXgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZE1lbnVPcGVuKGksIGVsKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbmF2LW1lbnUtb3BlbicsICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVNZW51T3BlbihpLCBlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW5hdi1tZW51LW9wZW4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuKGRhdGEsIGltbWVkaWF0ZSkge1xuICAgICAgaWYgKGRhdGEub3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkYXRhLm9wZW4gPSB0cnVlO1xuICAgICAgZGF0YS5tZW51LmVhY2goYWRkTWVudU9wZW4pO1xuICAgICAgZGF0YS5saW5rcy5hZGRDbGFzcyhuYXZiYXJPcGVuZWRMaW5rKTtcbiAgICAgIGRhdGEuZHJvcGRvd25zLmFkZENsYXNzKG5hdmJhck9wZW5lZERyb3Bkb3duKTtcbiAgICAgIGRhdGEuZHJvcGRvd25Ub2dnbGUuYWRkQ2xhc3MobmF2YmFyT3BlbmVkRHJvcGRvd25Ub2dnbGUpO1xuICAgICAgZGF0YS5kcm9wZG93bkxpc3QuYWRkQ2xhc3MobmF2YmFyT3BlbmVkRHJvcGRvd25MaXN0KTtcbiAgICAgIGRhdGEuYnV0dG9uLmFkZENsYXNzKG5hdmJhck9wZW5lZEJ1dHRvbik7XG4gICAgICB2Y
12990XIgY29uZmlnID0gZGF0YS5jb25maWc7XG4gICAgICB2YXIgYW5pbWF0aW9uID0gY29uZmlnLmFuaW1hdGlvbjtcbiAgICAgIGlmIChcbiAgICAgICAgYW5pbWF0aW9uID09PSAnbm9uZScgfHxcbiAgICAgICAgIXRyYW0uc3VwcG9ydC50cmFuc2Zvcm0gfHxcbiAgICAgICAgY29uZmlnLmR1cmF0aW9uIDw9IDBcbiAgICAgICkge1xuICAgICAgICBpbW1lZGlhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGJvZHlIZWlnaHQgPSBzZXRPdmVybGF5SGVpZ2h0KGRhdGEpO1xuICAgICAgdmFyIG1lbnVIZWlnaHQgPSBkYXRhLm1lbnUub3V0ZXJIZWlnaHQodHJ1ZSk7XG4gICAgICB2YXIgbWVudVdpZHRoID0gZGF0YS5tZW51Lm91dGVyV2lkdGgodHJ1ZSk7XG4gICAgICB2YXIgbmF2SGVpZ2h0ID0gZGF0YS5lbC5oZWlnaHQoKTtcbiAgICAgIHZhciBuYXZiYXJFbCA9IGRhdGEuZWxbMF07XG4gICAgICByZXNpemUoMCwgbmF2YmFyRWwpO1xuICAgICAgaXguaW50cm8oMCwgbmF2YmFyRWwpO1xuICAgICAgV2ViZmxvdy5yZWRyYXcudXAoKTtcblxuICAgICAgLy8gTGlzdGVuIGZvciBjbGljayBvdXRzaWRlIGV2ZW50c1xuICAgICAgaWYgKCFkZXNpZ25lcikge1xuICAgICAgICAkZG9jLm9uKCdjbGljaycgKyBuYW1lc3BhY2UsIGRhdGEub3V0c2lkZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIHRyYW5zaXRpb24gZm9yIGltbWVkaWF0ZVxuICAgICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc0NvbmZpZyA9ICd0cmFuc2Zvcm0gJyArIGNvbmZpZy5kdXJhdGlvbiArICdtcyAnICsgY29uZmlnLmVhc2luZztcblxuICAgICAgLy8gQWRkIG1lbnUgdG8gb3ZlcmxheVxuICAgICAgaWYgKGRhdGEub3ZlcmxheSkge1xuICAgICAgICBtZW51U2libGluZyA9IGRhdGEubWVudS5wcmV2KCk7XG4gICAgICAgIGRhdGEub3ZlcmxheS5zaG93KCkuYXBwZW5kKGRhdGEubWVudSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE92ZXIgbGVmdC9yaWdodFxuICAgICAgaWYgKGNvbmZpZy5hbmltT3Zlcikge1xuICAgICAgICB0cmFtKGRhdGEubWVudSlcbiAgICAgICAgICAuYWRkKHRyYW5zQ29uZmlnKVxuICAgICAgICAgIC5zZXQoe3g6IGNvbmZpZy5hbmltRGlyZWN0ICogbWVudVdpZHRoLCBoZWlnaHQ6IGJvZHlIZWlnaHR9KVxuICAgICAgICAgIC5zdGFydCh7eDogMH0pXG4gICAgICAgICAgLnRoZW4oY29tcGxldGUpO1xuICAgICAgICBkYXRhLm92ZXJsYXkgJiYgZGF0YS5vdmVybGF5LndpZHRoKG1lbnVXaWR0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRHJvcCBEb3duXG4gICAgICB2Y
12990XIgb2Zmc2V0WSA9IG5hdkhlaWdodCArIG1lbnVIZWlnaHQ7XG4gICAgICB0cmFtKGRhdGEubWVudSlcbiAgICAgICAgLmFkZCh0cmFuc0NvbmZpZylcbiAgICAgICAgLnNldCh7eTogLW9mZnNldFl9KVxuICAgICAgICAuc3RhcnQoe3k6IDB9KVxuICAgICAgICAudGhlbihjb21wbGV0ZSk7XG5cbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBkYXRhLmJ1dHRvbi5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPdmVybGF5SGVpZ2h0KGRhdGEpIHtcbiAgICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIHZhciBib2R5SGVpZ2h0ID0gY29uZmlnLmRvY0hlaWdodCA/ICRkb2MuaGVpZ2h0KCkgOiAkYm9keS5oZWlnaHQoKTtcbiAgICAgIGlmIChjb25maWcuYW5pbU92ZXIpIHtcbiAgICAgICAgZGF0YS5tZW51LmhlaWdodChib2R5SGVpZ2h0KTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5lbC5jc3MoJ3Bvc2l0aW9uJykgIT09ICdmaXhlZCcpIHtcbiAgICAgICAgYm9keUhlaWdodCAtPSBkYXRhLmVsLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgfVxuICAgICAgZGF0YS5vdmVybGF5ICYmIGRhdGEub3ZlcmxheS5oZWlnaHQoYm9keUhlaWdodCk7XG4gICAgICByZXR1cm4gYm9keUhlaWdodDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZShkYXRhLCBpbW1lZGlhdGUpIHtcbiAgICAgIGlmICghZGF0YS5vcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRhdGEub3BlbiA9IGZhbHNlO1xuICAgICAgZGF0YS5idXR0b24ucmVtb3ZlQ2xhc3MobmF2YmFyT3BlbmVkQnV0dG9uKTtcbiAgICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnLmFuaW1hdGlvbiA9PT0gJ25vbmUnIHx8XG4gICAgICAgICF0cmFtLnN1cHBvcnQudHJhbnNmb3JtIHx8XG4gICAgICAgIGNvbmZpZy5kdXJhdGlvbiA8PSAwXG4gICAgICApIHtcbiAgICAgICAgaW1tZWRpYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGl4Lm91dHJvKDAsIGRhdGEuZWxbMF0pO1xuXG4gICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgY2xpY2sgb3V0c2lkZSBldmVudHNcbiAgICAgICRkb2Mub2ZmKCdjbGljaycgKyBuYW1lc3BhY2UsIGRhdGEub3V0c2lkZSk7XG5cbiAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgdHJhbShkYXRhLm1lbnUpLnN0b3AoKTtcbiAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
12990XIgdHJhbnNDb25maWcgPSAndHJhbnNmb3JtICcgKyBjb25maWcuZHVyYXRpb24gKyAnbXMgJyArIGNvbmZpZy5lYXNpbmcyO1xuICAgICAgdmFyIG1lbnVIZWlnaHQgPSBkYXRhLm1lbnUub3V0ZXJIZWlnaHQodHJ1ZSk7XG4gICAgICB2YXIgbWVudVdpZHRoID0gZGF0YS5tZW51Lm91dGVyV2lkdGgodHJ1ZSk7XG4gICAgICB2YXIgbmF2SGVpZ2h0ID0gZGF0YS5lbC5oZWlnaHQoKTtcblxuICAgICAgLy8gT3ZlciBsZWZ0L3JpZ2h0XG4gICAgICBpZiAoY29uZmlnLmFuaW1PdmVyKSB7XG4gICAgICAgIHRyYW0oZGF0YS5tZW51KVxuICAgICAgICAgIC5hZGQodHJhbnNDb25maWcpXG4gICAgICAgICAgLnN0YXJ0KHt4OiBtZW51V2lkdGggKiBjb25maWcuYW5pbURpcmVjdH0pXG4gICAgICAgICAgLnRoZW4oY29tcGxldGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERyb3AgRG93blxuICAgICAgdmFyIG9mZnNldFkgPSBuYXZIZWlnaHQgKyBtZW51SGVpZ2h0O1xuICAgICAgdHJhbShkYXRhLm1lbnUpLmFkZCh0cmFuc0NvbmZpZykuc3RhcnQoe3k6IC1vZmZzZXRZfSkudGhlbihjb21wbGV0ZSk7XG5cbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBkYXRhLm1lbnUuaGVpZ2h0KCcnKTtcbiAgICAgICAgdHJhbShkYXRhLm1lbnUpLnNldCh7eDogMCwgeTogMH0pO1xuICAgICAgICBkYXRhLm1lbnUuZWFjaChyZW1vdmVNZW51T3Blbik7XG4gICAgICAgIGRhdGEubGlua3MucmVtb3ZlQ2xhc3MobmF2YmFyT3BlbmVkTGluayk7XG4gICAgICAgIGRhdGEuZHJvcGRvd25zLnJlbW92ZUNsYXNzKG5hdmJhck9wZW5lZERyb3Bkb3duKTtcbiAgICAgICAgZGF0YS5kcm9wZG93blRvZ2dsZS5yZW1vdmVDbGFzcyhuYXZiYXJPcGVuZWREcm9wZG93blRvZ2dsZSk7XG4gICAgICAgIGRhdGEuZHJvcGRvd25MaXN0LnJlbW92ZUNsYXNzKG5hdmJhck9wZW5lZERyb3Bkb3duTGlzdCk7XG4gICAgICAgIGlmIChkYXRhLm92ZXJsYXkgJiYgZGF0YS5vdmVybGF5LmNoaWxkcmVuKCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gTW92ZSBtZW51IGJhY2sgdG8gcGFyZW50IGF0IHRoZSBvcmlnaW5hbCBsb2NhdGlvblxuICAgICAgICAgIG1lbnVTaWJsaW5nLmxlbmd0aFxuICAgICAgICAgICAgPyBkYXRhLm1lbnUuaW5zZXJ0QWZ0ZXIobWVudVNpYmxpbmcpXG4gICAgICAgICAgICA6IGRhdGEubWVudS5wcmVwZW5kVG8oZGF0YS5wYXJlbnQpO1xuICAgICAgICAgIGRhdGEub3ZlcmxheS5hdHRyKCdzdHlsZScsICcnKS5oaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmlnZ2VyIGV2ZW50IHNvIG90aGVyIGNvbXBvbmVudHMgY2FuIGhvb2sgaW4gKGRyb3Bkb3duKVxuICAgICAgICBkYXRhLmVsLnRyaWdnZXJIYW5kbGVyKCd3LWNsb3NlJyk7XG4gICAgICAgIGRhdGEuYnV0dG9uLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJJWEV2ZW50cyIsIktFWV9DT0RFUyIsIkFSUk9XX0xFRlQiLCJBUlJPV19VUCIsIkFSUk9XX1JJR0hUIiwiQVJST1dfRE9XTiIsIkVTQ0FQRSIsIlNQQUNFIiwiRU5URVIiLCJIT01FIiwiRU5EIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJfIiwiYXBpIiwidHJhbSIsIiR3aW4iLCJ3aW5kb3ciLCIkZG9jIiwiZG9jdW1lbnQiLCJkZWJvdW5jZSIsIiRib2R5IiwiJG5hdmJhcnMiLCJkZXNpZ25lciIsImluRWRpdG9yIiwiaW5BcHAiLCJlbnYiLCJvdmVybGF5IiwibmFtZXNwYWNlIiwibmF2YmFyT3BlbmVkQnV0dG9uIiwibmF2YmFyT3BlbmVkRHJvcGRvd24iLCJuYXZiYXJPcGVuZWREcm9wZG93blRvZ2dsZSIsIm5hdmJhck9wZW5lZERyb3Bkb3duTGlzdCIsIm5hdmJhck9wZW5lZExpbmsiLCJpeCIsInRyaWdnZXJzIiwibWVudVNpYmxpbmciLCJyZWFkeSIsImRlc2lnbiIsInByZXZpZXciLCJpbml0IiwiZGVzdHJveSIsInJlbW92ZUxpc3RlbmVycyIsImxlbmd0aCIsImVhY2giLCJ0ZWFyZG93biIsImJvZHkiLCJmaW5kIiwiYnVpbGQiLCJhZGRMaXN0ZW5lcnMiLCJyZXNpemUiLCJvZmYiLCJyZXNpemVBbGwiLCJvbiIsImkiLCJlbCIsIiRlbCIsImRhdGEiLCJvcGVuIiwiY29uZmlnIiwic2VsZWN0ZWRJZHgiLCJtZW51IiwibGlua3MiLCJkcm9wZG93bnMiLCJkcm9wZG93blRvZ2dsZSIsImRyb3Bkb3duTGlzdCIsImJ1dHRvbiIsImNvbn
12990RhaW5lciIsIm92ZXJsYXlDb250YWluZXJJZCIsIm91dHNpZGUiLCJuYXZCcmFuZExpbmsiLCJhdHRyIiwiY29uZmlndXJlIiwicmVtb3ZlT3ZlcmxheSIsImhhbmRsZXIiLCJhZGRPdmVybGF5IiwidG9nZ2xlIiwibmF2aWdhdGUiLCJtYWtlVG9nZ2xlQnV0dG9uS2V5Ym9hcmRIYW5kbGVyIiwibWFrZUxpbmtzS2V5Ym9hcmRIYW5kbGVyIiwicmVtb3ZlRGF0YSIsImNsb3NlIiwicmVtb3ZlIiwiYXBwZW5kVG8iLCJwYXJlbnQiLCJvbGQiLCJhbmltYXRpb24iLCJhbmltT3ZlciIsInRlc3QiLCJhbmltRGlyZWN0IiwiZGVmZXIiLCJyZW9wZW4iLCJlYXNpbmciLCJlYXNpbmcyIiwiZHVyYXRpb24iLCJOdW1iZXIiLCJkb2NIZWlnaHQiLCJldnQiLCJvcHRpb25zIiwid2luV2lkdGgiLCJ3aWR0aCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImZvY3VzU2VsZWN0ZWRMaW5rIiwiaW5kZXgiLCJhY3RpdmVFbGVtZW50IiwiZm9jdXMiLCJNYXRoIiwibWF4IiwibWluIiwic2VsZWN0ZWRFbGVtZW50IiwibGluayIsImhyZWYiLCJ2YWxpZENsaWNrIiwiY3VycmVudFRhcmdldCIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGFyZ2V0IiwiY2xvc2VzdCIsIm91dHNpZGVEZWJvdW5jZWQiLCJpcyIsImNvbGxhcHNlZCIsImNzcyIsInVwZGF0ZUVhY2hNYXgiLCJ1cGRhdGVNYXgiLCJzZXRPdmVybGF5SGVpZ2h0IiwibWF4V2lkdGgiLCJjb250YWluTWF4IiwiYWRkTWVudU9wZW4iLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVNZW51T3BlbiIsInJlbW92ZUF0dHJpYnV0ZSIsImltbWVkaWF0ZSIsImFkZENsYXNzIiwic3VwcG9ydCIsInRyYW5zZm9ybSIsImJvZHlIZWlnaHQiLCJtZW51SGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJtZW51V2lkdGgiLCJvdXRlcldpZHRoIiwibmF2SGVpZ2h0IiwiaGVpZ2h0IiwibmF2YmFyRWwiLCJpbnRybyIsInJlZHJhdyIsInVwIiwiY29tcGxldGUiLCJ0cmFuc0NvbmZpZyIsInByZXYiLCJzaG93IiwiYXBwZW5kIiwiYWRkIiwic2V0IiwieCIsInN0YXJ0IiwidGhlbiIsIm9mZnNldFkiLCJ5IiwicmVtb3ZlQ2xhc3MiLCJvdXRybyIsInN0b3AiLCJjaGlsZHJlbiIsImluc2VydEFmdGVyIiwicHJlcGVuZFRvIiwiaGlkZSIsInRyaWdnZXJIYW5kbGVyIl0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBQ3RCLElBQUlDLFdBQVdELFFBQVE7QUFFdkIsTUFBTUUsWUFBWTtJQUNoQkMsWUFBWTtJQUNaQyxVQUFVO0lBQ1ZDLGFBQWE7SUFDYkMsWUFBWTtJQUNaQyxRQUFRO0lBQ1JDLE9BQU87SUFDUEMsT0FBTztJQUNQQyxNQUFNO0lBQ05DLEtBQUs7QUFDUDtBQUVBWixRQUFRYSxNQUFNLENBQ1osVUFDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUMsRUFBRUMsQ0FBQztJQUM5QixJQUFJQyxNQUFNLENBQUM7SUFDWCxJQUFJQyxPQUFPSCxFQUFFRyxJQUFJO0lBQ2pCLElBQUlDLE9BQU9KLEVBQUVLO0lBQ2IsSUFBSUMsT0FBT04sRUFBRU87SUFDYixJQUFJQyxXQUFXUCxFQUFFTyxRQUFRO0lBQ3pCLElBQUlDO0lBQ0osSUFBSUM7SUFDSixJQUFJQztJQUNKLElBQUlDO0lBQ0osSUFBSUMsUUFBUTdCLFFBQVE4QixHQUFHO0lBQ3ZCLElBQUlDLFVBQVU7SUFDZCxJQUFJQyxZQUFZO0lBQ2hCLElBQUlDLHFCQUFxQjtJQUN6QixJQUFJQyx1QkFBdUI7SUFDM0IsSUFBSUMsNkJBQTZCO0lBQ2pDLElBQUlDLDJCQUEyQjtJQUMvQixJQUFJQyxtQkFBbUI7SUFDdkIsSUFBSUMsS0FBS3BDLFNBQVNxQyxRQUFRO0lBQzFCLElBQUlDLGNBQWN4QjtJQUVsQixzQ0FBc0M7S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
12991
12992}),
12993"4345": (function (module, __unused_webpack_exports, __webpack_require__) {
12994"use strict";
12995/* global window, document */ /**
12996 * Webflow: Slider component
12997 */ 
12998var Webflow = __webpack_require__(3949);
12999var IXEvents = __webpack_require__(5134);
13000const KEY_CODES = {
13001    ARROW_LEFT: 37,
13002    ARROW_UP: 38,
13003    ARROW_RIGHT: 39,
13004    ARROW_DOWN: 40,
13005    SPACE: 32,
13006    ENTER: 13,
13007    HOME: 36,
13008    END: 35
13009};
13010const FOCUSABLE_SELECTOR = 'a[href], area[href], [role="button"], input, select, textarea, button, iframe, object, embed, *[tabindex], *[contenteditable]';
13011Webflow.define('slider', module.exports = function($, _) {
13012    var api = {};
13013    var tram = $.tram;
13014    var $doc = $(document);
13015    var $sliders;
13016    var designer;
13017    var inApp = Webflow.env();
13018    var namespace = '.w-slider';
13019    var dot = '<div class="w-slider-dot" data-wf-ignore />';
13020    var ariaLiveLabelHtml = '<div aria-live="off" aria-atomic="true" class="w-slider-aria-label" data-wf-ignore />';
13021    var forceShow = 'w-slider-force-show';
13022    var ix = IXEvents.triggers;
13023    var fallback;
13024    var inRedraw = false;
13025    // -----------------------------------
13026    // Module methods
13027    api.ready = function() {
13028        designer = Webflow.env('design');
13029        init();
13030    };
13031    api.design = function() {
13032        designer = true;
13033        // Helps slider init on Designer load.
13034        setTimeout(init, 1000);
13035    };
13036    api.preview = function() {
13037        designer = false;
13038        init();
13039    };
13040    api.redraw = function() {
13041        inRedraw = true;
13042        init();
13043        inRedraw = false;
13044    };
13045    api.destroy = removeListeners;
13046    // -----------------------------------
13047    // Private methods
13048    function init() {
13049        // Find all sliders on the page
13050        $sliders = $doc.find(namespace);
13051        if (!$sliders.length) {
13052            return;
13053        }
13054        $sliders.each(build);
13055        if (fallback) {
13056            return;
13057        }
13058        removeListeners();
13059        addListeners();
13060    }
13061    function removeListeners() {
13062        Webflow.resize.off(renderAll);
13063        Webflow.redraw.off(api.redraw);
13064    }
13065    function addListeners() {
13066        Webflow.resize.on(renderAll);
13067        Webflow.redraw.on(api.redraw);
13068    }
13069    function renderAll() {
13070        $sliders.filter(':visible').each(render);
13071    }
13072    function build(i, el) {
13073        var $el = $(el);
13074        // Store slider state in data
13075        var data = $.data(el, namespace);
13076        if (!data) {
13077            data = $.data(el, namespace, {
13078                index: 0,
13079                depth: 1,
13080                hasFocus: {
13081                    keyboard: false,
13082                    mouse: false
13083                },
13084                el: $el,
13085                config: {}
13086            });
13087        }
13088        data.mask = $el.children('.w-slider-mask');
13089        data.left = $el.children('.w-slider-arrow-left');
13090        data.right = $el.children('.w-slider-arrow-right');
13091        data.nav = $el.children('.w-slider-nav');
13092        data.slides = data.mask.children('.w-slide');
13093        data.slides.each(ix.reset);
13094        if (inRedraw) {
13095            data.maskWidth = 0;
13096        }
13097        if ($el.attr('role') === undefined) {
13098            $el.attr('role', 'region');
13099        }
13100        if ($el.attr('aria-label') === undefined) {
13101            $el.attr('aria-label', 'carousel');
13102        }
13103        // Store the ID of the slider slide view mask
13104        var slideViewId = data.mask.attr('id');
13105        // If user did not provide an ID, set it
13106        if (!slideViewId) {
13107            slideViewId = 'w-slider-mask-' + i;
13108            data.mask.attr('id', slideViewId);
13109        }
13110        // Create aria live label
13111        if (!designer && !data.ariaLiveLabel) {
13112            data.ariaLiveLabel = $(ariaLiveLabelHtml).appendTo(data.mask);
13113        }
13114        // Add attributes to left/right buttons
13115        data.left.attr('role', 'button');
13116        data.left.attr('tabindex', '0');
13117        data.left.attr('aria-controls', slideViewId);
13118        if (data.left.attr('aria-label') === undefined) {
13119            data.left.attr('aria-label', 'previous slide');
13120        }
13121        data.right.attr('role', 'button');
13122        data.right.attr('tabindex', '0');
13123        data.right.attr('aria-controls', slideViewId);
13124        if (data.right.attr('aria-label') === undefined) {
13125            data.right.attr('aria-label', 'next slide');
13126        }
13127        // Disable in old browsers
13128        if (!tram.support.transform) {
13129            data.left.hide();
13130            data.right.hide();
13131            data.nav.hide();
13132            fallback = true;
13133            return;
13134        }
13135        // Remove old events
13136        data.el.off(namespace);
13137        data.left.off(namespace);
13138        data.right.off(namespace);
13139        data.nav.off(namespace);
13140        // Set config from data attributes
13141        configure(data);
13142        // Add events based on mode
13143        if (designer) {
13144            data.el.on('setting' + namespace, handler(data));
13145            stopTimer(data);
13146            data.hasTimer = false;
13147        } else {
13148            data.el.on('swipe' + namespace, handler(data));
13149            data.left.on('click' + namespace, previousFunction(data));
13150            data.right.on('click' + namespace, next(data));
13151            data.left.on('keydown' + namespace, keyboardSlideButtonsFunction(data, previousFunction));
13152            data.right.on('keydown' + namespace, keyboardSlideButtonsFunction(data, next));
13153            // Listen to nav keyboard events
13154            data.nav.on('keydown' + namespace, '> div', handler(data));
13155            // Start timer if autoplay is true, only once
13156            if (data.config.autoplay && !data.hasTimer) {
13157                data.hasTimer = true;
13158                data.timerCount = 1;
13159                startTimer(data);
13160            }
13161            data.el.on('mouseenter' + namespace, hasFocus(data, true, 'mouse'));
13162            data.el.on('focusin' + namespace, hasFocus(data, true, 'keyboard'));
13163            data.el.on('mouseleave' + namespace, hasFocus(data, false, 'mouse'));
13164            data.el.on('focusout' + namespace, hasFocus(data, false, 'keyboard'));
13165        }
13166        // Listen to nav click events
13167        data.nav.on('click' + namespace, '> div', handler(data));
13168        // Remove gaps from formatted html (for inline-blocks)
13169        if (!inApp) {
13170            data.mask.contents().filter(function() {
13171                return this.nodeType === 3;
13172            }).remove();
13173        }
13174        // If slider or any parent is hidden, temporarily show for measurements (https://github.com/webflow/webflow/issues/24921)
13175        var $elHidden = $el.filter(':hidden');
13176        $elHidden.addClass(forceShow);
13177        var $elHiddenParents = $el.parents(':hidden');
13178        $elHiddenParents.addClass(forceShow);
13179        // Run first render
13180        if (!inRedraw) {
13181            render(i, el);
13182        }
13183        // If slider or any parent is hidden, reset after temporarily showing for measurements
13184        $elHidden.removeClass(forceShow);
13185        $elHiddenParents.removeClass(forceShow);
13186    }
13187    function configure(data) {
13188        var config = {};
13189        config.crossOver = 0;
13190        // Set config options from data attributes
13191        config.animation = data.el.attr('data-animation') || 'slide';
13192        if (config.animation === 'outin') {
13193            config.animation = 'cross';
13194            config.crossOver = 0.5;
13195        }
13196        config.easing = data.el.attr('data-easing') || 'ease';
13197        var duration = data.el.attr('data-duration');
13198        config.duration = duration != null ? parseInt(duration, 10) : 500;
13199        if (isAttrTrue(data.el.attr('data-infinite'))) {
13200            config.infinite = true;
13201        }
13202        if (isAttrTrue(data.el.attr('data-disable-swipe'))) {
13203            config.disableSwipe = true;
13204        }
13205        if (isAttrTrue(data.el.attr('data-hide-arrows'))) {
13206            config.hideArrows = true;
13207        } else if (data.config.hideArrows) {
13208            data.left.show();
13209            data.right.show();
13210        }
13211        if (isAttrTrue(data.el.attr('data-autoplay'))) {
13212            config.autoplay = true;
13213            config.delay = parseInt(data.el.attr('data-delay'), 10) || 2000;
13214            config.timerMax = parseInt(data.el.attr('data-autoplay-limit'), 10);
13215            // Disable timer on first touch or mouse down
13216            var touchEvents = 'mousedown' + namespace + ' touchstart' + namespace;
13217            if (!designer) {
13218                data.el.off(touchEvents).one(touchEvents, function() {
13219                    stopTimer(data);
13220                });
13221            }
13222        }
13223        // Use edge buffer to help calculate page count
13224        var arrowWidth = data.right.width();
13225        config.edge = arrowWidth ? arrowWidth + 40 : 100;
13226        // Store config in data
13227        data.config = config;
13228    }
13229    function isAttrTrue(value) {
13230        return value === '1' || value === 'true';
13231    }
13232    function hasFocus(data, focusIn, eventType) {
13233        return function(evt) {
13234            if (!focusIn) {
13235                // Prevent Focus Out if moving to another element in the slider
13236                if ($.contains(data.el.get(0), evt.relatedTarget)) {
13237                    return;
13238                }
13239                data.hasFocus[eventType] = focusIn;
13240                // Prevent Aria live change if focused by other input
13241                if (data.hasFocus.mouse && eventType === 'keyboard' || data.hasFocus.keyboard && eventType === 'mouse') {
13242                    return;
13243                }
13244            } else {
13245                data.hasFocus[eventType] = focusIn;
13246            }
13247            if (focusIn) {
13248                data.ariaLiveLabel.attr('aria-live', 'polite');
13249                if (data.hasTimer) {
13250                    stopTimer(data);
13251                }
13252            } else {
13253                data.ariaLiveLabel.attr('aria-live', 'off');
13254                if (data.hasTimer) {
13255                    startTimer(data);
13256                }
13257            }
13258            return;
13259        };
13260    }
13261    function keyboardSlideButtonsFunction(data, directionFunction) {
13262        return function(evt) {
13263            switch(evt.keyCode){
13264                case KEY_CODES.SPACE:
13265                case KEY_CODES.ENTER:
13266                    {
13267                        // DirectionFunction returns a function
13268                        directionFunction(data)();
13269                        evt.preventDefault();
13270                        return evt.stopPropagation();
13271                    }
13272            }
13273        };
13274    }
13275    function previousFunction(data) {
13276        return function() {
13277            change(data, {
13278                index: data.index - 1,
13279                vector: -1
13280            });
13281        };
13282    }
13283    function next(data) {
13284        return function() {
13285            change(data, {
13286                index: data.index + 1,
13287                vector: 1
13288            });
13289        };
13290    }
13291    function select(data, value) {
13292        // Select page based on slide element index
13293        var found = null;
13294        if (value === data.slides.length) {
13295            init();
13296            layout(data); // Rebuild and find new slides
13297        }
13298        _.each(data.anchors, function(anchor, index) {
13299            $(anchor.els).each(function(i, el) {
13300                if ($(el).index() === value) {
13301                    found = index;
13302                }
13303            });
13304        });
13305        if (found != null) {
13306            change(data, {
13307                index: found,
13308                immediate: true
13309            });
13310        }
13311    }
13312    function startTimer(data) {
13313        stopTimer(data);
13314        var config = data.config;
13315        var timerMax = config.timerMax;
13316        if (timerMax && data.timerCount++ > timerMax) {
13317            return;
13318        }
13319        data.timerId = window.setTimeout(function() {
13320            if (data.timerId == null || designer) {
13321                return;
13322            }
13323            next(data)();
13324            startTimer(data);
13325        }, config.delay);
13326    }
13327    function stopTimer(data) {
13328        window.clearTimeout(data.timerId);
13329        data.timerId = null;
13330    }
13331    function handler(data) {
13332        return function(evt, options) {
13333            options = options || {};
13334            var config = data.config;
13335            // Designer settings
13336            if (designer && evt.type === 'setting') {
13337                if (options.select === 'prev') {
13338                    return previousFunction(data)();
13339                }
13340                if (options.select === 'next') {
13341                    return next(data)();
13342                }
13343                configure(data);
13344                layout(data);
13345                if (options.select == null) {
13346                    return;
13347                }
13348                select(data, options.select);
13349                return;
13350            }
13351            // Swipe event
13352            if (evt.type === 'swipe') {
13353                if (config.disableSwipe) {
13354                    return;
13355                }
13356                if (Webflow.env('editor')) {
13357                    return;
13358                }
13359                if (options.direction === 'left') {
13360                    return next(data)();
13361                }
13362                if (options.direction === 'right') {
13363                    return previousFunction(data)();
13364                }
13365                return;
13366            }
13367            // Page buttons
13368            if (data.nav.has(evt.target).length) {
13369                var index = $(evt.target).index();
13370                if (evt.type === 'click') {
13371                    change(data, {
13372                        index
13373                    });
13374                }
13375                if (evt.type === 'keydown') {
13376                    switch(evt.keyCode){
13377                        case KEY_CODES.ENTER:
13378                        case KEY_CODES.SPACE:
13379                            {
13380                                change(data, {
13381                                    index
13382                                });
13383                                evt.preventDefault();
13384                                break;
13385                            }
13386                        case KEY_CODES.ARROW_LEFT:
13387                        case KEY_CODES.ARROW_UP:
13388                            {
13389                                focusDot(data.nav, Math.max(index - 1, 0));
13390                                evt.preventDefault();
13391                                break;
13392                            }
13393                        case KEY_CODES.ARROW_RIGHT:
13394                        case KEY_CODES.ARROW_DOWN:
13395                            {
13396                                focusDot(data.nav, Math.min(index + 1, data.pages));
13397                                evt.preventDefault();
13398                                break;
13399                            }
13400                        case KEY_CODES.HOME:
13401                            {
13402                                focusDot(data.nav, 0);
13403                                evt.preventDefault();
13404                                break;
13405                            }
13406                        case KEY_CODES.END:
13407                            {
13408                                focusDot(data.nav, data.pages);
13409                                evt.preventDefault();
13410                                break;
13411                            }
13412                        default:
13413                            {
13414                                return;
13415                            }
13416                    }
13417                }
13418            }
13419        };
13420    }
13421    function focusDot($nav, index) {
13422        // Focus nav dot; don't change class to active
13423        var $active = $nav.children().eq(index).focus();
13424        $nav.children().not($active);
13425    }
13426    function change(data, options) {
13427        options = options || {};
13428        var config = data.config;
13429        var anchors = data.anchors;
13430        // Set new index
13431        data.previous = data.index;
13432        var index = options.index;
13433        var shift = {};
13434        if (index < 0) {
13435            index = anchors.length - 1;
13436            if (config.infinite) {
13437                // Shift first slide to the end
13438                shift.x = -data.endX;
13439                shift.from = 0;
13440                shift.to = anchors[0].width;
13441            }
13442        } else if (index >= anchors.length) {
13443            index = 0;
13444            if (config.infinite) {
13445                // Shift last slide to the start
13446                shift.x = anchors[anchors.length - 1].width;
13447                shift.from = -anchors[anchors.length - 1].x;
13448                shift.to = shift.from - shift.x;
13449            }
13450        }
13451        data.index = index;
13452        // Select nav dot; set class active
13453        var $active = data.nav.children().eq(index).addClass('w-active').attr('aria-pressed', 'true').attr('tabindex', '0');
13454        data.nav.children().not($active).removeClass('w-active').attr('aria-pressed', 'false').attr('tabindex', '-1');
13455        // Hide arrows
13456        if (config.hideArrows) {
13457            data.index === anchors.length - 1 ? data.right.hide() : data.right.show();
13458            data.index === 0 ? data.left.hide() : data.left.show();
13459        }
13460        // Get page offset from anchors
13461        var lastOffsetX = data.offsetX || 0;
13462        var offsetX = data.offsetX = -anchors[data.index].x;
13463        var resetConfig = {
13464            x: offsetX,
13465            opacity: 1,
13466            visibility: ''
13467        };
13468        // Transition slides
13469        var targets = $(anchors[data.index].els);
13470        var prevTargs = $(anchors[data.previous] && anchors[data.previous].els);
13471        var others = data.slides.not(targets);
13472        var animation = config.animation;
13473        var easing = config.easing;
13474        var duration = Math.round(config.duration);
13475        var vector = options.vector || (data.index > data.previous ? 1 : -1);
13476        var fadeRule = 'opacity ' + duration + 'ms ' + easing;
13477        var slideRule = 'transform ' + duration + 'ms ' + easing;
13478        // Make active slides' content focusable
13479        targets.find(FOCUSABLE_SELECTOR).removeAttr('tabindex');
13480        targets.removeAttr('aria-hidden');
13481        // Voiceover bug: Sometimes descendants are still visible, so hide everything...
13482        targets.find('*').removeAttr('aria-hidden');
13483        // Prevent focus on inactive slides' content
13484        others.find(FOCUSABLE_SELECTOR).attr('tabindex', '-1');
13485        others.attr('aria-hidden', 'true');
13486        // Voiceover bug: Sometimes descendants are still visible, so hide everything...
13487        others.find('*').attr('aria-hidden', 'true');
13488        // Trigger IX events
13489        if (!designer) {
13490            targets.each(ix.intro);
13491            others.each(ix.outro);
13492        }
13493        // Set immediately after layout changes (but not during redraw)
13494        if (options.immediate && !inRedraw) {
13495            tram(targets).set(resetConfig);
13496            resetOthers();
13497            return;
13498        }
13499        // Exit early if index is unchanged
13500        if (data.index === data.previous) {
13501            return;
13502        }
13503        // Announce slide change to screen reader
13504        if (!designer) {
13505            data.ariaLiveLabel.text(`Slide ${index + 1} of ${anchors.length}.`);
13506        }
13507        // Cross Fade / Out-In
13508        if (animation === 'cross') {
13509            var reduced = Math.round(duration - duration * config.crossOver);
13510            var wait = Math.round(duration - reduced);
13511            fadeRule = 'opacity ' + reduced + 'ms ' + easing;
13512            tram(prevTargs).set({
13513                visibility: ''
13514            }).add(fadeRule).start({
13515                opacity: 0
13516            });
13517            tram(targets).set({
13518                visibility: '',
13519                x: offsetX,
13520                opacity: 0,
13521                zIndex: data.depth++
13522            }).add(fadeRule).wait(wait).then({
13523                opacity: 1
13524            }).then(resetOthers);
13525            return;
13526        }
13527        // Fade Over
13528        if (animation === 'fade') {
13529            tram(prevTargs).set({
13530                visibility: ''
13531            }).stop();
13532            tram(targets).set({
13533                visibility: '',
13534                x: offsetX,
13535                opacity: 0,
13536                zIndex: data.depth++
13537            }).add(fadeRule).start({
13538                opacity: 1
13539            }).then(resetOthers);
13540            return;
13541        }
13542        // Slide Over
13543        if (animation === 'over') {
13544            resetConfig = {
13545                x: data.endX
13546            };
13547            tram(prevTargs).set({
13548                visibility: ''
13549            }).stop();
13550            tram(targets).set({
13551                visibility: '',
13552                zIndex: data.depth++,
13553                x: offsetX + anchors[data.index].width * vector
13554            }).add(slideRule).start({
13555                x: offsetX
13556            }).then(resetOthers);
13557            return;
13558        }
13559        // Slide - infinite scroll
13560        if (config.infinite && shift.x) {
13561            tram(data.slides.not(prevTargs)).set({
13562                visibility: '',
13563                x: shift.x
13564            }).add(slideRule).start({
13565                x: offsetX
13566            });
13567            tram(prevTargs).set({
13568                visibility: '',
13569                x: shift.from
13570            }).add(slideRule).start({
13571                x: shift.to
13572            });
13573            data.shifted = prevTargs;
13574        } else {
13575            if (config.infinite && data.shifted) {
13576                tram(data.shifted).set({
13577                    visibility: '',
13578                    x: lastOffsetX
13579                });
13580                data.shifted = null;
13581            }
13582            // Slide - basic scroll
13583            tram(data.slides).set({
13584                visibility: ''
13585            }).add(slideRule).start({
13586                x: offsetX
13587            });
13588        }
13589        // Helper to move others out of view
13590        function resetOthers() {
13591            targets = $(anchors[data.index].els);
13592            others = data.slides.not(targets);
13593            if (animation !== 'slide') {
13594                resetConfig.visibility = 'hidden';
13595            }
13596            tram(others).set(resetConfig);
13597        }
13598    }
13599    function render(i, el) {
13600        var data = $.data(el, namespace);
13601        if (!data) {
13602            return;
13603        }
13604        if (maskChanged(data)) {
13605            return layout(data);
13606        }
13607        if (designer && slidesChanged(data)) {
13608            layout(data);
13609        }
13610    }
13611    function layout(data) {
13612        // Determine page count from width of slides
13613        var pages = 1;
13614        var offset = 0;
13615        var anchor = 0;
13616        var width = 0;
13617        var maskWidth = data.maskWidth;
13618        var threshold = maskWidth - data.config.edge;
13619        if (threshold < 0) {
13620            threshold = 0;
13621        }
13622        data.anchors = [
13623            {
13624                els: [],
13625                x: 0,
13626                width: 0
13627            }
13628        ];
13629        data.slides.each(function(i, el) {
13630            if (anchor - offset > threshold) {
13631                pages++;
13632                offset += maskWidth;
13633                // Store page anchor for transition
13634                data.anchors[pages - 1] = {
13635                    els: [],
13636                    x: anchor,
13637                    width: 0
13638                };
13639            }
13640            // Set next anchor using current width + margin
13641            width = $(el).outerWidth(true);
13642            anchor += width;
13643            data.anchors[pages - 1].width += width;
13644            data.anchors[pages - 1].els.push(el);
13645            var ariaLabel = i + 1 + ' of ' + data.slides.length;
13646            $(el).attr('aria-label', ariaLabel);
13647            $(el).attr('role', 'group');
13648        });
13649        data.endX = anchor;
13650        // Build dots if nav exists and needs updating
13651        if (designer) {
13652            data.pages = null;
13653        }
13654        if (data.nav.length && data.pages !== pages) {
13655            data.pages = pages;
13656            buildNav(data);
13657        }
13658        // Make sure index is still within range and call change handler
13659        var index = data.index;
13660        if (index >= pages) {
13661            index = pages - 1;
13662        }
13663        change(data, {
13664            immediate: true,
13665            index
13666        });
13667    }
13668    function buildNav(data) {
13669        var dots = [];
13670        var $dot;
13671        var spacing = data.el.attr('data-nav-spacing');
13672        if (spacing) {
13673            spacing = parseFloat(spacing) + 'px';
13674        }
13675        for(var i = 0, len = data.pages; i < len; i++){
13676            $dot = $(dot);
13677            $dot.attr('aria-label', 'Show slide ' + (i + 1) + ' of ' + len).attr('aria-pressed', 'false').attr('role', 'button').attr('tabindex', '-1');
13678            if (data.nav.hasClass('w-num')) {
13679                $dot.text(i + 1);
13680            }
13681            if (spacing != null) {
13682                $dot.css({
13683                    'margin-left': spacing,
13684                    'margin-right': spacing
13685                });
13686            }
13687            dots.push($dot);
13688        }
13689        data.nav.empty().append(dots);
13690    }
13691    function maskChanged(data) {
13692        var maskWidth = data.mask.width();
13693        if (data.maskWidth !== maskWidth) {
13694            data.maskWidth = maskWidth;
13695            return true;
13696        }
13697        return false;
13698    }
13699    function slidesChanged(data) {
13700        var slidesWidth = 0;
13701        data.slides.each(function(i, el) {
13702            slidesWidth += $(el).outerWidth(true);
13703        });
13704        if (data.slidesWidth !== slidesWidth) {
13705            data.slidesWidth = slidesWidth;
13706            return true;
13707        }
13708        return false;
13709    }
13710    // Export module
13711    return api;
13712});
13713
13714//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctc2xpZGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCB3aW5kb3csIGRvY3VtZW50ICovXG5cbi8qKlxuICogV2ViZmxvdzogU2xpZGVyIGNvbXBvbmVudFxuICovXG5cbnZhciBXZWJmbG93ID0gcmVxdWlyZSgnLi4vQmFzZVNpdGVNb2R1bGVzL3dlYmZsb3ctbGliJyk7XG52YXIgSVhFdmVudHMgPSByZXF1aXJlKCcuLi9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1peDItZXZlbnRzJyk7XG5cbmNvbnN0IEtFWV9DT0RFUyA9IHtcbiAgQVJST1dfTEVGVDogMzcsXG4gIEFSUk9XX1VQOiAzOCxcbiAgQVJST1dfUklHSFQ6IDM5LFxuICBBUlJPV19ET1dOOiA0MCxcbiAgU1BBQ0U6IDMyLFxuICBFTlRFUjogMTMsXG4gIEhPTUU6IDM2LFxuICBFTkQ6IDM1LFxufTtcblxuY29uc3QgRk9DVVNBQkxFX1NFTEVDVE9SID1cbiAgJ2FbaHJlZl0sIGFyZWFbaHJlZl0sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBpZnJhbWUsIG9iamVjdCwgZW1iZWQsICpbdGFiaW5kZXhdLCAqW2NvbnRlbnRlZGl0YWJsZV0nO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ3NsaWRlcicsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkLCBfKSB7XG4gICAgdmFyIGFwaSA9IHt9O1xuICAgIHZhciB0cmFtID0gJC50cmFtO1xuICAgIHZhciAkZG9jID0gJChkb2N1bWVudCk7XG4gICAgdmFyICRzbGlkZXJzO1xuICAgIHZhciBkZXNpZ25lcjtcbiAgICB2YXIgaW5BcHAgPSBXZWJmbG93LmVudigpO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctc2xpZGVyJztcbiAgICB2YXIgZG90ID0gJzxkaXYgY2xhc3M9XCJ3LXNsaWRlci1kb3RcIiBkYXRhLXdmLWlnbm9yZSAvPic7XG4gICAgdmFyIGFyaWFMaXZlTGFiZWxIdG1sID1cbiAgICAgICc8ZGl2IGFyaWEtbGl2ZT1cIm9mZlwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGNsYXNzPVwidy1zbGlkZXItYXJpYS1sYWJlbFwiIGRhdGEtd2YtaWdub3JlIC8+JztcbiAgICB2YXIgZm9yY2VTaG93ID0gJ3ctc2xpZGVyLWZvcmNlLXNob3cnO1xuICAgIHZhciBpeCA9IElYRXZlbnRzLnRyaWdnZXJzO1xuICAgIHZhciBmYWxsYmFjaztcbiAgICB2YXIgaW5SZWRyYXcgPSBmYWxzZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc2lnbmVyID0gV2ViZmxvdy5lbnYoJ2Rlc2lnbicpO1xuICAgICAgaW5pdCgpO1xuICAgIH07XG5cbiAgICBhcGkuZGVzaWduID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzaWduZXIgPSB0cnVlO1xuICAgICAgLy8gSGVscHMgc2xpZGVyIGluaXQgb24gRGVzaWduZXIgbG9hZC5cbiAgICAgIHNldFRpbWVvdXQoaW5pdCwgMTAwMCk7XG4gICAgfTtcblxuICAgIGFwaS5wcmV2aWV3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzaWduZXIgPSBmYWxzZTtcbiAgICAgIGluaXQoKTtcbiAgICB9O1xuXG4gICAgYXBpLnJlZHJhdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGluUmVkcmF3ID0gdHJ1ZTtcbiAgICAgIGluaXQoKTtcbiAgICAgIGluUmVkcmF3ID0gZmFsc2U7XG4gICAgfTtcblxuICAgIGFwaS5kZXN0cm95ID0gcmVtb3ZlTGlzdGVuZXJzO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAvLyBGaW5kIGFsbCBzbGlkZXJzIG9uIHRoZSBwYWdlXG4gICAgICAkc2xpZGVycyA9ICRkb2MuZmluZChuYW1lc3BhY2UpO1xuICAgICAgaWYgKCEkc2xpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJHNsaWRlcnMuZWFjaChidWlsZCk7XG4gICAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgIGFkZExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgIFdlYmZsb3cucmVzaXplLm9mZihyZW5kZXJBbGwpO1xuICAgICAgV2ViZmxvdy5yZWRyYXcub2ZmKGFwaS5yZWRyYXcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVycygpIHtcbiAgICAgIFdlYmZsb3cucmVzaXplLm9uKHJlbmRlckFsbCk7XG4gICAgICBXZWJmbG93LnJlZHJhdy5vbihhcGkucmVkcmF3KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJBbGwoKSB7XG4gICAgICAkc2xpZGVycy5maWx0ZXIoJzp2aXNpYmxlJykuZWFjaChyZW5kZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkKGksIGVsKSB7XG4gICAgICB2Y
13714XIgJGVsID0gJChlbCk7XG5cbiAgICAgIC8vIFN0b3JlIHNsaWRlciBzdGF0ZSBpbiBkYXRhXG4gICAgICB2YXIgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gJC5kYXRhKGVsLCBuYW1lc3BhY2UsIHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgICBoYXNGb2N1czoge1xuICAgICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxuICAgICAgICAgICAgbW91c2U6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZWw6ICRlbCxcbiAgICAgICAgICBjb25maWc6IHt9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRhdGEubWFzayA9ICRlbC5jaGlsZHJlbignLnctc2xpZGVyLW1hc2snKTtcbiAgICAgIGRhdGEubGVmdCA9ICRlbC5jaGlsZHJlbignLnctc2xpZGVyLWFycm93LWxlZnQnKTtcbiAgICAgIGRhdGEucmlnaHQgPSAkZWwuY2hpbGRyZW4oJy53LXNsaWRlci1hcnJvdy1yaWdodCcpO1xuICAgICAgZGF0YS5uYXYgPSAkZWwuY2hpbGRyZW4oJy53LXNsaWRlci1uYXYnKTtcbiAgICAgIGRhdGEuc2xpZGVzID0gZGF0YS5tYXNrLmNoaWxkcmVuKCcudy1zbGlkZScpO1xuICAgICAgZGF0YS5zbGlkZXMuZWFjaChpeC5yZXNldCk7XG4gICAgICBpZiAoaW5SZWRyYXcpIHtcbiAgICAgICAgZGF0YS5tYXNrV2lkdGggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoJGVsLmF0dHIoJ3JvbGUnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICRlbC5hdHRyKCdyb2xlJywgJ3JlZ2lvbicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJGVsLmF0dHIoJ2FyaWEtbGFiZWwnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICRlbC5hdHRyKCdhcmlhLWxhYmVsJywgJ2Nhcm91c2VsJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBJRCBvZiB0aGUgc2xpZGVyIHNsaWRlIHZpZXcgbWFza1xuICAgICAgdmFyIHNsaWRlVmlld0lkID0gZGF0YS5tYXNrLmF0dHIoJ2lkJyk7XG5cbiAgICAgIC8vIElmIHVzZXIgZGlkIG5vdCBwcm92aWRlIGFuIElELCBzZXQgaXRcbiAgICAgIGlmICghc2xpZGVWaWV3SWQpIHtcbiAgICAgICAgc2xpZGVWaWV3SWQgPSAndy1zbGlkZXItbWFzay0nICsgaTtcbiAgICAgICAgZGF0YS5tYXNrLmF0dHIoJ2lkJywgc2xpZGVWaWV3SWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYXJpYSBsaXZlIGxhYmVsXG4gICAgICBpZiAoIWRlc2lnbmVyICYmICFkYXRhLmFyaWFMaXZlTGFiZWwpIHtcbiAgICAgICAgZGF0YS5hcmlhTGl2ZUxhYmVsID0gJChhcmlhTGl2ZUxhYmVsSHRtbCkuYXBwZW5kVG8oZGF0YS5tYXNrKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGF0dHJpYnV0ZXMgdG8gbGVmdC9yaWdodCBidXR0b25zXG4gICAgICBkYXRhLmxlZnQuYXR0cigncm9sZScsICdidXR0b24nKTtcbiAgICAgIGRhdGEubGVmdC5hdHRyKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICBkYXRhLmxlZnQuYXR0cignYXJpYS1jb250cm9scycsIHNsaWRlVmlld0lkKTtcbiAgICAgIGlmIChkYXRhLmxlZnQuYXR0cignYXJpYS1sYWJlbCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YS5sZWZ0LmF0dHIoJ2FyaWEtbGFiZWwnLCAncHJldmlvdXMgc2xpZGUnKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5yaWdodC5hdHRyKCdyb2xlJywgJ2J1dHRvbicpO1xuICAgICAgZGF0YS5yaWdodC5hdHRyKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICBkYXRhLnJpZ2h0LmF0dHIoJ2FyaWEtY29udHJvbHMnLCBzbGlkZVZpZXdJZCk7XG4gICAgICBpZiAoZGF0YS5yaWdodC5hdHRyKCdhcmlhLWxhYmVsJykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRhLnJpZ2h0LmF0dHIoJ2FyaWEtbGFiZWwnLCAnbmV4dCBzbGlkZScpO1xuICAgICAgfVxuXG4gICAgICAvLyBEaXNhYmxlIGluIG9sZCBicm93c2Vyc1xuICAgICAgaWYgKCF0cmFtLnN1cHBvcnQudHJhbnNmb3JtKSB7XG4gICAgICAgIGRhdGEubGVmdC5oaWRlKCk7XG4gICAgICAgIGRhdGEucmlnaHQuaGlkZSgpO1xuICAgICAgICBkYXRhLm5hdi5oaWRlKCk7XG4gICAgICAgIGZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgb2xkIGV2ZW50c1xuICAgICAgZGF0YS5lbC5vZmYobmFtZXNwYWNlKTtcbiAgICAgIGRhdGEubGVmdC5vZmYobmFtZXNwYWNlKTtcbiAgICAgIGRhdGEucmlnaHQub2ZmKG5hbWVzcGFjZSk7XG4gICAgICBkYXRhLm5hdi5vZmYobmFtZXNwYWNlKTtcblxuICAgICAgLy8gU2V0IGNvbmZpZyBmcm9tIGRhdGEgYXR0cmlidXRlc1xuICAgICAgY29uZmlndXJlKGRhdGEpO1xuXG4gICAgICAvLyBBZGQgZXZlbnRzIGJhc2VkIG9uIG1vZGVcbiAgICAgIGlmIChkZXNpZ25lcikge1xuICAgICAgICBkYXRhLmVsLm9uKCdzZXR0aW5nJyArIG5hbWVzcGFjZSwgaGFuZGxlcihkYXRhKSk7XG4gICAgICAgIHN0b3BUaW1lcihkYXRhKTtcbiAgICAgICAgZGF0YS5oYXNUaW1lciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5lbC5vbignc3dpcGUnICsgbmFtZXNwYWNlLCBoYW5kbGVyKGRhdGEpKTtcbiAgICAgICAgZGF0YS5sZWZ0Lm9uKCdjbGljaycgKyBuYW1lc3BhY2UsIHByZXZpb3VzRnVuY3Rpb24oZGF0YSkpO1xuICAgICAgICBkYXRhLnJpZ2h0Lm9uKCdjbGljaycgKyBuYW1lc3BhY2UsIG5leHQoZGF0YSkpO1xuXG4gICAgICAgIGRhdGEubGVmdC5vbihcbiAgICAgICAgICAna2V5ZG93bicgKyBuYW1lc3BhY2UsXG4gICAgICAgICAga2V5Ym9hcmRTbGlkZUJ1dHRvbnNGdW5jdGlvbihkYXRhLCBwcmV2aW91c0Z1bmN0aW9uKVxuICAgICAgICApO1xuICAgICAgICBkYXRhLnJpZ2h0Lm9uKFxuICAgICAgICAgICdrZXlkb3duJyArIG5hbWVzcGFjZSxcbiAgICAgICAgICBrZXlib2FyZFNsaWRlQnV0dG9uc0Z1bmN0aW9uKGRhdGEsIG5leHQpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTGlzdGVuIHRvIG5hdiBrZXlib2FyZCBldmVudHNcbiAgICAgICAgZGF0YS5uYXYub24oJ2tleWRvd24nICsgbmFtZXNwYWNlLCAnPiBkaXYnLCBoYW5kbGVyKGRhdGEpKTtcblxuICAgICAgICAvLyBTdGFydCB0aW1lciBpZiBhdXRvcGxheSBpcyB0cnVlLCBvbmx5IG9uY2VcbiAgICAgICAgaWYgKGRhdGEuY29uZmlnLmF1dG9wbGF5ICYmICFkYXRhLmhhc1RpbWVyKSB7XG4gICAgICAgICAgZGF0YS5oYXNUaW1lciA9IHRydWU7XG4gICAgICAgICAgZGF0YS50aW1lckNvdW50ID0gMTtcbiAgICAgICAgICBzdGFydFRpbWVyKGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5lbC5vb
13714ignbW91c2VlbnRlcicgKyBuYW1lc3BhY2UsIGhhc0ZvY3VzKGRhdGEsIHRydWUsICdtb3VzZScpKTtcbiAgICAgICAgZGF0YS5lbC5vbignZm9jdXNpbicgKyBuYW1lc3BhY2UsIGhhc0ZvY3VzKGRhdGEsIHRydWUsICdrZXlib2FyZCcpKTtcbiAgICAgICAgZGF0YS5lbC5vbignbW91c2VsZWF2ZScgKyBuYW1lc3BhY2UsIGhhc0ZvY3VzKGRhdGEsIGZhbHNlLCAnbW91c2UnKSk7XG4gICAgICAgIGRhdGEuZWwub24oJ2ZvY3Vzb3V0JyArIG5hbWVzcGFjZSwgaGFzRm9jdXMoZGF0YSwgZmFsc2UsICdrZXlib2FyZCcpKTtcbiAgICAgIH1cblxuICAgICAgLy8gTGlzdGVuIHRvIG5hdiBjbGljayBldmVudHNcbiAgICAgIGRhdGEubmF2Lm9uKCdjbGljaycgKyBuYW1lc3BhY2UsICc+IGRpdicsIGhhbmRsZXIoZGF0YSkpO1xuXG4gICAgICAvLyBSZW1vdmUgZ2FwcyBmcm9tIGZvcm1hdHRlZCBodG1sIChmb3IgaW5saW5lLWJsb2NrcylcbiAgICAgIGlmICghaW5BcHApIHtcbiAgICAgICAgZGF0YS5tYXNrXG4gICAgICAgICAgLmNvbnRlbnRzKClcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVUeXBlID09PSAzO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBzbGlkZXIgb3IgYW55IHBhcmVudCBpcyBoaWRkZW4sIHRlbXBvcmFyaWx5IHNob3cgZm9yIG1lYXN1cmVtZW50cyAoaHR0cHM6Ly9naXRodWIuY29tL3dlYmZsb3cvd2ViZmxvdy9pc3N1ZXMvMjQ5MjEpXG4gICAgICB2Y
13714XIgJGVsSGlkZGVuID0gJGVsLmZpbHRlcignOmhpZGRlbicpO1xuICAgICAgJGVsSGlkZGVuLmFkZENsYXNzKGZvcmNlU2hvdyk7XG4gICAgICB2YXIgJGVsSGlkZGVuUGFyZW50cyA9ICRlbC5wYXJlbnRzKCc6aGlkZGVuJyk7XG4gICAgICAkZWxIaWRkZW5QYXJlbnRzLmFkZENsYXNzKGZvcmNlU2hvdyk7XG5cbiAgICAgIC8vIFJ1biBmaXJzdCByZW5kZXJcbiAgICAgIGlmICghaW5SZWRyYXcpIHtcbiAgICAgICAgcmVuZGVyKGksIGVsKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc2xpZGVyIG9yIGFueSBwYXJlbnQgaXMgaGlkZGVuLCByZXNldCBhZnRlciB0ZW1wb3JhcmlseSBzaG93aW5nIGZvciBtZWFzdXJlbWVudHNcbiAgICAgICRlbEhpZGRlbi5yZW1vdmVDbGFzcyhmb3JjZVNob3cpO1xuICAgICAgJGVsSGlkZGVuUGFyZW50cy5yZW1vdmVDbGFzcyhmb3JjZVNob3cpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ3VyZShkYXRhKSB7XG4gICAgICB2YXIgY29uZmlnID0ge307XG5cbiAgICAgIGNvbmZpZy5jcm9zc092ZXIgPSAwO1xuXG4gICAgICAvLyBTZXQgY29uZmlnIG9wdGlvbnMgZnJvbSBkYXRhIGF0dHJpYnV0ZXNcbiAgICAgIGNvbmZpZy5hbmltYXRpb24gPSBkYXRhLmVsLmF0dHIoJ2RhdGEtYW5pbWF0aW9uJykgfHwgJ3NsaWRlJztcbiAgICAgIGlmIChjb25maWcuYW5pbWF0aW9uID09PSAnb3V0aW4nKSB7XG4gICAgICAgIGNvbmZpZy5hbmltYXRpb24gPSAnY3Jvc3MnO1xuICAgICAgICBjb25maWcuY3Jvc3NPdmVyID0gMC41O1xuICAgICAgfVxuICAgICAgY29uZmlnLmVhc2luZyA9IGRhdGEuZWwuYXR0cignZGF0YS1lYXNpbmcnKSB8fCAnZWFzZSc7XG5cbiAgICAgIHZhciBkdXJhdGlvbiA9IGRhdGEuZWwuYXR0cignZGF0YS1kdXJhdGlvbicpO1xuICAgICAgY29uZmlnLmR1cmF0aW9uID0gZHVyYXRpb24gIT0gbnVsbCA/IHBhcnNlSW50KGR1cmF0aW9uLCAxMCkgOiA1MDA7XG5cbiAgICAgIGlmIChpc0F0dHJUcnVlKGRhdGEuZWwuYXR0cignZGF0YS1pbmZpbml0ZScpKSkge1xuICAgICAgICBjb25maWcuaW5maW5pdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBdHRyVHJ1ZShkYXRhLmVsLmF0dHIoJ2RhdGEtZGlzYWJsZS1zd2lwZScpKSkge1xuICAgICAgICBjb25maWcuZGlzYWJsZVN3aXBlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXR0clRydWUoZGF0YS5lbC5hdHRyKCdkYXRhLWhpZGUtYXJyb3dzJykpKSB7XG4gICAgICAgIGNvbmZpZy5oaWRlQXJyb3dzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5jb25maWcuaGlkZUFycm93cykge1xuICAgICAgICBkYXRhLmxlZnQuc2hvdygpO1xuICAgICAgICBkYXRhLnJpZ2h0LnNob3coKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXR0clRydWUoZGF0YS5lbC5hdHRyKCdkYXRhLWF1dG9wbGF5JykpKSB7XG4gICAgICAgIGNvbmZpZy5hdXRvcGxheSA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5kZWxheSA9IHBhcnNlSW50KGRhdGEuZWwuYXR0cignZGF0YS1kZWxheScpLCAxMCkgfHwgMjAwMDtcbiAgICAgICAgY29uZmlnLnRpbWVyTWF4ID0gcGFyc2VJbnQoZGF0YS5lbC5hdHRyKCdkYXRhLWF1dG9wbGF5LWxpbWl0JyksIDEwKTtcbiAgICAgICAgLy8gRGlzYWJsZSB0aW1lciBvbiBmaXJzdCB0b3VjaCBvciBtb3VzZSBkb3duXG4gICAgICAgIHZhciB0b3VjaEV2ZW50cyA9ICdtb3VzZWRvd24nICsgbmFtZXNwYWNlICsgJyB0b3VjaHN0YXJ0JyArIG5hbWVzcGFjZTtcbiAgICAgICAgaWYgKCFkZXNpZ25lcikge1xuICAgICAgICAgIGRhdGEuZWwub2ZmKHRvdWNoRXZlbnRzKS5vbmUodG91Y2hFdmVudHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0b3BUaW1lcihkYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVc2UgZWRnZSBidWZmZXIgdG8gaGVscCBjYWxjdWxhdGUgcGFnZSBjb3VudFxuICAgICAgdmFyIGFycm93V2lkdGggPSBkYXRhLnJpZ2h0LndpZHR
13714oKCk7XG4gICAgICBjb25maWcuZWRnZSA9IGFycm93V2lkdGggPyBhcnJvd1dpZHRoICsgNDAgOiAxMDA7XG5cbiAgICAgIC8vIFN0b3JlIGNvbmZpZyBpbiBkYXRhXG4gICAgICBkYXRhLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0F0dHJUcnVlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0ZvY3VzKGRhdGEsIGZvY3VzSW4sIGV2ZW50VHlwZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgaWYgKCFmb2N1c0luKSB7XG4gICAgICAgICAgLy8gUHJldmVudCBGb2N1cyBPdXQgaWYgbW92aW5nIHRvIGFub3RoZXIgZWxlbWVudCBpbiB0aGUgc2xpZGVyXG4gICAgICAgICAgaWYgKCQuY29udGFpbnMoZGF0YS5lbC5nZXQoMCksIGV2dC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEuaGFzRm9jdXNbZXZlbnRUeXBlXSA9IGZvY3VzSW47XG5cbiAgICAgICAgICAvLyBQcmV2ZW50IEFyaWEgbGl2ZSBjaGFuZ2UgaWYgZm9jdXNlZCBieSBvdGhlciBpbnB1dFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChkYXRhLmhhc0ZvY3VzLm1vdXNlICYmIGV2ZW50VHlwZSA9PT0gJ2tleWJvYXJkJykgfHxcbiAgICAgICAgICAgIChkYXRhLmhhc0ZvY3VzLmtleWJvYXJkICYmIGV2ZW50VHlwZSA9PT0gJ21vdXNlJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YS5oYXNGb2N1c1tldmVudFR5cGVdID0gZm9jdXNJbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb2N1c0luKSB7XG4gICAgICAgICAgZGF0YS5hcmlhTGl2ZUxhYmVsLmF0dHIoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcbiAgICAgICAgICBpZiAoZGF0YS5oYXNUaW1lcikge1xuICAgICAgICAgICAgc3RvcFRpbWVyKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhLmFyaWFMaXZlTGFiZWwuYXR0cignYXJpYS1saXZlJywgJ29mZicpO1xuICAgICAgICAgIGlmIChkYXRhLmhhc1RpbWVyKSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5Ym9hcmRTbGlkZUJ1dHRvbnNGdW5jdGlvbihkYXRhLCBkaXJlY3Rpb25GdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLlNQQUNFOlxuICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkVOVEVSOiB7XG4gICAgICAgICAgICAvLyBEaXJlY3Rpb25GdW5jdGlvbiByZXR1cm5zIGEgZnVuY3Rpb25cbiAgICAgICAgICAgIGRpcmVjdGlvbkZ1bmN0aW9uKGRhdGEpKCk7XG5cbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJldmlvdXNGdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGFuZ2UoZGF0YSwge2luZGV4OiBkYXRhLmluZGV4IC0gMSwgdmVjdG9yOiAtMX0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXh0KGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNoYW5nZShkYXRhLCB7aW5kZXg6IGRhdGEuaW5kZXggKyAxLCB2ZWN0b3I6IDF9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2VsZWN0KGRhdGEsIHZhbHVlKSB7XG4gICAgICAvLyBTZWxlY3QgcGFnZSBiYXNlZCBvbiBzbGlkZSBlbGVtZW50IGluZGV4XG4gICAgICB2Y
13714XIgZm91bmQgPSBudWxsO1xuICAgICAgaWYgKHZhbHVlID09PSBkYXRhLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgaW5pdCgpO1xuICAgICAgICBsYXlvdXQoZGF0YSk7IC8vIFJlYnVpbGQgYW5kIGZpbmQgbmV3IHNsaWRlc1xuICAgICAgfVxuICAgICAgXy5lYWNoKGRhdGEuYW5jaG9ycywgZnVuY3Rpb24gKGFuY2hvciwgaW5kZXgpIHtcbiAgICAgICAgJChhbmNob3IuZWxzKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICAgIGlmICgkKGVsKS5pbmRleCgpID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgZm91bmQgPSBpbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoZm91bmQgIT0gbnVsbCkge1xuICAgICAgICBjaGFuZ2UoZGF0YSwge2luZGV4OiBmb3VuZCwgaW1tZWRpYXRlOiB0cnVlfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRUaW1lcihkYXRhKSB7XG4gICAgICBzdG9wVGltZXIoZGF0YSk7XG4gICAgICB2YXIgY29uZmlnID0gZGF0YS5jb25maWc7XG4gICAgICB2YXIgdGltZXJNYXggPSBjb25maWcudGltZXJNYXg7XG4gICAgICBpZiAodGltZXJNYXggJiYgZGF0YS50aW1lckNvdW50KysgPiB0aW1lck1heCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkYXRhLnRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkYXRhLnRpbWVySWQgPT0gbnVsbCB8fCBkZXNpZ25lcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KGRhdGEpKCk7XG4gICAgICAgIHN0YXJ0VGltZXIoZGF0YSk7XG4gICAgICB9LCBjb25maWcuZGVsYXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0b3BUaW1lcihkYXRhKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGRhdGEudGltZXJJZCk7XG4gICAgICBkYXRhLnRpbWVySWQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZXIoZGF0YSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcblxuICAgICAgICAvLyBEZXNpZ25lciBzZXR0aW5nc1xuICAgICAgICBpZiAoZGVzaWduZXIgJiYgZXZ0LnR5cGUgPT09ICdzZXR0aW5nJykge1xuICAgICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCA9PT0gJ3ByZXYnKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNGdW5jdGlvbihkYXRhKSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5zZWxlY3QgPT09ICduZXh0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoZGF0YSkoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uZmlndXJlKGRhdGEpO1xuICAgICAgICAgIGxheW91dChkYXRhKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zZWxlY3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3QoZGF0YSwgb3B0aW9ucy5zZWxlY3QpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN3aXBlIGV2ZW50XG4gICAgICAgIGlmIChldnQudHlwZSA9PT0gJ3N3aXBlJykge1xuICAgICAgICAgIGlmIChjb25maWcuZGlzYWJsZVN3aXBlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChXZWJmbG93LmVudignZWRpdG9yJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGRhdGEpKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzRnVuY3Rpb24oZGF0YSkoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFnZSBidXR0b25zXG4gICAgICAgIGlmIChkYXRhLm5hdi5oYXMoZXZ0LnRhcmdldCkubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gJChldnQudGFyZ2V0KS5pbmRleCgpO1xuICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgY2hhbmdlKGRhdGEsIHtpbmRleH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2tleWRvd24nKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV2dC5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkVOVEVSOlxuICAgICAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5TUEFDRToge1xuICAgICAgICAgICAgICAgIGNoYW5nZShkYXRhLCB7aW5kZXh9KTtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkFSUk9XX0xFRlQ6XG4gICAgICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkFSUk9XX1VQOiB7XG4gICAgICAgICAgICAgICAgZm9jdXNEb3QoZGF0YS5uYXYsIE1hdGgubWF4KGluZGV4IC0gMSwgMCkpO1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBLRVlfQ09ERVMuQVJST1dfUklHSFQ6XG4gICAgICAgICAgICAgIGNhc2UgS0VZX0NPREVTLkFSUk9XX0RPV046IHtcbiAgICAgICAgICAgICAgICBmb2N1c0RvdChkYXRhLm5hdiwgTWF0aC5taW4oaW5kZXggKyAxLCBkYXRhLnBhZ2VzKSk7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbn
13714REZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlIEtFWV9DT0RFUy5IT01FOiB7XG4gICAgICAgICAgICAgICAgZm9jdXNEb3QoZGF0YS5uYXYsIDApO1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSBLRVlfQ09ERVMuRU5EOiB7XG4gICAgICAgICAgICAgICAgZm9jdXNEb3QoZGF0YS5uYXYsIGRhdGEucGFnZXMpO1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb2N1c0RvdCgkbmF2LCBpbmRleCkge1xuICAgICAgLy8gRm9jdXMgbmF2IGRvdDsgZG9uJ3QgY2hhbmdlIGNsYXNzIHRvIGFjdGl2ZVxuICAgICAgdmFyICRhY3RpdmUgPSAkbmF2LmNoaWxkcmVuKCkuZXEoaW5kZXgpLmZvY3VzKCk7XG5cbiAgICAgICRuYXYuY2hpbGRyZW4oKS5ub3QoJGFjdGl2ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hhbmdlKGRhdGEsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgdmFyIGNvbmZpZyA9IGRhdGEuY29uZmlnO1xuICAgICAgdmFyIGFuY2hvcnMgPSBkYXRhLmFuY2hvcnM7XG5cbiAgICAgIC8vIFNldCBuZXcgaW5kZXhcbiAgICAgIGRhdGEucHJldmlvdXMgPSBkYXRhLmluZGV4O1xuICAgICAgdmFyIGluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgIHZhciBzaGlmdCA9IHt9O1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IGFuY2hvcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKGNvbmZpZy5pbmZpbml0ZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IGZpcnN0IHNsaWRlIHRvIHRoZSBlbmRcbiAgICAgICAgICBzaGlmdC54ID0gLWRhdGEuZW5kWDtcbiAgICAgICAgICBzaGlmdC5mcm9tID0gMDtcbiAgICAgICAgICBzaGlmdC50byA9IGFuY2hvcnNbMF0ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPj0gYW5jaG9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICBpZiAoY29uZmlnLmluZmluaXRlKSB7XG4gICAgICAgICAgLy8gU2hpZnQgbGFzdCBzbGlkZSB0byB0aGUgc3RhcnRcbiAgICAgICAgICBzaGlmdC54ID0gYW5jaG9yc1thbmNob3JzLmxlbmd0aCAtIDFdLndpZHRoO1xuICAgICAgICAgIHNoaWZ0LmZyb20gPSAtYW5jaG9yc1thbmNob3JzLmxlbmd0aCAtIDFdLng7XG4gICAgICAgICAgc2hpZnQudG8gPSBzaGlmdC5mcm9tIC0gc2hpZnQueDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YS5pbmRleCA9IGluZGV4O1xuXG4gICAgICAvLyBTZWxlY3QgbmF2IGRvdDsgc2V0IGNsYXNzIGFjdGl2ZVxuICAgICAgdmFyICRhY3RpdmUgPSBkYXRhLm5hdlxuICAgICAgICAuY2hpbGRyZW4oKVxuICAgICAgICAuZXEoaW5kZXgpXG4gICAgICAgIC5hZGRDbGFzcygndy1hY3RpdmUnKVxuICAgICAgICAuYXR0cignYXJpYS1wcmVzc2VkJywgJ3RydWUnKVxuICAgICAgICAuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuXG4gICAgICBkYXRhLm5hdlxuICAgICAgICAuY2hpbGRyZW4oKVxuICAgICAgICAubm90KCRhY3RpdmUpXG4gICAgICAgIC5yZW1vdmVDbGFzcygndy1hY3RpdmUnKVxuICAgICAgICAuYXR0cignYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJylcbiAgICAgICAgLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG5cbiAgICAgIC8vIEhpZGUgYXJyb3dzXG4gICAgICBpZiAoY29uZmlnLmhpZGVBcnJvd3MpIHtcbiAgICAgICAgZGF0YS5pbmRleCA9PT0gYW5jaG9ycy5sZW5ndGggLSAxXG4gICAgICAgICAgPyBkYXRhLnJpZ2h0LmhpZGUoKVxuICAgICAgICAgIDogZGF0YS5yaWdodC5zaG93KCk7XG4gICAgICAgIGRhdGEuaW5kZXggPT09IDAgPyBkYXRhLmxlZnQuaGlkZSgpIDogZGF0YS5sZWZ0LnNob3coKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHBhZ2Ugb2Zmc2V0IGZyb20gYW5jaG9yc1xuICAgICAgdmFyIGxhc3RPZmZzZXRYID0gZGF0YS5vZmZzZXRYIHx8IDA7XG4gICAgICB2Y
13714XIgb2Zmc2V0WCA9IChkYXRhLm9mZnNldFggPSAtYW5jaG9yc1tkYXRhLmluZGV4XS54KTtcbiAgICAgIHZhciByZXNldENvbmZpZyA9IHt4OiBvZmZzZXRYLCBvcGFjaXR5OiAxLCB2aXNpYmlsaXR5OiAnJ307XG5cbiAgICAgIC8vIFRyYW5zaXRpb24gc2xpZGVzXG4gICAgICB2YXIgdGFyZ2V0cyA9ICQoYW5jaG9yc1tkYXRhLmluZGV4XS5lbHMpO1xuICAgICAgdmFyIHByZXZUYXJncyA9ICQoYW5jaG9yc1tkYXRhLnByZXZpb3VzXSAmJiBhbmNob3JzW2RhdGEucHJldmlvdXNdLmVscyk7XG4gICAgICB2YXIgb3RoZXJzID0gZGF0YS5zbGlkZXMubm90KHRhcmdldHMpO1xuICAgICAgdmFyIGFuaW1hdGlvbiA9IGNvbmZpZy5hbmltYXRpb247XG4gICAgICB2YXIgZWFzaW5nID0gY29uZmlnLmVhc2luZztcbiAgICAgIHZhciBkdXJhdGlvbiA9IE1hdGgucm91bmQoY29uZmlnLmR1cmF0aW9uKTtcbiAgICAgIHZhciB2ZWN0b3IgPSBvcHRpb25zLnZlY3RvciB8fCAoZGF0YS5pbmRleCA+IGRhdGEucHJldmlvdXMgPyAxIDogLTEpO1xuICAgICAgdmFyIGZhZGVSdWxlID0gJ29wYWNpdHkgJyArIGR1cmF0aW9uICsgJ21zICcgKyBlYXNpbmc7XG4gICAgICB2YXIgc2xpZGVSdWxlID0gJ3RyYW5zZm9ybSAnICsgZHVyYXRpb24gKyAnbXMgJyArIGVhc2luZztcblxuICAgICAgLy8gTWFrZSBhY3RpdmUgc2xpZGVzJyBjb250ZW50IGZvY3VzYWJsZVxuICAgICAgdGFyZ2V0cy5maW5kKEZPQ1VTQUJMRV9TRUxFQ1RPUikucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICAgIHRhcmdldHMucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKTtcbiAgICAgIC8vIFZvaWNlb3ZlciBidWc6IFNvbWV0aW1lcyBkZXNjZW5kYW50cyBhcmUgc3RpbGwgdmlzaWJsZSwgc28gaGlkZSBldmVyeXRoaW5nLi4uXG4gICAgICB0YXJnZXRzLmZpbmQoJyonKS5yZW1vdmVBdHRyKCdhcmlhLWh
13714pZGRlbicpO1xuICAgICAgLy8gUHJldmVudCBmb2N1cyBvbiBpbmFjdGl2ZSBzbGlkZXMnIGNvbnRlbnRcbiAgICAgIG90aGVycy5maW5kKEZPQ1VTQUJMRV9TRUxFQ1RPUikuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIG90aGVycy5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAvLyBWb2ljZW92ZXIgYnVnOiBTb21ldGltZXMgZGVzY2VuZGFudHMgYXJlIHN0aWxsIHZpc2libGUsIHNvIGhpZGUgZXZlcnl0aGluZy4uLlxuICAgICAgb3RoZXJzLmZpbmQoJyonKS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAgIC8vIFRyaWdnZXIgSVggZXZlbnRzXG4gICAgICBpZiAoIWRlc2lnbmVyKSB7XG4gICAgICAgIHRhcmdldHMuZWFjaChpeC5pbnRybyk7XG4gICAgICAgIG90aGVycy5lYWNoKGl4Lm91dHJvKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGltbWVkaWF0ZWx5IGFmdGVyIGxheW91dCBjaGFuZ2VzIChidXQgbm90IGR1cmluZyByZWRyYXcpXG4gICAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUgJiYgIWluUmVkcmF3KSB7XG4gICAgICAgIHRyYW0odGFyZ2V0cykuc2V0KHJlc2V0Q29uZmlnKTtcbiAgICAgICAgcmVzZXRPdGhlcnMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBFeGl0IGVhcmx5IGlmIGluZGV4IGlzIHVuY2hhbmdlZFxuICAgICAgaWYgKGRhdGEuaW5kZXggPT09IGRhdGEucHJldmlvdXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBbm5vdW5jZSBzbGlkZSBjaGFuZ2UgdG8gc2NyZWVuIHJlYWRlclxuICAgICAgaWYgKCFkZXNpZ25lcikge1xuICAgICAgICBkYXRhLmFyaWFMaXZlTGFiZWwudGV4dChgU2xpZGUgJHtpbmRleCArIDF9IG9mICR7YW5jaG9ycy5sZW5ndGh9LmApO1xuICAgICAgfVxuICAgICAgLy8gQ3Jvc3MgRmFkZSAvIE91dC1JblxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gJ2Nyb3NzJykge1xuICAgICAgICB2Y
13714XIgcmVkdWNlZCA9IE1hdGgucm91bmQoZHVyYXRpb24gLSBkdXJhdGlvbiAqIGNvbmZpZy5jcm9zc092ZXIpO1xuICAgICAgICB2YXIgd2FpdCA9IE1hdGgucm91bmQoZHVyYXRpb24gLSByZWR1Y2VkKTtcbiAgICAgICAgZmFkZVJ1bGUgPSAnb3BhY2l0eSAnICsgcmVkdWNlZCArICdtcyAnICsgZWFzaW5nO1xuICAgICAgICB0cmFtKHByZXZUYXJncykuc2V0KHt2aXNpYmlsaXR5OiAnJ30pLmFkZChmYWRlUnVsZSkuc3RhcnQoe29wYWNpdHk6IDB9KTtcbiAgICAgICAgdHJhbSh0YXJnZXRzKVxuICAgICAgICAgIC5zZXQoe3Zpc2liaWxpdHk6ICcnLCB4OiBvZmZzZXRYLCBvcGFjaXR5OiAwLCB6SW5kZXg6IGRhdGEuZGVwdGgrK30pXG4gICAgICAgICAgLmFkZChmYWRlUnVsZSlcbiAgICAgICAgICAud2FpdCh3YWl0KVxuICAgICAgICAgIC50aGVuKHtvcGFjaXR5OiAxfSlcbiAgICAgICAgICAudGhlbihyZXNldE90aGVycyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFkZSBPdmVyXG4gICAgICBpZiAoYW5pbWF0aW9uID09PSAnZmFkZScpIHtcbiAgICAgICAgdHJhbShwcmV2VGFyZ3MpLnNldCh7dmlzaWJpbGl0eTogJyd9KS5zdG9wKCk7XG4gICAgICAgIHRyYW0odGFyZ2V0cylcbiAgICAgICAgICAuc2V0KHt2aXNpYmlsaXR5OiAnJywgeDogb2Zmc2V0WCwgb3BhY2l0eTogMCwgekluZGV4OiBkYXRhLmRlcHRoKyt9KVxuICAgICAgICAgIC5hZGQoZmFkZVJ1bGUpXG4gICAgICAgICAgLnN0YXJ0KHtvcGFjaXR5OiAxfSlcbiAgICAgICAgICAudGhlbihyZXNldE90aGVycyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2xpZGUgT3ZlclxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gJ292ZXInKSB7XG4gICAgICAgIHJlc2V0Q29uZmlnID0ge3g6IGRhdGEuZW5kWH07XG4gICAgICAgIHRyYW0ocHJldlRhcmdzKS5zZXQoe3Zpc2liaWxpdHk6ICcnfSkuc3RvcCgpO1xuICAgICAgICB0cmFtKHRhcmdldHMpXG4gICAgICAgICAgLnNldCh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiAnJyxcbiAgICAgICAgICAgIHpJbmRleDogZGF0YS5kZXB0aCsrLFxuICAgICAgICAgICAgeDogb2Zmc2V0WCArIGFuY2hvcnNbZGF0YS5pbmRleF0ud2lkdGggKiB2ZWN0b3IsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWRkKHNsaWRlUnVsZSlcbiAgICAgICAgICAuc3RhcnQoe3g6IG9mZnNldFh9KVxuICAgICAgICAgIC50aGVuKHJlc2V0T3RoZXJzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTbGlkZSAtIGluZmluaXRlIHNjcm9sbFxuICAgICAgaWYgKGNvbmZpZy5pbmZpbml0ZSAmJiBzaGlmdC54KSB7XG4gICAgICAgIHRyYW0oZGF0YS5zbGlkZXMubm90KHByZXZUYXJncykpXG4gICAgICAgICAgLnNldCh7dmlzaWJpbGl0eTogJycsIHg6IHNoaWZ0Lnh9KVxuICAgICAgICAgIC5hZGQoc2xpZGVSdWxlKVxuICAgICAgICAgIC5zdGFydCh7eDogb2Zmc2V0WH0pO1xuICAgICAgICB0cmFtKHByZXZUYXJncylcbiAgICAgICAgICAuc2V0KHt2aXNpYmlsaXR5OiAnJywgeDogc2hpZnQuZnJvbX0pXG4gICAgICAgICAgLmFkZChzbGlkZVJ1bGUpXG4gICAgICAgICAgLnN0YXJ0KHt4OiBzaGlmdC50b30pO1xuICAgICAgICBkYXRhLnNoaWZ0ZWQgPSBwcmV2VGFyZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29uZmlnLmluZmluaXRlICYmIGRhdGEuc2hpZnRlZCkge1xuICAgICAgICAgIHRyYW0oZGF0YS5zaGlmdGVkKS5zZXQoe3Zpc2liaWxpdHk6ICcnLCB4OiBsYXN0T2Zmc2V0WH0pO1xuICAgICAgICAgIGRhdGEuc2hpZnRlZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTbGlkZSAtIGJhc2ljIHNjcm9sbFxuICAgICAgICB0cmFtKGRhdGEuc2xpZGVzKVxuICAgICAgICAgIC5zZXQoe3Zpc2liaWxpdHk6ICcnfSlcbiAgICAgICAgICAuYWRkKHNsaWRlUnVsZSlcbiAgICAgICAgICAuc3RhcnQoe3g6IG9mZnNldFh9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSGVscGVyIHRvIG1vdmUgb3RoZXJzIG91dCBvZiB2aWV3XG4gICAgICBmdW5jdGlvbiByZXNldE90aGVycygpIHtcbiAgICAgICAgdGFyZ2V0cyA9ICQoYW5jaG9yc1tkYXRhLmluZGV4XS5lbHMpO1xuICAgICAgICBvdGhlcnMgPSBkYXRhLnNsaWRlcy5ub3QodGFyZ2V0cyk7XG4gICAgICAgIGlmIChhbmltYXRpb24gIT09ICdzbGlkZScpIHtcbiAgICAgICAgICByZXNldENvbmZpZy52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbShvdGhlcnMpLnNldChyZXNldENvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyKGksIGVsKSB7XG4gICAgICB2Y
13714XIgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobWFza0NoYW5nZWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGxheW91dChkYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZXNpZ25lciAmJiBzbGlkZXNDaGFuZ2VkKGRhdGEpKSB7XG4gICAgICAgIGxheW91dChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsYXlvdXQoZGF0YSkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHBhZ2UgY291bnQgZnJvbSB3aWR0aCBvZiBzbGlkZXNcbiAgICAgIHZhciBwYWdlcyA9IDE7XG4gICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgIHZhciBhbmNob3IgPSAwO1xuICAgICAgdmFyIHdpZHRoID0gMDtcbiAgICAgIHZhciBtYXNrV2lkdGggPSBkYXRhLm1hc2tXaWR0aDtcbiAgICAgIHZhciB0aHJlc2hvbGQgPSBtYXNrV2lkdGggLSBkYXRhLmNvbmZpZy5lZGdlO1xuICAgICAgaWYgKHRocmVzaG9sZCA8IDApIHtcbiAgICAgICAgdGhyZXNob2xkID0gMDtcbiAgICAgIH1cbiAgICAgIGRhdGEuYW5jaG9ycyA9IFt7ZWxzOiBbXSwgeDogMCwgd2lkdGg6IDB9XTtcbiAgICAgIGRhdGEuc2xpZGVzLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChhbmNob3IgLSBvZmZzZXQgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICBwYWdlcysrO1xuICAgICAgICAgIG9mZnNldCArPSBtYXNrV2lkdGg7XG4gICAgICAgICAgLy8gU3RvcmUgcGFnZSBhbmNob3IgZm9yIHRyYW5zaXRpb25cbiAgICAgICAgICBkYXRhLmFuY2hvcnNbcGFnZXMgLSAxXSA9IHtlbHM6IFtdLCB4OiBhbmNob3IsIHdpZHRoOiAwfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgbmV4dCBhbmNob3IgdXNpbmcgY3VycmVudCB3aWR0aCArIG1hcmdpblxuICAgICAgICB3aWR0aCA9ICQoZWwpLm91dGVyV2lkdGgodHJ1ZSk7XG4gICAgICAgIGFuY2hvciArPSB3aWR0aDtcbiAgICAgICAgZGF0YS5hbmNob3JzW3BhZ2VzIC0gMV0ud2lkdGggKz0gd2lkdGg7XG4gICAgICAgIGRhdGEuYW5jaG9yc1twYWdlcyAtIDFdLmVscy5wdXNoKGVsKTtcblxuICAgICAgICB2Y
13714XIgYXJpYUxhYmVsID0gaSArIDEgKyAnIG9mICcgKyBkYXRhLnNsaWRlcy5sZW5ndGg7XG4gICAgICAgICQoZWwpLmF0dHIoJ2FyaWEtbGFiZWwnLCBhcmlhTGFiZWwpO1xuICAgICAgICAkKGVsKS5hdHRyKCdyb2xlJywgJ2dyb3VwJyk7XG4gICAgICB9KTtcbiAgICAgIGRhdGEuZW5kWCA9IGFuY2hvcjtcblxuICAgICAgLy8gQnVpbGQgZG90cyBpZiBuYXYgZXhpc3RzIGFuZCBuZWVkcyB1cGRhdGluZ1xuICAgICAgaWYgKGRlc2lnbmVyKSB7XG4gICAgICAgIGRhdGEucGFnZXMgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEubmF2Lmxlbmd0aCAmJiBkYXRhLnBhZ2VzICE9PSBwYWdlcykge1xuICAgICAgICBkYXRhLnBhZ2VzID0gcGFnZXM7XG4gICAgICAgIGJ1aWxkTmF2KGRhdGEpO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgaW5kZXggaXMgc3RpbGwgd2l0aGluIHJhbmdlIGFuZCBjYWxsIGNoYW5nZSBoYW5kbGVyXG4gICAgICB2YXIgaW5kZXggPSBkYXRhLmluZGV4O1xuICAgICAgaWYgKGluZGV4ID49IHBhZ2VzKSB7XG4gICAgICAgIGluZGV4ID0gcGFnZXMgLSAxO1xuICAgICAgfVxuICAgICAgY2hhbmdlKGRhdGEsIHtpbW1lZGlhdGU6IHRydWUsIGluZGV4fSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGROYXYoZGF0YSkge1xuICAgICAgdmFyIGRvdHMgPSBbXTtcbiAgICAgIHZhciAkZG90O1xuICAgICAgdmFyIHNwYWNpbmcgPSBkYXRhLmVsLmF0dHIoJ2RhdGEtbmF2LXNwYWNpbmcnKTtcbiAgICAgIGlmIChzcGFjaW5nKSB7XG4gICAgICAgIHNwYWNpbmcgPSBwYXJzZUZsb2F0KHNwYWNpbmcpICsgJ3B4JztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkYXRhLnBhZ2VzOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgJGRvdCA9ICQoZG90KTtcbiAgICAgICAgJGRvdFxuICAgICAgICAgIC5hdHRyKCdhcmlhLWxhYmVsJywgJ1Nob3cgc2xpZGUgJyArIChpICsgMSkgKyAnIG9mICcgKyBsZW4pXG4gICAgICAgICAgLmF0dHIoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpXG4gICAgICAgICAgLmF0dHIoJ3JvbGUnLCAnYnV0dG9uJylcbiAgICAgICAgICAuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgaWYgKGRhdGEubmF2Lmhhc0NsYXNzKCd3LW51bScpKSB7XG4gICAgICAgICAgJGRvdC50ZXh0KGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BhY2luZyAhPSBudWxsKSB7XG4gICAgICAgICAgJGRvdC5jc3Moe1xuICAgICAgICAgICAgJ21hcmdpbi1sZWZ0Jzogc3BhY2luZyxcbiAgICAgICAgICAgICdtYXJnaW4tcmlnaHQnOiBzcGFjaW5nLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvdHMucHVzaCgkZG90KTtcbiAgICAgIH1cbiAgICAgIGRhdGEubmF2LmVtcHR5KCkuYXBwZW5kKGRvdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hc2tDaGFuZ2VkKGRhdGEpIHtcbiAgICAgIHZhciBtYXNrV2lkdGggPSBkYXRhLm1hc2sud2lkdGgoKTtcbiAgICAgIGlmIChkYXRhLm1hc2tXaWR0aCAhPT0gbWFza1dpZHRoKSB7XG4gICAgICAgIGRhdGEubWFza1dpZHRoID0gbWFza1dpZHRoO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzbGlkZXNDaGFuZ2VkKGRhdGEpIHtcbiAgICAgIHZhciBzbGlkZXNXaWR0aCA9IDA7XG4gICAgICBkYXRhLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICBzbGlkZXNXaWR0aCArPSAkKGVsKS5vdXRlcldpZHRoKHRydWUpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZGF0YS5zbGlkZXNXaWR0aCAhPT0gc2xpZGVzV2lkdGgpIHtcbiAgICAgICAgZGF0YS5zbGlkZXNXaWR0aCA9IHNsaWRlc1dpZHRoO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJJWEV2ZW50cyIsIktFWV9DT0RFUyIsIkFSUk9XX0xFRlQiLCJBUlJPV19VUCIsIkFSUk9XX1JJR0hUIiwiQVJST1dfRE9XTiIsIlNQQUNFIiwiRU5URVIiLCJIT01FIiwiRU5EIiwiRk9DVVNBQkxFX1NFTEVDVE9SIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJfIiwiYXBpIiwidHJhbSIsIiRkb2MiLCJkb2N1bWVudCIsIiRzbGlkZXJzIiwiZGVzaWduZXIiLCJpbkFwcCIsImVudiIsIm5hbWVzcGFjZSIsImRvdCIsImFyaWFMaXZlTGFiZWxIdG1sIiwiZm9yY2VTaG93IiwiaXgiLCJ0cmlnZ2VycyIsImZhbGxiYWNrIiwiaW5SZWRyYXciLCJyZWFkeSIsImluaXQiLCJkZXNpZ24iLCJzZXRUaW1lb3V0IiwicHJldmlldyIsInJlZHJhdyIsImRlc3Ryb3kiLCJyZW1vdmVMaXN0ZW5lcnMiLCJmaW5kIiwibGVuZ3RoIiwiZWFjaCIsImJ1aWxkIiwiYWRkTGlzdGVuZXJzIiwicmVzaXplIiwib2ZmIiwicmVuZGVyQWxsIiwib24iLCJmaWx0ZXIiLCJyZW5kZXIiLCJpIiwiZWwiLCIkZWwiLCJkYXRhIiwiaW5kZXgiLCJkZXB0aCIsImhhc0ZvY3VzIiwia2V5Ym9hcmQiLCJtb3VzZSIsImNvbmZpZyIsIm1hc2siLCJjaGlsZHJlbiIsImxlZnQiLCJyaWdodCIsIm5hdiIsInNsaWRlcyIsInJlc2V0IiwibWFza1dpZHRoIiwiYXR0ciIsInVuZGVmaW5lZCIsInNsaWRlVmlld0lkIiwiYXJpYUxpdmVMYWJlbCIsImFwcGVuZFRvIiwic3VwcG9ydCIsInRyYW5zZm9ybSIsImhpZGUiLCJjb25maWd1cmUiLCJoYW5kbGVyIiwic3RvcFRpbWVyIiwiaGFzVGltZXIiLCJwcmV2aW91c0Z1bmN0aW9uIiwibmV4dCIsImtleWJvYXJkU2xpZGVCdXR0b25zRnVuY3Rpb24iLCJhdXRvcGxheSIsInRpbWVyQ291bnQiLCJzdGFydFRpbWVyIiwiY29udGVudHMiLCJub2RlVHlwZSIsInJlbW92ZSIsIiRlbEhpZGRlbiIsImFkZENsYXNzIiwiJGVsSGlkZGVuUGFyZW50cyIsInBhcmVudHMiLCJyZW1vdmVDbGFzcyIsImNyb3NzT3ZlciIsImFuaW1hdGlvbiIsImVhc2luZyIsImR1cmF0aW9uIiwicGFyc2VJbnQiLCJpc0F0dHJUcnVlIiwiaW5maW5pdGUiLCJkaXNhYmxlU3dpcGUiLCJoaWRlQXJyb3dzIiwic2hvdyIsImRlbGF5IiwidGltZXJNYXgiLCJ0b3VjaEV2ZW50cyIsIm9uZSIsImFycm93V2lk
13714dGgiLCJ3aWR0aCIsImVkZ2UiLCJ2YWx1ZSIsImZvY3VzSW4iLCJldmVudFR5cGUiLCJldnQiLCJjb250YWlucyIsImdldCIsInJlbGF0ZWRUYXJnZXQiLCJkaXJlY3Rpb25GdW5jdGlvbiIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImNoYW5nZSIsInZlY3RvciIsInNlbGVjdCIsImZvdW5kIiwibGF5b3V0IiwiYW5jaG9ycyIsImFuY2hvciIsImVscyIsImltbWVkaWF0ZSIsInRpbWVySWQiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJvcHRpb25zIiwidHlwZSIsImRpcmVjdGlvbiIsImhhcyIsInRhcmdldCIsImZvY3VzRG90IiwiTWF0aCIsIm1heCIsIm1pbiIsInBhZ2VzIiwiJG5hdiIsIiRhY3RpdmUiLCJlcSIsImZvY3VzIiwibm90IiwicHJldmlvdXMiLCJzaGlmdCIsIngiLCJlbmRYIiwiZnJvbSIsInRvIiwibGFzdE9mZnNldFgiLCJvZmZzZXRYIiwicmVzZXRDb25maWciLCJvcGFjaXR5IiwidmlzaWJpbGl0eSIsInRhcmdldHMiLCJwcmV2VGFyZ3MiLCJvdGhlcnMiLCJyb3VuZCIsImZhZGVSdWxlIiwic2xpZGVSdWxlIiwicmVtb3ZlQXR0ciIsImludHJvIiwib3V0cm8iLCJzZXQiLCJyZXNldE90aGVycyIsInRleHQiLCJyZWR1Y2VkIiwid2FpdCIsImFkZCIsInN0YXJ0IiwiekluZGV4IiwidGhlbiIsInN0b3AiLCJzaGlmdGVkIiwibWFza0NoYW5nZWQiLCJzbGlkZXNDaGFuZ2VkIiwib2Zmc2V0IiwidGhyZXNob2xkIiwib3V0ZXJXaWR0aCIsInB1c2giLCJhcmlhTGFiZWwiLCJidWlsZE5hdiIsImRvdHMiLCIkZG90Iiwic3BhY2luZyIsInBhcnNlRmxvYXQiLCJsZW4iLCJoYXNDbGFzcyIsImNzcyIsImVtcHR5IiwiYXBwZW5kIiwic2xpZGVzV2lkdGgiXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQixHQUUzQjs7Q0FFQztBQUV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
13715
13716}),
13717"9078": (function (module, __unused_webpack_exports, __webpack_require__) {
13718"use strict";
13719/* global document window */ /**
13720 * Webflow: Tabs component
13721 */ 
13722var Webflow = __webpack_require__(3949);
13723var IXEvents = __webpack_require__(5134);
13724Webflow.define('tabs', module.exports = function($) {
13725    var api = {};
13726    var tram = $.tram;
13727    var $doc = $(document);
13728    var $tabs;
13729    var design;
13730    var env = Webflow.env;
13731    var safari = env.safari;
13732    var inApp = env();
13733    var tabAttr = 'data-w-tab';
13734    var paneAttr = 'data-w-pane';
13735    var namespace = '.w-tabs';
13736    var linkCurrent = 'w--current';
13737    var tabActive = 'w--tab-active';
13738    var ix = IXEvents.triggers;
13739    var inRedraw = false;
13740    // -----------------------------------
13741    // Module methods
13742    api.ready = api.design = api.preview = init;
13743    api.redraw = function() {
13744        inRedraw = true;
13745        init();
13746        inRedraw = false;
13747    };
13748    api.destroy = function() {
13749        $tabs = $doc.find(namespace);
13750        if (!$tabs.length) {
13751            return;
13752        }
13753        $tabs.each(resetIX);
13754        removeListeners();
13755    };
13756    // -----------------------------------
13757    // Private methods
13758    function init() {
13759        design = inApp && Webflow.env('design');
13760        // Find all instances on the page
13761        $tabs = $doc.find(namespace);
13762        if (!$tabs.length) {
13763            return;
13764        }
13765        $tabs.each(build);
13766        if (Webflow.env('preview') && !inRedraw) {
13767            $tabs.each(resetIX);
13768        }
13769        removeListeners();
13770        addListeners();
13771    }
13772    function removeListeners() {
13773        Webflow.redraw.off(api.redraw);
13774    }
13775    function addListeners() {
13776        Webflow.redraw.on(api.redraw);
13777    }
13778    function resetIX(i, el) {
13779        var data = $.data(el, namespace);
13780        if (!data) {
13781            return;
13782        }
13783        data.links && data.links.each(ix.reset);
13784        data.panes && data.panes.each(ix.reset);
13785    }
13786    function build(i, el) {
13787        var widgetHash = namespace.substr(1) + '-' + i;
13788        var $el = $(el);
13789        // Store state in data
13790        var data = $.data(el, namespace);
13791        if (!data) {
13792            data = $.data(el, namespace, {
13793                el: $el,
13794                config: {}
13795            });
13796        }
13797        data.current = null;
13798        data.tabIdentifier = widgetHash + '-' + tabAttr;
13799        data.paneIdentifier = widgetHash + '-' + paneAttr;
13800        data.menu = $el.children('.w-tab-menu');
13801        data.links = data.menu.children('.w-tab-link');
13802        data.content = $el.children('.w-tab-content');
13803        data.panes = data.content.children('.w-tab-pane');
13804        // Remove old events
13805        data.el.off(namespace);
13806        data.links.off(namespace);
13807        // This role is necessary in the ARIA spec
13808        data.menu.attr('role', 'tablist');
13809        // Set all tabs unfocusable
13810        data.links.attr('tabindex', '-1');
13811        // Set config from data attributes
13812        configure(data);
13813        // Wire up events when not in design mode
13814        if (!design) {
13815            data.links.on('click' + namespace, linkSelect(data));
13816            data.links.on('keydown' + namespace, handleLinkKeydown(data));
13817            // Trigger first intro event from current tab
13818            var $link = data.links.filter('.' + linkCurrent);
13819            var tab = $link.attr(tabAttr);
13820            tab && changeTab(data, {
13821                tab,
13822                immediate: true
13823            });
13824        }
13825    }
13826    function configure(data) {
13827        var config = {};
13828        // Set config options from data attributes
13829        config.easing = data.el.attr('data-easing') || 'ease';
13830        var intro = parseInt(data.el.attr('data-duration-in'), 10);
13831        // eslint-disable-next-line no-self-compare
13832        intro = config.intro = intro === intro ? intro : 0;
13833        var outro = parseInt(data.el.attr('data-duration-out'), 10);
13834        // eslint-disable-next-line no-self-compare
13835        outro = config.outro = outro === outro ? outro : 0;
13836        config.immediate = !intro && !outro;
13837        // Store config in data
13838        data.config = config;
13839    }
13840    function getActiveTabIdx(data) {
13841        var tab = data.current;
13842        return Array.prototype.findIndex.call(data.links, (t)=>{
13843            return t.getAttribute(tabAttr) === tab;
13844        }, null);
13845    }
13846    function linkSelect(data) {
13847        return function(evt) {
13848            evt.preventDefault();
13849            var tab = evt.currentTarget.getAttribute(tabAttr);
13850            tab && changeTab(data, {
13851                tab
13852            });
13853        };
13854    }
13855    function handleLinkKeydown(data) {
13856        return function(evt) {
13857            var currentIdx = getActiveTabIdx(data);
13858            var keyName = evt.key;
13859            var keyMap = {
13860                ArrowLeft: currentIdx - 1,
13861                ArrowUp: currentIdx - 1,
13862                ArrowRight: currentIdx + 1,
13863                ArrowDown: currentIdx + 1,
13864                End: data.links.length - 1,
13865                Home: 0
13866            };
13867            // Bail out of function if this key is not
13868            // involved in tab management
13869            if (!(keyName in keyMap)) return;
13870            evt.preventDefault();
13871            var nextIdx = keyMap[keyName];
13872            // go back to end of tabs if we wrap past the start
13873            if (nextIdx === -1) {
13874                nextIdx = data.links.length - 1;
13875            }
13876            // go back to start if we wrap past the last tab
13877            if (nextIdx === data.links.length) {
13878                nextIdx = 0;
13879            }
13880            var tabEl = data.links[nextIdx];
13881            var tab = tabEl.getAttribute(tabAttr);
13882            tab && changeTab(data, {
13883                tab
13884            });
13885        };
13886    }
13887    function changeTab(data, options) {
13888        options = options || {};
13889        var config = data.config;
13890        var easing = config.easing;
13891        var tab = options.tab;
13892        // Don't select the same tab twice
13893        if (tab === data.current) {
13894            return;
13895        }
13896        data.current = tab;
13897        /**
13898       * The currently active tab.
13899       * Will be referenced to manage focus after
13900       * TabLink attributes are changed
13901       * @type {HTMLAnchorElement}
13902       */ var currentTab;
13903        // Select the current link
13904        data.links.each(function(i, el) {
13905            var $el = $(el);
13906            // Add important attributes at build time.
13907            if (options.immediate || config.immediate) {
13908                // Store corresponding pane for reference.
13909                var pane = data.panes[i];
13910                // IDs are necessary for ARIA relationships,
13911                // so if the user did not create one, we create one
13912                // using our generated identifier
13913                if (!el.id) {
13914                    el.id = data.tabIdentifier + '-' + i;
13915                }
13916                if (!pane.id) {
13917                    pane.id = data.paneIdentifier + '-' + i;
13918                }
13919                el.href = '#' + pane.id;
13920                // Tab elements must take this role
13921                el.setAttribute('role', 'tab');
13922                // Tab elements must reference the unique ID of the panel
13923                // that they control
13924                el.setAttribute('aria-controls', pane.id);
13925                // Tab elements must report that they are not selected
13926                // by default
13927                el.setAttribute('aria-selected', 'false');
13928                // Panes must take on the `Tabpanel` role
13929                pane.setAttribute('role', 'tabpanel');
13930                // Elements with tabpanel role must be labelled by
13931                // their controlling tab
13932                pane.setAttribute('aria-labelledby', el.id);
13933            }
13934            if (el.getAttribute(tabAttr) === tab) {
13935                // This is the current tab. Store it.
13936                currentTab = el;
13937                $el.addClass(linkCurrent).removeAttr('tabindex').attr({
13938                    'aria-selected': 'true'
13939                }).each(ix.intro);
13940            } else if ($el.hasClass(linkCurrent)) {
13941                $el.removeClass(linkCurrent).attr({
13942                    tabindex: '-1',
13943                    'aria-selected': 'false'
13944                }).each(ix.outro);
13945            }
13946        });
13947        // Find the new tab panes and keep track of previous
13948        var targets = [];
13949        var previous = [];
13950        data.panes.each(function(i, el) {
13951            var $el = $(el);
13952            if (el.getAttribute(tabAttr) === tab) {
13953                targets.push(el);
13954            } else if ($el.hasClass(tabActive)) {
13955                previous.push(el);
13956            }
13957        });
13958        var $targets = $(targets);
13959        var $previous = $(previous);
13960        // Switch tabs immediately and bypass transitions
13961        if (options.immediate || config.immediate) {
13962            $targets.addClass(tabActive).each(ix.intro);
13963            $previous.removeClass(tabActive);
13964            // Redraw to benefit components in the hidden tab pane
13965            // But only if not currently in the middle of a redraw
13966            if (!inRedraw) {
13967                Webflow.redraw.up();
13968            }
13969            return;
13970        } else {
13971            // Backwards compatible hack to prevent focus from scrolling
13972            var x = window.scrollX;
13973            var y = window.scrollY;
13974            currentTab.focus();
13975            window.scrollTo(x, y);
13976        }
13977        // Fade out the currently active tab before intro
13978        if ($previous.length && config.outro) {
13979            $previous.each(ix.outro);
13980            tram($previous).add('opacity ' + config.outro + 'ms ' + easing, {
13981                fallback: safari
13982            }).start({
13983                opacity: 0
13984            }).then(()=>fadeIn(config, $previous, $targets));
13985        } else {
13986            // Skip the outro and play intro
13987            fadeIn(config, $previous, $targets);
13988        }
13989    }
13990    // Fade in the new target
13991    function fadeIn(config, $previous, $targets) {
13992        // Clear previous active class + styles touched by tram
13993        // We cannot remove the whole inline style because it could be dynamically bound
13994        $previous.removeClass(tabActive).css({
13995            opacity: '',
13996            transition: '',
13997            transform: '',
13998            width: '',
13999            height: ''
14000        });
14001        // Add active class to new target
14002        $targets.addClass(tabActive).each(ix.intro);
14003        Webflow.redraw.up();
14004        // Set opacity immediately if intro is zero
14005        if (!config.intro) {
14006            return tram($targets).set({
14007                opacity: 1
14008            });
14009        }
14010        // Otherwise fade in opacity
14011        tram($targets).set({
14012            opacity: 0
14013        }).redraw().add('opacity ' + config.intro + 'ms ' + config.easing, {
14014            fallback: safari
14015        }).start({
14016            opacity: 1
14017        });
14018    }
14019    // Export module
14020    return api;
14021});
14022
14023//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctdGFicy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZG9jdW1lbnQgd2luZG93ICovXG5cbi8qKlxuICogV2ViZmxvdzogVGFicyBjb21wb25lbnRcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4uL0Jhc2VTaXRlTW9kdWxlcy93ZWJmbG93LWxpYicpO1xudmFyIElYRXZlbnRzID0gcmVxdWlyZSgnLi4vQmFzZVNpdGVNb2R1bGVzL3dlYmZsb3ctaXgyLWV2ZW50cycpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ3RhYnMnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIHZhciBhcGkgPSB7fTtcbiAgICB2YXIgdHJhbSA9ICQudHJhbTtcbiAgICB2YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xuICAgIHZhciAkdGFicztcbiAgICB2YXIgZGVzaWduO1xuICAgIHZhciBlbnYgPSBXZWJmbG93LmVudjtcbiAgICB2YXIgc2FmYXJpID0gZW52LnNhZmFyaTtcbiAgICB2YXIgaW5BcHAgPSBlbnYoKTtcbiAgICB2YXIgdGFiQXR0ciA9ICdkYXRhLXctdGFiJztcbiAgICB2YXIgcGFuZUF0dHIgPSAnZGF0YS13LXBhbmUnO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctdGFicyc7XG4gICAgdmFyIGxpbmtDdXJyZW50ID0gJ3ctLWN1cnJlbnQnO1xuICAgIHZhciB0YWJBY3RpdmUgPSAndy0tdGFiLWFjdGl2ZSc7XG4gICAgdmFyIGl4ID0gSVhFdmVudHMudHJpZ2dlcnM7XG5cbiAgICB2YXIgaW5SZWRyYXcgPSBmYWxzZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGFwaS5kZXNpZ24gPSBhcGkucHJldmlldyA9IGluaXQ7XG5cbiAgICBhcGkucmVkcmF3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5SZWRyYXcgPSB0cnVlO1xuICAgICAgaW5pdCgpO1xuICAgICAgaW5SZWRyYXcgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgYXBpLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkdGFicyA9ICRkb2MuZmluZChuYW1lc3BhY2UpO1xuICAgICAgaWYgKCEkdGFicy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJHRhYnMuZWFjaChyZXNldElYKTtcbiAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgIH07XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFByaXZhdGUgbWV0aG9kc1xuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIGRlc2lnbiA9IGluQXBwICYmIFdlYmZsb3cuZW52KCdkZXNpZ24nKTtcblxuICAgICAgLy8gRmluZCBhbGwgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gICAgICAkdGFicyA9ICRkb2MuZmluZChuYW1lc3BhY2UpO1xuICAgICAgaWYgKCEkdGFicy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJHRhYnMuZWFjaChidWlsZCk7XG4gICAgICBpZiAoV2ViZmxvdy5lbnYoJ3ByZXZpZXcnKSAmJiAhaW5SZWRyYXcpIHtcbiAgICAgICAgJHRhYnMuZWFjaChyZXNldElYKTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICBhZGRMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgICBXZWJmbG93LnJlZHJhdy5vZmYoYXBpLnJlZHJhdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTGlzdGVuZXJzKCkge1xuICAgICAgV2ViZmxvdy5yZWRyYXcub24oYXBpLnJlZHJhdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRJWChpLCBlbCkge1xuICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWwsIG5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5saW5rcyAmJiBkYXRhLmxpbmtzLmVhY2goaXgucmVzZXQpO1xuICAgICAgZGF0YS5wYW5lcyAmJiBkYXRhLnBhbmVzLmVhY2goaXgucmVzZXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkKGksIGVsKSB7XG4gICAgICB2Y
14023XIgd2lkZ2V0SGFzaCA9IG5hbWVzcGFjZS5zdWJzdHIoMSkgKyAnLScgKyBpO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAvLyBTdG9yZSBzdGF0ZSBpbiBkYXRhXG4gICAgICB2YXIgZGF0YSA9ICQuZGF0YShlbCwgbmFtZXNwYWNlKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gJC5kYXRhKGVsLCBuYW1lc3BhY2UsIHtlbDogJGVsLCBjb25maWc6IHt9fSk7XG4gICAgICB9XG4gICAgICBkYXRhLmN1cnJlbnQgPSBudWxsO1xuICAgICAgZGF0YS50YWJJZGVudGlmaWVyID0gd2lkZ2V0SGFzaCArICctJyArIHRhYkF0dHI7XG4gICAgICBkYXRhLnBhbmVJZGVudGlmaWVyID0gd2lkZ2V0SGFzaCArICctJyArIHBhbmVBdHRyO1xuXG4gICAgICBkYXRhLm1lbnUgPSAkZWwuY2hpbGRyZW4oJy53LXRhYi1tZW51Jyk7XG4gICAgICBkYXRhLmxpbmtzID0gZGF0YS5tZW51LmNoaWxkcmVuKCcudy10YWItbGluaycpO1xuICAgICAgZGF0YS5jb250ZW50ID0gJGVsLmNoaWxkcmVuKCcudy10YWItY29udGVudCcpO1xuICAgICAgZGF0YS5wYW5lcyA9IGRhdGEuY29udGVudC5jaGlsZHJlbignLnctdGFiLXBhbmUnKTtcblxuICAgICAgLy8gUmVtb3ZlIG9sZCBldmVudHNcbiAgICAgIGRhdGEuZWwub2ZmKG5hbWVzcGFjZSk7XG4gICAgICBkYXRhLmxpbmtzLm9mZihuYW1lc3BhY2UpO1xuXG4gICAgICAvLyBUaGlzIHJvbGUgaXMgbmVjZXNzYXJ5IGluIHRoZSBBUklBIHNwZWNcbiAgICAgIGRhdGEubWVudS5hdHRyKCdyb2xlJywgJ3RhYmxpc3QnKTtcblxuICAgICAgLy8gU2V0IGFsbCB0YWJzIHVuZm9jdXNhYmxlXG4gICAgICBkYXRhLmxpbmtzLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG5cbiAgICAgIC8vIFNldCBjb25maWcgZnJvbSBkYXRhIGF0dHJpYnV0ZXNcbiAgICAgIGNvbmZpZ3VyZShkYXRhKTtcblxuICAgICAgLy8gV2lyZSB1cCBldmVudHMgd2hlbiBub3QgaW4gZGVzaWduIG1vZGVcbiAgICAgIGlmICghZGVzaWduKSB7XG4gICAgICAgIGRhdGEubGlua3Mub24oJ2NsaWNrJyArIG5hbWVzcGFjZSwgbGlua1NlbGVjdChkYXRhKSk7XG4gICAgICAgIGRhdGEubGlua3Mub24oJ2tleWRvd24nICsgbmFtZXNwYWNlLCBoYW5kbGVMaW5rS2V5ZG93bihkYXRhKSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBmaXJzdCBpbnRybyBldmVudCBmcm9tIGN1cnJlbnQgdGFiXG4gICAgICAgIHZhciAkbGluayA9IGRhdGEubGlua3MuZmlsdGVyKCcuJyArIGxpbmtDdXJyZW50KTtcbiAgICAgICAgdmFyIHRhYiA9ICRsaW5rLmF0dHIodGFiQXR0cik7XG4gICAgICAgIHRhYiAmJiBjaGFuZ2VUYWIoZGF0YSwge3RhYiwgaW1tZWRpYXRlOiB0cnVlfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGRhdGEpIHtcbiAgICAgIHZhciBjb25maWcgPSB7fTtcblxuICAgICAgLy8gU2V0IGNvbmZpZyBvcHRpb25zIGZyb20gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICBjb25maWcuZWFzaW5nID0gZGF0YS5lbC5hdHRyKCdkYXRhLWVhc2luZycpIHx8ICdlYXNlJztcblxuICAgICAgdmFyIGludHJvID0gcGFyc2VJbnQoZGF0YS5lbC5hdHRyKCdkYXRhLWR1cmF0aW9uLWluJyksIDEwKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGludHJvID0gY29uZmlnLmludHJvID0gaW50cm8gPT09IGludHJvID8gaW50cm8gOiAwO1xuXG4gICAgICB2Y
14023XIgb3V0cm8gPSBwYXJzZUludChkYXRhLmVsLmF0dHIoJ2RhdGEtZHVyYXRpb24tb3V0JyksIDEwKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIG91dHJvID0gY29uZmlnLm91dHJvID0gb3V0cm8gPT09IG91dHJvID8gb3V0cm8gOiAwO1xuXG4gICAgICBjb25maWcuaW1tZWRpYXRlID0gIWludHJvICYmICFvdXRybztcblxuICAgICAgLy8gU3RvcmUgY29uZmlnIGluIGRhdGFcbiAgICAgIGRhdGEuY29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFjdGl2ZVRhYklkeChkYXRhKSB7XG4gICAgICB2YXIgdGFiID0gZGF0YS5jdXJyZW50O1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXguY2FsbChcbiAgICAgICAgZGF0YS5saW5rcyxcbiAgICAgICAgKHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdC5nZXRBdHRyaWJ1dGUodGFiQXR0cikgPT09IHRhYjtcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5rU2VsZWN0KGRhdGEpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgdGFiID0gZXZ0LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKHRhYkF0dHIpO1xuICAgICAgICB0YWIgJiYgY2hhbmdlVGFiKGRhdGEsIHt0YWJ9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlTGlua0tleWRvd24oZGF0YSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJZHggPSBnZXRBY3RpdmVUYWJJZHgoZGF0YSk7XG4gICAgICAgIHZhciBrZXlOYW1lID0gZXZ0LmtleTtcbiAgICAgICAgdmFyIGtleU1hcCA9IHtcbiAgICAgICAgICBBcnJvd0xlZnQ6IGN1cnJlbnRJZHggLSAxLFxuICAgICAgICAgIEFycm93VXA6IGN1cnJlbnRJZHggLSAxLFxuICAgICAgICAgIEFycm93UmlnaHQ6IGN1cnJlbnRJZHggKyAxLFxuICAgICAgICAgIEFycm93RG93bjogY3VycmVudElkeCArIDEsXG4gICAgICAgICAgRW5kOiBkYXRhLmxpbmtzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgSG9tZTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBCYWlsIG91dCBvZiBmdW5jdGlvbiBpZiB0aGlzIGtleSBpcyBub3RcbiAgICAgICAgLy8gaW52b2x2ZWQgaW4gdGFiIG1hbmFnZW1lbnRcbiAgICAgICAgaWYgKCEoa2V5TmFtZSBpbiBrZXlNYXApKSByZXR1cm47XG5cbiAgICAgICAgZXZ0LnByZXZlbn
14023REZWZhdWx0KCk7XG5cbiAgICAgICAgdmFyIG5leHRJZHggPSBrZXlNYXBba2V5TmFtZV07XG5cbiAgICAgICAgLy8gZ28gYmFjayB0byBlbmQgb2YgdGFicyBpZiB3ZSB3cmFwIHBhc3QgdGhlIHN0YXJ0XG4gICAgICAgIGlmIChuZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgIG5leHRJZHggPSBkYXRhLmxpbmtzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ28gYmFjayB0byBzdGFydCBpZiB3ZSB3cmFwIHBhc3QgdGhlIGxhc3QgdGFiXG4gICAgICAgIGlmIChuZXh0SWR4ID09PSBkYXRhLmxpbmtzLmxlbmd0aCkge1xuICAgICAgICAgIG5leHRJZHggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWJFbCA9IGRhdGEubGlua3NbbmV4dElkeF07XG4gICAgICAgIHZhciB0YWIgPSB0YWJFbC5nZXRBdHRyaWJ1dGUodGFiQXR0cik7XG4gICAgICAgIHRhYiAmJiBjaGFuZ2VUYWIoZGF0YSwge3RhYn0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VUYWIoZGF0YSwgb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIHZhciBlYXNpbmcgPSBjb25maWcuZWFzaW5nO1xuICAgICAgdmFyIHRhYiA9IG9wdGlvbnMudGFiO1xuXG4gICAgICAvLyBEb24ndCBzZWxlY3QgdGhlIHNhbWUgdGFiIHR3aWNlXG4gICAgICBpZiAodGFiID09PSBkYXRhLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5jdXJyZW50ID0gdGFiO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYi5cbiAgICAgICAqIFdpbGwgYmUgcmVmZXJlbmNlZCB0byBtYW5hZ2UgZm9jdXMgYWZ0ZXJcbiAgICAgICAqIFRhYkxpbmsgYXR0cmlidXRlcyBhcmUgY2hhbmdlZFxuICAgICAgICogQHR5cGUge0hUTUxBbmNob3JFbGVtZW50fVxuICAgICAgICovXG4gICAgICB2Y
14023XIgY3VycmVudFRhYjtcblxuICAgICAgLy8gU2VsZWN0IHRoZSBjdXJyZW50IGxpbmtcbiAgICAgIGRhdGEubGlua3MuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAgIC8vIEFkZCBpbXBvcnRhbnQgYXR0cmlidXRlcyBhdCBidWlsZCB0aW1lLlxuICAgICAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUgfHwgY29uZmlnLmltbWVkaWF0ZSkge1xuICAgICAgICAgIC8vIFN0b3JlIGNvcnJlc3BvbmRpbmcgcGFuZSBmb3IgcmVmZXJlbmNlLlxuICAgICAgICAgIHZhciBwYW5lID0gZGF0YS5wYW5lc1tpXTtcbiAgICAgICAgICAvLyBJRHMgYXJlIG5lY2Vzc2FyeSBmb3IgQVJJQSByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIC8vIHNvIGlmIHRoZSB1c2VyIGRpZCBub3QgY3JlYXRlIG9uZSwgd2UgY3JlYXRlIG9uZVxuICAgICAgICAgIC8vIHVzaW5nIG91ciBnZW5lcmF0ZWQgaWRlbnRpZmllclxuICAgICAgICAgIGlmICghZWwuaWQpIHtcbiAgICAgICAgICAgIGVsLmlkID0gZGF0YS50YWJJZGVudGlmaWVyICsgJy0nICsgaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwYW5lLmlkKSB7XG4gICAgICAgICAgICBwYW5lLmlkID0gZGF0YS5wYW5lSWRlbnRpZmllciArICctJyArIGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLmhyZWYgPSAnIycgKyBwYW5lLmlkO1xuXG4gICAgICAgICAgLy8gVGFiIGVsZW1lbnRzIG11c3QgdGFrZSB0aGlzIHJvbGVcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndGFiJyk7XG4gICAgICAgICAgLy8gVGFiIGVsZW1lbnRzIG11c3QgcmVmZXJlbmNlIHRoZSB1bmlxdWUgSUQgb2YgdGhlIHBhbmVsXG4gICAgICAgICAgLy8gdGhhdCB0aGV5IGNvbnRyb2xcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCBwYW5lLmlkKTtcbiAgICAgICAgICAvLyBUYWIgZWxlbWVudHMgbXVzdCByZXBvcnQgdGhhdCB0aGV5IGFyZSBub3Qgc2VsZWN0ZWRcbiAgICAgICAgICAvLyBieSBkZWZhdWx0XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgLy8gUGFuZXMgbXVzdCB0YWtlIG9uIHRoZSBgVGFicGFuZWxgIHJvbGVcbiAgICAgICAgICBwYW5lLnNldEF0dHJpYnV0ZSgncm9sZScsICd0YWJwYW5lbCcpO1xuICAgICAgICAgIC8vIEVsZW1lbnRzIHdpdGggdGFicGFuZWwgcm9sZSBtdXN0IGJlIGxhYmVsbGVkIGJ5XG4gICAgICAgICAgLy8gdGhlaXIgY29udHJvbGxpbmcgdGFiXG4gICAgICAgICAgcGFuZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGVsLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKHRhYkF0dHIpID09PSB0YWIpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjdXJyZW50IHRhYi4gU3RvcmUgaXQuXG4gICAgICAgICAgY3VycmVudFRhYiA9IGVsO1xuICAgICAgICAgICRlbFxuICAgICAgICAgICAgLmFkZENsYXNzKGxpbmtDdXJyZW50KVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ3RhYmluZGV4JylcbiAgICAgICAgICAgIC5hdHRyKHsnYXJpYS1zZWxlY3RlZCc6ICd0cnVlJ30pXG4gICAgICAgICAgICAuZWFjaChpeC5pbnRybyk7XG4gICAgICAgIH0gZWxzZSBpZiAoJGVsLmhhc0NsYXNzKGxpbmtDdXJyZW50KSkge1xuICAgICAgICAgICRlbFxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKGxpbmtDdXJyZW50KVxuICAgICAgICAgICAgLmF0dHIoe3RhYmluZGV4OiAnLTEnLCAnYXJpYS1zZWxlY3RlZCc6ICdmYWxzZSd9KVxuICAgICAgICAgICAgLmVhY2goaXgub3V0cm8pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gRmluZCB0aGUgbmV3IHRhYiBwYW5lcyBhbmQga2VlcCB0cmFjayBvZiBwcmV2aW91c1xuICAgICAgdmFyIHRhcmdldHMgPSBbXTtcbiAgICAgIHZhciBwcmV2aW91cyA9IFtdO1xuICAgICAgZGF0YS5wYW5lcy5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICB2Y
14023XIgJGVsID0gJChlbCk7XG4gICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUodGFiQXR0cikgPT09IHRhYikge1xuICAgICAgICAgIHRhcmdldHMucHVzaChlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJGVsLmhhc0NsYXNzKHRhYkFjdGl2ZSkpIHtcbiAgICAgICAgICBwcmV2aW91cy5wdXNoKGVsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciAkdGFyZ2V0cyA9ICQodGFyZ2V0cyk7XG4gICAgICB2YXIgJHByZXZpb3VzID0gJChwcmV2aW91cyk7XG5cbiAgICAgIC8vIFN3aXRjaCB0YWJzIGltbWVkaWF0ZWx5IGFuZCBieXBhc3MgdHJhbnNpdGlvbnNcbiAgICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSB8fCBjb25maWcuaW1tZWRpYXRlKSB7XG4gICAgICAgICR0YXJnZXRzLmFkZENsYXNzKHRhYkFjdGl2ZSkuZWFjaChpeC5pbnRybyk7XG4gICAgICAgICRwcmV2aW91cy5yZW1vdmVDbGFzcyh0YWJBY3RpdmUpO1xuICAgICAgICAvLyBSZWRyYXcgdG8gYmVuZWZpdCBjb21wb25lbnRzIGluIHRoZSBoaWRkZW4gdGFiIHBhbmVcbiAgICAgICAgLy8gQnV0IG9ubHkgaWYgbm90IGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkcmF3XG4gICAgICAgIGlmICghaW5SZWRyYXcpIHtcbiAgICAgICAgICBXZWJmbG93LnJlZHJhdy51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIEZvY3VzIGlmIHRoaXMgaXMgbm90IHRoZSBvbi1wYWdlLWxvYWQgY2FsbCB0byBgY2hhbmdlVGFiYFxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmxlIGhhY2sgdG8gcHJldmVudCBmb2N1cyBmcm9tIHNjcm9sbGluZ1xuICAgICAgICB2Y
14023XIgeCA9IHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICB2YXIgeSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICBjdXJyZW50VGFiLmZvY3VzKCk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgLy8gRmFkZSBvdXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiIGJlZm9yZSBpbnRyb1xuICAgICAgaWYgKCRwcmV2aW91cy5sZW5ndGggJiYgY29uZmlnLm91dHJvKSB7XG4gICAgICAgICRwcmV2aW91cy5lYWNoKGl4Lm91dHJvKTtcbiAgICAgICAgdHJhbSgkcHJldmlvdXMpXG4gICAgICAgICAgLmFkZCgnb3BhY2l0eSAnICsgY29uZmlnLm91dHJvICsgJ21zICcgKyBlYXNpbmcsIHtmYWxsYmFjazogc2FmYXJpfSlcbiAgICAgICAgICAuc3RhcnQoe29wYWNpdHk6IDB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IGZhZGVJbihjb25maWcsICRwcmV2aW91cywgJHRhcmdldHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNraXAgdGhlIG91dHJvIGFuZCBwbGF5IGludHJvXG4gICAgICAgIGZhZGVJbihjb25maWcsICRwcmV2aW91cywgJHRhcmdldHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhZGUgaW4gdGhlIG5ldyB0YXJnZXRcbiAgICBmdW5jdGlvbiBmYWRlSW4oY29uZmlnLCAkcHJldmlvdXMsICR0YXJnZXRzKSB7XG4gICAgICAvLyBDbGVhciBwcmV2aW91cyBhY3RpdmUgY2xhc3MgKyBzdHlsZXMgdG91Y2hlZCBieSB0cmFtXG4gICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSB3aG9sZSBpbmxpbmUgc3R5bGUgYmVjYXVzZSBpdCBjb3VsZCBiZSBkeW5hbWljYWxseSBib3VuZFxuICAgICAgJHByZXZpb3VzLnJlbW92ZUNsYXNzKHRhYkFjdGl2ZSkuY3NzKHtcbiAgICAgICAgb3BhY2l0eTogJycsXG4gICAgICAgIHRyYW5zaXRpb246ICcnLFxuICAgICAgICB0cmFuc2Zvcm06ICcnLFxuICAgICAgICB3aWR0aDogJycsXG4gICAgICAgIGhlaWdodDogJycsXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIGFjdGl2ZSBjbGFzcyB0byBuZXcgdGFyZ2V0XG4gICAgICAkdGFyZ2V0cy5hZGRDbGFzcyh0YWJBY3RpdmUpLmVhY2goaXguaW50cm8pO1xuICAgICAgV2ViZmxvdy5yZWRyYXcudXAoKTtcblxuICAgICAgLy8gU2V0IG9wYWNpdHkgaW1tZWRpYXRlbHkgaWYgaW50cm8gaXMgemVyb1xuICAgICAgaWYgKCFjb25maWcuaW50cm8pIHtcbiAgICAgICAgcmV0dXJuIHRyYW0oJHRhcmdldHMpLnNldCh7b3BhY2l0eTogMX0pO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UgZmFkZSBpbiBvcGFjaXR5XG4gICAgICB0cmFtKCR0YXJnZXRzKVxuICAgICAgICAuc2V0KHtvcGFjaXR5OiAwfSlcbiAgICAgICAgLnJlZHJhdygpXG4gICAgICAgIC5hZGQoJ29wYWNpdHkgJyArIGNvbmZpZy5pbnRybyArICdtcyAnICsgY29uZmlnLmVhc2luZywge1xuICAgICAgICAgIGZhbGxiYWNrOiBzYWZhcmksXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGFydCh7b3BhY2l0eTogMX0pO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsIklYRXZlbnRzIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJhcGkiLCJ0cmFtIiwiJGRvYyIsImRvY3VtZW50IiwiJHRhYnMiLCJkZXNpZ24iLCJlbnYiLCJzYWZhcmkiLCJpbkFwcCIsInRhYkF0dHIiLCJwYW5lQXR0ciIsIm5hbWVzcGFjZSIsImxpbmtDdXJyZW50IiwidGFiQWN0aXZlIiwiaXgiLCJ0cmlnZ2VycyIsImluUmVkcmF3IiwicmVhZHkiLCJwcmV2aWV3IiwiaW5pdCIsInJlZHJhdyIsImRlc3Ryb3kiLCJmaW5kIiwibGVuZ3RoIiwiZWFjaCIsInJlc2V0SVgiLCJyZW1vdmVMaXN0ZW5lcnMiLCJidWlsZCIsImFkZExpc3RlbmVycyIsIm9mZiIsIm9uIiwiaSIsImVsIiwiZGF0YSIsImxpbmtzIiwicmVzZXQiLCJwYW5lcyIsIndpZGdldEhhc2giLCJzdWJzdHIiLCIkZWwiLCJjb25maWciLCJjdXJyZW50IiwidGFiSWRlbnRpZmllciIsInBhbmVJZGVudGlmaWVyIiwibWVudSIsImNoaWxkcmVuIiwiY29udGVudCIsImF0dHIiLCJjb25maWd1cmUiLCJsaW5rU2VsZWN0IiwiaGFuZGxlTGlua0tleWRvd24iLCIkbGluayIsImZpbHRlciIsInRhYiIsImNoYW5nZVRhYiIsImltbWVkaWF0ZSIsImVhc2luZyIsImludHJvIiwicGFyc2VJbnQiLCJvdXRybyIsImdldEFjdGl2ZVRhYklkeCIsIkFycmF5IiwicHJvdG90eXBlIiwiZmluZEluZGV4IiwiY2FsbCIsInQiLCJnZXRBdHRyaWJ1dGUiLCJldnQiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJjdXJyZW50SWR4Iiwia2V5TmFtZSIsImtleSIsImtleU1hcCIsIkFycm93TGVmdCIsIkFycm93VXAiLCJBcnJvd1JpZ2h0IiwiQXJyb3dEb3duIiwiRW5kIiwiSG9tZSIsIm5leHRJZHgiLCJ0YWJFbCIsIm9wdGlvbnMiLCJjdXJyZW50VGFiIiwicGFuZSIsImlkIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsImFkZENsYXNzIiwicmVtb3ZlQXR0ciIsImhhc0NsYXNzIiwicmVtb3ZlQ2xhc3MiLCJ0YWJpbmRleCIsInRhcmdldHMiLCJwcmV2aW91cyIsInB1c2giLCIkdGFyZ2V0cyIsIiRwcmV2aW91cyIsInVwIiwieCIsIndpbmRvdyIsInNjcm9sbFgiLCJ5Iiwic2Nyb2xsWSIsImZvY3VzIiwic2Nyb2xsVG8iLCJhZGQiLCJmYWxsYmFjayIsInN0YXJ0Iiwib3BhY2l0eSIsInRoZW4iLCJmYWRlSW4iLCJjc3MiLCJ0cmFuc2l0aW9uIiwidHJhbnNmb3JtIiwid2lkdGgiLCJoZWlnaHQiLCJzZXQiXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQixHQUUxQjs7Q0FFQztBQUVELElBQUlBLFVBQVVDLFFBQVE7QUFDdEIsSUFBSUMsV0FBV0QsUUFBUTtBQUV2QkQsUUFBUUcsTUFBTSxDQUNaLFFBQ0NDLE9BQU9DLE9BQU8sR0FBRyxTQUFVQyxDQUFDO0lBQzNCLElBQUlDLE1BQU0sQ0FBQztJQUNYLElBQUlDLE9BQU9GLEVBQUVFLElBQUk7SUFDakIsSUFBSUMsT0FBT0gsRUFBRUk7SUFDYixJQUFJQztJQUNKLElBQUlDO0lBQ0osSUFBSUMsTUFBTWIsUUFBUWEsR0FBRztJQUNyQixJQUFJQyxTQUFTRCxJQUFJQyxNQUFNO0lBQ3ZCLElBQUlDLFFBQVFGO0lBQ1osSUFBSUcsVUFBVTtJQUNkLElBQUlDLFdBQVc7SUFDZixJQUFJQyxZQUFZO0lBQ2hCLElBQUlDLGNBQWM7SUFDbEIsSUFBSUMsWUFBWTtJQUNoQixJQUFJQyxLQUFLbkIsU0FBU29CLFFBQVE7SUFFMUIsSUFBSUMsV0FBVztJQUVmLHNDQUFzQztJQUN0QyxpQkFBaUI7SUFFakJoQixJQUFJaUIsS0FBSyxHQUFHakIsSUFBSUssTUFBTSxHQUFHTCxJQUFJa0IsT0FBTyxHQUFHQztJQUV2Q25CLElBQUlvQixNQUFNLEdBQUc7UUFDWEosV0FBVztRQUNYRztRQUNBSCxXQUFXO0lBQ2I7SUFFQWhCLElBQUlxQixPQUFPLEdBQUc7UUFDWmpCLFFBQVFGLEtBQUtvQixJQUFJLENBQUNYO1FBQ2xCLElBQUksQ0FBQ1AsTUFBTW1CLE1BQU0sRUFBRTtZQUNqQjtRQUNGO1FBQ0FuQixNQUFNb0IsSUFBSSxDQUFDQztRQUNYQztJQUNGO0lBRUEsc0NBQXNDO0lBQ3RDLGtCQUFrQjtJQUVsQixTQUFTUDtRQUNQZCxTQUFTRyxTQUFTZixRQUFRYSxHQUFHLENBQUM7UUFFOUIsaUNBQWlDO1FBQ2pDRixRQUFRRixLQUFLb0IsSUFBSSxD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
14024
14025}),
14026"4539": (function (module, __unused_webpack_exports, __webpack_require__) {
14027"use strict";
14028/* globals window, document, GOOGLE_MAPS_API_KEY */ /**
14029 * Webflow: Maps widget
14030 */ 
14031var Webflow = __webpack_require__(3949);
14032Webflow.define('maps', module.exports = function($, _) {
14033    var api = {};
14034    var $doc = $(document);
14035    var google = null;
14036    var $maps;
14037    var namespace = '.w-widget-map';
14038    // The API key is injected here from the Webflow Integrations tab on the site's dashboard during site publish
14039    // ... but while designing it needs to be set to avoid a console error about it being undefined
14040    var googleMapsApiKey =  true ? "" : 0;
14041    // -----------------------------------
14042    // Module methods
14043    api.ready = function() {
14044        // Init Maps on the front-end
14045        if (!Webflow.env()) {
14046            initMaps();
14047        }
14048    };
14049    api.destroy = removeListeners;
14050    // -----------------------------------
14051    // Private methods
14052    function initMaps() {
14053        $maps = $doc.find(namespace);
14054        if (!$maps.length) {
14055            return;
14056        }
14057        if (google === null) {
14058            $.getScript('https://maps.googleapis.com/maps/api/js?v=3.31&sensor=false&callback=_wf_maps_loaded&key=' + googleMapsApiKey);
14059            window._wf_maps_loaded = mapsLoaded;
14060        } else {
14061            mapsLoaded();
14062        }
14063        function mapsLoaded() {
14064            window._wf_maps_loaded = function() {};
14065            google = window.google;
14066            $maps.each(renderMap);
14067            removeListeners();
14068            addListeners();
14069        }
14070    }
14071    function removeListeners() {
14072        Webflow.resize.off(resizeMaps);
14073        Webflow.redraw.off(resizeMaps);
14074    }
14075    function addListeners() {
14076        Webflow.resize.on(resizeMaps);
14077        Webflow.redraw.on(resizeMaps);
14078    }
14079    // Render map onto each element
14080    function renderMap(i, el) {
14081        var data = $(el).data();
14082        getState(el, data);
14083    }
14084    function resizeMaps() {
14085        $maps.each(resizeMap);
14086    }
14087    // Resize map when window changes
14088    function resizeMap(i, el) {
14089        var state = getState(el);
14090        google.maps.event.trigger(state.map, 'resize');
14091        state.setMapPosition();
14092    }
14093    // Store state on element data
14094    var store = 'w-widget-map';
14095    function getState(el, data) {
14096        var state = $.data(el, store);
14097        if (state) {
14098            return state;
14099        }
14100        var hasTooltip = typeof data.widgetTooltip === 'string' && data.widgetTooltip !== '';
14101        var $el = $(el);
14102        var title = $el.attr('title');
14103        var markerTitle = 'Map pin';
14104        if (title && data.widgetTooltip) {
14105            markerTitle = `Map pin on ${title} showing location of ${data.widgetTooltip}`;
14106        } else if (title && !data.widgetTooltip) {
14107            markerTitle = `Map pin on ${title}`;
14108        } else if (!title && data.widgetTooltip) {
14109            markerTitle = `Map pin showing location of ${data.widgetTooltip}`;
14110        }
14111        state = $.data(el, store, {
14112            // Default options
14113            latLng: '51.511214,-0.119824',
14114            tooltip: '',
14115            style: 'roadmap',
14116            zoom: 12,
14117            // Marker
14118            marker: new google.maps.Marker({
14119                draggable: false,
14120                title: markerTitle
14121            }),
14122            // Tooltip infowindow
14123            infowindow: new google.maps.InfoWindow({
14124                disableAutoPan: true
14125            })
14126        });
14127        // LatLng center point
14128        if (typeof data.widgetLatlng === 'string' && data.widgetLatlng.length !== '') {
14129            state.latLng = data.widgetLatlng;
14130        }
14131        var coords = state.latLng.split(',');
14132        var latLngObj = new google.maps.LatLng(coords[0], coords[1]);
14133        state.latLngObj = latLngObj;
14134        // Disable touch events
14135        var mapDraggable = !(Webflow.env.touch && !data.enableTouch);
14136        // Map instance
14137        state.map = new google.maps.Map(el, {
14138            center: state.latLngObj,
14139            zoom: state.zoom,
14140            maxZoom: 20,
14141            mapTypeControl: false,
14142            panControl: false,
14143            streetViewControl: false,
14144            scrollwheel: data.enableScroll,
14145            draggable: mapDraggable,
14146            zoomControl: true,
14147            zoomControlOptions: {
14148                style: google.maps.ZoomControlStyle.SMALL
14149            },
14150            mapTypeId: state.style
14151        });
14152        state.marker.setMap(state.map);
14153        // Set map position and offset
14154        state.setMapPosition = function() {
14155            state.map.setCenter(state.latLngObj);
14156            var offsetX = 0;
14157            var offsetY = 0;
14158            var padding = $el.css([
14159                'paddingTop',
14160                'paddingRight',
14161                'paddingBottom',
14162                'paddingLeft'
14163            ]);
14164            offsetX -= parseInt(padding.paddingLeft, 10);
14165            offsetX += parseInt(padding.paddingRight, 10);
14166            offsetY -= parseInt(padding.paddingTop, 10);
14167            offsetY += parseInt(padding.paddingBottom, 10);
14168            if (offsetX || offsetY) {
14169                state.map.panBy(offsetX, offsetY);
14170            }
14171            $el.css('position', ''); // Remove injected position
14172        };
14173        // Fix position after first tiles have loaded
14174        google.maps.event.addListener(state.map, 'tilesloaded', function() {
14175            google.maps.event.clearListeners(state.map, 'tilesloaded');
14176            state.setMapPosition();
14177        });
14178        // Set initial position
14179        state.setMapPosition();
14180        state.marker.setPosition(state.latLngObj);
14181        state.infowindow.setPosition(state.latLngObj);
14182        // Draw tooltip
14183        if (hasTooltip) {
14184            var tooltip = data.widgetTooltip;
14185            state.tooltip = tooltip;
14186            state.infowindow.setContent(tooltip);
14187            if (!state.infowindowOpen) {
14188                state.infowindow.open(state.map, state.marker);
14189                state.infowindowOpen = true;
14190            }
14191        }
14192        // Map style - options.style
14193        var style = data.widgetStyle;
14194        if (style) {
14195            state.map.setMapTypeId(style);
14196        }
14197        // Zoom - options.zoom
14198        var zoom = data.widgetZoom;
14199        if (zoom != null) {
14200            state.zoom = zoom;
14201            state.map.setZoom(Number(zoom));
14202        }
14203        // Click marker to open in google maps
14204        google.maps.event.addListener(state.marker, 'click', function() {
14205            window.open('https://maps.google.com/?z=' + state.zoom + '&daddr=' + state.latLng);
14206        });
14207        return state;
14208    }
14209    // Export module
14210    return api;
14211});
14212
14213//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmZsb3ctbWFwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQsIEdPT0dMRV9NQVBTX0FQSV9LRVkgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBNYXBzIHdpZGdldFxuICovXG5cbnZhciBXZWJmbG93ID0gcmVxdWlyZSgnLi4vQmFzZVNpdGVNb2R1bGVzL3dlYmZsb3ctbGliJyk7XG5cbldlYmZsb3cuZGVmaW5lKFxuICAnbWFwcycsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkLCBfKSB7XG4gICAgdmFyIGFwaSA9IHt9O1xuICAgIHZhciAkZG9jID0gJChkb2N1bWVudCk7XG4gICAgdmFyIGdvb2dsZSA9IG51bGw7XG4gICAgdmFyICRtYXBzO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctd2lkZ2V0LW1hcCc7XG4gICAgLy8gVGhlIEFQSSBrZXkgaXMgaW5qZWN0ZWQgaGVyZSBmcm9tIHRoZSBXZWJmbG93IEludGVncmF0aW9ucyB0YWIgb24gdGhlIHNpdGUncyBkYXNoYm9hcmQgZHVyaW5nIHNpdGUgcHVibGlzaFxuICAgIC8vIC4uLiBidXQgd2hpbGUgZGVzaWduaW5nIGl0IG5lZWRzIHRvIGJlIHNldCB0byBhdm9pZCBhIGNvbnNvbGUgZXJyb3IgYWJvdXQgaXQgYmVpbmcgdW5kZWZpbmVkXG4gICAgdmFyIGdvb2dsZU1hcHNBcGlLZXkgPVxuICAgICAgdHlwZW9mIEdPT0dMRV9NQVBTX0FQSV9LRVkgIT09ICd1bmRlZmluZWQnID8gR09PR0xFX01BUFNfQVBJX0tFWSA6ICcnO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBNb2R1bGUgbWV0aG9kc1xuXG4gICAgYXBpLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gSW5pdCBNYXBzIG9uIHRoZSBmcm9udC1lbmRcbiAgICAgIGlmICghV2ViZmxvdy5lbnYoKSkge1xuICAgICAgICBpbml0TWFwcygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBhcGkuZGVzdHJveSA9IHJlbW92ZUxpc3RlbmVycztcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gUHJpdmF0ZSBtZXRob2RzXG5cbiAgICBmdW5jdGlvbiBpbml0TWFwcygpIHtcbiAgICAgICRtYXBzID0gJGRvYy5maW5kKG5hbWVzcGFjZSk7XG4gICAgICBpZiAoISRtYXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChnb29nbGUgPT09IG51bGwpIHtcbiAgICAgICAgJC5nZXRTY3JpcHQoXG4gICAgICAgICAgJ2h0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz92PTMuMzEmc2Vuc29yPWZhbHNlJmNhbGxiYWNrPV93Zl9tYXBzX2xvYWRlZCZrZXk9JyArXG4gICAgICAgICAgICBnb29nbGVNYXBzQXBpS2V5XG4gICAgICAgICk7XG4gICAgICAgI
14213HdpbmRvdy5fd2ZfbWFwc19sb2FkZWQgPSBtYXBzTG9hZGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwc0xvYWRlZCgpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBtYXBzTG9hZGVkKCkge1xuICAgICAgICB3aW5kb3cuX3dmX21hcHNfbG9hZGVkID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgIGdvb2dsZSA9IHdpbmRvdy5nb29nbGU7XG4gICAgICAgICRtYXBzLmVhY2gocmVuZGVyTWFwKTtcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgIGFkZExpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgIFdlYmZsb3cucmVzaXplLm9mZihyZXNpemVNYXBzKTtcbiAgICAgIFdlYmZsb3cucmVkcmF3Lm9mZihyZXNpemVNYXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcnMoKSB7XG4gICAgICBXZWJmbG93LnJlc2l6ZS5vbihyZXNpemVNYXBzKTtcbiAgICAgIFdlYmZsb3cucmVkcmF3Lm9uKHJlc2l6ZU1hcHMpO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBtYXAgb250byBlYWNoIGVsZW1lbnRcbiAgICBmdW5jdGlvbiByZW5kZXJNYXAoaSwgZWwpIHtcbiAgICAgIHZhciBkYXRhID0gJChlbCkuZGF0YSgpO1xuICAgICAgZ2V0U3RhdGUoZWwsIGRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2l6ZU1hcHMoKSB7XG4gICAgICAkbWFwcy5lYWNoKHJlc2l6ZU1hcCk7XG4gICAgfVxuXG4gICAgLy8gUmVzaXplIG1hcCB3aGVuIHdpbmRvdyBjaGFuZ2VzXG4gICAgZnVuY3Rpb24gcmVzaXplTWFwKGksIGVsKSB7XG4gICAgICB2Y
14213XIgc3RhdGUgPSBnZXRTdGF0ZShlbCk7XG4gICAgICBnb29nbGUubWFwcy5ldmVudC50cmlnZ2VyKHN0YXRlLm1hcCwgJ3Jlc2l6ZScpO1xuICAgICAgc3RhdGUuc2V0TWFwUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBzdGF0ZSBvbiBlbGVtZW50IGRhdGFcbiAgICB2YXIgc3RvcmUgPSAndy13aWRnZXQtbWFwJztcbiAgICBmdW5jdGlvbiBnZXRTdGF0ZShlbCwgZGF0YSkge1xuICAgICAgdmFyIHN0YXRlID0gJC5kYXRhKGVsLCBzdG9yZSk7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFzVG9vbHRpcCA9XG4gICAgICAgIHR5cGVvZiBkYXRhLndpZGdldFRvb2x0aXAgPT09ICdzdHJpbmcnICYmIGRhdGEud2lkZ2V0VG9vbHRpcCAhPT0gJyc7XG5cbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgIHZhciB0aXRsZSA9ICRlbC5hdHRyKCd0aXRsZScpO1xuXG4gICAgICB2YXIgbWFya2VyVGl0bGUgPSAnTWFwIHBpbic7XG4gICAgICBpZiAodGl0bGUgJiYgZGF0YS53aWRnZXRUb29sdGlwKSB7XG4gICAgICAgIG1hcmtlclRpdGxlID0gYE1hcCBwaW4gb24gJHt0aXRsZX0gc2hvd2luZyBsb2NhdGlvbiBvZiAke2RhdGEud2lkZ2V0VG9vbHRpcH1gO1xuICAgICAgfSBlbHNlIGlmICh0aXRsZSAmJiAhZGF0YS53aWRnZXRUb29sdGlwKSB7XG4gICAgICAgIG1hcmtlclRpdGxlID0gYE1hcCBwaW4gb24gJHt0aXRsZX1gO1xuICAgICAgfSBlbHNlIGlmICghdGl0bGUgJiYgZGF0YS53aWRnZXRUb29sdGlwKSB7XG4gICAgICAgIG1hcmtlclRpdGxlID0gYE1hcCBwaW4gc2hvd2luZyBsb2NhdGlvbiBvZiAke2RhdGEud2lkZ2V0VG9vbHRpcH1gO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZSA9ICQuZGF0YShlbCwgc3RvcmUsIHtcbiAgICAgICAgLy8gRGVmYXVsdCBvcHRpb25zXG4gICAgICAgIGxhdExuZzogJzUxLjUxMTIxNCwtMC4xMTk4MjQnLFxuICAgICAgICB0b29sdGlwOiAnJyxcbiAgICAgICAgc3R5bGU6ICdyb2FkbWFwJyxcbiAgICAgICAgem9vbTogMTIsXG5cbiAgICAgICAgLy8gTWFya2VyXG4gICAgICAgIG1hcmtlcjogbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbWFya2VyVGl0bGUsXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIFRvb2x0aXAgaW5mb3dpbmRvd1xuICAgICAgICBpbmZvd2luZG93OiBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgICAgZGlzYWJsZUF1dG9QYW46IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgICAvLyBMYXRMbmcgY2VudGVyIHBvaW50XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBkYXRhLndpZGdldExhdGxuZyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgZGF0YS53aWRnZXRMYXRsbmcubGVuZ3RoICE9PSAnJ1xuICAgICAgKSB7XG4gICAgICAgIHN0YXRlLmxhdExuZyA9IGRhdGEud2lkZ2V0TGF0bG5nO1xuICAgICAgfVxuICAgICAgdmFyIGNvb3JkcyA9IHN0YXRlLmxhdExuZy5zcGxpdCgnLCcpO1xuICAgICAgdmFyIGxhdExuZ09iaiA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoY29vcmRzWzBdLCBjb29yZHNbMV0pO1xuICAgICAgc3RhdGUubGF0TG5nT2JqID0gbGF0TG5nT2JqO1xuXG4gICAgICAvLyBEaXNhYmxlIHRvdWNoIGV2ZW50c1xuICAgICAgdmFyIG1hcERyYWdnYWJsZSA9ICEoV2ViZmxvdy5lbnYudG91Y2ggJiYgIWRhdGEuZW5hYmxlVG91Y2gpO1xuXG4gICAgICAvLyBNYXAgaW5zdGFuY2VcbiAgICAgIHN0YXRlLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZWwsIHtcbiAgICAgICAgY2VudGVyOiBzdGF0ZS5sYXRMbmdPYmosXG4gICAgICAgIHpvb206IHN0YXRlLnpvb20sXG4gICAgICAgIG1heFpvb206IDIwLFxuICAgICAgICBtYXBUeXBlQ29udHJvbDogZmFsc2UsXG4gICAgICAgIHBhbkNvbnRyb2w6IGZhbHNlLFxuICAgICAgICBzdHJlZXRWaWV3Q29udHJvbDogZmFsc2UsXG4gICAgICAgIHNjcm9sbHdoZWVsOiBkYXRhLmVuYWJsZVNjcm9sbCxcbiAgICAgICAgZHJhZ2dhYmxlOiBtYXBEcmFnZ2FibGUsXG4gICAgICAgIHpvb21Db250cm9sOiB0cnVlLFxuICAgICAgICB6b29tQ29udHJvbE9wdGlvbnM6IHtcbiAgICAgICAgICBzdHlsZTogZ29vZ2xlLm1hcHMuWm9vbUNvbnRyb2xTdHlsZS5TTUFMTCxcbiAgICAgICAgfSxcbiAgICAgICAgbWFwVHlwZUlkOiBzdGF0ZS5zdHlsZSxcbiAgICAgIH0pO1xuICAgICAgc3RhdGUubWFya2VyLnNldE1hcChzdGF0ZS5tYXApO1xuXG4gICAgICAvLyBTZXQgbWFwIHBvc2l0aW9uIGFuZCBvZmZzZXRcbiAgICAgIHN0YXRlLnNldE1hcFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzdGF0ZS5tYXAuc2V0Q2VudGVyKHN0YXRlLmxhdExuZ09iaik7XG4gICAgICAgIHZhciBvZmZzZXRYID0gMDtcbiAgICAgICAgdmFyIG9mZnNldFkgPSAwO1xuICAgICAgICB2Y
14213XIgcGFkZGluZyA9ICRlbC5jc3MoW1xuICAgICAgICAgICdwYWRkaW5nVG9wJyxcbiAgICAgICAgICAncGFkZGluZ1JpZ2h0JyxcbiAgICAgICAgICAncGFkZGluZ0JvdHRvbScsXG4gICAgICAgICAgJ3BhZGRpbmdMZWZ0JyxcbiAgICAgICAgXSk7XG4gICAgICAgIG9mZnNldFggLT0gcGFyc2VJbnQocGFkZGluZy5wYWRkaW5nTGVmdCwgMTApO1xuICAgICAgICBvZmZzZXRYICs9IHBhcnNlSW50KHBhZGRpbmcucGFkZGluZ1JpZ2h0LCAxMCk7XG4gICAgICAgIG9mZnNldFkgLT0gcGFyc2VJbnQocGFkZGluZy5wYWRkaW5nVG9wLCAxMCk7XG4gICAgICAgIG9mZnNldFkgKz0gcGFyc2VJbnQocGFkZGluZy5wYWRkaW5nQm90dG9tLCAxMCk7XG4gICAgICAgIGlmIChvZmZzZXRYIHx8IG9mZnNldFkpIHtcbiAgICAgICAgICBzdGF0ZS5tYXAucGFuQnkob2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgIH1cbiAgICAgICAgJGVsLmNzcygncG9zaXRpb24nLCAnJyk7IC8vIFJlbW92ZSBpbmplY3RlZCBwb3NpdGlvblxuICAgICAgfTtcblxuICAgICAgLy8gRml4IHBvc2l0aW9uIGFmdGVyIGZpcnN0IHRpbGVzIGhhdmUgbG9hZGVkXG4gICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihzdGF0ZS5tYXAsICd0aWxlc2xvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuY2xlYXJMaXN0ZW5lcnMoc3RhdGUubWFwLCAndGlsZXNsb2FkZWQnKTtcbiAgICAgICAgc3RhdGUuc2V0TWFwUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgaW5pdGlhbCBwb3NpdGlvblxuICAgICAgc3RhdGUuc2V0TWFwUG9zaXRpb24oKTtcbiAgICAgIHN0YXRlLm1hcmtlci5zZXRQb3NpdGlvbihzdGF0ZS5sYXRMbmdPYmopO1xuICAgICAgc3RhdGUuaW5mb3dpbmRvdy5zZXRQb3NpdGlvbihzdGF0ZS5sYXRMbmdPYmopO1xuXG4gICAgICAvLyBEcmF3IHRvb2x0aXBcbiAgICAgIGlmIChoYXNUb29sdGlwKSB7XG4gICAgICAgIHZhciB0b29sdGlwID0gZGF0YS53aWRnZXRUb29sdGlwO1xuICAgICAgICBzdGF0ZS50b29sdGlwID0gdG9vbHRpcDtcbiAgICAgICAgc3RhdGUuaW5mb3dpbmRvdy5zZXRDb250ZW50KHRvb2x0aXApO1xuICAgICAgICBpZiAoIXN0YXRlLmluZm93aW5kb3dPcGVuKSB7XG4gICAgICAgICAgc3RhdGUuaW5mb3dpbmRvdy5vcGVuKHN0YXRlLm1hcCwgc3RhdGUubWFya2VyKTtcbiAgICAgICAgICBzdGF0ZS5pbmZvd2luZG93T3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTWFwIHN0eWxlIC0gb3B0aW9ucy5zdHlsZVxuICAgICAgdmFyIHN0eWxlID0gZGF0YS53aWRnZXRTdHlsZTtcbiAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICBzdGF0ZS5tYXAuc2V0TWFwVHlwZUlkKHN0eWxlKTtcbiAgICAgIH1cblxuICAgICAgLy8gWm9vbSAtIG9wdGlvbnMuem9vbVxuICAgICAgdmFyIHpvb20gPSBkYXRhLndpZGdldFpvb207XG4gICAgICBpZiAoem9vbSAhPSBudWxsKSB7XG4gICAgICAgIHN0YXRlLnpvb20gPSB6b29tO1xuICAgICAgICBzdGF0ZS5tYXAuc2V0Wm9vbShOdW1iZXIoem9vbSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGljayBtYXJrZXIgdG8gb3BlbiBpbiBnb29nbGUgbWFwc1xuICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIoc3RhdGUubWFya2VyLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKFxuICAgICAgICAgICdodHRwczovL21hcHMuZ29vZ2xlLmNvbS8/ej0nICsgc3RhdGUuem9vbSArICcmZGFkZHI9JyArIHN0YXRlLmxhdExuZ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIGFwaTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsIl8iLCJhcGkiLCIkZG9jIiwiZG9jdW1lbnQiLCJnb29nbGUiLCIkbWFwcyIsIm5hbWVzcGFjZSIsImdvb2dsZU1hcHNBcGlLZXkiLCJHT09HTEVfTUFQU19BUElfS0VZIiwicmVhZHkiLCJlbnYiLCJpbml0TWFwcyIsImRlc3Ryb3kiLCJyZW1vdmVMaXN0ZW5lcnMiLCJmaW5kIiwibGVuZ3RoIiwiZ2V0U2NyaXB0Iiwid2luZG93IiwiX3dmX21hcHNfbG9hZGVkIiwibWFwc0xvYWRlZCIsImVhY2giLCJyZW5kZXJNYXAiLCJhZGRMaXN0ZW5lcnMiLCJyZXNpemUiLCJvZmYiLCJyZXNpemVNYXBzIiwicmVkcmF3Iiwib24iLCJpIiwiZWwiLCJkYXRhIiwiZ2V0U3RhdGUiLCJyZXNpemVNYXAiLCJzdGF0ZSIsIm1hcHMiLCJldmVudCIsInRyaWdnZXIiLCJtYXAiLCJzZXRNYXBQb3NpdGlvbiIsInN0b3JlIiwiaGFzVG9vbHRpcCIsIndpZGdldFRvb2x0aXAiLCIkZWwiLCJ0aXRsZSIsImF0dHIiLCJtYXJrZXJUaXRsZSIsImxhdExuZyIsInRvb2x0aXAiLCJzdHlsZSIsInpvb20iLCJtYXJrZXIiLCJNYXJrZXIiLCJkcmFnZ2FibGUiLCJpbmZvd2luZG93IiwiSW5mb1dpbmRvdyIsImRpc2FibGVBdXRvUGFuIiwid2lkZ2V0TGF0bG5nIiwiY29vcmRzIiwic3BsaXQiLCJsYXRMbmdPYmoiLCJMYXRMbmciLCJtYXBEcmFnZ2FibGUiLCJ0b3VjaCIsImVuYWJsZVRvdWNoIiwiTWFwIiwiY2VudGVyIiwibWF4Wm9vbSIsIm1hcFR5cGVDb250cm9sIiwicGFuQ29udHJvbCIsInN0cmVldFZpZXdDb250cm9sIiwic2Nyb2xsd2hlZWwiLCJlbmFibGVTY3JvbGwiLCJ6b29tQ29udHJvbCIsInpvb21Db250cm9sT3B0aW9ucyIsIlpvb21Db250cm9sU3R5bGUiLCJTTUFMTCIsIm1hcFR5cGVJZCIsInNldE1hcCIsInNldENlbnRlciIsIm9mZnNldFgiLCJvZmZzZXRZIiwicGFkZGluZyIsImNzcyIsInBhcnNlSW50IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsInBhbkJ5IiwiYWRkTGlzdGVuZXIiLCJjbGVhckxpc3RlbmVycyIsInNldFBvc2l0aW9uIiwic2V0Q29udGVudCIsImluZm93aW5kb3dPcGVuIiwib3BlbiIsIndpZGdldFN0eWxlIiwic2V0TWFwVHlwZUlkIiwid2lkZ2V0Wm9vbSIsInNldFpvb20iLCJOdW1iZXIiXSwibWFwcGluZ3MiOiJBQUFBLGlEQU
14213FpRCxHQUVqRDs7Q0FFQztBQUVELElBQUlBLFVBQVVDLFFBQVE7QUFFdEJELFFBQVFFLE1BQU0sQ0FDWixRQUNDQyxPQUFPQyxPQUFPLEdBQUcsU0FBVUMsQ0FBQyxFQUFFQyxDQUFDO0lBQzlCLElBQUlDLE1BQU0sQ0FBQztJQUNYLElBQUlDLE9BQU9ILEVBQUVJO0lBQ2IsSUFBSUMsU0FBUztJQUNiLElBQUlDO0lBQ0osSUFBSUMsWUFBWTtJQUNoQiw2R0FBNkc7SUFDN0csK0ZBQStGO0lBQy9GLElBQUlDLG1CQUNGLE9BQU9DLHdCQUF3QixjQUFjQSxzQkFBc0I7SUFFckUsc0NBQXNDO0lBQ3RDLGlCQUFpQjtJQUVqQlAsSUFBSVEsS0FBSyxHQUFHO1FBQ1YsNkJBQTZCO1FBQzdCLElBQUksQ0FBQ2YsUUFBUWdCLEdBQUcsSUFBSTtZQUNsQkM7UUFDRjtJQUNGO0lBRUFWLElBQUlXLE9BQU8sR0FBR0M7SUFFZCxzQ0FBc0M7SUFDdEMsa0JBQWtCO0lBRWxCLFNBQVNGO1FBQ1BOLFFBQVFILEtBQUtZLElBQUksQ0FBQ1I7UUFDbEIsSUFBSSxDQUFDRCxNQUFNVSxNQUFNLEVBQUU7WUFDakI7UUFDRjtRQUVBLElBQUlYLFdBQVcsTUFBTTtZQUNuQkwsRUFBRWlCLFNBQVMsQ0FDVCw4RkFDRVQ7WUFFSlUsT0FBT0MsZUFBZSxHQUFHQztRQUMzQixPQUFPO1lBQ0xBO1FBQ0Y7UUFFQSxTQUFTQTtZQUNQRixPQUFPQyxlQUFlLEdBQUcsWUFBYTtZQUN0Q2QsU0FBU2EsT0FBT2IsTUFBTTtZQUN0QkMsTUFBTWUsSUFBSSxDQUFDQztZQUNYUjtZQUNBUztRQUNGO0lBQ0Y7SUFFQSxTQUFTVDtRQUNQbkIsUUFBUTZCLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDQztRQUNuQi9CLFFBQVFnQyxNQUFNLENBQUNGLEdBQUcsQ0FBQ0M7SUFDckI7SUFFQSxTQUFTSDtRQUNQNUIsUUFBUTZCLE1BQU0sQ0FBQ0ksRUFBRSxDQUFDRjtRQUNsQi9CLFFBQVFnQyxNQUFNLENBQUNDLEVBQUUsQ0FBQ0Y7SUFDcEI7SUFFQ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
14214
14215}),
14216"3946": (function (__unused_webpack_module, exports, __webpack_require__) {
14217"use strict";
14218
14219Object.defineProperty(exports, "__esModule", ({
14220    value: true
14221}));
14222function _export(target, all) {
14223    for(var name in all)Object.defineProperty(target, name, {
14224        enumerable: true,
14225        get: all[name]
14226    });
14227}
14228_export(exports, {
14229    actionListPlaybackChanged: function() {
14230        return actionListPlaybackChanged;
14231    },
14232    animationFrameChanged: function() {
14233        return animationFrameChanged;
14234    },
14235    clearRequested: function() {
14236        return clearRequested;
14237    },
14238    elementStateChanged: function() {
14239        return elementStateChanged;
14240    },
14241    eventListenerAdded: function() {
14242        return eventListenerAdded;
14243    },
14244    eventStateChanged: function() {
14245        return eventStateChanged;
14246    },
14247    instanceAdded: function() {
14248        return instanceAdded;
14249    },
14250    instanceRemoved: function() {
14251        return instanceRemoved;
14252    },
14253    instanceStarted: function() {
14254        return instanceStarted;
14255    },
14256    mediaQueriesDefined: function() {
14257        return mediaQueriesDefined;
14258    },
14259    parameterChanged: function() {
14260        return parameterChanged;
14261    },
14262    playbackRequested: function() {
14263        return playbackRequested;
14264    },
14265    previewRequested: function() {
14266        return previewRequested;
14267    },
14268    rawDataImported: function() {
14269        return rawDataImported;
14270    },
14271    sessionInitialized: function() {
14272        return sessionInitialized;
14273    },
14274    sessionStarted: function() {
14275        return sessionStarted;
14276    },
14277    sessionStopped: function() {
14278        return sessionStopped;
14279    },
14280    stopRequested: function() {
14281        return stopRequested;
14282    },
14283    testFrameRendered: function() {
14284        return testFrameRendered;
14285    },
14286    viewportWidthChanged: function() {
14287        return viewportWidthChanged;
14288    }
14289});
14290const _sharedconstants = __webpack_require__(7087);
14291const _shared = __webpack_require__(9468);
14292const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_INITIALIZED, IX2_SESSION_STARTED, IX2_SESSION_STOPPED, IX2_PREVIEW_REQUESTED, IX2_PLAYBACK_REQUESTED, IX2_STOP_REQUESTED, IX2_CLEAR_REQUESTED, IX2_EVENT_LISTENER_ADDED, IX2_TEST_FRAME_RENDERED, IX2_EVENT_STATE_CHANGED, IX2_ANIMATION_FRAME_CHANGED, IX2_PARAMETER_CHANGED, IX2_INSTANCE_ADDED, IX2_INSTANCE_STARTED, IX2_INSTANCE_REMOVED, IX2_ELEMENT_STATE_CHANGED, IX2_ACTION_LIST_PLAYBACK_CHANGED, IX2_VIEWPORT_WIDTH_CHANGED, IX2_MEDIA_QUERIES_DEFINED } = _sharedconstants.IX2EngineActionTypes;
14293const { reifyState } = _shared.IX2VanillaUtils;
14294const rawDataImported = (rawData)=>({
14295        type: IX2_RAW_DATA_IMPORTED,
14296        payload: {
14297            ...reifyState(rawData)
14298        }
14299    });
14300const sessionInitialized = ({ hasBoundaryNodes, reducedMotion })=>({
14301        type: IX2_SESSION_INITIALIZED,
14302        payload: {
14303            hasBoundaryNodes,
14304            reducedMotion
14305        }
14306    });
14307const sessionStarted = ()=>({
14308        type: IX2_SESSION_STARTED
14309    });
14310const sessionStopped = ()=>({
14311        type: IX2_SESSION_STOPPED
14312    });
14313const previewRequested = ({ rawData, defer })=>({
14314        type: IX2_PREVIEW_REQUESTED,
14315        payload: {
14316            defer,
14317            rawData
14318        }
14319    });
14320const playbackRequested = ({ actionTypeId = _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION, actionListId, actionItemId, eventId, allowEvents, immediate, testManual, verbose, rawData })=>({
14321        type: IX2_PLAYBACK_REQUESTED,
14322        payload: {
14323            actionTypeId,
14324            actionListId,
14325            actionItemId,
14326            testManual,
14327            eventId,
14328            allowEvents,
14329            immediate,
14330            verbose,
14331            rawData
14332        }
14333    });
14334const stopRequested = (actionListId)=>({
14335        type: IX2_STOP_REQUESTED,
14336        payload: {
14337            actionListId
14338        }
14339    });
14340const clearRequested = ()=>({
14341        type: IX2_CLEAR_REQUESTED
14342    });
14343const eventListenerAdded = (target, listenerParams)=>({
14344        type: IX2_EVENT_LISTENER_ADDED,
14345        payload: {
14346            target,
14347            listenerParams
14348        }
14349    });
14350const testFrameRendered = (step = 1)=>({
14351        type: IX2_TEST_FRAME_RENDERED,
14352        payload: {
14353            step
14354        }
14355    });
14356const eventStateChanged = (stateKey, newState)=>({
14357        type: IX2_EVENT_STATE_CHANGED,
14358        payload: {
14359            stateKey,
14360            newState
14361        }
14362    });
14363const animationFrameChanged = (now, parameters)=>({
14364        type: IX2_ANIMATION_FRAME_CHANGED,
14365        payload: {
14366            now,
14367            parameters
14368        }
14369    });
14370const parameterChanged = (key, value)=>({
14371        type: IX2_PARAMETER_CHANGED,
14372        payload: {
14373            key,
14374            value
14375        }
14376    });
14377const instanceAdded = (options)=>({
14378        type: IX2_INSTANCE_ADDED,
14379        payload: {
14380            ...options
14381        }
14382    });
14383const instanceStarted = (instanceId, time)=>({
14384        type: IX2_INSTANCE_STARTED,
14385        payload: {
14386            instanceId,
14387            time
14388        }
14389    });
14390const instanceRemoved = (instanceId)=>({
14391        type: IX2_INSTANCE_REMOVED,
14392        payload: {
14393            instanceId
14394        }
14395    });
14396const elementStateChanged = (elementId, actionTypeId, current, actionItem)=>({
14397        type: IX2_ELEMENT_STATE_CHANGED,
14398        payload: {
14399            elementId,
14400            actionTypeId,
14401            current,
14402            actionItem
14403        }
14404    });
14405const actionListPlaybackChanged = ({ actionListId, isPlaying })=>({
14406        type: IX2_ACTION_LIST_PLAYBACK_CHANGED,
14407        payload: {
14408            actionListId,
14409            isPlaying
14410        }
14411    });
14412const viewportWidthChanged = ({ width, mediaQueries })=>({
14413        type: IX2_VIEWPORT_WIDTH_CHANGED,
14414        payload: {
14415            width,
14416            mediaQueries
14417        }
14418    });
14419const mediaQueriesDefined = ()=>({
14420        type: IX2_MEDIA_QUERIES_DEFINED
14421    });
14422
14423//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVuZ2luZUFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWN0aW9uVHlwZUNvbnN0cyxcbiAgSVgyRW5naW5lQWN0aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtJWDJWYW5pbGxhVXRpbHN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbkxpc3RJZCxcbiAgQWN0aW9uSWQsXG4gIEV2ZW50SWQsXG4gIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLFxuICBBY3Rpb25UeXBlSWRUeXBlLFxuICBBY3Rpb25MaXN0c1R5cGUsXG4gIEV2ZW50c1R5cGUsXG4gIEV2ZW50VHlwZSxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3R5cGVzLWNvcmUnO1xuaW1wb3J0IHtCcmVha3BvaW50SUR9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL3N0eWxlL3R5cGVzJztcblxuY29uc3Qge1xuICBJWDJfUkFXX0RBVEFfSU1QT1JURUQsXG4gIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVELFxuICBJWDJfU0VTU0lPTl9TVE
14423FSVEVELFxuICBJWDJfU0VTU0lPTl9TVE9QUEVELFxuICBJWDJfUFJFVklFV19SRVFVRVNURUQsXG4gIElYMl9QTEFZQkFDS19SRVFVRVNURUQsXG4gIElYMl9TVE9QX1JFUVVFU1RFRCxcbiAgSVgyX0NMRUFSX1JFUVVFU1RFRCxcbiAgSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVELFxuICBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgSVgyX0VWRU5UX1NUQVRFX0NIQU5HRUQsXG4gIElYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCxcbiAgSVgyX1BBUkFNRVRFUl9DSEFOR0VELFxuICBJWDJfSU5TVEFOQ0VfQURERUQsXG4gIElYMl9JTlNUQU5DRV9TVEFSVEVELFxuICBJWDJfSU5TVEFOQ0VfUkVNT1ZFRCxcbiAgSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCxcbiAgSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQsXG4gIElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VELFxuICBJWDJfTUVESUFfUVVFUklFU19ERUZJTkVELFxufSA9IElYMkVuZ2luZUFjdGlvblR5cGVzO1xuXG5jb25zdCB7cmVpZnlTdGF0ZX0gPSBJWDJWYW5pbGxhVXRpbHM7XG5cbmV4cG9ydCB0eXBlIElYMlJhd0RhdGEgPSB7XG4gIGV2ZW50czogRXZlbnRzVHlwZTtcbiAgYWN0aW9uTGlzdHM6IEFjdGlvbkxpc3RzVHlwZTtcbiAgc2l0ZToge21lZGlhUXVlcmllczoge2tleTogQnJlYWtwb2ludElEOyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXJ9W119O1xufTtcblxuZXhwb3J0IHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCA9IHtcbiAgaXhEYXRhOiB7XG4gICAgZXZlbnRzOiBFdmVudHNUeXBlIHwgdW5kZWZpbmVkO1xuICAgIGFjdGlvbkxpc3RzOiBBY3Rpb25MaXN0c1R5cGUgfCB1bmRlZmluZWQ7XG4gICAgZXZlbnRUeXBlTWFwOiB7W2sgaW4gRXZlbnRUeXBlWydldmVudFR5cGVJZCddXToge1trZXk6IHN0cmluZ106IEV2ZW50VHlwZX19O1xuICAgIG1lZGlhUXVlcmllczogSVgyUmF3RGF0YVsnc2l0ZSddWydtZWRpYVF1ZXJpZXMnXTtcbiAgICBtZWRpYVF1ZXJ5S2V5czogQnJlYWtwb2ludElEW107XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmF3RGF0YUltcG9ydGVkID0gKHJhd0RhdGE6IElYMlJhd0RhdGEpID0+ICh7XG4gIHR5cGU6IElYMl9SQVdfREFUQV9JTVBPUlRFRCxcbiAgcGF5bG9hZDoge1xuICAgIC4uLnJlaWZ5U3RhdGUocmF3RGF0YSksXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCA9IHtcbiAgaGFzQm91bmRhcnlOb2RlczogYm9vbGVhbjtcbiAgcmVkdWNlZE1vdGlvbjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXNzaW9uSW5pdGlhbGl6ZWQgPSAoe1xuICBoYXNCb3VuZGFyeU5vZGVzLFxuICByZWR1Y2VkTW90aW9uLFxufTogc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1NFU1NJT05fSU5JVElBTElaRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBoYXNCb3VuZGFyeU5vZGVzLFxuICAgIHJlZHVjZWRNb3Rpb24sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHNlc3Npb25TdGFydGVkID0gKCkgPT4gKHtcbiAgdHlwZTogSVgyX1NFU1NJT05fU1RBUlRFRCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0b3BwZWQgPSAoKSA9PiAoe1xuICB0eXBlOiBJWDJfU0VTU0lPTl9TVE9QUEVELFxufSk7XG5cbmV4cG9ydCB0eXBlIHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICByYXdEYXRhOiBJWDJSYXdEYXRhO1xuICBkZWZlcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2aWV3UmVxdWVzdGVkID0gKHtcbiAgcmF3RGF0YSxcbiAgZGVmZXIsXG59OiBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1BSRVZJRVdfUkVRVUVTVEVELFxuICBwYXlsb2FkOiB7XG4gICAgZGVmZXIsXG4gICAgcmF3RGF0YSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBwbGF5YmFja1JlcXVlc3RlZFBheWxvYWQgPSB7XG4gIGFjdGlvblR5cGVJZDpcbiAgICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OXG4gICAgfCB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OO1xuICBhY3Rpb25MaXN0SWQ6IEFjdGlvbkxpc3RJZDtcbiAgYWN0aW9uSXRlbUlkOiBBY3Rpb25JZDtcbiAgZXZlbnRJZDogRXZlbnRJZDtcbiAgYWxsb3dFdmVudHM6IGJvb2xlYW47XG4gIGltbWVkaWF0ZTogYm9vbGVhbjtcbiAgdGVzdE1hbnVhbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IGJvb2xlYW47XG4gIHJhd0RhdGE6IElYMlJhd0RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgcGxheWJhY2tSZXF1ZXN0ZWQgPSAoe1xuICBhY3Rpb25UeXBlSWQgPSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OLFxuICBhY3Rpb25MaXN0SWQsXG4gIGFjdGlvbkl0ZW1JZCxcbiAgZXZlbnRJZCxcbiAgYWxsb3dFdmVudHMsXG4gIGltbWVkaWF0ZSxcbiAgdGVzdE1hbnVhbCxcbiAgdmVyYm9zZSxcbiAgcmF3RGF0YSxcbn06IHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCxcbiAgcGF5bG9hZDoge1xuICAgIGFjdGlvblR5cGVJZCxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgYWN0aW9uSXRlbUlkLFxuICAgIHRlc3RNYW51YWwsXG4gICAgZXZlbnRJZCxcbiAgICBhbGxvd0V2ZW50cyxcbiAgICBpbW1lZGlhdGUsXG4gICAgdmVyYm9zZSxcbiAgICByYXdEYXRhLFxuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIHN0b3BSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICBhY3Rpb25MaXN0SWQ6IEFjdGlvbkxpc3RJZDtcbn07XG5cbmV4cG9ydCBjb25zdCBzdG9wUmVxdWVzdGVkID0gKFxuICBhY3Rpb25MaXN0SWQ6IHN0b3BSZXF1ZXN0ZWRQYXlsb2FkWydhY3Rpb25MaXN0SWQnXVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfU1RPUF9SRVFVRVNURUQsXG4gIHBheWxvYWQ6IHtcbiAgICBhY3Rpb25MaXN0SWQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUmVxdWVzdGVkID0gKCkgPT4gKHtcbiAgdHlwZTogSVgyX0NMRUFSX1JFUVVFU1RFRCxcbn0pO1xuXG5leHBvcnQgdHlwZSBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkID0ge1xuICB0YXJnZXQ6IGFueTtcbiAgbGlzdGVuZXJQYXJhbXM6IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVyQWRkZWQgPSAoXG4gIHRhcmdldDogZXZlbnRMaXN0ZW5lckFkZGVkUGF5bG9hZFsndGFyZ2V0J10sXG4gIGxpc3RlbmVyUGFyYW1zOiBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkWydsaXN0ZW5lclBhcmFtcyddXG4pID0+ICh7XG4gIHR5cGU6IElYMl9FVkVOVF9MSVNURU5FUl9BRERFRCxcbiAgcGF5bG9hZDoge1xuICAgIHRhcmdldCxcbiAgICBsaXN0ZW5lclBhcmFtcyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSB0ZXN0RnJhbWVSZW5kZXJlZFBheWxvYWQgPSB7XG4gIHN0ZXA/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgdGVzdEZyYW1lUmVuZGVyZWQgPSAoXG4gIHN0ZXA6IHRlc3RGcmFtZVJlbmRlcmVkUGF5bG9hZFsnc3RlcCddID0gMVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgcGF5bG9hZDoge1xuICAgIHN0ZXAsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkID0ge1xuICBzdGF0ZUtleTogYW55O1xuICBuZXdTdGF0ZTogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IGV2ZW50U3RhdGVDaGFuZ2VkI
14423D0gKFxuICBzdGF0ZUtleTogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkWydzdGF0ZUtleSddLFxuICBuZXdTdGF0ZTogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkWyduZXdTdGF0ZSddXG4pID0+ICh7XG4gIHR5cGU6IElYMl9FVkVOVF9TVEFURV9DSEFOR0VELFxuICBwYXlsb2FkOiB7XG4gICAgc3RhdGVLZXksXG4gICAgbmV3U3RhdGUsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgbm93OiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbmltYXRpb25GcmFtZUNoYW5nZWQgPSAoXG4gIG5vdzogYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZFsnbm93J10sXG4gIHBhcmFtZXRlcnM6IGFuaW1hdGlvbkZyYW1lQ2hhbmdlZFBheWxvYWRbJ3BhcmFtZXRlcnMnXVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBub3csXG4gICAgcGFyYW1ldGVycyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyYW1ldGVyQ2hhbmdlZCA9IChcbiAga2V5OiBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgdmFsdWU6IG51bWJlclxuKSA9PiAoe1xuICB0eXBlOiBJWDJfUEFSQU1FVEVSX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbmNlQWRkZWQgPSAob3B0aW9uczogYW55KSA9PiAoe1xuICB0eXBlOiBJWDJfSU5TVEFOQ0VfQURERUQsXG4gIHBheWxvYWQ6IHtcbiAgICAuLi5vcHRpb25zLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnN0YW5jZVN0YXJ0ZWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpID0+ICh7XG4gIHR5cGU6IElYMl9JTlNUQU5DRV9TVEFSVEVELFxuICBwYXlsb2FkOiB7XG4gICAgaW5zdGFuY2VJZCxcbiAgICB0aW1lLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnN0YW5jZVJlbW92ZWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nKSA9PiAoe1xuICB0eXBlOiBJWDJfSU5TVEFOQ0VfUkVNT1ZFRCxcbiAgcGF5bG9hZDoge1xuICAgIGluc3RhbmNlSWQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRTdGF0ZUNoYW5nZWQgPSAoXG4gIGVsZW1lbnRJZDogYW55LFxuICBhY3Rpb25UeXBlSWQ6IEFjdGlvblR5cGVJZFR5cGUsXG4gIGN1cnJlbnQ6IGFueSxcbiAgYWN0aW9uSXRlbTogYW55XG4pID0+ICh7XG4gIHR5cGU6IElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBlbGVtZW50SWQsXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIGN1cnJlbnQsXG4gICAgYWN0aW9uSXRlbSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgYWN0aW9uTGlzdElkOiBBY3Rpb25MaXN0SWQ7XG4gIGlzUGxheWluZzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkID0gKHtcbiAgYWN0aW9uTGlzdElkLFxuICBpc1BsYXlpbmcsXG59OiBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgaXNQbGF5aW5nLFxuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIHZpZXdwb3J0V2lkdGhDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgbWVkaWFRdWVyaWVzOiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3Qgdmlld3BvcnRXaWR0aENoYW5nZWQgPSAoe1xuICB3aWR0aCxcbiAgbWVkaWFRdWVyaWVzLFxufTogdmlld3BvcnRXaWR0aENoYW5nZWRQYXlsb2FkKSA9PiAoe1xuICB0eXBlOiBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCxcbiAgcGF5bG9hZDoge1xuICAgIHdpZHRoLFxuICAgIG1lZGlhUXVlcmllcyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgbWVkaWFRdWVyaWVzRGVmaW5lZCA9ICgpID0+ICh7XG4gIHR5cGU6IElYMl9NRURJQV9RVUVSSUVTX0RFRklORUQsXG59KTtcbiJdLCJuYW1lcyI6WyJhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkIiwiYW5pbWF0aW9uRnJhbWVDaGFuZ2VkIiwiY2xlYXJSZXF1ZXN0ZWQiLCJlbGVtZW50U3RhdGVDaGFuZ2VkIiwiZXZlbnRMaXN0ZW5lckFkZGVkIiwiZXZlbnRTdGF0ZUNoYW5nZWQiLCJpbnN0YW5jZUFkZGVkIiwiaW5zdGFuY2VSZW1vdmVkIiwiaW5zdGFuY2VTdGFydGVkIiwibWVkaWFRdWVyaWVzRGVmaW5lZCIsInBhcmFtZXRlckNoYW5nZWQiLCJwbGF5YmFja1JlcXVlc3RlZCIsInByZXZpZXdSZXF1ZXN0ZWQiLCJyYXdEYXRhSW1wb3J0ZWQiLCJzZXNzaW9uSW5pdGlhbGl6ZWQiLCJzZXNzaW9uU3RhcnRlZCIsInNlc3Npb25TdG9wcGVkIiwic3RvcFJlcXVlc3RlZCIsInRlc3RGcmFtZVJlbmRlcmVkIiwidmlld3BvcnRXaWR0aENoYW5nZWQiLCJJWDJfUkFXX0RBVEFfSU1QT1JURUQiLCJJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCIsIklYMl9TRVNTSU9OX1NUQVJURUQiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX1BSRVZJRVdfUkVRVUVTVEVEIiwiSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCIsIklYMl9TVE9QX1JFUVVFU1RFRCIsIklYMl9DTEVBUl9SRVFVRVNURUQiLCJJWDJfRVZFTlRfTElTVEVORVJfQURERUQiLCJJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyX1BBUkFNRVRFUl9DSEFOR0VEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0lOU1RBTkNFX1NUQVJURUQiLCJJWDJfSU5TVEFOQ0VfUkVNT1ZFRCIsIklYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQiLCJJWDJfQUNUSU9OX0xJU1RfUExBWUJBQ0tfQ0hBTkdFRCIsIklYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEIiwiSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwicmVpZnlTdGF0ZSIsIklYMlZhbmlsbGFVdGlscyIsInJhd0RhdGEiLCJ0eXBlIiwicGF5bG9hZCIsImhhc0JvdW5kYXJ5Tm9kZXMiLCJyZWR1Y2VkTW90aW9uIiwiZGVmZXIiLCJhY3Rpb25UeXBlSWQiLCJBY3Rpb25UeXBlQ29uc3RzIiwiR0VORVJBTF9TVEFSVF9BQ1RJT04iLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25JdGVtSWQiLCJldmVudElkIiwiYWxsb3dFdmVudHMiLCJpbW1lZGlhdGUiLCJ0ZXN0TWFudWFsIiwidmVyYm9zZSIsInRhcmdldCIsImxpc3RlbmVyUGFyYW1zIiwic3RlcCIsInN0YXRlS2V5IiwibmV3U3RhdGUiLCJub3ciLCJwYXJhbWV0ZXJzIiwia2V5IiwidmFsdWUiLCJvcHRpb25zIiwiaW5zdGFuY2VJZCIsInRpbWUiLCJlbGVtZW50SWQiLCJjdXJyZW50IiwiYWN0aW9uSXRlbSIsImlzUGxheWluZyIsIndpZHRoIiwibWVkaWFRdWVyaWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXFSYUEseUJBQXlCO2VBQXpCQTs7SUFoRUFDLHFCQUFxQjtlQUFyQkE7O0lBdERBQyxjQUFjO2VBQWRBOztJQWtHQUMsbUJBQW1CO2VBQW5C
14423QTs7SUF6RkFDLGtCQUFrQjtlQUFsQkE7O0lBNkJBQyxpQkFBaUI7ZUFBakJBOztJQXNDQUMsYUFBYTtlQUFiQTs7SUFlQUMsZUFBZTtlQUFmQTs7SUFSQUMsZUFBZTtlQUFmQTs7SUE4REFDLG1CQUFtQjtlQUFuQkE7O0lBaEZBQyxnQkFBZ0I7ZUFBaEJBOztJQXZHQUMsaUJBQWlCO2VBQWpCQTs7SUF6QkFDLGdCQUFnQjtlQUFoQkE7O0lBcENBQyxlQUFlO2VBQWZBOztJQVlBQyxrQkFBa0I7ZUFBbEJBOztJQVdBQyxjQUFjO2VBQWRBOztJQUlBQyxjQUFjO2VBQWRBOztJQStEQUMsYUFBYTtlQUFiQTs7SUFpQ0FDLGlCQUFpQjtlQUFqQkE7O0lBOEdBQyxvQkFBb0I7ZUFBcEJBOzs7aUNBbFNOO3dCQUV1QjtBQWM5QixNQUFNLEVBQ0pDLHFCQUFxQixFQUNyQkMsdUJBQXVCLEVBQ3ZCQyxtQkFBbUIsRUFDbkJDLG1CQUFtQixFQUNuQkMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQyx3QkFBd0IsRUFDeEJDLHVCQUF1QixFQUN2QkMsdUJBQXVCLEVBQ3ZCQywyQkFBMkIsRUFDM0JDLHFCQUFxQixFQUNyQkMsa0JBQWtCLEVBQ2xCQyxvQkFBb0IsRUFDcEJDLG9CQUFvQixFQUNwQkMseUJBQXlCLEVBQ3pCQyxnQ0FBZ0MsRUFDaENDLDBCQUEwQixFQUMxQkMseUJBQXlCLEVBQzFCLEdBQUdDLHFDQUFvQjtBQUV4QixNQUFNLEVBQUNDLFVBQVUsRUFBQyxHQUFHQyx1QkFBZTtBQWtCN0IsTUFBTTdCLGtCQUFrQixDQUFDOEIsVUFBeUIsQ0FBQTtRQUN2REMsTUFBTXhCO1FBQ055QixTQUFTO1lBQ1AsR0FBR0osV0FBV0UsUUFBUTtRQUN4QjtJQUNGLENBQUE7QUFPTyxNQUFNN0IscUJBQXFCLENBQUMsRUFDakNnQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYSxHQUFNLENBQUE7UUFDaENILE1BQU12QjtRQUNOd0IsU0FBUztZQUNQQztZQUN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
14424
14425}),
14426"6011": (function (__unused_webpack_module, exports, __webpack_require__) {
14427"use strict";
14428// Array.includes needed for IE11 @packages/systems/ix2/shared-utils/quick-effects
14429
14430Object.defineProperty(exports, "__esModule", ({
14431    value: true
14432}));
14433function _export(target, all) {
14434    for(var name in all)Object.defineProperty(target, name, {
14435        enumerable: true,
14436        get: all[name]
14437    });
14438}
14439_export(exports, {
14440    actions: function() {
14441        return _IX2EngineActions;
14442    },
14443    destroy: function() {
14444        return destroy;
14445    },
14446    init: function() {
14447        return init;
14448    },
14449    setEnv: function() {
14450        return setEnv;
14451    },
14452    store: function() {
14453        return store;
14454    }
14455});
14456const _redux = __webpack_require__(9516);
14457const _IX2Reducer = /*#__PURE__*/ _interop_require_default(__webpack_require__(7243));
14458const _IX2VanillaEngine = __webpack_require__(1970);
14459const _IX2EngineActions = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(3946));
14460function _interop_require_default(obj) {
14461    return obj && obj.__esModule ? obj : {
14462        default: obj
14463    };
14464}
14465function _getRequireWildcardCache(nodeInterop) {
14466    if (typeof WeakMap !== "function") return null;
14467    var cacheBabelInterop = new WeakMap();
14468    var cacheNodeInterop = new WeakMap();
14469    return (_getRequireWildcardCache = function(nodeInterop) {
14470        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
14471    })(nodeInterop);
14472}
14473function _interop_require_wildcard(obj, nodeInterop) {
14474    if (!nodeInterop && obj && obj.__esModule) {
14475        return obj;
14476    }
14477    if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
14478        return {
14479            default: obj
14480        };
14481    }
14482    var cache = _getRequireWildcardCache(nodeInterop);
14483    if (cache && cache.has(obj)) {
14484        return cache.get(obj);
14485    }
14486    var newObj = {
14487        __proto__: null
14488    };
14489    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
14490    for(var key in obj){
14491        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
14492            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
14493            if (desc && (desc.get || desc.set)) {
14494                Object.defineProperty(newObj, key, desc);
14495            } else {
14496                newObj[key] = obj[key];
14497            }
14498        }
14499    }
14500    newObj.default = obj;
14501    if (cache) {
14502        cache.set(obj, newObj);
14503    }
14504    return newObj;
14505}
14506const store = (0, _redux.createStore)(_IX2Reducer.default);
14507function setEnv(env) {
14508    if (env()) {
14509        (0, _IX2VanillaEngine.observeRequests)(store);
14510    }
14511}
14512function init(rawData) {
14513    destroy();
14514    (0, _IX2VanillaEngine.startEngine)({
14515        store,
14516        rawData,
14517        allowEvents: true
14518    });
14519}
14520function destroy() {
14521    (0, _IX2VanillaEngine.stopEngine)(store);
14522}
14523
14524//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFycmF5LmluY2x1ZGVzIG5lZWRlZCBmb3IgSUUxMSBAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLXV0aWxzL3F1aWNrLWVmZmVjdHNcbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy9hcnJheS9pbmNsdWRlcyc7XG5cbmltcG9ydCB7Y3JlYXRlU3RvcmV9IGZyb20gJ3JlZHV4JztcbmltcG9ydCByZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMvSVgyUmVkdWNlcic7XG5pbXBvcnQge1xuICBzdGFydEVuZ2luZSxcbiAgc3RvcEVuZ2luZSxcbiAgb2JzZXJ2ZVJlcXVlc3RzLFxufSBmcm9tICcuL2xvZ2ljL0lYMlZhbmlsbGFFbmdpbmUnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICcuL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5pbXBvcnQge1xuICB0eXBlIElYMlJhd0RhdGEsXG4gIHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCxcbn0gZnJvbSAnLi9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMnO1xuXG5jb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIpO1xuXG5mdW5jdGlvbiBzZXRFbnYoZW52OiAoYXJnMT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pIHtcbiAgaWYgKGVudigpKSB7XG4gICAgb2JzZXJ2ZVJlcXVlc3RzKHN0b3JlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0KHJhd0RhdGE6IElYMlJhd0RhdGEpIHtcbiAgZGVzdHJveSgpO1xuXG4gIHN0YXJ0RW5naW5lKHtzdG9yZSwgcmF3RGF0YSwgYWxsb3dFdmVudHM6IHRydWV9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgc3RvcEVuZ2luZShzdG9yZSk7XG59XG5cbmV4cG9ydCB7XG4gIHNldEVudixcbiAgaW5pdCxcbiAgZGVzdHJveSxcbiAgc3RvcmUsXG4gIGFjdGlvbnMsXG4gIHR5cGUgSVgyUmF3RGF0YSxcbiAgdHlwZSByYXdEYXRhSW1wb3J0ZWRQYXlsb2FkLFxufTtcbiJdLCJuYW1lcyI6WyJhY3Rpb25zIiwiZGVzdHJveSIsImluaXQiLCJzZXRFbnYiLCJzdG9yZSIsImNyZWF0ZVN0b3JlIiwicmVkdWNlciIsImVudiIsIm9ic2VydmVSZXF1ZXN0cyIsInJhd0RhdGEiLCJzdGFydEVuZ2luZSIsImFsbG93RXZlbnRzIiwic3RvcEVuZ2luZSJdLCJtYXBwaW5ncyI6IkFBQUEsa0ZBQWtGOzs7Ozs7Ozs7Ozs7SUF1Q2hGQSxPQUFPO2VBQVBBOztJQUZBQyxPQUFPO2VBQVBBOztJQURBQyxJQUFJO2VBQUpBOztJQURBQyxNQUFNO2VBQU5BOztJQUdBQyxLQUFLO2VBQUxBOzs7dUJBbkN3QjttRUFDTjtrQ0
14524FLYjswRUFDa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTXpCLE1BQU1BLFFBQVFDLElBQUFBLGtCQUFXLEVBQUNDLG1CQUFPO0FBRWpDLFNBQVNILE9BQU9JLEdBQWtEO0lBQ2hFLElBQUlBLE9BQU87UUFDVEMsSUFBQUEsaUNBQWUsRUFBQ0o7SUFDbEI7QUFDRjtBQUVBLFNBQVNGLEtBQUtPLE9BQW1CO0lBQy9CUjtJQUVBUyxJQUFBQSw2QkFBVyxFQUFDO1FBQUNOO1FBQU9LO1FBQVNFLGFBQWE7SUFBSTtBQUNoRDtBQUVBLFNBQVNWO0lBQ1BXLElBQUFBLDRCQUFVLEVBQUNSO0FBQ2IifQ==
14525
14526}),
14527"5012": (function (__unused_webpack_module, exports, __webpack_require__) {
14528"use strict";
14529/* eslint-env browser */ 
14530Object.defineProperty(exports, "__esModule", ({
14531    value: true
14532}));
14533function _export(target, all) {
14534    for(var name in all)Object.defineProperty(target, name, {
14535        enumerable: true,
14536        get: all[name]
14537    });
14538}
14539_export(exports, {
14540    elementContains: function() {
14541        return elementContains;
14542    },
14543    getChildElements: function() {
14544        return getChildElements;
14545    },
14546    getClosestElement: function() {
14547        return getClosestElement;
14548    },
14549    getProperty: function() {
14550        return getProperty;
14551    },
14552    getQuerySelector: function() {
14553        return getQuerySelector;
14554    },
14555    getRefType: function() {
14556        return getRefType;
14557    },
14558    getSiblingElements: function() {
14559        return getSiblingElements;
14560    },
14561    getStyle: function() {
14562        return getStyle;
14563    },
14564    getValidDocument: function() {
14565        return getValidDocument;
14566    },
14567    isSiblingNode: function() {
14568        return isSiblingNode;
14569    },
14570    matchSelector: function() {
14571        return matchSelector;
14572    },
14573    queryDocument: function() {
14574        return queryDocument;
14575    },
14576    setStyle: function() {
14577        return setStyle;
14578    }
14579});
14580const _shared = __webpack_require__(9468);
14581const _sharedconstants = __webpack_require__(7087);
14582const { ELEMENT_MATCHES } = _shared.IX2BrowserSupport;
14583const { IX2_ID_DELIMITER, HTML_ELEMENT, PLAIN_OBJECT, WF_PAGE } = _sharedconstants.IX2EngineConstants;
14584function setStyle(element, prop, value) {
14585    // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'.
14586    element.style[prop] = value;
14587}
14588function getStyle(element, prop) {
14589    if (prop.startsWith('--')) {
14590        return window.getComputedStyle(document.documentElement).getPropertyValue(prop);
14591    }
14592    if (element.style instanceof CSSStyleDeclaration) {
14593        // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'.
14594        return element.style[prop];
14595    }
14596}
14597function getProperty(element, prop) {
14598    // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'HTMLElement'.
14599    return element[prop];
14600}
14601function matchSelector(selector) {
14602    // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'.
14603    return (element)=>element[ELEMENT_MATCHES](selector);
14604}
14605function getQuerySelector({ id, selector }) {
14606    if (id) {
14607        let nodeId = id;
14608        if (id.indexOf(IX2_ID_DELIMITER) !== -1) {
14609            const pair = id.split(IX2_ID_DELIMITER);
14610            const pageId = pair[0];
14611            // @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'.
14612            nodeId = pair[1];
14613            // Short circuit query if we're on the wrong page
14614            if (pageId !== document.documentElement.getAttribute(WF_PAGE)) {
14615                return null;
14616            }
14617        }
14618        return `[data-w-id="${nodeId}"], [data-w-id^="${nodeId}_instance"]`;
14619    }
14620    return selector;
14621}
14622function getValidDocument(pageId) {
14623    if (pageId == null || pageId === document.documentElement.getAttribute(WF_PAGE)) {
14624        return document;
14625    }
14626    return null;
14627}
14628function queryDocument(baseSelector, descendantSelector) {
14629    return Array.prototype.slice.call(document.querySelectorAll(descendantSelector ? baseSelector + ' ' + descendantSelector : baseSelector));
14630}
14631function elementContains(parent, child) {
14632    return parent.contains(child);
14633}
14634function isSiblingNode(a, b) {
14635    return a !== b && a.parentNode === b.parentNode;
14636}
14637function getChildElements(// @ts-expect-error - TS2315 - Type 'NodeList' is not generic.
14638sourceElements) {
14639    const childElements = [];
14640    for(let i = 0, { length } = sourceElements || []; i < length; i++){
14641        const { children } = sourceElements[i];
14642        const { length: childCount } = children;
14643        if (!childCount) {
14644            continue;
14645        }
14646        for(let j = 0; j < childCount; j++){
14647            childElements.push(children[j]);
14648        }
14649    }
14650    return childElements;
14651}
14652function getSiblingElements(sourceElements = []) {
14653    const elements = [];
14654    const parentCache = [];
14655    for(let i = 0, { length } = sourceElements; i < length; i++){
14656        // @ts-expect-error - TS2339 - Property 'parentNode' does not exist on type 'undefined'.
14657        const { parentNode } = sourceElements[i];
14658        if (!parentNode || !parentNode.children || !parentNode.children.length) {
14659            continue;
14660        }
14661        if (parentCache.indexOf(parentNode) !== -1) {
14662            continue;
14663        }
14664        parentCache.push(parentNode);
14665        let el = parentNode.firstElementChild;
14666        while(el != null){
14667            // @ts-expect-error - TS2345 - Argument of type 'any' is not assignable to parameter of type 'never'.
14668            if (sourceElements.indexOf(el) === -1) {
14669                elements.push(el);
14670            }
14671            el = el.nextElementSibling;
14672        }
14673    }
14674    return elements;
14675}
14676const getClosestElement = Element.prototype.closest ? (element, selector)=>{
14677    if (!document.documentElement.contains(element)) {
14678        return null;
14679    }
14680    return element.closest(selector);
14681} : (element, selector)=>{
14682    if (!document.documentElement.contains(element)) {
14683        return null;
14684    }
14685    let el = element;
14686    do {
14687        // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. | TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'.
14688        if (el[ELEMENT_MATCHES] && el[ELEMENT_MATCHES](selector)) {
14689            return el;
14690        }
14691        // @ts-expect-error - TS2322 - Type 'ParentNode | null' is not assignable to type 'HTMLElement'.
14692        el = el.parentNode;
14693    }while (el != null);
14694    return null;
14695};
14696function getRefType(ref) {
14697    if (ref != null && typeof ref == 'object') {
14698        return ref instanceof Element ? HTML_ELEMENT : PLAIN_OBJECT;
14699    }
14700    return null;
14701}
14702
14703//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkJyb3dzZXJBcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5pbXBvcnQge0lYMkJyb3dzZXJTdXBwb3J0fSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcbmltcG9ydCB7SVgyRW5naW5lQ29uc3RhbnRzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5jb25zdCB7RUxFTUVOVF9NQVRDSEVTfSA9IElYMkJyb3dzZXJTdXBwb3J0O1xuY29uc3Qge0lYMl9JRF9ERUxJTUlURVIsIEhUTUxfRUxFTUVOVCwgUExBSU5fT0JKRUNULCBXRl9QQUdFfSA9XG4gIElYMkVuZ2luZUNvbnN0YW50cztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFN0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNSAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGluZGV4IGV4cHJlc3Npb24gaXMgbm90IG9mIHR5cGUgJ251bWJlcicuXG4gIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcpIHtcbiAgaWYgKHByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgIHJldHVybi
14703B3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQuc3R5bGUgaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNSAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGluZGV4IGV4cHJlc3Npb24gaXMgbm90IG9mIHR5cGUgJ251bWJlcicuXG4gICAgcmV0dXJuIGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnc3RyaW5nJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ0hUTUxFbGVtZW50Jy5cbiAgcmV0dXJuIGVsZW1lbnRbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFNlbGVjdG9yKFxuICBzZWxlY3Rvcjogc3RyaW5nXG4pOiAoYXJnMTogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW4ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdhbnknIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnSFRNTEVsZW1lbnQnLlxuICByZXR1cm4gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBlbGVtZW50W0VMRU1FTlRfTUFUQ0hFU10oc2VsZWN0b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlTZWxlY3Rvcih7XG4gIGlkLFxuICBzZWxlY3Rvcixcbn06IHtcbiAgaWQ6IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG59KSB7XG4gIGlmIChpZCkge1xuICAgIGxldCBub2RlSWQgPSBpZDtcbiAgICBpZiAoaWQuaW5kZXhPZihJWDJfSURfREVMSU1JVEVSKSAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IHBhaXIgPSBpZC5zcGxpdChJWDJfSURfREVMSU1JVEVSKTtcbiAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhaXJbMF07XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzIyIC0gVHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdzdHJpbmcnLlxuICAgICAgbm9kZUlkID0gcGFpclsxXTtcbiAgICAgIC8vIFNob3J0IGNpcmN1aXQgcXVlcnkgaWYgd2UncmUgb24gdGhlIHdyb25nIHBhZ2VcbiAgICAgIGlmIChwYWdlSWQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoV0ZfUEFHRSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgW2RhdGEtdy1pZD1cIiR7bm9kZUlkfVwiXSwgW2RhdGEtdy1pZF49XCIke25vZGVJZH1faW5zdGFuY2VcIl1gO1xuICB9XG4gIHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkRG9jdW1lbnQocGFnZUlkPzogbnVsbCB8IHN0cmluZykge1xuICBpZiAoXG4gICAgcGFnZUlkID09IG51bGwgfHxcbiAgICBwYWdlSWQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoV0ZfUEFHRSlcbiAgKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlEb2N1bWVudChcbiAgYmFzZVNlbGVjdG9yOiBzdHJpbmcsXG4gIGRlc2NlbmRhbnRTZWxlY3Rvcj86IG51bGwgfCBzdHJpbmdcbikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGRlc2NlbmRhbnRTZWxlY3RvclxuICAgICAgICA/IGJhc2VTZWxlY3RvciArICcgJyArIGRlc2NlbmRhbnRTZWxlY3RvclxuICAgICAgICA6IGJhc2VTZWxlY3RvclxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRDb250YWlucyhcbiAgcGFyZW50OiBIVE1MRWxlbWVudCxcbiAgY2hpbGQ6IEhUTUxFbGVtZW50XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpYmxpbmdOb2RlKGE6IEhUTUxFbGVtZW50LCBiOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYSAhPT0gYiAmJiBhLnBhcmVudE5vZGUgPT09IGIucGFyZW50Tm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkRWxlbWVudHMoXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMTUgLSBUeXBlICdOb2RlTGlzdCcgaXMgbm90IGdlbmVyaWMuXG4gIHNvdXJjZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4gfCBOb2RlTGlzdDxIVE1MRWxlbWVudD5cbikge1xuICBjb25zdCBjaGlsZEVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudCB8IGFueT4gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwge2xlbmd0aH0gPSBzb3VyY2VFbGVtZW50cyB8fCBbXTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge2NoaWxkcmVufSA9IHNvdXJjZUVsZW1lbnRzW2ldO1xuICAgIGNvbnN0IHtsZW5ndGg6IGNoaWxkQ291bnR9ID0gY2hpbGRyZW47XG4gICAgaWYgKCFjaGlsZENvdW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZENvdW50OyBqKyspIHtcbiAgICAgIGNoaWxkRWxlbWVudHMucHVzaChjaGlsZHJlbltqXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2libGluZ0VsZW1lbnRzKHNvdXJjZUVsZW1lbnRzID0gW10pIHtcbiAgY29uc3QgZWxlbWVudHM6IEFycmF5PGFueT4gPSBbXTtcbiAgY29uc3QgcGFyZW50Q2FjaGU6IEFycmF5PGFueT4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gc291cmNlRWxlbWVudHM7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAncGFyZW50Tm9kZScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAndW5kZWZpbmVkJy5cbiAgICBjb25zdCB7cGFyZW50Tm9kZX0gPSBzb3VyY2VFbGVtZW50c1tpXTtcbiAgICBpZiAoIXBhcmVudE5vZGUgfHwgIXBhcmVudE5vZGUuY2hpbGRyZW4gfHwgIXBhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHBhcmVudENhY2hlLmluZGV4T2YocGFyZW50Tm9kZSkgIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGFyZW50Q2FjaGUucHVzaChwYXJlbnROb2RlKTtcbiAgICBsZXQgZWwgPSBwYXJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkO1xuICAgIHdoaWxlIChlbCAhPSBudWxsKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnYW55JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInLlxuICAgICAgaWYgKHNvdXJjZUVsZW1lbnRzLmluZGV4T2YoZWwpID09PSAtMSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGVsKTtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI3NzQgLSBUaGlzIGNvbmRpdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBkZWZpbmVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCBpdCBpbnN0ZWFkP1xuZXhwb3J0IGNvbnN0IGdldENsb3Nlc3RFbGVtZW50ID0gRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdFxuICA/IChlbGVtZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybi
14703BlbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICB9XG4gIDogKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IGVsID0gZWxlbWVudDtcblxuICAgICAgZG8ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdhbnknIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnSFRNTEVsZW1lbnQnLiB8IFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ0hUTUxFbGVtZW50Jy5cbiAgICAgICAgaWYgKGVsW0VMRU1FTlRfTUFUQ0hFU10gJiYgZWxbRUxFTUVOVF9NQVRDSEVTXShzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMyMiAtIFR5cGUgJ1BhcmVudE5vZGUgfCBudWxsJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdIVE1MRWxlbWVudCcuXG4gICAgICAgIGVsID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIH0gd2hpbGUgKGVsICE9IG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZlR5cGUocmVmOiBhbnkpIHtcbiAgaWYgKHJlZiAhPSBudWxsICYmIHR5cGVvZiByZWYgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gcmVmIGluc3RhbmNlb2YgRWxlbWVudCA/IEhUTUxfRUxFTUVOVCA6IFBMQUlOX09CSkVDVDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdLCJuYW1lcyI6WyJlbGVtZW50Q29udGFpbnMiLCJnZXRDaGlsZEVsZW1lbnRzIiwiZ2V0Q2xvc2VzdEVsZW1lbnQiLCJnZXRQcm9wZXJ0eSIsImdldFF1ZXJ5U2VsZWN0b3IiLCJnZXRSZWZUeXBlIiwiZ2V0U2libGluZ0VsZW1lbnRzIiwiZ2V0U3R5bGUiLCJnZXRWYWxpZERvY3VtZW50IiwiaXNTaWJsaW5nTm9kZSIsIm1hdGNoU2VsZWN0b3IiLCJxdWVyeURvY3VtZW50Iiwic2V0U3R5bGUiLCJFTEVNRU5UX01BVENIRVMiLCJJWDJCcm93c2VyU3VwcG9ydCIsIklYMl9JRF9ERUxJTUlURVIiLCJIVE1MX0VMRU1FTlQiLCJQTEFJTl9PQkpFQ1QiLCJXRl9QQUdFIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZWxlbWVudCIsInByb3AiLCJ2YWx1ZSIsInN0eWxlIiwic3RhcnRzV2l0aCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwic2VsZWN0b3IiLCJpZCIsIm5vZGVJZCIsImluZGV4T2YiLCJwYWlyIiwic3BsaXQiLCJwYWdlSWQiLCJnZXRBdHRyaWJ1dGUiLCJiYXNlU2VsZWN0b3IiLCJkZXNjZW5kYW50U2VsZWN0b3IiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJwYXJlbnQiLCJjaGlsZCIsImNvbnRhaW5zIiwiYSIsImIiLCJwYXJlbnROb2RlIiwic291cmNlRWxlbWVudHMiLCJjaGlsZEVsZW1lbnRzIiwiaSIsImxlbmd0aCIsIm
14703NoaWxkcmVuIiwiY2hpbGRDb3VudCIsImoiLCJwdXNoIiwiZWxlbWVudHMiLCJwYXJlbnRDYWNoZSIsImVsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJFbGVtZW50IiwiY2xvc2VzdCIsInJlZiJdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCOzs7Ozs7Ozs7OztJQW9GTkEsZUFBZTtlQUFmQTs7SUFXQUMsZ0JBQWdCO2VBQWhCQTs7SUE2Q0hDLGlCQUFpQjtlQUFqQkE7O0lBbkhHQyxXQUFXO2VBQVhBOztJQVlBQyxnQkFBZ0I7ZUFBaEJBOztJQWlJQUMsVUFBVTtlQUFWQTs7SUFwREFDLGtCQUFrQjtlQUFsQkE7O0lBdEdBQyxRQUFRO2VBQVJBOztJQWlEQUMsZ0JBQWdCO2VBQWhCQTs7SUE4QkFDLGFBQWE7ZUFBYkE7O0lBN0RBQyxhQUFhO2VBQWJBOztJQXlDQUMsYUFBYTtlQUFiQTs7SUFoRUFDLFFBQVE7ZUFBUkE7Ozt3QkFOZ0I7aUNBQ0M7QUFDakMsTUFBTSxFQUFDQyxlQUFlLEVBQUMsR0FBR0MseUJBQWlCO0FBQzNDLE1BQU0sRUFBQ0MsZ0JBQWdCLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxPQUFPLEVBQUMsR0FDM0RDLG1DQUFrQjtBQUViLFNBQVNQLFNBQVNRLE9BQW9CLEVBQUVDLElBQVksRUFBRUMsS0FBYTtJQUN4RSxxSEFBcUg7SUFDckhGLFFBQVFHLEtBQUssQ0FBQ0YsS0FBSyxHQUFHQztBQUN4QjtBQUVPLFNBQVNmLFNBQVNhLE9BQW9CLEVBQUVDLElBQVk7SUFDekQsSUFBSUEsS0FBS0csVUFBVSxDQUFDLE9BQU87UUFDekIsT0FBT0MsT0FDSkMsZ0JBQWdCLENBQUNDLFNBQVNDLGVBQWUsRUFDekNDLGdCQUFnQixDQUFDUjtJQUN0QjtJQUVBLElBQUlELFFBQVFHLEtBQUssWUFBWU8scUJBQXFCO1FBQ2hELHFIQUFxSDtRQUNySCxPQUFPVixRQUFRRyxLQUFLLENBQUNGLEtBQUs7SUFDNUI7QUFDRjtBQUVPLFNBQVNsQixZQ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
14704
14705}),
14706"1970": (function (__unused_webpack_module, exports, __webpack_require__) {
14707"use strict";
14708/* eslint-env browser */ 
14709Object.defineProperty(exports, "__esModule", ({
14710    value: true
14711}));
14712function _export(target, all) {
14713    for(var name in all)Object.defineProperty(target, name, {
14714        enumerable: true,
14715        get: all[name]
14716    });
14717}
14718_export(exports, {
14719    observeRequests: function() {
14720        return observeRequests;
14721    },
14722    startActionGroup: function() {
14723        return startActionGroup;
14724    },
14725    startEngine: function() {
14726        return startEngine;
14727    },
14728    stopActionGroup: function() {
14729        return stopActionGroup;
14730    },
14731    stopAllActionGroups: function() {
14732        return stopAllActionGroups;
14733    },
14734    stopEngine: function() {
14735        return stopEngine;
14736    }
14737});
14738const _find = /*#__PURE__*/ _interop_require_default(__webpack_require__(9777));
14739const _get = /*#__PURE__*/ _interop_require_default(__webpack_require__(4738));
14740const _size = /*#__PURE__*/ _interop_require_default(__webpack_require__(4659));
14741const _omitBy = /*#__PURE__*/ _interop_require_default(__webpack_require__(3452));
14742const _isEmpty = /*#__PURE__*/ _interop_require_default(__webpack_require__(6633));
14743const _mapValues = /*#__PURE__*/ _interop_require_default(__webpack_require__(3729));
14744const _forEach = /*#__PURE__*/ _interop_require_default(__webpack_require__(2397));
14745const _throttle = /*#__PURE__*/ _interop_require_default(__webpack_require__(5082));
14746const _sharedconstants = __webpack_require__(7087);
14747const _shared = __webpack_require__(9468);
14748const _IX2EngineActions = __webpack_require__(3946);
14749const _IX2BrowserApi = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5012));
14750const _IX2VanillaEvents = /*#__PURE__*/ _interop_require_default(__webpack_require__(8955));
14751function _interop_require_default(obj) {
14752    return obj && obj.__esModule ? obj : {
14753        default: obj
14754    };
14755}
14756function _getRequireWildcardCache(nodeInterop) {
14757    if (typeof WeakMap !== "function") return null;
14758    var cacheBabelInterop = new WeakMap();
14759    var cacheNodeInterop = new WeakMap();
14760    return (_getRequireWildcardCache = function(nodeInterop) {
14761        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
14762    })(nodeInterop);
14763}
14764function _interop_require_wildcard(obj, nodeInterop) {
14765    if (!nodeInterop && obj && obj.__esModule) {
14766        return obj;
14767    }
14768    if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
14769        return {
14770            default: obj
14771        };
14772    }
14773    var cache = _getRequireWildcardCache(nodeInterop);
14774    if (cache && cache.has(obj)) {
14775        return cache.get(obj);
14776    }
14777    var newObj = {
14778        __proto__: null
14779    };
14780    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
14781    for(var key in obj){
14782        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
14783            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
14784            if (desc && (desc.get || desc.set)) {
14785                Object.defineProperty(newObj, key, desc);
14786            } else {
14787                newObj[key] = obj[key];
14788            }
14789        }
14790    }
14791    newObj.default = obj;
14792    if (cache) {
14793        cache.set(obj, newObj);
14794    }
14795    return newObj;
14796}
14797const QuickEffectsIdList = Object.keys(_sharedconstants.QuickEffectIds);
14798const isQuickEffect = (actionTypeId)=>QuickEffectsIdList.includes(actionTypeId);
14799const { COLON_DELIMITER, BOUNDARY_SELECTOR, HTML_ELEMENT, RENDER_GENERAL, W_MOD_IX } = _sharedconstants.IX2EngineConstants;
14800const { getAffectedElements, getElementId, getDestinationValues, observeStore, getInstanceId, renderHTMLElement, clearAllStyles, getMaxDurationItemIndex, getComputedStyle, getInstanceOrigin, reduceListToGroup, shouldNamespaceEventParameter, getNamespacedParameterId, shouldAllowMediaQuery, cleanupHTMLElement, clearObjectCache, stringifyTarget, mediaQueriesEqual, shallowEqual } = _shared.IX2VanillaUtils;
14801const { isPluginType, createPluginInstance, getPluginDuration } = _shared.IX2VanillaPlugins;
14802const ua = navigator.userAgent;
14803const IS_MOBILE_SAFARI = ua.match(/iPad/i) || ua.match(/iPhone/);
14804// Keep throttled events at ~80fps to reduce reflows while maintaining render accuracy
14805const THROTTLED_EVENT_WAIT = 12;
14806function observeRequests(store) {
14807    observeStore({
14808        store,
14809        select: ({ ixRequest })=>ixRequest.preview,
14810        onChange: handlePreviewRequest
14811    });
14812    observeStore({
14813        store,
14814        select: ({ ixRequest })=>ixRequest.playback,
14815        onChange: handlePlaybackRequest
14816    });
14817    observeStore({
14818        store,
14819        select: ({ ixRequest })=>ixRequest.stop,
14820        onChange: handleStopRequest
14821    });
14822    observeStore({
14823        store,
14824        select: ({ ixRequest })=>ixRequest.clear,
14825        onChange: handleClearRequest
14826    });
14827}
14828function observeMediaQueryChange(store) {
14829    observeStore({
14830        store,
14831        select: ({ ixSession })=>ixSession.mediaQueryKey,
14832        onChange: ()=>{
14833            stopEngine(store);
14834            clearAllStyles({
14835                store,
14836                elementApi: _IX2BrowserApi
14837            });
14838            startEngine({
14839                store,
14840                allowEvents: true
14841            });
14842            dispatchPageUpdateEvent();
14843        }
14844    });
14845}
14846function observeOneRenderTick(store, onTick) {
14847    const unsubscribe = observeStore({
14848        store,
14849        select: ({ ixSession })=>ixSession.tick,
14850        // @ts-expect-error - TS7006 - Parameter 'tick' implicitly has an 'any' type.
14851        onChange: (tick)=>{
14852            onTick(tick);
14853            unsubscribe();
14854        }
14855    });
14856}
14857function handlePreviewRequest({ rawData, defer }, store) {
14858    const start = ()=>{
14859        startEngine({
14860            store,
14861            rawData,
14862            allowEvents: true
14863        });
14864        dispatchPageUpdateEvent();
14865    };
14866    defer ? setTimeout(start, 0) : start();
14867}
14868function dispatchPageUpdateEvent() {
14869    document.dispatchEvent(new CustomEvent('IX2_PAGE_UPDATE'));
14870}
14871function handlePlaybackRequest(playback, store) {
14872    const { actionTypeId, actionListId, actionItemId, eventId, allowEvents, immediate, testManual, verbose = true } = playback;
14873    let { rawData } = playback;
14874    if (actionListId && actionItemId && rawData && immediate) {
14875        const actionList = rawData.actionLists[actionListId];
14876        if (actionList) {
14877            rawData = reduceListToGroup({
14878                actionList,
14879                actionItemId,
14880                rawData
14881            });
14882        }
14883    }
14884    startEngine({
14885        store,
14886        rawData,
14887        allowEvents,
14888        testManual
14889    });
14890    if (actionListId && actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION || isQuickEffect(actionTypeId)) {
14891        // @ts-expect-error - TS2345 - Argument of type '{ store: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }'.
14892        stopActionGroup({
14893            store,
14894            actionListId
14895        });
14896        renderInitialGroup({
14897            store,
14898            actionListId,
14899            eventId
14900        });
14901        // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; actionListId: any; immediate: any; verbose: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'.
14902        const started = startActionGroup({
14903            store,
14904            eventId,
14905            actionListId,
14906            immediate,
14907            verbose
14908        });
14909        if (verbose && started) {
14910            store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({
14911                actionListId,
14912                isPlaying: !immediate
14913            }));
14914        }
14915    }
14916}
14917function handleStopRequest({ actionListId }, store) {
14918    if (actionListId) {
14919        // @ts-expect-error - TS2345 - Argument of type '{ store: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }'.
14920        stopActionGroup({
14921            store,
14922            actionListId
14923        });
14924    } else {
14925        stopAllActionGroups({
14926            store
14927        });
14928    }
14929    stopEngine(store);
14930}
14931function handleClearRequest(state, store) {
14932    stopEngine(store);
14933    clearAllStyles({
14934        store,
14935        elementApi: _IX2BrowserApi
14936    });
14937}
14938function startEngine({ store, rawData, allowEvents, testManual }) {
14939    const { ixSession } = store.getState();
14940    if (rawData) {
14941        store.dispatch((0, _IX2EngineActions.rawDataImported)(rawData));
14942    }
14943    if (!ixSession.active) {
14944        store.dispatch((0, _IX2EngineActions.sessionInitialized)({
14945            hasBoundaryNodes: Boolean(document.querySelector(BOUNDARY_SELECTOR)),
14946            reducedMotion: document.body.hasAttribute('data-wf-ix-vacation') && window.matchMedia('(prefers-reduced-motion)').matches
14947        }));
14948        if (allowEvents) {
14949            bindEvents(store);
14950            addDocumentClass();
14951            if (store.getState().ixSession.hasDefinedMediaQueries) {
14952                observeMediaQueryChange(store);
14953            }
14954        }
14955        store.dispatch((0, _IX2EngineActions.sessionStarted)());
14956        startRenderLoop(store, testManual);
14957    }
14958}
14959function addDocumentClass() {
14960    const { documentElement } = document;
14961    if (documentElement.className.indexOf(W_MOD_IX) === -1) {
14962        documentElement.className += ` ${W_MOD_IX}`;
14963    }
14964}
14965function startRenderLoop(store, testManual) {
14966    const handleFrame = (now)=>{
14967        const { ixSession, ixParameters } = store.getState();
14968        if (ixSession.active) {
14969            store.dispatch((0, _IX2EngineActions.animationFrameChanged)(now, ixParameters));
14970            if (testManual) {
14971                observeOneRenderTick(store, handleFrame);
14972            } else {
14973                requestAnimationFrame(handleFrame);
14974            }
14975        }
14976    };
14977    handleFrame(window.performance.now());
14978}
14979function stopEngine(store) {
14980    const { ixSession } = store.getState();
14981    if (ixSession.active) {
14982        const { eventListeners } = ixSession;
14983        eventListeners.forEach(clearEventListener);
14984        clearObjectCache();
14985        store.dispatch((0, _IX2EngineActions.sessionStopped)());
14986    }
14987}
14988// @ts-expect-error - TS7031 - Binding element 'target' implicitly has an 'any' type. | TS7031 - Binding element 'listenerParams' implicitly has an 'any' type.
14989function clearEventListener({ target, listenerParams }) {
14990    // eslint-disable-next-line prefer-spread
14991    target.removeEventListener.apply(target, listenerParams);
14992}
14993function createGroupInstances({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type.
14994store, // @ts-expect-error - TS7031 - Binding element 'eventStateKey' implicitly has an 'any' type.
14995eventStateKey, // @ts-expect-error - TS7031 - Binding element 'eventTarget' implicitly has an 'any' type.
14996eventTarget, // @ts-expect-error - TS7031 - Binding element 'eventId' implicitly has an 'any' type.
14997eventId, // @ts-expect-error - TS7031 - Binding element 'eventConfig' implicitly has an 'any' type.
14998eventConfig, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type.
14999actionListId, // @ts-expect-error - TS7031 - Binding element 'parameterGroup' implicitly has an 'any' type.
15000parameterGroup, // @ts-expect-error - TS7031 - Binding element 'smoothing' implicitly has an 'any' type.
15001smoothing, // @ts-expect-error - TS7031 - Binding element 'restingValue' implicitly has an 'any' type.
15002restingValue }) {
15003    const { ixData, ixSession } = store.getState();
15004    const { events } = ixData;
15005    const event = events[eventId];
15006    const { eventTypeId } = event;
15007    const targetCache = {};
15008    const instanceActionGroups = {};
15009    const instanceConfigs = [];
15010    const { continuousActionGroups } = parameterGroup;
15011    let { id: parameterId } = parameterGroup;
15012    if (shouldNamespaceEventParameter(eventTypeId, eventConfig)) {
15013        parameterId = getNamespacedParameterId(eventStateKey, parameterId);
15014    }
15015    // Limit affected elements when event target is within a boundary node
15016    const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null;
15017    // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type.
15018    continuousActionGroups.forEach((actionGroup)=>{
15019        const { keyframe, actionItems } = actionGroup;
15020        // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type.
15021        actionItems.forEach((actionItem)=>{
15022            const { actionTypeId } = actionItem;
15023            const { target } = actionItem.config;
15024            if (!target) {
15025                return;
15026            }
15027            const elementRoot = target.boundaryMode ? eventElementRoot : null;
15028            const key = stringifyTarget(target) + COLON_DELIMITER + actionTypeId;
15029            instanceActionGroups[key] = appendActionItem(instanceActionGroups[key], keyframe, actionItem);
15030            if (!targetCache[key]) {
15031                targetCache[key] = true;
15032                const { config } = actionItem;
15033                getAffectedElements({
15034                    config,
15035                    event,
15036                    eventTarget,
15037                    elementRoot,
15038                    elementApi: _IX2BrowserApi
15039                }
15039).forEach((element)=>{
15040                    instanceConfigs.push({
15041                        element,
15042                        key
15043                    });
15044                });
15045            }
15046        });
15047    });
15048    instanceConfigs.forEach(({ element, key })=>{
15049        const actionGroups = instanceActionGroups[key];
15050        const actionItem = (0, _get.default)(actionGroups, `[0].actionItems[0]`, {});
15051        const { actionTypeId } = actionItem;
15052        const shouldUsePlugin = // If it's targeted by class, don't query the element by pluginElementId
15053        actionTypeId === _sharedconstants.ActionTypeConsts.PLUGIN_RIVE ? (actionItem.config?.target?.selectorGuids || []).length === 0 : isPluginType(actionTypeId);
15054        const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null;
15055        const destination = getDestinationValues({
15056            element,
15057            actionItem,
15058            elementApi: _IX2BrowserApi
15059        }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15060        // @ts-expect-error
15061        pluginInstance);
15062        createInstance({
15063            store,
15064            element,
15065            eventId,
15066            actionListId,
15067            actionItem,
15068            destination,
15069            continuous: true,
15070            parameterId,
15071            actionGroups,
15072            smoothing,
15073            restingValue,
15074            pluginInstance
15075        });
15076    });
15077}
15078function appendActionItem(actionGroups = [], keyframe, actionItem) {
15079    const newActionGroups = [
15080        ...actionGroups
15081    ];
15082    let groupIndex;
15083    newActionGroups.some((group, index)=>{
15084        // @ts-expect-error - TS2339 - Property 'keyframe' does not exist on type 'never'.
15085        if (group.keyframe === keyframe) {
15086            groupIndex = index;
15087            return true;
15088        }
15089        return false;
15090    });
15091    if (groupIndex == null) {
15092        groupIndex = newActionGroups.length;
15093        // @ts-expect-error - TS2345 - Argument of type '{ keyframe: any; actionItems: never[]; }' is not assignable to parameter of type 'never'.
15094        newActionGroups.push({
15095            keyframe,
15096            actionItems: []
15097        });
15098    }
15099    // @ts-expect-error - TS2339 - Property 'actionItems' does not exist on type 'never'.
15100    newActionGroups[groupIndex].actionItems.push(actionItem);
15101    return newActionGroups;
15102}
15103function bindEvents(store) {
15104    const { ixData } = store.getState();
15105    const { eventTypeMap } = ixData;
15106    updateViewportWidth(store);
15107    (0, _forEach.default)(eventTypeMap, (events, key)=>{
15108        // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ SLIDER_ACTIVE: { handler: (options: any, state: any) => any; types: string; }; SLIDER_INACTIVE: { handler: (options: any, state: any) => any; types: string; }; DROPDOWN_OPEN: { handler: (options: any, state: any) => any; types: string; }; ... 21 more ...; PAGE_START: { ...; }; }'.
15109        const logic = _IX2VanillaEvents.default[key];
15110        if (!logic) {
15111            console.warn(`IX2 event type not configured: ${key}`);
15112            return;
15113        }
15114        bindEventType({
15115            // @ts-expect-error - TS7031 - Binding element 'logic' implicitly has an 'any' type.
15116            logic,
15117            store,
15118            events
15119        });
15120    });
15121    const { ixSession } = store.getState();
15122    if (ixSession.eventListeners.length) {
15123        bindResizeEvents(store);
15124    }
15125}
15126const WINDOW_RESIZE_EVENTS = [
15127    'resize',
15128    'orientationchange'
15129];
15130function bindResizeEvents(store) {
15131    const handleResize = ()=>{
15132        updateViewportWidth(store);
15133    };
15134    WINDOW_RESIZE_EVENTS.forEach((type)=>{
15135        window.addEventListener(type, handleResize);
15136        store.dispatch((0, _IX2EngineActions.eventListenerAdded)(window, [
15137            type,
15138            handleResize
15139        ]));
15140    });
15141    handleResize();
15142}
15143function updateViewportWidth(store) {
15144    const { ixSession, ixData } = store.getState();
15145    const width = window.innerWidth;
15146    if (width !== ixSession.viewportWidth) {
15147        const { mediaQueries } = ixData;
15148        store.dispatch((0, _IX2EngineActions.viewportWidthChanged)({
15149            width,
15150            mediaQueries
15151        }));
15152    }
15153}
15154const mapFoundValues = (object, iteratee)=>(0, _omitBy.default)((0, _mapValues.default)(object, iteratee), _isEmpty.default);
15155const forEachEventTarget = (eventTargets, eventCallback)=>{
15156    (0, _forEach.default)(eventTargets, (elements, eventId)=>{
15157        // @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type.
15158        elements.forEach((element, index)=>{
15159            const eventStateKey = eventId + COLON_DELIMITER + index;
15160            eventCallback(element, eventId, eventStateKey);
15161        });
15162    });
15163};
15164const getAffectedForEvent = (event)=>{
15165    const config = {
15166        target: event.target,
15167        targets: event.targets
15168    };
15169    return getAffectedElements({
15170        config,
15171        elementApi: _IX2BrowserApi
15172    });
15173};
15174// @ts-expect-error - TS7031 - Binding element 'logic' implicitly has an 'any' type. | TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'events' implicitly has an 'any' type.
15175function bindEventType({ logic, store, events }) {
15176    injectBehaviorCSSFixes(events);
15177    const { types: eventTypes, handler: eventHandler } = logic;
15178    const { ixData } = store.getState();
15179    const { actionLists } = ixData;
15180    const eventTargets = mapFoundValues(events, getAffectedForEvent);
15181    if (!(0, _size.default)(eventTargets)) {
15182        return;
15183    }
15184    (0, _forEach.default)(eventTargets, (elements, key)=>{
15185        const event = events[key];
15186        const { action: eventAction, id: eventId, mediaQueries = ixData.mediaQueryKeys } = event;
15187        const { actionListId } = eventAction.config;
15188        if (!mediaQueriesEqual(mediaQueries, ixData.mediaQueryKeys)) {
15189            store.dispatch((0, _IX2EngineActions.mediaQueriesDefined)());
15190        }
15191        if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) {
15192            const configs = Array.isArray(event.config) ? event.config : [
15193                event.config
15194            ];
15195            // @ts-expect-error - TS7006 - Parameter 'eventConfig' implicitly has an 'any' type.
15196            configs.forEach((eventConfig)=>{
15197                const { continuousParameterGroupId } = eventConfig;
15198                const paramGroups = (0, _get.default)(actionLists, `${actionListId}.continuousParameterGroups`, []);
15199                const parameterGroup = (0, _find.default)(paramGroups, ({ id })=>id === continuousParameterGroupId);
15200                const smoothing = (eventConfig.smoothing || 0) / 100;
15201                const restingValue = (eventConfig.restingState || 0) / 100;
15202                if (!parameterGroup) {
15203                    return;
15204                }
15205                elements.forEach((eventTarget, index)=>{
15206                    const eventStateKey = eventId + COLON_DELIMITER + index;
15207                    createGroupInstances({
15208                        store,
15209                        eventStateKey,
15210                        eventTarget,
15211                        eventId,
15212                        eventConfig,
15213                        actionListId,
15214                        parameterGroup,
15215                        smoothing,
15216                        restingValue
15217                    });
15218                });
15219            });
15220        }
15221        if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION || isQuickEffect(eventAction.actionTypeId)) {
15222            renderInitialGroup({
15223                store,
15224                actionListId,
15225                eventId
15226            });
15227        }
15228    });
15229    const handleEvent = (nativeEvent)=>{
15230        const { ixSession } = store.getState();
15231        forEachEventTarget(eventTargets, (element, eventId, eventStateKey)=>{
15232            const event = events[eventId];
15233            const oldState = ixSession.eventState[eventStateKey];
15234            const { action: eventAction, mediaQueries = ixData.mediaQueryKeys } = event;
15235            // Bypass event handler if current media query is not listed in event config
15236            if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) {
15237                return;
15238            }
15239            const handleEventWithConfig = (eventConfig = {})=>{
15240                const newState = eventHandler({
15241                    store,
15242                    element,
15243                    event,
15244                    eventConfig,
15245                    nativeEvent,
15246                    eventStateKey
15247                }, oldState);
15248                if (!shallowEqual(newState, oldState)) {
15249                    store.dispatch((0, _IX2EngineActions.eventStateChanged)(eventStateKey, newState));
15250                }
15251            };
15252            if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) {
15253                const configs = Array.isArray(event.config) ? event.config : [
15254                    event.config
15255                ];
15256                configs.forEach(handleEventWithConfig);
15257            } else {
15258                handleEventWithConfig();
15259            }
15260        });
15261    };
15262    const handleEventThrottled = (0, _throttle.default)(handleEvent, THROTTLED_EVENT_WAIT);
15263    const addListeners = ({ target = document, // @ts-expect-error - TS7031 - Binding element 'types' implicitly has an 'any' type.
15264    types, // @ts-expect-error - TS7031 - Binding element 'shouldThrottle' implicitly has an 'any' type.
15265    throttle: shouldThrottle })=>{
15266        types.split(' ').filter(Boolean)// @ts-expect-error - TS7006 - Parameter 'type' implicitly has an 'any' type.
15267        .forEach((type)=>{
15268            const handlerFunc = shouldThrottle ? handleEventThrottled : handleEvent;
15269            target.addEventListener(type, handlerFunc);
15270            store.dispatch((0, _IX2EngineActions.eventListenerAdded)(target, [
15271                type,
15272                handlerFunc
15273            ]));
15274        });
15275    };
15276    if (Array.isArray(eventTypes)) {
15277        eventTypes.forEach(addListeners);
15278    } else if (typeof eventTypes === 'string') {
15279        addListeners(logic);
15280    }
15281}
15282/**
15283 * Injects CSS into the document to fix behavior issues across
15284 * different devices.
15285 */ function injectBehaviorCSSFixes(events) {
15286    if (!IS_MOBILE_SAFARI) {
15287        return;
15288    }
15289    const injectedSelectors = {};
15290    let cssText = '';
15291    for(const eventId in events){
15292        const { eventTypeId, target } = events[eventId];
15293        const selector = _IX2BrowserApi.getQuerySelector(target);
15294        // @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type.
15295        if (injectedSelectors[selector]) {
15296            continue;
15297        }
15298        // add a "cursor: pointer" style rule to ensure that CLICK events get fired for IOS devices
15299        if (eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_CLICK || eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_SECOND_CLICK) {
15300            // @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type.
15301            injectedSelectors[selector] = true;
15302            cssText += selector + '{' + 'cursor: pointer;' + 'touch-action: manipulation;' + '}';
15303        }
15304    }
15305    if (cssText) {
15306        const style = document.createElement('style');
15307        style.textContent = cssText;
15308        document.body.appendChild(style);
15309    }
15310}
15311function renderInitialGroup({ store, actionListId, eventId }) {
15312    const { ixData, ixSession } = store.getState();
15313    const { actionLists, events } = ixData;
15314    // @ts-expect-error - TS18048 - 'events' is possibly 'undefined'.
15315    const event = events[eventId];
15316    // @ts-expect-error - TS18048 - 'actionLists' is possibly 'undefined'.
15317    const actionList = actionLists[actionListId];
15318    // @ts-expect-error - Property 'useFirstGroupAsInitialState' does not exist on type 'ActionListType'.
15319    if (actionList && actionList.useFirstGroupAsInitialState) {
15320        const initialStateItems = (0, _get.default)(actionList, 'actionItemGroups[0].actionItems', []);
15321        // Bypass initial state render if current media query is not listed in event config
15322        const mediaQueries = (0, _get.default)(event, 'mediaQueries', ixData.mediaQueryKeys);
15323        if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) {
15324            return;
15325        }
15326        initialStateItems.forEach((actionItem)=>{
15327            const { config: itemConfig, actionTypeId } = actionItem;
15328            const config = // When useEventTarget is explicitly true, use event target/targets to query elements
15329            // However, skip this condition when objectId is defined
15330            // @ts-expect-error - Property 'target' does not exist on type 'never'.
15331            itemConfig?.target?.useEventTarget === true && // @ts-expect-error - Property 'target' does not exist on type 'never'.
15332            itemConfig?.target?.objectId == null ? {
15333                target: event.target,
15334                targets: event.targets
15335            } : itemConfig;
15336            const itemElements = getAffectedElements({
15337                config,
15338                event,
15339                elementApi: _IX2BrowserApi
15340            });
15341            const shouldUsePlugin = isPluginType(actionTypeId);
15342            itemElements.forEach((element)=>{
15343                const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null;
15344                createInstance({
15345                    destination: getDestinationValues({
15346                        element,
15347                        actionItem,
15348                        elementApi: _IX2BrowserApi
15349                    }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15350                    // @ts-expect-error
15351                    pluginInstance),
15352                    immediate: true,
15353                    store,
15354                    element,
15355                    eventId,
15356                    actionItem,
15357                    actionListId,
15358                    pluginInstance
15359                });
15360            });
15361        });
15362    }
15363}
15364function stopAllActionGroups({ store }) {
15365    const { ixInstances } = store.getState();
15366    (0, _forEach.default)(ixInstances, (instance)=>{
15367        if (!instance.continuous) {
15368            const { actionListId, verbose } = instance;
15369            removeInstance(instance, store);
15370            if (verbose) {
15371                store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({
15372                    actionListId,
15373                    isPlaying: false
15374                }));
15375            }
15376        }
15377    });
15378}
15379function stopActionGroup({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type.
15380store, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15381// @ts-expect-error
15382eventId, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15383// @ts-expect-error
15384eventTarget, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15385// @ts-expect-error
15386eventStateKey, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type.
15387actionListId }) {
15388    const { ixInstances, ixSession } = store.getState();
15389    // Check for element boundary before stopping engine instances
15390    const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null;
15391    (0, _forEach.default)(ixInstances, (instance)=>{
15392        const boundaryMode = (0, _get.default)(instance, 'actionItem.config.target.boundaryMode');
15393        // Validate event key if eventStateKey was provided, otherwise default to true
15394        const validEventKey = eventStateKey ? instance.eventStateKey === eventStateKey : true;
15395        // Remove engine instances that match the required ids
15396        if (instance.actionListId === actionListId && instance.eventId === eventId && validEventKey) {
15397            // Avoid removal when root boundary does not contain instance element
15398            if (eventElementRoot && boundaryMode && !_IX2BrowserApi.elementContains(eventElementRoot, instance.element)) {
15399                return;
15400            }
15401            removeInstance(instance, store);
15402            if (instance.verbose) {
15403                store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({
15404                    actionListId,
15405                    isPlaying: false
15406                }));
15407            }
15408        }
15409    });
15410}
15411function startActionGroup({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type.
15412store, // @ts-expect-error - TS7031 - Binding element 'eventId' implicitly has an 'any' type.
15413eventId, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15414// @ts-expect-error
15415eventTarget, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15416// @ts-expect-error
15417eventStateKey, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type.
15418actionListId, groupIndex = 0, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15419// @ts-expect-error
15420immediate, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15421// @ts-expect-error
15422verbose }) {
15423    const { ixData, ixSession } = store.getState();
15424    const { events } = ixData;
15425    const event = events[eventId] || {};
15426    const { mediaQueries = ixData.mediaQueryKeys } = event;
15427    const actionList = (0, _get.default)(ixData, `actionLists.${actionListId}`, {});
15428    const { actionItemGroups, useFirstGroupAsInitialState } = actionList;
15429    // Abort playback if no action groups
15430    if (!actionItemGroups || !actionItemGroups.length) {
15431        return false;
15432    }
15433    // Reset to first group when event loop is configured
15434    if (groupIndex >= actionItemGroups.length && (0, _get.default)(event, 'config.loop')) {
15435        groupIndex = 0;
15436    }
15437    // Skip initial state group during action list playback, as it should already be applied
15438    if (groupIndex === 0 && useFirstGroupAsInitialState) {
15439        groupIndex++;
15440    }
15441    // Identify first animated group and apply the initial QuickEffect delay
15442    const isFirstGroup = groupIndex === 0 || groupIndex === 1 && useFirstGroupAsInitialState;
15443    const instanceDelay = isFirstGroup && isQuickEffect(event.action?.actionTypeId) ? event.config.delay : undefined;
15444    // Abort playback if no action items exist at group index
15445    const actionItems = (0, _get.default)(actionItemGroups, [
15446        groupIndex,
15447        'actionItems'
15448    ], []);
15449    if (!actionItems.length) {
15450        return false;
15451    }
15452    // Abort playback if current media query is not listed in event config
15453    if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) {
15454        return false;
15455    }
15456    // Limit affected elements when event target is within a boundary node
15457    const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null;
15458    const carrierIndex = getMaxDurationItemIndex(actionItems);
15459    let groupStartResult = false;
15460    // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. | TS7006 - Parameter 'actionIndex' implicitly has an 'any' type.
15461    actionItems.forEach((actionItem, actionIndex)=>{
15462        const { config, actionTypeId } = actionItem;
15463        const shouldUsePlugin = isPluginType(actionTypeId);
15464        const { target } = config;
15465        if (!target) {
15466            return;
15467        }
15468        const elementRoot = target.boundaryMode ? eventElementRoot : null;
15469        const elements = getAffectedElements({
15470            config,
15471            event,
15472            eventTarget,
15473            elementRoot,
15474            elementApi: _IX2BrowserApi
15475        });
15476        elements.forEach((element, elementIndex)=>{
15477            const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null;
15478            const pluginDuration = shouldUsePlugin ? getPluginDuration(actionTypeId)(element, actionItem) : null;
15479            groupStartResult = true;
15480            const isCarrier = carrierIndex === actionIndex && elementIndex === 0;
15481            const computedStyle = getComputedStyle({
15482                element,
15483                actionItem
15484            });
15485            const destination = getDestinationValues({
15486                element,
15487                actionItem,
15488                elementApi: _IX2BrowserApi
15489            }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15490            // @ts-expect-error
15491            pluginInstance);
15492            createInstance({
15493                store,
15494                element,
15495                actionItem,
15496                eventId,
15497                eventTarget,
15498                eventStateKey,
15499                actionListId,
15500                groupIndex,
15501                isCarrier,
15502                computedStyle,
15503                destination,
15504                immediate,
15505                verbose,
15506                pluginInstance,
15507                pluginDuration,
15508                instanceDelay
15509            });
15510        });
15511    });
15512    return groupStartResult;
15513}
15514// @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type.
15515function createInstance(options) {
15516    const { store, computedStyle, ...rest } = options;
15517    const { element, actionItem, immediate, pluginInstance, continuous, restingValue, eventId } = rest;
15518    const autoStart = !continuous;
15519    const instanceId = getInstanceId();
15520    const { ixElements, ixSession, ixData } = store.getState();
15521    const elementId = getElementId(ixElements, element);
15522    const { refState } = ixElements[elementId] || {};
15523    const refType = _IX2BrowserApi.getRefType(element);
15524    const skipMotion = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ readonly TRANSFORM_MOVE: true; readonly TRANSFORM_SCALE: true; readonly TRANSFORM_ROTATE: true; readonly TRANSFORM_SKEW: true; readonly STYLE_SIZE: true; readonly STYLE_FILTER: true; readonly STYLE_FONT_VARIATION: true; }'.
15525    ixSession.reducedMotion && _sharedconstants.ReducedMotionTypes[actionItem.actionTypeId];
15526    let skipToValue;
15527    if (skipMotion && continuous) {
15528        switch(ixData.events[eventId]?.eventTypeId){
15529            case _sharedconstants.EventTypeConsts.MOUSE_MOVE:
15530            case _sharedconstants.EventTypeConsts.MOUSE_MOVE_IN_VIEWPORT:
15531                skipToValue = restingValue;
15532                break;
15533            default:
15534                skipToValue = 0.5;
15535                break;
15536        }
15537    }
15538    const origin = getInstanceOrigin(element, refState, computedStyle, actionItem, _IX2BrowserApi, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15539    // @ts-expect-error
15540    pluginInstance);
15541    store.dispatch((0, _IX2EngineActions.instanceAdded)({
15542        instanceId,
15543        elementId,
15544        origin,
15545        refType,
15546        skipMotion,
15547        skipToValue,
15548        ...rest
15549    }));
15550    dispatchCustomEvent(document.body, 'ix2-animation-started', instanceId);
15551    if (immediate) {
15552        renderImmediateInstance(store, instanceId);
15553        return;
15554    }
15555    observeStore({
15556        store,
15557        // @ts-expect-error - TS7031 - Binding element 'ixInstances' implicitly has an 'any' type.
15558        select: ({ ixInstances })=>ixInstances[instanceId],
15559        onChange: handleInstanceChange
15560    });
15561    if (autoStart) {
15562        store.dispatch((0, _IX2EngineActions.instanceStarted)(instanceId, ixSession.tick));
15563    }
15564}
15565function removeInstance(instance, store) {
15566    dispatchCustomEvent(document.body, 'ix2-animation-stopping', {
15567        instanceId: instance.id,
15568        state: store.getState()
15569    });
15570    const { elementId, actionItem } = instance;
15571    const { ixElements } = store.getState();
15572    const { ref, refType } = ixElements[elementId] || {};
15573    if (refType === HTML_ELEMENT) {
15574        cleanupHTMLElement(ref, actionItem, _IX2BrowserApi);
15575    }
15576    store.dispatch((0, _IX2EngineActions.instanceRemoved)(instance.id));
15577}
15578function dispatchCustomEvent(element, eventName, detail) {
15579    const event = document.createEvent('CustomEvent');
15580    event.initCustomEvent(eventName, true, true, detail);
15581    // @ts-expect-error - TS18047 - 'element' is possibly 'null'.
15582    element.dispatchEvent(event);
15583}
15584function renderImmediateInstance(store, instanceId) {
15585    const { ixParameters } = store.getState();
15586    store.dispatch((0, _IX2EngineActions.instanceStarted)(instanceId, 0));
15587    store.dispatch((0, _IX2EngineActions.animationFrameChanged)(performance.now(), ixParameters));
15588    const { ixInstances } = store.getState();
15589    handleInstanceChange(ixInstances[instanceId], store);
15590}
15591function handleInstanceChange(instance, store) {
15592    const { active, continuous, complete, elementId, actionItem, actionTypeId, renderType, current, groupIndex, eventId, eventTarget, eventStateKey, actionListId, isCarrier, styleProp, verbose, pluginInstance } = instance;
15593    // Bypass render if current media query is not listed in event config
15594    const { ixData, ixSession } = store.getState();
15595    const { events } = ixData;
15596    const event = events && events[eventId] ? events[eventId] : {};
15597    // @ts-expect-error - TS2339 -  Property 'mediaQueries' does not exist on type '{} | undefined'.
15598    const { mediaQueries = ixData.mediaQueryKeys } = event;
15599    if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) {
15600        return;
15601    }
15602    if (continuous || active || complete) {
15603        if (current || renderType === RENDER_GENERAL && complete) {
15604            // Render current values to ref state and grab latest
15605            store.dispatch((0, _IX2EngineActions.elementStateChanged)(elementId, actionTypeId, current, actionItem));
15606            const { ixElements } = store.getState();
15607            const { ref, refType, refState } = ixElements[elementId] || {};
15608            const actionState = refState && refState[actionTypeId];
15609            // Render HTML and plugin elements
15610            if (refType === HTML_ELEMENT || isPluginType(actionTypeId)) {
15611                renderHTMLElement(ref, refState, actionState, eventId, actionItem, styleProp, _IX2BrowserApi, renderType, pluginInstance);
15612            }
15613        }
15614        if (complete) {
15615            if (isCarrier) {
15616                // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex: any;
15616 verbose: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'.
15617                const started = startActionGroup({
15618                    store,
15619                    eventId,
15620                    eventTarget,
15621                    eventStateKey,
15622                    actionListId,
15623                    groupIndex: groupIndex + 1,
15624                    verbose
15625                });
15626                if (verbose && !started) {
15627                    store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({
15628                        actionListId,
15629                        isPlaying: false
15630                    }));
15631                }
15632            }
15633            removeInstance(instance, store);
15634        }
15635    }
15636}
15637
15638//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFFbmdpbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5pbXBvcnQgZmluZCBmcm9tICdsb2Rhc2gvZmluZCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IHNpemUgZnJvbSAnbG9kYXNoL3NpemUnO1xuaW1wb3J0IG9taXRCeSBmcm9tICdsb2Rhc2gvb21pdEJ5JztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBtYXBWYWx1ZXMgZnJvbSAnbG9kYXNoL21hcFZhbHVlcyc7XG5pbXBvcnQgZm9yRWFjaCBmcm9tICdsb2Rhc2gvZm9yRWFjaCc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoL3Rocm90dGxlJztcbmltcG9ydCB7XG4gIEV2ZW50VHlwZUNvbnN0cyxcbiAgQWN0aW9uVHlwZUNvbnN0cyxcbiAgSVgyRW5naW5lQ29uc3RhbnRzLFxuICBRdWlja0VmZmVjdElkcyxcbiAgUmVkdWNlZE1vdGlvblR5cGVzLFxufSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5cbmNvbnN0IFF1aWNrRWZmZWN0c0lkTGlzdCA9IE9iamVjdC5rZXlzKFF1aWNrRWZmZWN0SWRzKTtcblxuY29uc3QgaXNRdWlja0VmZmVjdCA9IChhY3Rpb25UeXBlSWQ6IHN0cmluZykgPT5cbiAgUXVpY2tFZmZlY3RzSWRMaXN0LmluY2x1ZGVzKGFjdGlvblR5cGVJZCk7XG5cbmltcG9ydCB7SVgyVmFuaWxsYVV0aWxzLCBJWDJWYW5pbGxhUGx1Z2luc30gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZCc7XG5cbmNvbnN0IHtcbiAgQ09MT05fREVMSU1JVEVSLFxuICBCT1VOREFSWV9TRUxFQ1RPUixcbiAgSFRNTF9FTEVNRU5ULFxuICBSRU5ERVJfR0VORVJBTCxcbiAgV19NT0RfSVgsXG59ID0gSVgyRW5naW5lQ29uc3RhbnRzO1xuXG5jb25zdCB7XG4gIGdldEFmZmVjdGVkRWxlbWVudHMsXG4gIGdldEVsZW1lbnRJZCxcbiAgZ2V0RGVzdGluYXRpb25WYWx1ZXMsXG4gIG9ic2VydmVTdG9yZSxcbiAgZ2V0SW5zdGFuY2VJZCxcbiAgcmVuZGVySFRNTEVsZW1lbnQsXG4gIGNsZWFyQWxsU3R5bGVzLFxuICBnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleCxcbiAgZ2V0Q29tcHV0ZWRTdHlsZSxcbiAgZ2V0SW5zdGFuY2VPcmlnaW4sXG4gIHJlZHVjZUxpc3RUb0dyb3VwLFxuICBzaG91bGROYW1lc3BhY2VFdmVudFBhcmFtZXRlcixcbiAgZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkLFxuICBzaG91bGRBbGxvd01lZGlhUXVlcnksXG4gIGNsZWFudXBIVE1MRWxlbWVudCxcbiAgY2xlYXJPYmplY3RDYWNoZSxcbiAgc3RyaW5naWZ5VGFyZ2V0LFxuICBtZWRpYVF1ZXJpZXNFcXVhbCxcbiAgc2hhbGxvd0VxdWFsLFxufSA9IElYMlZhbmlsbGFVdGlscztcbmNvbnN0IHtpc1BsdWdpblR5cGUsIGNyZWF0ZVBsdWdpbkluc3RhbmNlLCBnZXRQbHVnaW5EdXJhdGlvbn0gPVxuICBJWDJWYW5pbGxhUGx1Z2lucztcblxuaW1wb3J0IHtcbiAgcmF3RGF0YUltcG9ydGVkLFxuICBzZXNzaW9uSW5pdGlhbGl6ZWQsXG4gIHNlc3Npb25TdGFydGVkLFxuICBzZXNzaW9uU3RvcHBlZCxcbiAgZXZlbnRMaXN0ZW5lckFkZGVkLFxuICBldmVudFN0YXRlQ2hhbmdlZCxcbiAgYW5pbWF0aW9uRnJhbWVDaGFuZ2VkLFxuICBpbnN0YW5jZUFkZGVkLFxuICBpbnN0YW5jZVN0YXJ0ZWQsXG4gIGluc3RhbmNlUmVtb3ZlZCxcbiAgZWxlbWVudFN0YXRlQ2hhbmdlZCxcbiAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZCxcbiAgdmlld3BvcnRXaWR0aENoYW5nZWQsXG4gIG1lZGlhUXVlcmllc0RlZmluZWQsXG4gIElYMlJhd0RhdGEsXG59IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5cbmltcG9ydCAqIGFzIGVsZW1lbnRBcGkgZnJvbSAnLi9JWDJCcm93c2VyQXBpJztcblxuaW1wb3J0IElYMlZhbmlsbGFFdmVudHMgZnJvbSAnLi9JWDJWYW5pbGxhRXZlbnRzJztcbmltcG9ydCB7XG4gIElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlLFxuICBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUsXG59IGZyb20gJy4uL3JlZHVjZXJzL0lYMlJlZHVjZXInO1xuaW1wb3J0IHtBY3Rpb25MaXN0SWR9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcblxuY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuY29uc3QgSVNfTU9CSUxFX1NBRkFSSSA9IHVhLm1hdGNoKC9pUGFkL2kpIHx8IHVhLm1hdGNoKC9pUGhvbmUvKTtcblxuLy8gS2VlcCB0aHJvdHRsZWQgZXZlbnRzIGF0IH44MGZwcyB0byByZWR1Y2UgcmVmbG93cyB3aGlsZSBtYWludGFpbmluZyByZW5kZXIgYWNjdXJhY3lcbmNvbnN0IFRIUk9UVExFRF9FVkVOVF9XQUlUID0gMTI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVxdWVzdHMoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4UmVxdWVzdCxcbiAgICB9OiB7XG4gICAgICBpeFJlcXVlc3Q6IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFJlcXVlc3QnXTtcbiAgICB9KSA9PiBpeFJlcXVlc3QucHJldmlldyxcbiAgICBvbkNoYW5nZTogaGFuZGxlUHJldmlld1JlcXVlc3QsXG4gIH0pO1xuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4UmVxdWVzdCxcbiAgICB9OiB7XG4gICAgICBpeFJlcXVlc3Q6IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFJlcXVlc3QnXTtcbiAgICB9KSA9PiBpeFJlcXVlc3QucGxheWJhY2ssXG4gICAgb25DaGFuZ2U6IGhhbmRsZVBsYXliYWNrUmVxdWVzdCxcbiAgfSk7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhSZXF1ZXN0LFxuICAgIH06IHtcbiAgICAgIGl4UmVxdWVzdDogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4UmVxdWVzdCddO1xuICAgIH0pID0+IGl4UmVxdWVzdC5zdG9wLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVTdG9wUmV
15638xdWVzdCxcbiAgfSk7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhSZXF1ZXN0LFxuICAgIH06IHtcbiAgICAgIGl4UmVxdWVzdDogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4UmVxdWVzdCddO1xuICAgIH0pID0+IGl4UmVxdWVzdC5jbGVhcixcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2xlYXJSZXF1ZXN0LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gb2JzZXJ2ZU1lZGlhUXVlcnlDaGFuZ2Uoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4U2Vzc2lvbixcbiAgICB9OiB7XG4gICAgICBpeFNlc3Npb246IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFNlc3Npb24nXTtcbiAgICB9KSA9PiBpeFNlc3Npb24ubWVkaWFRdWVyeUtleSxcbiAgICBvbkNoYW5nZTogKCkgPT4ge1xuICAgICAgc3RvcEVuZ2luZShzdG9yZSk7XG4gICAgICBjbGVhckFsbFN0eWxlcyh7c3RvcmUsIGVsZW1lbnRBcGl9KTtcbiAgICAgIHN0YXJ0RW5naW5lKHtzdG9yZSwgYWxsb3dFdmVudHM6IHRydWV9KTtcbiAgICAgIGRpc3BhdGNoUGFnZVVwZGF0ZUV2ZW50KCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9ic2VydmVPbmVSZW5kZXJUaWNrKFxuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlLFxuICBvblRpY2s6IChub3c6IGFueSB8IG51bWJlcikgPT4gdm9pZFxuKSB7XG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gb2JzZXJ2ZVN0b3JlKHtcbiAgICBzdG9yZSxcbiAgICBzZWxlY3Q6ICh7XG4gICAgICBpeFNlc3Npb24sXG4gICAgfToge1xuICAgICAgaXhTZXNzaW9uOiBJWDJFbmdpbmVSZWR1Y2VyU3RhdGVTaGFwZVsnaXhTZXNzaW9uJ107XG4gICAgfSkgPT4gaXhTZXNzaW9uLnRpY2ssXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndGljaycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICBvbkNoYW5nZTogKHRpY2spID0+IHtcbiAgICAgIG9uVGljayh0aWNrKTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXZpZXdSZXF1ZXN0KFxuICB7cmF3RGF0YSwgZGVmZXJ9OiB7cmF3RGF0YTogSVgyUmF3RGF0YTsgZGVmZXI6IGJvb2xlYW59LFxuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlXG4pIHtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgc3RhcnRFbmdpbmUoe3N0b3JlLCByYXdEYXRhLCBhbGxvd0V2ZW50czogdHJ1ZX0pO1xuICAgIGRpc3BhdGNoUGFnZVVwZGF0ZUV2ZW50KCk7XG4gIH07XG4gIGRlZmVyID8gc2V0VGltZW91dChzdGFydCwgMCkgOiBzdGFydCgpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFBhZ2VVcGRhdGVFdmVudCgpIHtcbiAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ0lYMl9QQUdFX1VQREFURScpKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUGxheWJhY2tSZXF1ZXN0KHBsYXliYWNrOiBhbnksIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvblR5cGVJZCxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgYWN0aW9uSXRlbUlkLFxuICAgIGV2ZW50SWQsXG4gICAgYWxsb3dFdmVudHMsXG4gICAgaW1tZWRpYXRlLFxuICAgIHRlc3RNYW51YWwsXG4gICAgdmVyYm9zZSA9IHRydWUsXG4gIH0gPSBwbGF5YmFjaztcbiAgbGV0IHtyYXdEYXRhfSA9IHBsYXliYWNrO1xuXG4gIGlmIChhY3Rpb25MaXN0SWQgJiYgYWN0aW9uSXRlbUlkICYmIHJhd0RhdGEgJiYgaW1tZWRpYXRlKSB7XG4gICAgY29uc3QgYWN0aW9uTGlzdCA9IHJhd0RhdGEuYWN0aW9uTGlzdHNbYWN0aW9uTGlzdElkXTtcblxuICAgIGlmIChhY3Rpb25MaXN0KSB7XG4gICAgICByYXdEYXRhID0gcmVkdWNlTGlzdFRvR3JvdXAoe1xuICAgICAgICBhY3Rpb25MaXN0LFxuICAgICAgICBhY3Rpb25JdGVtSWQsXG4gICAgICAgIHJhd0RhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGFydEVuZ2luZSh7c3RvcmUsIHJhd0RhdGEsIGFsbG93RXZlbnRzLCB0ZXN0TWFudWFsfSk7XG5cbiAgaWYgKFxuICAgIChhY3Rpb25MaXN0SWQgJiYgYWN0aW9uVHlwZUlkID09PSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OKSB8fFxuICAgIGlzUXVpY2tFZmZlY3QoYWN0aW9uVHlwZUlkKVxuICApIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgfScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3sgc3RvcmU6IGFueTsgZXZlbnRJZDogYW55OyBldmVudFRhcmdldDogYW55OyBldmVudFN0YXRlS2V5OiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9Jy5cbiAgICBzdG9wQWN0aW9uR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWR9KTtcbiAgICByZW5kZXJJbml0aWFsR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWQsIGV2ZW50SWR9KTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyBpbW1lZGlhdGU6IGFueTsgdmVyYm9zZTogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nLlxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBzdGFydEFjdGlvbkdyb3VwKHtcbiAgICAgIHN0b3JlLFxuICAgICAgZXZlbnRJZCxcbiAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgIGltbWVkaWF0ZSxcbiAgICAgIHZlcmJvc2UsXG4gICAgfSk7XG4gICAgaWYgKHZlcmJvc2UgJiYgc3RhcnRlZCkge1xuICAgICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiAhaW1tZWRpYXRlfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVN0b3BSZXF1ZXN0KFxuICB7YWN0aW9uTGlzdElkfToge2FjdGlvbkxpc3RJZDogQWN0aW9uTGlzdElkfSxcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZVxuKSB7XG4gIGlmIChhY3Rpb25MaXN0SWQpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgfScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3sgc3RvcmU6IGFueTsgZXZlbnRJZDogYW55OyBldmVudFRhcmdldDogYW55OyBldmVudFN0YXRlS2V5OiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9Jy5cbiAgICBzdG9wQWN0aW9uR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWR9KTtcbiAgfSBlbHNlIHtcbiAgICBzdG9wQWxsQWN0aW9uR3JvdXBzKHtzdG9yZX0pO1xuICB9XG4gI
15638HN0b3BFbmdpbmUoc3RvcmUpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVDbGVhclJlcXVlc3Qoc3RhdGU6IGFueSwgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBzdG9wRW5naW5lKHN0b3JlKTtcbiAgY2xlYXJBbGxTdHlsZXMoe3N0b3JlLCBlbGVtZW50QXBpfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVuZ2luZSh7XG4gIHN0b3JlLFxuICByYXdEYXRhLFxuICBhbGxvd0V2ZW50cyxcbiAgdGVzdE1hbnVhbCxcbn06IHtcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZTtcbiAgcmF3RGF0YT86IElYMlJhd0RhdGE7XG4gIHRlc3RNYW51YWw/OiBib29sZWFuO1xuICBhbGxvd0V2ZW50cz86IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IHtpeFNlc3Npb259ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgaWYgKHJhd0RhdGEpIHtcbiAgICBzdG9yZS5kaXNwYXRjaChyYXdEYXRhSW1wb3J0ZWQocmF3RGF0YSkpO1xuICB9XG4gIGlmICghaXhTZXNzaW9uLmFjdGl2ZSkge1xuICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgc2Vzc2lvbkluaXRpYWxpemVkKHtcbiAgICAgICAgaGFzQm91bmRhcnlOb2RlczogQm9vbGVhbihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEJPVU5EQVJZX1NFTEVDVE9SKSksXG4gICAgICAgIHJlZHVjZWRNb3Rpb246XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2YtaXgtdmFjYXRpb24nKSAmJlxuICAgICAgICAgIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbiknKS5tYXRjaGVzLFxuICAgICAgfSlcbiAgICApO1xuICAgIGlmIChhbGxvd0V2ZW50cykge1xuICAgICAgYmluZEV2ZW50cyhzdG9yZSk7XG4gICAgICBhZGREb2N1bWVudENsYXNzKCk7XG5cbiAgICAgIGlmIChzdG9yZS5nZXRTdGF0ZSgpLml4U2Vzc2lvbi5oYXNEZWZpbmVkTWVkaWFRdWVyaWVzKSB7XG4gICAgICAgIG9ic2VydmVNZWRpYVF1ZXJ5Q2hhbmdlKHN0b3JlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RvcmUuZGlzcGF0Y2goc2Vzc2lvblN0YXJ0ZWQoKSk7XG4gICAgc3RhcnRSZW5kZXJMb29wKHN0b3JlLCB0ZXN0TWFudWFsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGREb2N1bWVudENsYXNzKCkge1xuICBjb25zdCB7ZG9jdW1lbnRFbGVtZW50fSA9IGRvY3VtZW50O1xuICBpZiAoZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKFdfTU9EX0lYKSA9PT0gLTEpIHtcbiAgICBkb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lICs9IGAgJHtXX01PRF9JWH1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UmVuZGVyTG9vcChzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlLCB0ZXN0TWFudWFsPzogYm9vbGVhbikge1xuICBjb25zdCBoYW5kbGVGcmFtZSA9IChub3c6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHtpeFNlc3Npb24sIGl4UGFyYW1ldGVyc30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGlmIChpeFNlc3Npb24uYWN0aXZlKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChhbmltYXRpb25GcmFtZUNoYW5nZWQobm93LCBpeFBhcmFtZXRlcnMpKTtcbiAgICAgIGlmICh0ZXN0TWFudWFsKSB7XG4gICAgICAgIG9ic2VydmVPbmVSZW5kZXJUaWNrKHN0b3JlLCBoYW5kbGVGcmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaGFuZGxlRnJhbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgaGFuZGxlRnJhbWUod2luZG93LnBlcmZvcm1hbmNlLm5vdygpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BFbmdpbmUoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7aXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChpeFNlc3Npb24uYWN0aXZlKSB7XG4gICAgY29uc3Qge2V2ZW50TGlzdGVuZXJzfSA9IGl4U2Vzc2lvbjtcbiAgICBldmVudExpc3RlbmVycy5mb3JFYWNoKGNsZWFyRXZlbnRMaXN0ZW5lcik7XG4gICAgY2xlYXJPYmplY3RDYWNoZSgpO1xuICAgIHN0b3JlLmRpc3BhdGNoKHNlc3Npb25TdG9wcGVkKCkpO1xuICB9XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3RhcmdldCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2xpc3RlbmVyUGFyYW1zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY2xlYXJFdmVudExpc3RlbmVyKHt0YXJnZXQsIGxpc3RlbmVyUGFyYW1zfSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXNwcmVhZFxuICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0YXJnZXQsIGxpc3RlbmVyUGFyYW1zKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JvdXBJbnN0YW5jZXMoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc3RvcmUsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50U3RhdGVLZXknIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50U3RhdGVLZXksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50VGFyZ2V0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBldmVudFRhcmdldCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZXZlbnRJZCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRDb25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50Q29uZmlnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25MaXN0SWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkxpc3RJZCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAncGFyYW1ldGVyR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHBhcmFtZXRlckdyb3VwLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzbW9vdGhpbmcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHNtb290aGluZyxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAncmVzdGluZ1ZhbHVlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICByZXN0aW5nVmFsdWUsXG59KSB7XG4gIGNvbnN0IHtpeE
15638RhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnQgPSBldmVudHNbZXZlbnRJZF07XG4gIGNvbnN0IHtldmVudFR5cGVJZH0gPSBldmVudDtcbiAgY29uc3QgdGFyZ2V0Q2FjaGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgaW5zdGFuY2VBY3Rpb25Hcm91cHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgaW5zdGFuY2VDb25maWdzOiBBcnJheTxcbiAgICB8IGFueVxuICAgIHwge1xuICAgICAgICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IGFueTtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB9XG4gID4gPSBbXTtcblxuICBjb25zdCB7Y29udGludW91c0FjdGlvbkdyb3Vwc30gPSBwYXJhbWV0ZXJHcm91cDtcbiAgbGV0IHtpZDogcGFyYW1ldGVySWR9ID0gcGFyYW1ldGVyR3JvdXA7XG4gIGlmIChzaG91bGROYW1lc3BhY2VFdmVudFBhcmFtZXRlcihldmVudFR5cGVJZCwgZXZlbnRDb25maWcpKSB7XG4gICAgcGFyYW1ldGVySWQgPSBnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQoZXZlbnRTdGF0ZUtleSwgcGFyYW1ldGVySWQpO1xuICB9XG5cbiAgLy8gTGltaXQgYWZmZWN0ZWQgZWxlbWVudHMgd2hlbiBldmVudCB0YXJnZXQgaXMgd2l0aGluIGEgYm91bmRhcnkgbm9kZVxuICBjb25zdCBldmVudEVsZW1lbnRSb290ID1cbiAgICBpeFNlc3Npb24uaGFzQm91bmRhcnlOb2RlcyAmJiBldmVudFRhcmdldFxuICAgICAgPyBlbGVtZW50QXBpLmdldENsb3Nlc3RFbGVtZW50KGV2ZW50VGFyZ2V0LCBCT1VOREFSWV9TRUxFQ1RPUilcbiAgICAgIDogbnVsbDtcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25Hcm91cCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgY29udGludW91c0FjdGlvbkdyb3Vwcy5mb3JFYWNoKChhY3Rpb25Hcm91cCkgPT4ge1xuICAgIGNvbnN0IHtrZXlmcmFtZSwgYWN0aW9uSXRlbXN9ID0gYWN0aW9uR3JvdXA7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGFjdGlvbkl0ZW1zLmZvckVhY2goKGFjdGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHthY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcbiAgICAgIGNvbnN0IHt0YXJnZXR9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50Um9vdCA9IHRhcmdldC5ib3VuZGFyeU1vZGUgPyBldmVudEVsZW1lbnRSb290IDogbnVsbDtcblxuICAgICAgY29uc3Qga2V5ID0gc3RyaW5naWZ5VGFyZ2V0KHRhcmdldCkgKyBDT0xPTl9ERUxJTUlURVIgKyBhY3Rpb25UeXBlSWQ7XG4gICAgICBpbnN0YW5jZUFjdGlvbkdyb3Vwc1trZXldID0gYXBwZW5kQWN0aW9uSXRlbShcbiAgICAgICAgaW5zdGFuY2VBY3Rpb25Hcm91cHNba2V5XSxcbiAgICAgICAga2V5ZnJhbWUsXG4gICAgICAgIGFjdGlvbkl0ZW1cbiAgICAgICk7XG5cbiAgICAgIGlmICghdGFyZ2V0Q2FjaGVba2V5XSkge1xuICAgICAgICB0YXJnZXRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb25JdGVtO1xuICAgICAgICBnZXRBZmZlY3RlZEVsZW1lbnRzKHtcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgZWxlbWVudFJvb3QsXG4gICAgICAgICAgZWxlbWVudEFwaSxcbiAgICAgICAgfSkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGluc3RhbmNlQ29uZmlncy5wdXNoKHtlbGVtZW50LCBrZXl9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGluc3RhbmNlQ29uZmlncy5mb3JFYWNoKCh7ZWxlbWVudCwga2V5fSkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbkdyb3VwcyA9IGluc3RhbmNlQWN0aW9uR3JvdXBzW2tleV07XG4gICAgY29uc3QgYWN0aW9uSXRlbSA9IGdldChhY3Rpb25Hcm91cHMsIGBbMF0uYWN0aW9uSXRlbXNbMF1gLCB7fSk7XG4gICAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICAgIGNvbnN0IHNob3VsZFVzZVBsdWdpbiA9XG4gICAgICAvLyBJZiBpdCdzIHRhcmdldGVkIGJ5IGNsYXNzLCBkb24ndCBxdWVyeSB0aGUgZWxlbWVudCBieSBwbHVnaW5FbGVtZW50SWRcbiAgICAgIGFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fUklWRVxuICAgICAgICA/IChhY3Rpb25JdGVtLmNvbmZpZz8udGFyZ2V0Py5zZWxlY3Rvckd1aWRzIHx8IFtdKS5sZW5ndGggPT09IDBcbiAgICAgICAgOiBpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKTtcblxuICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gc2hvdWxkVXNlUGx1Z2luXG4gICAgICA/IGNyZWF0ZVBsdWdpbkluc3RhbmNlKGFjdGlvblR5cGVJZCk/LihlbGVtZW50LCBhY3Rpb25JdGVtKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gZ2V0RGVzdGluYXRpb25WYWx1ZXMoXG4gICAgICB7ZWxlbWVudCwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaX0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICk7XG4gICAgY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgc3RvcmUsXG4gICAgICBlbGVtZW50LFxuICAgICAgZXZlbnRJZCxcbiAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGNvbnRpbnVvdXM6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJJZCxcbiAgICAgIGFjdGlvbkdyb3VwcyxcbiAgICAgIHNtb290aGluZyxcbiAgICAgIHJlc3RpbmdWYWx1ZSxcbiAgICAgIHBsdWdpbkluc3RhbmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQWN0aW9uSXRlbShhY3Rpb25Hcm91cHMgPSBbXSwga2V5ZnJhbWU6IGFueSwgYWN0aW9uSXRlbTogYW55KSB7XG4gIGNvbnN0IG5ld0FjdGlvbkdyb3VwcyA9IFsuLi5hY3Rpb25Hcm91cHNdO1xuICBsZXQgZ3JvdXBJbmRleDtcbiAgbmV3QWN0aW9uR3JvdXBzLnNvbWUoKGdyb3VwLCBpbmRleCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAna2V5ZnJhbWUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICBpZiAoZ3JvdXAua2V5ZnJhbWUgPT09IGtleWZyYW1lKSB7XG4gICAgICBncm91cEluZGV4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgaWYgKGdyb3VwSW5kZXggPT0gbnVsbCkge1xuICAgIGdyb3VwSW5kZXggPSBuZXdBY3Rpb25Hcm91cHMubGVuZ3RoO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IGtleWZyYW1lOiBhbnk7IGFjdGlvbkl0ZW1zOiBuZXZlcltdOyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInLlxuICAgIG5ld0FjdGlvbkdyb3Vwcy5wdXNoKHtcbiAgICAgIGtleWZyYW1lLFxuICAgICAgYWN0aW9uSXRlbXM6IFtdLFxuICAgIH0pO1xuICB9XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYWN0aW9uSXRlbXMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgbmV3QWN0aW9uR3JvdXBzW2dyb3VwSW5kZXhdLmFjdGlvbkl0ZW1zLnB1c2goYWN0aW9uSXRlbSk7XG4gIHJldHVybi
15638BuZXdBY3Rpb25Hcm91cHM7XG59XG5cbmZ1bmN0aW9uIGJpbmRFdmVudHMoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7aXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudFR5cGVNYXB9ID0gaXhEYXRhO1xuXG4gIHVwZGF0ZVZpZXdwb3J0V2lkdGgoc3RvcmUpO1xuXG4gIGZvckVhY2goZXZlbnRUeXBlTWFwLCAoZXZlbnRzLCBrZXkpID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdzdHJpbmcnIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAneyBTTElERVJfQUNUSVZFOiB7IGhhbmRsZXI6IChvcHRpb25zOiBhbnksIHN0YXRlOiBhbnkpID0+IGFueTsgdHlwZXM6IHN0cmluZzsgfTsgU0xJREVSX0lOQUNUSVZFOiB7IGhhbmRsZXI6IChvcHRpb25zOiBhbnksIHN0YXRlOiBhbnkpID0+IGFueTsgdHlwZXM6IHN0cmluZzsgfTsgRFJPUERPV05fT1BFTjogeyBoYW5kbGVyOiAob3B0aW9uczogYW55LCBzdGF0ZTogYW55KSA9PiBhbnk7IHR5cGVzOiBzdHJpbmc7IH07IC4uLiAyMSBtb3JlIC4uLjsgUEFHRV9TVEFSVDogeyAuLi47IH07IH0nLlxuICAgIGNvbnN0IGxvZ2ljID0gSVgyVmFuaWxsYUV2ZW50c1trZXldO1xuICAgIGlmICghbG9naWMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSVgyIGV2ZW50IHR5cGUgbm90IGNvbmZpZ3VyZWQ6ICR7a2V5fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBiaW5kRXZlbnRUeXBlKHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2xvZ2ljJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgbG9naWMsXG4gICAgICBzdG9yZSxcbiAgICAgIGV2ZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3Qge2l4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBpZiAoaXhTZXNzaW9uLmV2ZW50TGlzdGVuZXJzLmxlbmd0aCkge1xuICAgIGJpbmRSZXNpemVFdmVudHMoc3RvcmUpO1xuICB9XG59XG5cbmNvbnN0IFdJTkRPV19SRVNJWkVfRVZFTlRTID0gWydyZXNpemUnLCAnb3JpZW50YXRpb25jaGFuZ2UnXTtcblxuZnVuY3Rpb24gYmluZFJlc2l6ZUV2ZW50cyhzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICB1cGRhdGVWaWV3cG9ydFdpZHRoKHN0b3JlKTtcbiAgfTtcbiAgV0lORE9XX1JFU0laRV9FVkVOVFMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZVJlc2l6ZSk7XG4gICAgc3RvcmUuZGlzcGF0Y2goZXZlbnRMaXN0ZW5lckFkZGVkKHdpbmRvdywgW3R5cGUsIGhhbmRsZVJlc2l6ZV0pKTtcbiAgfSk7XG4gIGhhbmRsZVJlc2l6ZSgpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWaWV3cG9ydFdpZHRoKHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgY29uc3Qge2l4U2Vzc2lvbiwgaXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGlmICh3aWR0aCAhPT0gaXhTZXNzaW9uLnZpZXdwb3J0V2lkdGgpIHtcbiAgICBjb25zdCB7bWVkaWFRdWVyaWVzfSA9IGl4RGF0YTtcbiAgICBzdG9yZS5kaXNwYXRjaCh2aWV3cG9ydFdpZHRoQ2hhbmdlZCh7d2lkdGgsIG1lZGlhUXVlcmllc30pKTtcbiAgfVxufVxuXG5jb25zdCBtYXBGb3VuZFZhbHVlcyA9IChcbiAgb2JqZWN0OiBhbnksXG4gIGl0ZXJhdGVlOiAoZXZlbnQ/OiBhbnkpID0+IEFycmF5PEhUTUxFbGVtZW50IHwgYW55PlxuKSA9PiBvbWl0QnkobWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpLCBpc0VtcHR5KTtcblxuY29uc3QgZm9yRWFjaEV2ZW50VGFyZ2V0ID0gKFxuICBldmVudFRhcmdldHM6IGFueSxcbiAgZXZlbnRDYWxsYmFjazogKGVsZW1lbnQ6IGFueSwgZXZlbnRJZDogYW55LCBldmVudFN0YXRlS2V5OiBzdHJpbmcpID0+IHZvaWRcbikgPT4ge1xuICBmb3JFYWNoKGV2ZW50VGFyZ2V0cywgKGVsZW1lbnRzLCBldmVudElkKSA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2luZGV4JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBldmVudFN0YXRlS2V5ID0gZXZlbnRJZCArIENPTE9OX0RFTElNSVRFUiArIGluZGV4O1xuICAgICAgZXZlbnRDYWxsYmFjayhlbGVtZW50LCBldmVudElkLCBldmVudFN0YXRlS2V5KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRBZmZlY3RlZEZvckV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgY29uc3QgY29uZmlnID0ge3RhcmdldDogZXZlbnQudGFyZ2V0LCB0YXJnZXRzOiBldmVudC50YXJnZXRzfSBhcyBjb25zdDtcbiAgcmV0dXJuIGdldEFmZmVjdGVkRWxlbWVudHMoe2NvbmZpZywgZWxlbWVudEFwaX0pO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnbG9naWMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50cycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIGJpbmRFdmVudFR5cGUoe2xvZ2ljLCBzdG9yZSwgZXZlbnRzfToge3N0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmV9KSB7XG4gIGluamVjdEJlaGF2aW9yQ1NTRml4ZXMoZXZlbnRzKTtcbiAgY29uc3Qge3R5cGVzOiBldmVudFR5cGVzLCBoYW5kbGVyOiBldmVudEhhbmRsZXJ9ID0gbG9naWM7XG4gIGNvbnN0IHtpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3Qge2FjdGlvbkxpc3RzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnRUYXJnZXRzID0gbWFwRm91bmRWYWx1ZXMoZXZlbnRzLCBnZXRBZmZlY3RlZEZvckV2ZW50KTtcblxuICBpZiAoIXNpemUoZXZlbnRUYXJnZXRzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2goZXZlbnRUYXJnZXRzLCAoZWxlbWVudHMsIGtleSkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2tleV07XG4gICAgY29uc3Qge1xuICAgICAgYWN0aW9uOiBldmVudEFjdGlvbixcbiAgICAgIGl
15638kOiBldmVudElkLFxuICAgICAgbWVkaWFRdWVyaWVzID0gaXhEYXRhLm1lZGlhUXVlcnlLZXlzLFxuICAgIH0gPSBldmVudDtcbiAgICBjb25zdCB7YWN0aW9uTGlzdElkfSA9IGV2ZW50QWN0aW9uLmNvbmZpZztcblxuICAgIGlmICghbWVkaWFRdWVyaWVzRXF1YWwobWVkaWFRdWVyaWVzLCBpeERhdGEubWVkaWFRdWVyeUtleXMpKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChtZWRpYVF1ZXJpZXNEZWZpbmVkKCkpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OXG4gICAgKSB7XG4gICAgICBjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShldmVudC5jb25maWcpXG4gICAgICAgID8gZXZlbnQuY29uZmlnXG4gICAgICAgIDogW2V2ZW50LmNvbmZpZ107XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2V2ZW50Q29uZmlnJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgY29uZmlncy5mb3JFYWNoKChldmVudENvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCB7Y29udGludW91c1BhcmFtZXRlckdyb3VwSWR9ID0gZXZlbnRDb25maWc7XG4gICAgICAgIGNvbnN0IHBhcmFtR3JvdXBzID0gZ2V0KFxuICAgICAgICAgIGFjdGlvbkxpc3RzLFxuICAgICAgICAgIGAke2FjdGlvbkxpc3RJZH0uY29udGludW91c1BhcmFtZXRlckdyb3Vwc2AsXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBmaW5kKFxuICAgICAgICAgIHBhcmFtR3JvdXBzLFxuICAgICAgICAgICh7aWR9KSA9PiBpZCA9PT0gY29udGludW91c1BhcmFtZXRlckdyb3VwSWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc21vb3RoaW5nID0gKGV2ZW50Q29uZmlnLnNtb290aGluZyB8fCAwKSAvIDEwMDtcbiAgICAgICAgY29uc3QgcmVzdGluZ1ZhbHVlID0gKGV2ZW50Q29uZmlnLnJlc3RpbmdTdGF0ZSB8fCAwKSAvIDEwMDtcblxuICAgICAgICBpZiAoIXBhcmFtZXRlckdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZXZlbnRUYXJnZXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGF0ZUtleSA9IGV2ZW50SWQgKyBDT0xPTl9ERUxJTUlURVIgKyBpbmRleDtcbiAgICAgICAgICBjcmVhdGVHcm91cEluc3RhbmNlcyh7XG4gICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICAgIGV2ZW50SWQsXG4gICAgICAgICAgICBldmVudENvbmZpZyxcbiAgICAgICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgICAgICAgc21vb3RoaW5nLFxuICAgICAgICAgICAgcmVzdGluZ1ZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX1NUQVJUX0FDVElPTiB8fFxuICAgICAgaXNRdWlja0VmZmVjdChldmVudEFjdGlvbi5hY3Rpb25UeXBlSWQpXG4gICAgKSB7XG4gICAgICByZW5kZXJJbml0aWFsR3JvdXAoe3N0b3JlLCBhY3Rpb25MaXN0SWQsIGV2ZW50SWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUV2ZW50ID0gKG5hdGl2ZUV2ZW50OiBhbnkpID0+IHtcbiAgICBjb25zdCB7aXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgZm9yRWFjaEV2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0cywgKGVsZW1lbnQsIGV2ZW50SWQsIGV2ZW50U3RhdGVLZXkpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2V2ZW50SWRdO1xuICAgICAgY29uc3Qgb2xkU3RhdGUgPSBpeFNlc3Npb24uZXZlbnRTdGF0ZVtldmVudFN0YXRlS2V5XTtcbiAgICAgIGNvbnN0IHthY3Rpb246IGV2ZW50QWN0aW9uLCBtZWRpYVF1ZXJpZXMgPSBpeERhdGEubWVkaWFRdWVyeUtleXN9ID0gZXZlbnQ7XG4gICAgICAvLyBCeXBhc3MgZXZlbnQgaGFuZGxlciBpZiBjdXJyZW50IG1lZGlhIHF1ZXJ5IGlzIG5vdCBsaXN0ZWQgaW4gZXZlbnQgY29uZmlnXG4gICAgICBpZiAoIXNob3VsZEFsbG93TWVkaWFRdWVyeShtZWRpYVF1ZXJpZXMsIGl4U2Vzc2lvbi5tZWRpYVF1ZXJ5S2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoYW5kbGVFdmVudFdpdGhDb25maWcgPSAoZXZlbnRDb25maWcgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IGV2ZW50SGFuZGxlcihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGV2ZW50Q29uZmlnLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb2xkU3RhdGVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwobmV3U3RhdGUsIG9sZFN0YXRlKSkge1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGV2ZW50U3RhdGVDaGFuZ2VkKGV2ZW50U3RhdGVLZXksIG5ld1N0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZCA9PT0gQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoZXZlbnQuY29uZmlnKVxuICAgICAgICAgID8gZXZlbnQuY29uZmlnXG4gICAgICAgICAgOiBbZXZlbnQuY29uZmlnXTtcbiAgICAgICAgY29uZmlncy5mb3JFYWNoKGhhbmRsZUV2ZW50V2l0aENvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVFdmVudFdpdGhDb25maWcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFdmVudFRocm90dGxlZCA9IHRocm90dGxlKGhhbmRsZUV2ZW50LCBUSFJPVFRMRURfRVZFTlRfV0FJVCk7XG5cbiAgY29uc3QgYWRkTGlzdGVuZXJzID0gKHtcbiAgICB0YXJnZXQgPSBkb2N1bWVudCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd0eXBlcycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICB0eX
15638BlcyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzaG91bGRUaHJvdHRsZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICB0aHJvdHRsZTogc2hvdWxkVGhyb3R0bGUsXG4gIH0pID0+IHtcbiAgICB0eXBlc1xuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3R5cGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICAuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyRnVuYyA9IHNob3VsZFRocm90dGxlID8gaGFuZGxlRXZlbnRUaHJvdHRsZWQgOiBoYW5kbGVFdmVudDtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlckZ1bmMpO1xuICAgICAgICBzdG9yZS5kaXNwYXRjaChldmVudExpc3RlbmVyQWRkZWQodGFyZ2V0LCBbdHlwZSwgaGFuZGxlckZ1bmNdKSk7XG4gICAgICB9KTtcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShldmVudFR5cGVzKSkge1xuICAgIGV2ZW50VHlwZXMuZm9yRWFjaChhZGRMaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudFR5cGVzID09PSAnc3RyaW5nJykge1xuICAgIGFkZExpc3RlbmVycyhsb2dpYyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmplY3RzIENTUyBpbnRvIHRoZSBkb2N1bWVudCB0byBmaXggYmVoYXZpb3IgaXNzdWVzIGFjcm9zc1xuICogZGlmZmVyZW50IGRldmljZXMuXG4gKi9cblxuZnVuY3Rpb24gaW5qZWN0QmVoYXZpb3JDU1NGaXhlcyhldmVudHM6IGFueSkge1xuICBpZiAoIUlTX01PQklMRV9TQUZBUkkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmplY3RlZFNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGxldCBjc3NUZXh0ID0gJyc7XG4gIGZvciAoY29uc3QgZXZlbnRJZCBpbiBldmVudHMpIHtcbiAgICBjb25zdCB7ZXZlbnRUeXBlSWQsIHRhcmdldH0gPSBldmVudHNbZXZlbnRJZF07XG5cbiAgICBjb25zdCBzZWxlY3RvciA9IGVsZW1lbnRBcGkuZ2V0UXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICdudWxsJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgIGlmIChpbmplY3RlZFNlbGVjdG9yc1tzZWxlY3Rvcl0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIFwiY3Vyc29yOiBwb2ludGVyXCIgc3R5bGUgcnVsZSB0byBlbnN1cmUgdGhhdCBDTElDSyBldmVudHMgZ2V0IGZpcmVkIGZvciBJT1MgZGV2aWNlc1xuICAgIGlmIChcbiAgICAgIGV2ZW50VHlwZUlkID09PSBFdmVudFR5cGVDb25zdHMuTU9VU0VfQ0xJQ0sgfHxcbiAgICAgIGV2ZW50VHlwZUlkID09PSBFdmVudFR5cGVDb25zdHMuTU9VU0VfU0VDT05EX0NMSUNLXG4gICAgKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAnbnVsbCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS5cbiAgICAgIGluamVjdGVkU2VsZWN0b3JzW3NlbGVjdG9yXSA9IHRydWU7XG4gICAgICBjc3NUZXh0ICs9XG4gICAgICAgIHNlbGVjdG9yICtcbiAgICAgICAgJ3snICtcbiAgICAgICAgJ2N1cnNvcjogcG9pbnRlcjsnICtcbiAgICAgICAgJ3RvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOycgK1xuICAgICAgICAnfSc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNzc1RleHQpIHtcbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckluaXRpYWxHcm91cCh7XG4gIHN0b3JlLFxuICBhY3Rpb25MaXN0SWQsXG4gIGV2ZW50SWQsXG59OiB7XG4gIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmU7XG4gIGFjdGlvbkxpc3RJZDogbnVtYmVyO1xuICBldmVudElkOiBudW1iZXI7XG59KSB7XG4gIGNvbnN0IHtpeERhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7YWN0aW9uTGlzdHMsIGV2ZW50c30gPSBpeERhdGE7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ4IC0gJ2V2ZW50cycgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2V2ZW50SWRdO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0OCAtICdhY3Rpb25MaXN0cycgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gIGNvbnN0IGFjdGlvbkxpc3QgPSBhY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBQcm9wZXJ0eSAndXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdBY3Rpb25MaXN0VHlwZScuXG4gIGlmIChhY3Rpb25MaXN0ICYmIGFjdGlvbkxpc3QudXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlSXRlbXMgPSBnZXQoXG4gICAgICBhY3Rpb25MaXN0LFxuICAgICAgJ2FjdGlvbkl0ZW1Hcm91cHNbMF0uYWN0aW9uSXRlbXMnLFxuICAgICAgW11cbiAgICApO1xuXG4gICAgLy8gQnlwYXNzIGluaXRpYWwgc3RhdGUgcmVuZGVyIGlmIGN1cnJlbnQgbWVkaWEgcXVlcnkgaXMgbm90IGxpc3RlZCBpbiBldmVudCBjb25maWdcbiAgICBjb25zdCBtZWRpYVF1ZXJpZXMgPSBnZXQoZXZlbnQsICdtZWRpYVF1ZXJpZXMnLCBpeERhdGEubWVkaWFRdWVyeUtleXMpO1xuICAgIGlmICghc2hvdWxkQWxsb3dNZWRpYVF1ZXJ5KG1lZGlhUXVlcmllcywgaXhTZXNzaW9uLm1lZGlhUXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5pdGlhbFN0YXRlSXRlbXMuZm9yRWFjaCgoYWN0aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3Qge2NvbmZpZzogaXRlbUNvbmZpZywgYWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBjb25zdCBjb25maWcgPVxuICAgICAgICAvLyBXaGVuIHVzZUV2ZW50VGFyZ2V0IGlzIGV4cGxpY2l0bHkgdHJ1ZSwgdXNlIGV2ZW50IHRhcmdldC90YXJnZXRzIHRvIHF1ZXJ5IGVsZW1lbnRzXG4gICAgICAgIC8vIEhvd2V2ZXIsIHNraXAgdGhpcyBjb25kaXRpb24gd2hlbiBvYmplY3RJZCBpcyBkZWZpbmVkXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBQcm9wZXJ0eSAndGFyZ2V0JyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICduZXZlcicuXG4gICAgICAgIGl0ZW1Db25maWc/LnRhcmdldD8udXNlRXZlbnRUYXJnZXQgPT09IHRydWUgJiZcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFByb3BlcnR5ICd0YXJnZXQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICAgICAgaXRlbUNvbmZpZz8udGFyZ2V0Py5vYmplY3RJZCA9PSBudWxsXG4gICAgICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0OCAtICdldmVudCcgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gICAgICAgICAgICB7dGFyZ2V0OiBldmVudC50YXJnZXQsIHRhcmdldHM6IGV2ZW50LnRhcmdldHN9XG4gICAgICAgICAgOiBpdGVtQ29uZmlnO1xuICAgICAgY29uc3QgaXRlbUVsZW1lbnRzID0gZ2V0QWZmZWN0ZWRFbGVtZW50cyh7Y29uZmlnLCBldmVudCwgZWxlbWVudEFwaX0pO1xuICAgICAgY29uc3Qgc2hvdWxkVXNlUGx1Z2luID0gaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZCk7XG5cbiAgICAgIGl0ZW1FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gc2hvdWxkVXNlUGx1Z2luXG4gICAgICAgICAgPyBjcmVhdGVQbHVnaW5JbnN0YW5jZShhY3Rpb25UeXBlSWQpPy4oZWxlbWVudCwgYWN0aW9uSXRlbSlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNyZWF0ZUluc3RhbmNlKHtcbiAgICAgICAgICBkZXN0aW5
15638hdGlvbjogZ2V0RGVzdGluYXRpb25WYWx1ZXMoXG4gICAgICAgICAgICB7ZWxlbWVudCwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaX0sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICAgICAgICksXG4gICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgICBhY3Rpb25JdGVtLFxuICAgICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgICBwbHVnaW5JbnN0YW5jZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEFsbEFjdGlvbkdyb3Vwcyh7c3RvcmV9OiB7c3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZX0pIHtcbiAgY29uc3Qge2l4SW5zdGFuY2VzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGZvckVhY2goaXhJbnN0YW5jZXMsIChpbnN0YW5jZSkgPT4ge1xuICAgIGlmICghaW5zdGFuY2UuY29udGludW91cykge1xuICAgICAgY29uc3Qge2FjdGlvbkxpc3RJZCwgdmVyYm9zZX0gPSBpbnN0YW5jZTtcbiAgICAgIHJlbW92ZUluc3RhbmNlKGluc3RhbmNlLCBzdG9yZSk7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkKHthY3Rpb25MaXN0SWQsIGlzUGxheWluZzogZmFsc2V9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wQWN0aW9uR3JvdXAoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc3RvcmUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudElkLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgZXZlbnRUYXJnZXQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudFN0YXRlS2V5LFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25MaXN0SWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkxpc3RJZCxcbn0pIHtcbiAgY29uc3Qge2l4SW5zdGFuY2VzLCBpeFNlc3Npb259ID0gc3RvcmUuZ2V0U3RhdGUoKTtcblxuICAvLyBDaGVjayBmb3IgZWxlbWVudCBib3VuZGFyeSBiZWZvcmUgc3RvcHBpbmcgZW5naW5lIGluc3RhbmNlc1xuICBjb25zdCBldmVudEVsZW1lbnRSb290ID1cbiAgICBpeFNlc3Npb24uaGFzQm91bmRhcnlOb2RlcyAmJiBldmVudFRhcmdldFxuICAgICAgPyBlbGVtZW50QXBpLmdldENsb3Nlc3RFbGVtZW50KGV2ZW50VGFyZ2V0LCBCT1VOREFSWV9TRUxFQ1RPUilcbiAgICAgIDogbnVsbDtcblxuICBmb3JFYWNoKGl4SW5zdGFuY2VzLCAoaW5zdGFuY2UpID0+IHtcbiAgICBjb25zdCBib3VuZGFyeU1vZGUgPSBnZXQoaW5zdGFuY2UsICdhY3Rpb25JdGVtLmNvbmZpZy50YXJnZXQuYm91bmRhcnlNb2RlJyk7XG4gICAgLy8gVmFsaWRhdGUgZXZlbnQga2V5IGlmIGV2ZW50U3RhdGVLZXkgd2FzIHByb3ZpZGVkLCBvdGhlcndpc2UgZGVmYXVsdCB0byB0cnVlXG4gICAgY29uc3QgdmFsaWRFdmVudEtleSA9IGV2ZW50U3RhdGVLZXlcbiAgICAgID8gaW5zdGFuY2UuZXZlbnRTdGF0ZUtleSA9PT0gZXZlbnRTdGF0ZUtleVxuICAgICAgOiB0cnVlO1xuICAgIC8vIFJlbW92ZSBlbmdpbmUgaW5zdGFuY2VzIHRoYXQgbWF0Y2ggdGhlIHJlcXVpcmVkIGlkc1xuICAgIGlmIChcbiAgICAgIGluc3RhbmNlLmFjdGlvbkxpc3RJZCA9PT0gYWN0aW9uTGlzdElkICYmXG4gICAgICBpbnN0YW5jZS5ldmVudElkID09PSBldmVudElkICYmXG4gICAgICB2YWxpZEV2ZW50S2V5XG4gICAgKSB7XG4gICAgICAvLyBBdm9pZCByZW1vdmFsIHdoZW4gcm9vdCBib3VuZGFyeSBkb2VzIG5vdCBjb250YWluIGluc3RhbmNlIGVsZW1lbnRcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnRFbGVtZW50Um9vdCAmJlxuICAgICAgICBib3VuZGFyeU1vZGUgJiZcbiAgICAgICAgIWVsZW1lbnRBcGkuZWxlbWVudENvbnRhaW5zKGV2ZW50RWxlbWVudFJvb3QsIGluc3RhbmNlLmVsZW1lbnQpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3ZlSW5zdGFuY2UoaW5zdGFuY2UsIHN0b3JlKTtcbiAgICAgIGlmIChpbnN0YW5jZS52ZXJib3NlKSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiBmYWxzZX0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0QWN0aW9uR3JvdXAoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc3RvcmUsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50SWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50SWQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudFRhcmdldCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGV2ZW50U3RhdGVLZXksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkxpc3RJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uTGlzdElkLFxuICBncm91cEluZGV4ID0gMCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGltbWVkaWF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHZlcmJvc2UsXG59KSB7XG4gIGNvbnN0IHtpeE
15638RhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnQgPSBldmVudHNbZXZlbnRJZF0gfHwge307XG4gIGNvbnN0IHttZWRpYVF1ZXJpZXMgPSBpeERhdGEubWVkaWFRdWVyeUtleXN9ID0gZXZlbnQ7XG4gIGNvbnN0IGFjdGlvbkxpc3QgPSBnZXQoaXhEYXRhLCBgYWN0aW9uTGlzdHMuJHthY3Rpb25MaXN0SWR9YCwge30pO1xuICBjb25zdCB7YWN0aW9uSXRlbUdyb3VwcywgdXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlfSA9IGFjdGlvbkxpc3Q7XG4gIC8vIEFib3J0IHBsYXliYWNrIGlmIG5vIGFjdGlvbiBncm91cHNcbiAgaWYgKCFhY3Rpb25JdGVtR3JvdXBzIHx8ICFhY3Rpb25JdGVtR3JvdXBzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBSZXNldCB0byBmaXJzdCBncm91cCB3aGVuIGV2ZW50IGxvb3AgaXMgY29uZmlndXJlZFxuICBpZiAoZ3JvdXBJbmRleCA+PSBhY3Rpb25JdGVtR3JvdXBzLmxlbmd0aCAmJiBnZXQoZXZlbnQsICdjb25maWcubG9vcCcpKSB7XG4gICAgZ3JvdXBJbmRleCA9IDA7XG4gIH1cbiAgLy8gU2tpcCBpbml0aWFsIHN0YXRlIGdyb3VwIGR1cmluZyBhY3Rpb24gbGlzdCBwbGF5YmFjaywgYXMgaXQgc2hvdWxkIGFscmVhZHkgYmUgYXBwbGllZFxuICBpZiAoZ3JvdXBJbmRleCA9PT0gMCAmJiB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUpIHtcbiAgICBncm91cEluZGV4Kys7XG4gIH1cbiAgLy8gSWRlbnRpZnkgZmlyc3QgYW5pbWF0ZWQgZ3JvdXAgYW5kIGFwcGx5IHRoZSBpbml0aWFsIFF1aWNrRWZmZWN0IGRlbGF5XG4gIGNvbnN0IGlzRmlyc3RHcm91cCA9XG4gICAgZ3JvdXBJbmRleCA9PT0gMCB8fCAoZ3JvdXBJbmRleCA9PT0gMSAmJiB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUpO1xuICBjb25zdCBpbnN0YW5jZURlbGF5ID1cbiAgICBpc0ZpcnN0R3JvdXAgJiYgaXNRdWlja0VmZmVjdChldmVudC5hY3Rpb24/LmFjdGlvblR5cGVJZClcbiAgICAgID8gZXZlbnQuY29uZmlnLmRlbGF5XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAvLyBBYm9ydCBwbGF5YmFjayBpZiBubyBhY3Rpb24gaXRlbXMgZXhpc3QgYXQgZ3JvdXAgaW5kZXhcbiAgY29uc3QgYWN0aW9uSXRlbXMgPSBnZXQoYWN0aW9uSXRlbUdyb3VwcywgW2dyb3VwSW5kZXgsICdhY3Rpb25JdGVtcyddLCBbXSk7XG4gIGlmICghYWN0aW9uSXRlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEFib3J0IHBsYXliYWNrIGlmIGN1cnJlbnQgbWVkaWEgcXVlcnkgaXMgbm90IGxpc3RlZCBpbiBldmVudCBjb25maWdcbiAgaWYgKCFzaG91bGRBbGxvd01lZGlhUXVlcnkobWVkaWFRdWVyaWVzLCBpeFNlc3Npb24ubWVkaWFRdWVyeUtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gTGltaXQgYWZmZWN0ZWQgZWxlbWVudHMgd2hlbiBldmVudCB0YXJnZXQgaXMgd2l0aGluIGEgYm91bmRhcnkgbm9kZVxuICBjb25zdCBldmVudEVsZW1lbnRSb290ID1cbiAgICBpeFNlc3Npb24uaGFzQm91bmRhcnlOb2RlcyAmJiBldmVudFRhcmdldFxuICAgICAgPyBlbGVtZW50QXBpLmdldENsb3Nlc3RFbGVtZW50KGV2ZW50VGFyZ2V0LCBCT1VOREFSWV9TRUxFQ1RPUilcbiAgICAgIDogbnVsbDtcblxuICBjb25zdCBjYXJyaWVySW5kZXggPSBnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleChhY3Rpb25JdGVtcyk7XG4gIGxldCBncm91cFN0YXJ0UmVzdWx0ID0gZmFsc2U7XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnYWN0aW9uSXRlbScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkluZGV4JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBhY3Rpb25JdGVtcy5mb3JFYWNoKChhY3Rpb25JdGVtLCBhY3Rpb25JbmRleCkgPT4ge1xuICAgIGNvbnN0IHtjb25maWcsIGFjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICAgIGNvbnN0IHNob3VsZFVzZVBsdWdpbiA9IGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpO1xuICAgIGNvbnN0IHt0YXJnZXR9ID0gY29uZmlnO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRSb290ID0gdGFyZ2V0LmJvdW5kYXJ5TW9kZSA/IGV2ZW50RWxlbWVudFJvb3QgOiBudWxsO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0QWZmZWN0ZWRFbGVtZW50cyh7XG4gICAgICBjb25maWcsXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgZWxlbWVudFJvb3QsXG4gICAgICBlbGVtZW50QXBpLFxuICAgIH0pO1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGVsZW1lbnRJbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBzaG91bGRVc2VQbHVnaW5cbiAgICAgICAgPyBjcmVhdGVQbHVnaW5JbnN0YW5jZShhY3Rpb25UeXBlSWQpPy4oZWxlbWVudCwgYWN0aW9uSXRlbSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgcGx1Z2luRHVyYXRpb24gPSBzaG91bGRVc2VQbHVnaW5cbiAgICAgICAgPyBnZXRQbHVnaW5EdXJhdGlvbihhY3Rpb25UeXBlSWQpKGVsZW1lbnQsIGFjdGlvbkl0ZW0pXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGdyb3VwU3RhcnRSZXN1bHQgPSB0cnVlO1xuICAgICAgY29uc3QgaXNDYXJyaWVyID0gY2FycmllckluZGV4ID09PSBhY3Rpb25JbmRleCAmJiBlbGVtZW50SW5kZXggPT09IDA7XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh7ZWxlbWVudCwgYWN0aW9uSXRlbX0pO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBnZXREZXN0aW5hdGlvblZhbHVlcyhcbiAgICAgICAge2VsZW1lbnQsIGFjdGlvbkl0ZW0sIGVsZW1lbnRBcGl9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgcGx1Z2luSW5zdGFuY2VcbiAgICAgICk7XG5cbiAgICAgIGNyZWF0ZUluc3RhbmNlKHtcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgIGV2ZW50SWQsXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICBhY3Rpb25MaXN0SWQsXG4gICAgICAgIGdyb3VwSW5kZXgsXG4gICAgICAgIGlzQ2FycmllcixcbiAgICAgICAgY29tcHV0ZWRTdHlsZSxcbiAgICAgICAgZGVzdGluYXRpb24sXG4gICAgICAgIGltbWVkaWF0ZSxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgcGx1Z2luSW5zdGFuY2UsXG4gICAgICAgI
15638HBsdWdpbkR1cmF0aW9uLFxuICAgICAgICBpbnN0YW5jZURlbGF5LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZ3JvdXBTdGFydFJlc3VsdDtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnb3B0aW9ucycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgY29uc3Qge3N0b3JlLCBjb21wdXRlZFN0eWxlLCAuLi5yZXN0fSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGFjdGlvbkl0ZW0sXG5cbiAgICBpbW1lZGlhdGUsXG4gICAgcGx1Z2luSW5zdGFuY2UsXG5cbiAgICBjb250aW51b3VzLFxuXG4gICAgcmVzdGluZ1ZhbHVlLFxuICAgIGV2ZW50SWQsXG4gIH0gPSByZXN0O1xuICBjb25zdCBhdXRvU3RhcnQgPSAhY29udGludW91cztcbiAgY29uc3QgaW5zdGFuY2VJZCA9IGdldEluc3RhbmNlSWQoKTtcblxuICBjb25zdCB7aXhFbGVtZW50cywgaXhTZXNzaW9uLCBpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgZWxlbWVudElkID0gZ2V0RWxlbWVudElkKGl4RWxlbWVudHMsIGVsZW1lbnQpO1xuICBjb25zdCB7cmVmU3RhdGV9ID0gaXhFbGVtZW50c1tlbGVtZW50SWRdIHx8IHt9O1xuICBjb25zdCByZWZUeXBlID0gZWxlbWVudEFwaS5nZXRSZWZUeXBlKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHNraXBNb3Rpb24gPVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7IHJlYWRvbmx5IFRSQU5TRk9STV9NT1ZFOiB0cnVlOyByZWFkb25seSBUUkFOU0ZPUk1fU0NBTEU6IHRydWU7IHJlYWRvbmx5IFRSQU5TRk9STV9ST1RBVEU6IHRydWU7IHJlYWRvbmx5IFRSQU5TRk9STV9TS0VXOiB0cnVlOyByZWFkb25seSBTVFlMRV9TSVpFOiB0cnVlOyByZWFkb25seSBTVFlMRV9GSUxURVI6IHRydWU7IHJlYWRvbmx5IFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB0cnVlOyB9Jy5cbiAgICBpeFNlc3Npb24ucmVkdWNlZE1vdGlvbiAmJiBSZWR1Y2VkTW90aW9uVHlwZXNbYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWRdO1xuICBsZXQgc2tpcFRvVmFsdWU7XG4gIGlmIChza2lwTW90aW9uICYmIGNvbnRpbnVvdXMpIHtcbiAgICBzd2l0Y2ggKGl4RGF0YS5ldmVudHNbZXZlbnRJZF0/LmV2ZW50VHlwZUlkKSB7XG4gICAgICBjYXNlIEV2ZW50VHlwZUNvbnN0cy5NT1VTRV9NT1ZFOlxuICAgICAgY2FzZSBFdmVudFR5cGVDb25zdHMuTU9VU0VfTU9WRV9JTl9WSUVXUE9SVDpcbiAgICAgICAgc2tpcFRvVmFsdWUgPSByZXN0aW5nVmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2tpcFRvVmFsdWUgPSAwLjU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yaWdpbiA9IGdldEluc3RhbmNlT3JpZ2luKFxuICAgIGVsZW1lbnQsXG4gICAgcmVmU3RhdGUsXG4gICAgY29tcHV0ZWRTdHlsZSxcbiAgICBhY3Rpb25JdGVtLFxuICAgIGVsZW1lbnRBcGksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwbHVnaW5JbnN0YW5jZVxuICApO1xuXG4gIHN0b3JlLmRpc3BhdGNoKFxuICAgIGluc3RhbmNlQWRkZWQoe1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIG9yaWdpbixcbiAgICAgIHJlZlR5cGUsXG4gICAgICBza2lwTW90aW9uLFxuICAgICAgc2tpcFRvVmFsdWUsXG4gICAgICAuLi5yZXN0LFxuICAgIH0pXG4gICk7XG5cbiAgZGlzcGF0Y2hDdXN0b21FdmVudChkb2N1bWVudC5ib2R5LCAnaXgyLWFuaW1hdGlvbi1zdGFydGVkJywgaW5zdGFuY2VJZCk7XG5cbiAgaWYgKGltbWVkaWF0ZSkge1xuICAgIHJlbmRlckltbWVkaWF0ZUluc3RhbmNlKHN0b3JlLCBpbnN0YW5jZUlkKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2l4SW5zdGFuY2VzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIHNlbGVjdDogKHtpeEluc3RhbmNlc30pID0+IGl4SW5zdGFuY2VzW2luc3RhbmNlSWRdLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVJbnN0YW5jZUNoYW5nZSxcbiAgfSk7XG5cbiAgaWYgKGF1dG9TdGFydCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKGluc3RhbmNlU3RhcnRlZChpbnN0YW5jZUlkLCBpeFNlc3Npb24udGljaykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUluc3RhbmNlKGluc3RhbmNlOiBhbnksIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgZGlzcGF0Y2hDdXN0b21FdmVudChkb2N1bWVudC5ib2R5LCAnaXgyLWFuaW1hdGlvbi1zdG9wcGluZycsIHtcbiAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZS5pZCxcbiAgICBzdGF0ZTogc3RvcmUuZ2V0U3RhdGUoKSxcbiAgfSk7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGFjdGlvbkl0ZW19ID0gaW5zdGFuY2U7XG4gIGNvbnN0IHtpeEVsZW1lbnRzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtyZWYsIHJlZlR5cGV9ID0gaXhFbGVtZW50c1tlbGVtZW50SWRdIHx8IHt9O1xuICBpZiAocmVmVHlwZSA9PT0gSFRNTF9FTEVNRU5UKSB7XG4gICAgY2xlYW51cEhUTUxFbGVtZW50KHJlZiwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaSk7XG4gIH1cbiAgc3RvcmUuZGlzcGF0Y2goaW5zdGFuY2VSZW1vdmVkKGluc3RhbmNlLmlkKSk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ3VzdG9tRXZlbnQoXG4gIGVsZW1lbnQ6IG51bGwgfCBIVE1MRWxlbWVudCxcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIGRldGFpbDpcbiAgICB8IHN0cmluZ1xuICAgIHwge1xuICAgICAgICBpbnN0YW5jZUlkOiBhbnk7XG4gICAgICAgIHN0YXRlOiBhbnk7XG4gICAgICB9XG4pIHtcbiAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgZXZlbnQuaW5p
15638dEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgdHJ1ZSwgZGV0YWlsKTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDcgLSAnZWxlbWVudCcgaXMgcG9zc2libHkgJ251bGwnLlxuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJJbW1lZGlhdGVJbnN0YW5jZShcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSxcbiAgaW5zdGFuY2VJZDogc3RyaW5nXG4pIHtcbiAgY29uc3Qge2l4UGFyYW1ldGVyc30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZS5kaXNwYXRjaChpbnN0YW5jZVN0YXJ0ZWQoaW5zdGFuY2VJZCwgMCkpO1xuICBzdG9yZS5kaXNwYXRjaChhbmltYXRpb25GcmFtZUNoYW5nZWQocGVyZm9ybWFuY2Uubm93KCksIGl4UGFyYW1ldGVycykpO1xuICBjb25zdCB7aXhJbnN0YW5jZXN9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgaGFuZGxlSW5zdGFuY2VDaGFuZ2UoaXhJbnN0YW5jZXNbaW5zdGFuY2VJZF0sIHN0b3JlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSW5zdGFuY2VDaGFuZ2UoaW5zdGFuY2U6IGFueSwgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7XG4gICAgYWN0aXZlLFxuICAgIGNvbnRpbnVvdXMsXG4gICAgY29tcGxldGUsXG4gICAgZWxlbWVudElkLFxuICAgIGFjdGlvbkl0ZW0sXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIHJlbmRlclR5cGUsXG4gICAgY3VycmVudCxcbiAgICBncm91cEluZGV4LFxuICAgIGV2ZW50SWQsXG4gICAgZXZlbnRUYXJnZXQsXG4gICAgZXZlbnRTdGF0ZUtleSxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgaXNDYXJyaWVyLFxuICAgIHN0eWxlUHJvcCxcbiAgICB2ZXJib3NlLFxuICAgIHBsdWdpbkluc3RhbmNlLFxuICB9ID0gaW5zdGFuY2U7XG5cbiAgLy8gQnlwYXNzIHJlbmRlciBpZiBjdXJyZW50IG1lZGlhIHF1ZXJ5IGlzIG5vdCBsaXN0ZWQgaW4gZXZlbnQgY29uZmlnXG4gIGNvbnN0IHtpeERhdGEsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgY29uc3QgZXZlbnQgPSBldmVudHMgJiYgZXZlbnRzW2V2ZW50SWRdID8gZXZlbnRzW2V2ZW50SWRdIDoge307XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSAgUHJvcGVydHkgJ21lZGlhUXVlcmllcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30gfCB1bmRlZmluZWQnLlxuICBjb25zdCB7bWVkaWFRdWVyaWVzID0gaXhEYXRhLm1lZGlhUXVlcnlLZXlzfSA9IGV2ZW50O1xuICBpZiAoIXNob3VsZEFsbG93TWVkaWFRdWVyeShtZWRpYVF1ZXJpZXMsIGl4U2Vzc2lvbi5tZWRpYVF1ZXJ5S2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb250aW51b3VzIHx8IGFjdGl2ZSB8fCBjb21wbGV0ZSkge1xuICAgIGlmIChjdXJyZW50IHx8IChyZW5kZXJUeXBlID09PSBSRU5ERVJfR0VORVJBTCAmJiBjb21wbGV0ZSkpIHtcbiAgICAgIC8vIFJlbmRlciBjdXJyZW50IHZhbHVlcyB0byByZWYgc3RhdGUgYW5kIGdyYWIgbGF0ZXN0XG4gICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgZWxlbWVudFN0YXRlQ2hhbmdlZChlbGVtZW50SWQsIGFjdGlvblR5cGVJZCwgY3VycmVudCwgYWN0aW9uSXRlbSlcbiAgICAgICk7XG4gICAgICBjb25zdCB7aXhFbGVtZW50c30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgY29uc3Qge3JlZiwgcmVmVHlwZSwgcmVmU3RhdGV9ID0gaXhFbGVtZW50c1tlbGVtZW50SWRdIHx8IHt9O1xuICAgICAgY29uc3QgYWN0aW9uU3RhdGUgPSByZWZTdGF0ZSAmJiByZWZTdGF0ZVthY3Rpb25UeXBlSWRdO1xuXG4gICAgICAvLyBSZW5kZXIgSFRNTCBhbmQgcGx1Z2luIGVsZW1lbnRzXG4gICAgICBpZiAocmVmVHlwZSA9PT0gSFRNTF9FTEVNRU5UIHx8IGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpKSB7XG4gICAgICAgIHJlbmRlckhUTUxFbGVtZW50KFxuICAgICAgICAgIHJlZixcbiAgICAgICAgICByZWZTdGF0ZSxcbiAgICAgICAgICBhY3Rpb25TdGF0ZSxcbiAgICAgICAgICBldmVudElkLFxuICAgICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgICAgc3R5bGVQcm9wLFxuICAgICAgICAgIGVsZW1lbnRBcGksXG4gICAgICAgICAgcmVuZGVyVHlwZSxcbiAgICAgICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb21wbGV0ZSkge1xuICAgICAgaWYgKGlzQ2Fycmllcikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg6IGFueTsgdmVyYm9zZTogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nLlxuICAgICAgICBjb25zdCBzdGFydGVkID0gc3RhcnRBY3Rpb25Hcm91cCh7XG4gICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgICBncm91cEluZGV4OiBncm91cEluZGV4ICsgMSxcbiAgICAgICAgICB2ZXJib3NlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHZlcmJvc2UgJiYgIXN0YXJ0ZWQpIHtcbiAgICAgICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiBmYWxzZX0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZW1vdmVJbnN0YW5jZShpbnN0YW5jZSwgc3RvcmUpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbIm9ic2VydmVSZXF1ZXN0cyIsInN0YXJ0QWN0aW9uR3JvdXAiLCJzdGFydEVuZ2luZSIsInN0b3BBY3Rpb25Hcm91cCIsInN0b3BBbGxBY3Rpb25Hcm91cHMiLCJzdG9wRW5naW5lIiwiUXVpY2tFZmZlY3RzSWRMaXN0IiwiT2JqZWN0Iiwia2V5cyIsIlF1aWNrRWZmZWN0SWRzIiwiaXNRdWlja0VmZmVjdCIsImFjdGlvblR5cGVJZCIsImluY2x1ZGVzIiwiQ09MT05fREVMSU1JVEVSIiwiQk9VTkRBUllfU0VMRUNUT1IiLCJIVE1MX0VMRU1FTlQiLCJSRU5ERVJfR0VORVJBTCIsIldfTU9EX0lYIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZ2V0QWZmZWN0ZWRFbGVtZW50cyIsImdldEVsZW1lbnRJZCIsImdldERlc3RpbmF0aW9uVmFsdWVzIiwib2JzZXJ2ZVN0b3JlIiwiZ2V0SW5zdGFuY2VJZCIsInJlbmRlckhUTUxFbGVtZW50IiwiY2xlYXJBbGxTdHlsZXMiLCJnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleCIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRJbnN0YW5jZU9yaWdpbiIsInJlZHVjZUxpc3RUb0dyb3VwIiwic2hvdWxkTmFtZXNwYWNlRXZlbnRQYXJhbWV0ZXIiLCJnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQiLCJzaG91bGRBbGxvd01lZGlhUXVlcnkiLCJjbGVhbnVwSFRNTEVsZW1lbnQiLCJjbGVhck9iamVjdENhY2hlIiwic3RyaW5naWZ5VGFyZ2V0IiwibWVkaWFRdWVyaWVzRXF1YWwiLCJzaGFsbG93RXF1YWwiLCJJWDJWYW5pbGxhVXRpbHMiLCJpc1BsdWdpblR5cGUiLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkR1cmF0aW9uIiwiSVgyVmFuaWxsYVBsdWdpbnMiLCJ1YSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIklTX01PQklMRV9TQUZBUkkiLCJtYXRjaCIsIlRIUk9UVExFRF9FVkVOVF9XQUlUIiwic3RvcmUiLCJzZWxlY3QiLCJpeFJlcXVlc3QiLCJwcmV2aWV3Iiwib25DaGFuZ2UiLCJoYW5kbGVQcmV2aWV3UmVxdWVzdCIsInBsYXliYWNrIiwiaGFuZGxlUGxheWJhY2tSZXF1ZXN0Iiwic3RvcCIsImhhbmRsZVN0b3BSZXF1ZXN0IiwiY2xlYXIiLCJoYW5kbGVDbGVhclJlcXVlc3QiLCJvYnNlcnZlTWVkaWFRdWVyeUNoYW5nZSIsIml4U2Vzc2lvbiIsIm1lZGlhUXVlcnlLZXkiLCJlbGVtZW50QXBpIiwiYWxsb3dFdmVudHMiLCJkaXNwYXRjaFBhZ2VVcGRhdGVFdmVudCIsIm9ic2VydmVPbmVSZW5kZXJUaWNrIiwib25UaWNrIiwidW5zdWJzY3JpYmUiLCJ0aWNrIiwicmF3RGF0YSIsImRlZmVyIiwic3RhcnQiLCJzZXRUaW1lb3V0IiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25JdGVtSWQiLCJldmVudElkIiwiaW1tZWRpYXRlIiwidGVzdE1hbnVhbCIsInZlcmJvc2UiLCJhY3Rpb25MaXN0IiwiYWN0aW9uTGlzdHMiLCJBY3Rpb25UeXBlQ29uc3RzIiwiR0VORVJBTF9TVEFSVF9BQ1RJT04iLCJyZW5kZXJJbml0aWFsR3JvdXAiLCJzdGFydGVkIiwiZGlzcGF0Y2giLCJhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkIiwiaXNQbGF5aW5nIiwic3RhdGUiLCJnZXRTdGF0ZSIsInJhd0RhdGFJbXBvcnRlZCIsImFjdGl2ZSIsInNlc3Npb25Jbml0aWFsaXplZCIsImhhc0JvdW5kYXJ5Tm9kZXMiLCJCb29sZWFuIiwicXVlcnlTZWxlY3RvciIsInJlZHVjZWRNb3Rpb24iLCJib2R5IiwiaGFzQXR0cmlidXRlIiwid2luZG93IiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJiaW5kRXZlbnRzIiwiYWRkRG9jdW1lbnRDbGFzcyIsImhhc0RlZmluZWRNZWRpYVF1ZXJpZXMiLCJzZXNzaW9uU3RhcnRlZCIsInN0YXJ0UmVuZGVyTG9vcCIsImRvY3VtZW50RWxlbWVudCIsImNsYXNzTmFtZSIsImluZGV4T2YiLCJoYW5kbGVGcmFtZSIsIm5vdyIsIml4UGFyYW1ldGVycyIsImFuaW1hdGlvbkZyYW1lQ2hhbmdlZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlcmZvcm1hbmNlIiwiZXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiY2xlYXJFdmVudExpc3RlbmVyIiwic2Vzc2lvblN0b3BwZWQiLCJ0YXJnZXQiLCJsaXN0ZW5lclBhcmFtcyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhcHBseSIsImNyZWF0ZUdyb3VwSW5zdGFuY2VzIiwiZXZlbnRTdGF0ZUtleSIsImV2ZW50VGFyZ2V0IiwiZXZlbnRDb25maWciLCJwYXJhbWV0ZXJHcm91cCIsInNtb290aGluZyIsInJlc3RpbmdWYWx1ZSIsIml4RGF0YSIsImV2ZW50cyIsImV2ZW50IiwiZXZlbnRUeXBlSWQiLCJ0YXJnZXRDYWNoZSIsImluc3RhbmNlQWN0aW9uR3JvdXBzIiwiaW5zdGFuY2VDb25maWdzIiwiY29udGludW91c0FjdGlvbkdyb3VwcyIsImlkIiwicGFyYW1ldGVySWQiLCJldmVudEVsZW1lbnRSb290IiwiZ2V0Q2xvc2VzdEVsZW1lbnQiLCJhY3Rpb25Hcm91cCIsImtleWZyYW1lIiwiYWN0aW9uSXRlbXMiLCJhY3Rpb25JdGVtIiwiY29uZmlnIiwiZWxlbWVudFJvb3QiLCJib3VuZGFyeU1vZGUiLCJrZXkiLCJhcHBlbmRBY3Rpb25JdGVtIiwiZWxlbWVudCIsInB1c2giLCJhY3Rpb25Hcm91cHMiLCJ
15638nZXQiLCJzaG91bGRVc2VQbHVnaW4iLCJQTFVHSU5fUklWRSIsInNlbGVjdG9yR3VpZHMiLCJsZW5ndGgiLCJwbHVnaW5JbnN0YW5jZSIsImRlc3RpbmF0aW9uIiwiY3JlYXRlSW5zdGFuY2UiLCJjb250aW51b3VzIiwibmV3QWN0aW9uR3JvdXBzIiwiZ3JvdXBJbmRleCIsInNvbWUiLCJncm91cCIsImluZGV4IiwiZXZlbnRUeXBlTWFwIiwidXBkYXRlVmlld3BvcnRXaWR0aCIsImxvZ2ljIiwiSVgyVmFuaWxsYUV2ZW50cyIsImNvbnNvbGUiLCJ3YXJuIiwiYmluZEV2ZW50VHlwZSIsImJpbmRSZXNpemVFdmVudHMiLCJXSU5ET1dfUkVTSVpFX0VWRU5UUyIsImhhbmRsZVJlc2l6ZSIsInR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnRMaXN0ZW5lckFkZGVkIiwid2lkdGgiLCJpbm5lcldpZHRoIiwidmlld3BvcnRXaWR0aCIsIm1lZGlhUXVlcmllcyIsInZpZXdwb3J0V2lkdGhDaGFuZ2VkIiwibWFwRm91bmRWYWx1ZXMiLCJvYmplY3QiLCJpdGVyYXRlZSIsIm9taXRCeSIsIm1hcFZhbHVlcyIsImlzRW1wdHkiLCJmb3JFYWNoRXZlbnRUYXJnZXQiLCJldmVudFRhcmdldHMiLCJldmVudENhbGxiYWNrIiwiZWxlbWVudHMiLCJnZXRBZmZlY3RlZEZvckV2ZW50IiwidGFyZ2V0cyIsImluamVjdEJlaGF2aW9yQ1NTRml4ZXMiLCJ0eXBlcyIsImV2ZW50VHlwZXMiLCJoYW5kbGVyIiwiZXZlbnRIYW5kbGVyIiwic2l6ZSIsImFjdGlvbiIsImV2ZW50QWN0aW9uIiwibWVkaWFRdWVyeUtleXMiLCJtZWRpYVF1ZXJpZXNEZWZpbmVkIiwiR0VORVJBTF9DT05USU5VT1VTX0FDVElPTiIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCIsInBhcmFtR3JvdXBzIiwiZmluZCIsInJlc3RpbmdTdGF0ZSIsImhhbmRsZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJvbGRTdGF0ZSIsImV2ZW50U3RhdGUiLCJoYW5kbGVFdmVudFdpdGhDb25maWciLCJuZXdTdGF0ZSIsImV2ZW50U3RhdGVDaGFuZ2VkIiwiaGFuZGxlRXZlbnRUaHJvdHRsZWQiLCJ0aHJvdHRsZSIsImFkZExpc3RlbmVycyIsInNob3VsZFRocm90dGxlIiwic3BsaXQiLCJmaWx0ZXIiLCJoYW5kbGVyRnVuYyIsImluamVjdGVkU2VsZWN0b3JzIiwiY3NzVGV4dCIsInNlbGVjdG9yIiwiZ2V0UXVlcnlTZWxlY3RvciIsIkV2ZW50VHlwZUNvbnN0cyIsIk1PVVNFX0NMSUNLIiwiTU9VU0VfU0VDT05EX0NMSUNLIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJhcHBlbmRDaGlsZCIsInVzZUZpcnN0R3JvdXBBc0luaXRpYWxTdGF0ZSIsImluaXRpYWxTdGF0ZUl0ZW1zIiwiaXRlbUNvbmZpZyIsInVzZUV2ZW50VGFyZ2V0Iiwib2JqZWN0SWQiLCJpdGVtRWxlbWVudHMiLCJpeEluc3RhbmNlcyIsImluc3RhbmNlIiwicmVtb3ZlSW5zdGFuY2UiLCJ2YWxpZEV2ZW50S2V5IiwiZWxlbWVudENvbnRhaW5zIiwiYWN0aW9uSXRlbUdyb3VwcyIsImlzRmlyc3RHcm91cCIsImluc3RhbmNlRGVsYXkiLCJkZWxheSIsInVuZGVmaW5lZCIsImNhcnJpZXJJbmRleCIsImdyb3VwU3RhcnRSZXN1bHQiLCJhY3Rpb25JbmRleCIsImVsZW1lbnRJbmRleCIsInBsdWdpbkR1cmF0aW9uIiwiaXNDYXJyaWVyIiwiY29tcHV0ZWRTdHlsZSIsIm9wdGlvbnMiLCJyZXN0IiwiYXV0b1N0YXJ0IiwiaW5zdGFuY2VJZCIsIml4RWxlbWVudHMiLCJlbGVtZW50SWQiLCJyZWZTdGF0ZSIsInJlZlR5cGUiLCJnZXRSZWZUeXBlIiwic2tpcE1vdGlvbiIsIlJlZHVjZWRNb3Rpb25UeXBlcyIsInNraXBUb1ZhbHVlIiwiTU9VU0VfTU9WRSIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlQiLCJvcmlnaW4iLCJpbnN0YW5jZUFkZGVkIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsInJlbmRlckltbWVkaWF0ZUluc3RhbmNlIiwiaGFuZGxlSW5zdGFuY2VDaGFuZ2UiLCJpbnN0YW5jZVN0YXJ0ZWQiLCJyZWYiLCJpbnN0YW5jZVJlbW92ZWQiLCJldmVudE5hbWUiLCJkZXRhaWwiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImNvbXBsZXRlIiwicmVuZGVyVHlwZSIsImN1cnJlbnQiLCJzdHlsZVByb3AiLCJlbGVtZW50U3RhdGVDaGFuZ2VkIiwiYWN0aW9uU3RhdGUiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUF5Rk5BLGVBQWU7ZUFBZkE7O0lBbXdCQUMsZ0JBQWdCO2VBQWhCQTs7SUFybUJBQyxXQUFXO2VBQVhBOztJQWdqQkFDLGVBQWU7ZUFBZkE7O0lBZkFDLG1CQUFtQjtlQUFuQkE7O0lBdGVBQyxVQUFVO2VBQVZBOzs7NkRBalRDOzREQUNEOzZEQUNDOytEQUNFO2dFQUNDO2tFQUNFO2dFQUNGO2lFQUNDO2lDQU9kO3dCQU8wQztrQ0FrRDFDO3VFQUVxQjt5RUFFQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEzRDdCLE1BQU1DLHFCQUFxQkMsT0FBT0MsSUFBSSxDQUFDQywrQkFBYztBQUVyRCxNQUFNQyxnQkFBZ0IsQ0FBQ0MsZUFDckJMLG1CQUFtQk0sUUFBUSxDQUFDRDtBQUk5QixNQUFNLEVBQ0pFLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsUUFBUSxFQUNULEdBQUdDLG1DQUFrQjtBQUV0QixNQUFNLEVBQ0pDLG1CQUFtQixFQUNuQkMsWUFBWSxFQUNaQyxvQkFBb0IsRUFDcEJDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLGNBQWMsRUFDZEMsdUJBQXVCLEVBQ3ZCQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyw2QkFBNkIsRUFDN0JDLHdCQUF3QixFQUN4QkMscUJBQXFCLEVBQ3JCQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLFlBQVksRUFDYixHQUFHQyx1QkFBZTtBQUNuQixNQUFNLEVBQUNDLFlBQVksRUFBRUMsb0JBQW9CLEVBQUVDLGlCQUFpQixFQUFDLEdBQzNEQyx5QkFBaUI7QUE2Qm5CLE1BQU1DLEtBQUtDLFVBQVVDLFNBQVM7QUFDOUIsTUFBTUMsbUJBQW1CSCxHQUFHSSxLQUFLLENBQUMsWUFBWUosR0FBR0ksS0FBSyxDQUFDO0FBRXZELHNGQUFzRjtBQUN0RixNQUFNQyx1QkFBdUI7QUFFdEIsU0FBU2hELGdCQUFnQmlELEtBQTRCO0lBQzFEM0IsYUFBYTtRQUNYMkI7UUFDQUMsUUFBUSxDQUFDLEVBQ1BDLFNBQVMsRUFHVixHQUFLQSxVQUFVQyxPQUFPO1FBQ3ZCQyxVQUFVQztJQUNaO0lBQ0F
15638oQyxhQUFhO1FBQ1gyQjtRQUNBQyxRQUFRLENBQUMsRUFDUEMsU0FBUyxFQUdWLEdBQUtBLFVBQVVJLFFBQVE7UUFDeEJGLFVBQVVHO0lBQ1o7SUFDQWxDLGFBQWE7UUFDWDJCO1FBQ0FDLFFBQVEsQ0FBQyxFQUNQQyxTQUFTLEVBR1YsR0FBS0EsVUFBVU0sSUFBSTtRQUNwQkosVUFBVUs7SUFDWjtJQUNBcEMsYUFBYTtRQUNYMkI7UUFDQUMsUUFBUSxDQUFDLEVBQ1BDLFNBQVMsRUFHVixHQUFLQSxVQUFVUSxLQUFLO1FBQ3JCTixVQUFVTztJQUNaO0FBQ0Y7QUFFQSxTQUFTQyx3QkFBd0JaLEtBQTRCO0lBQzNEM0IsYUFBYTtRQUNYMkI7UUFDQUMsUUFBUSxDQUFDLEVBQ1BZLFNBQVMsRUFHVixHQUFLQSxVQUFVQyxhQUFhO1FBQzdCVixVQUFVO1lBQ1JoRCxXQUFXNEM7WUFDWHhCLGVBQWU7Z0JBQUN3QjtnQkFBT2UsWUFBQUE7WUFBVTtZQUNqQzlELFlBQVk7Z0JBQUMrQztnQkFBT2dCLGFBQWE7WUFBSTtZQUNyQ0M7UUFDRjtJQUNGO0FBQ0Y7QUFFQSxTQUFTQyxxQkFDUGxCLEtBQTRCLEVBQzVCbUIsTUFBbUM7SUFFbkMsTUFBTUMsY0FBYy9DLGFBQWE7UUFDL0IyQjtRQUNBQyxRQUFRLENBQUMsRUFDUFksU0FBUyxFQUdWLEdBQUtBLFVBQVVRLElBQUk7UUFDcEIsNkVBQTZFO1FBQzdFakIsVUFBVSxDQUFDaUI7WUFDVEYsT0FBT0U7WUFDUEQ7UUFDRjtJQUNGO0FBQ0Y7QUFFQSxTQUFTZixxQkFDUCxFQUFDaUIsT0FBTyxFQUFFQyxLQUFLLEVBQXdDLEVBQ3ZEdkIsS0FBNEI7SUFFNUIsTUFBTXdCLFFBQVE7UUFDWnZFLFlBQVk7WUFBQytDO1lBQU9zQjtZQUFTTixhQUFhO1FBQUk7UUFDOUNDO0lBQ0Y7SUFDQU0sUUFBUUUsV0FBV0QsT0FBTyxLQUFLQTtBQUNqQztBQUVBLFNBQVNQO0lBQ1BTLFNBQVNDLGFBQWEsQ0FBQyxJQUFJQyxZQUFZO0FBQ3pDO0FBRUEsU0FBU3JCLHNCQUFzQkQsUUFBYSxFQUFFTixLQUE0QjtJQUN4RSxNQUFNLEVBQ0p0QyxZQUFZLEVBQ1ptRSxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsT0FBTyxFQUNQZixXQUFXLEVBQ1hnQixTQUFTLEVBQ1RDLFVBQVUsRUFDVkMsVUFBVSxJQUFJLEVBQ2YsR0FBRzVCO0lBQ0osSUFBSSxFQUFDZ0IsT0FBTyxFQUFDLEdBQUdoQjtJQUVoQixJQUFJdUIsZ0JBQWdCQyxnQkFBZ0JSLFdBQVdVLFdBQVc7UUFDeEQsTUFBTUcsYUFBYWIsUUFBUWMsV0FBVyxDQUFDUCxhQUFhO1FBRXBELElBQUlNLFlBQVk7WUFDZGIsVUFBVTFDLGtCQUFrQjtnQkFDMUJ1RDtnQkFDQUw7Z0JBQ0FSO1lBQ0Y7UUFDRjtJQUNGO0lBRUFyRSxZQUFZO1FBQUMrQztRQUFPc0I7UUFBU047UUFBYWlCO0lBQVU7SUFFcEQsSUFDRSxBQUFDSixnQkFBZ0JuRSxpQkFBaUIyRSxpQ0FBZ0IsQ0FBQ0Msb0JBQW9CLElBQ3ZFN0UsY0FBY0MsZUFDZDtRQUNBLHFOQUFxTjtRQUNyTlIsZ0JBQWdCO1lBQUM4QztZQUFPNkI7UUFBWTtRQUNwQ1UsbUJBQW1CO1lBQUN2QztZQUFPNkI7WUFBY0U7UUFBTztRQUNoRCxnVUFBZ1U7UUFDaFUsTUFBTVMsVUFBVXhGLGlCQUFpQjtZQUMvQmdEO1lBQ0ErQjtZQUNBRjtZQUNBRztZQUNBRTtRQUNGO1FBQ0EsSUFBSUEsV0FBV00sU0FBUztZQUN0QnhDLE1BQU15QyxRQUFRLENBQ1pDLElBQUFBLDJDQUF5QixFQUFDO2dCQUFDYjtnQkFBY2MsV0FBVyxDQUFDWDtZQUFTO1FBRWxFO0lBQ0Y7QUFDRjtBQUVBLFNBQVN2QixrQkFDUCxFQUFDb0IsWUFBWSxFQUErQixFQUM1QzdCLEtBQTRCO0lBRTVCLElBQUk2QixjQUFjO1FBQ2hCLHFOQUFxTjtRQUNyTjNFLGdCQUFnQjtZQUFDOEM7WUFBTzZCO1FBQVk7SUFDdEMsT0FBTztRQUNMMUUsb0JBQW9CO1lBQUM2QztRQUFLO0lBQzVCO0lBQ0E1QyxXQUFXNEM7QUFDYjtBQUVBLFNBQVNXLG1CQUFtQmlDLEtBQVUsRUFBRTVDLEtBQTRCO0lBQ2xFNUMsV0FBVzRDO0lBQ1h4QixlQUFlO1FBQUN3QjtRQUFPZSxZQUFBQTtJQUFVO0FBQ25DO0FBRU8sU0FBUzlELFlBQVksRUFDMUIrQyxLQUFLLEVBQ0xzQixPQUFPLEVBQ1BOLFdBQVcsRUFDWGlCLFVBQVUsRUFNWDtJQUNDLE1BQU0sRUFBQ3BCLFNBQVMsRUFBQyxHQUFHYixNQUFNNkMsUUFBUTtJQUNsQyxJQUFJdkIsU0FBUztRQUNYdEIsTUFBTXlDLFFBQVEsQ0FBQ0ssSUFBQUEsaUNBQWUsRUFBQ3hCO0lBQ2pDO0lBQ0EsSUFBSSxDQUFDVCxVQUFVa0MsTUFBTSxFQUFFO1FBQ3JCL0MsTUFBTXlDLFFBQVEsQ0FDWk8sSUFBQUEsb0NBQWtCLEVBQUM7WUFDakJDLGtCQUFrQkMsUUFBUXhCLFNBQVN5QixhQUFhLENBQUN0RjtZQUNqRHVGLGVBQ0UxQixTQUFTMkIsSUFBSSxDQUFDQyxZQUFZLENBQUMsMEJBQzNCQyxPQUFPQyxVQUFVLENBQUMsNEJBQTRCQyxPQUFPO1FBQ3pEO1FBRUYsSUFBSXpDLGFBQWE7WUFDZjBDLFdBQVcxRDtZQUNYMkQ7WUFFQSxJQUFJM0QsTUFBTTZDLFFBQVEsR0FBR2hDLFNBQVMsQ0FBQytDLHNCQUFzQixFQUFFO2dCQUNyRGhELHdCQUF3Qlo7WUFDMUI7UUFDRjtRQUNBQSxNQUFNeUMsUUFBUSxDQUFDb0IsSUFBQUEsZ0NBQWM7UUFDN0JDLGdCQUFnQjlELE9BQU9pQztJQUN6QjtBQUNGO0FBRUEsU0FBUzBCO0lBQ1AsTUFBTSxFQUFDSSxlQUFlLEVBQUMsR0FBR3JDO0lBQzFCLElBQUlxQyxnQkFBZ0JDLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDakcsY0FBYyxDQUFDLEdBQUc7UUFDdEQrRixnQkFBZ0JDLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRWhHLFNBQVMsQ0FBQztJQUM3QztBQUNGO0FBRUEsU0FBUzhGLGdCQUFnQjlELEtBQTRCLEVBQUVpQyxVQUFvQjtJQUN6RSxNQUFNaUMsY0FBYyxDQUFDQztRQUNuQixNQUFNLEVBQUN0RCxTQUFTLEVBQUV1RCxZQUFZLEVBQUMsR0FBR3BFLE1BQU02QyxRQUFRO1FBQ2hELElBQUloQyxVQUFVa0MsTUFBTSxFQUFFO1lBQ3BCL0MsTUFBTXlDLFFBQVEsQ0FBQzRCLElBQUFBLHVDQUFxQixFQUFDRixLQUFLQztZQUMxQyxJQUFJbkMsWUFBWTtnQkFDZGYscUJBQXFCbEIsT0FBT2tFO1lBQzlCLE9BQU87Z0JBQ0xJLHNCQUFzQko7WUFDeEI7UUFDRjtJQUNGO0lBQ0FBLFlBQVlYLE9BQU9nQixXQUFXLENBQUNKLEdBQUc7QUFDcEM7QUFFTyxTQUFTL0csV0FBVzRDLEtBQTRCO0lBQ3JELE1BQU0sRUFBQ2EsU0FBUyxFQUFDLEdBQUdiLE1BQU02QyxRQUFRO0lBQ2xDLElBQUloQyxVQUFVa0MsTUFBTSxFQUFFO1FBQ3BCLE1BQU0sRUFBQ3lCLGNBQWMsRUFBQyxHQUFHM0Q7UUFDekIyRCxlQUFlQyxPQUFPLENBQUNDO1FBQ3ZCekY7UUFDQWUsTUFBTXlDLFFBQVEsQ0FBQ2tDLElBQUFBLGdDQUFjO0lBQy9CO0FBQ0Y7QUFFQSwrSkFBK0o7QUFDL0osU0FBU0QsbUJBQW1CLEVBQUNFLE1BQU0sRUFBRUMsY0FBYyxFQUFDO0lBQ2xELHlDQUF5QztJQUN6Q0QsT0FBT0UsbUJBQW1CLENBQUNDLEtBQUssQ0FBQ0gsUUFBUUM7QUFDM0M7QUFFQSxTQUFTRyxxQkFBcUIsRU
15638FDNUIsb0ZBQW9GO0FBQ3BGaEYsS0FBSyxFQUNMLDRGQUE0RjtBQUM1RmlGLGFBQWEsRUFDYiwwRkFBMEY7QUFDMUZDLFdBQVcsRUFDWCxzRkFBc0Y7QUFDdEZuRCxPQUFPLEVBQ1AsMEZBQTBGO0FBQzFGb0QsV0FBVyxFQUNYLDJGQUEyRjtBQUMzRnRELFlBQVksRUFDWiw2RkFBNkY7QUFDN0Z1RCxjQUFjLEVBQ2Qsd0ZBQXdGO0FBQ3hGQyxTQUFTLEVBQ1QsMkZBQTJGO0FBQzNGQyxZQUFZLEVBQ2I7SUFDQyxNQUFNLEVBQUNDLE1BQU0sRUFBRTFFLFNBQVMsRUFBQyxHQUFHYixNQUFNNkMsUUFBUTtJQUMxQyxNQUFNLEVBQUMyQyxNQUFNLEVBQUMsR0FBR0Q7SUFDakIsTUFBTUUsUUFBUUQsTUFBTSxDQUFDekQsUUFBUTtJQUM3QixNQUFNLEVBQUMyRCxXQUFXLEVBQUMsR0FBR0Q7SUFDdEIsTUFBTUUsY0FBbUMsQ0FBQztJQUMxQyxNQUFNQyx1QkFBNEMsQ0FBQztJQUNuRCxNQUFNQyxrQkFNRixFQUFFO0lBRU4sTUFBTSxFQUFDQyxzQkFBc0IsRUFBQyxHQUFHVjtJQUNqQyxJQUFJLEVBQUNXLElBQUlDLFdBQVcsRUFBQyxHQUFHWjtJQUN4QixJQUFJdkcsOEJBQThCNkcsYUFBYVAsY0FBYztRQUMzRGEsY0FBY2xILHlCQUF5Qm1HLGVBQWVlO0lBQ3hEO0lBRUEsc0VBQXNFO0lBQ3RFLE1BQU1DLG1CQUNKcEYsVUFBVW9DLGdCQUFnQixJQUFJaUMsY0FDMUJuRSxlQUFXbUYsaUJBQWlCLENBQUNoQixhQUFhckgscUJBQzFDO0lBRU4sb0ZBQW9GO0lBQ3BGaUksdUJBQXVCckIsT0FBTyxDQUFDLENBQUMwQjtRQUM5QixNQUFNLEVBQUNDLFFBQVEsRUFBRUMsV0FBVyxFQUFDLEdBQUdGO1FBRWhDLG1GQUFtRjtRQUNuRkUsWUFBWTVCLE9BQU8sQ0FBQyxDQUFDNkI7WUFDbkIsTUFBTSxFQUFDNUksWUFBWSxFQUFDLEdBQUc0STtZQUN2QixNQUFNLEVBQUMxQixNQUFNLEVBQUMsR0FBRzBCLFdBQVdDLE1BQU07WUFDbEMsSUFBSSxDQUFDM0IsUUFBUTtnQkFDWDtZQUNGO1lBQ0EsTUFBTTRCLGNBQWM1QixPQUFPNkIsWUFBWSxHQUFHUixtQkFBbUI7WUFFN0QsTUFBTVMsTUFBTXhILGdCQUFnQjBGLFVBQVVoSCxrQkFBa0JGO1lBQ3hEa0ksb0JBQW9CLENBQUNjLElBQUksR0FBR0MsaUJBQzFCZixvQkFBb0IsQ0FBQ2MsSUFBSSxFQUN6Qk4sVUFDQUU7WUFHRixJQUFJLENBQUNYLFdBQVcsQ0FBQ2UsSUFBSSxFQUFFO2dCQUNyQmYsV0FBVyxDQUFDZSxJQUFJLEdBQUc7Z0JBQ25CLE1BQU0sRUFBQ0gsTUFBTSxFQUFDLEdBQUdEO2dCQUNqQnBJLG9CQUFvQjtvQkFDbEJxSTtvQkFDQWQ7b0JBQ0FQO29CQUNBc0I7b0JBQ0F6RixZQUFBQTtnQkFDRixHQUFHMEQsT0FBTyxDQUFDLENBQUNtQztvQkFDVmYsZ0JBQWdCZ0IsSUFBSSxDQUFDO3dCQUFDRDt3QkFBU0Y7b0JBQUc7Z0JBQ3BDO1lBQ0Y7UUFDRjtJQUNGO0lBRUFiLGdCQUFnQnBCLE9BQU8sQ0FBQyxDQUFDLEVBQUNtQyxPQUFPLEVBQUVGLEdBQUcsRUFBQztRQUNyQyxN
15638QUFNSSxlQUFlbEIsb0JBQW9CLENBQUNjLElBQUk7UUFDOUMsTUFBTUosYUFBYVMsSUFBQUEsWUFBRyxFQUFDRCxjQUFjLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQzVELE1BQU0sRUFBQ3BKLFlBQVksRUFBQyxHQUFHNEk7UUFDdkIsTUFBTVUsa0JBQ0osd0VBQXdFO1FBQ3hFdEosaUJBQWlCMkUsaUNBQWdCLENBQUM0RSxXQUFXLEdBQ3pDLEFBQUNYLENBQUFBLFdBQVdDLE1BQU0sRUFBRTNCLFFBQVFzQyxpQkFBaUIsRUFBRSxBQUFELEVBQUdDLE1BQU0sS0FBSyxJQUM1RDdILGFBQWE1QjtRQUVuQixNQUFNMEosaUJBQWlCSixrQkFDbkJ6SCxxQkFBcUI3QixnQkFBZ0JrSixTQUFTTixjQUM5QztRQUNKLE1BQU1lLGNBQWNqSixxQkFDbEI7WUFBQ3dJO1lBQVNOO1lBQVl2RixZQUFBQTtRQUFVLEdBQ2hDLDZEQUE2RDtRQUM3RCxtQkFBbUI7UUFDbkJxRztRQUVGRSxlQUFlO1lBQ2J0SDtZQUNBNEc7WUFDQTdFO1lBQ0FGO1lBQ0F5RTtZQUNBZTtZQUNBRSxZQUFZO1lBQ1p2QjtZQUNBYztZQUNBekI7WUFDQUM7WUFDQThCO1FBQ0Y7SUFDRjtBQUNGO0FBRUEsU0FBU1QsaUJBQWlCRyxlQUFlLEVBQUUsRUFBRVYsUUFBYSxFQUFFRSxVQUFlO0lBQ3pFLE1BQU1rQixrQkFBa0I7V0FBSVY7S0FBYTtJQUN6QyxJQUFJVztJQUNKRCxnQkFBZ0JFLElBQUksQ0FBQyxDQUFDQyxPQUFPQztRQUMzQixrRkFBa0Y7UUFDbEYsSUFBSUQsTUFBTXZCLFFBQVEsS0FBS0EsVUFBVTtZQUMvQnFCLGFBQWFHO1lBQ2IsT0FBTztRQUNUO1FBQ0EsT0FBTztJQUNUO0lBQ0EsSUFBSUgsY0FBYyxNQUFNO1FBQ3RCQSxhQUFhRCxnQkFBZ0JMLE1BQU07UUFDbkMsMElBQTBJO1FBQzFJSyxnQkFBZ0JYLElBQUksQ0FBQztZQUNuQlQ7WUFDQUMsYUFBYSxFQUFFO1FBQ2pCO0lBQ0Y7SUFDQSxxRkFBcUY7SUFDckZtQixlQUFlLENBQUNDLFdBQVcsQ0FBQ3BCLFdBQVcsQ0FBQ1EsSUFBSSxDQUFDUDtJQUM3QyxPQUFPa0I7QUFDVDtBQUVBLFNBQVM5RCxXQUFXMUQsS0FBNEI7SUFDOUMsTUFBTSxFQUFDdUYsTUFBTSxFQUFDLEdBQUd2RixNQUFNNkMsUUFBUTtJQUMvQixNQUFNLEVBQUNnRixZQUFZLEVBQUMsR0FBR3RDO0lBRXZCdUMsb0JBQW9COUg7SUFFcEJ5RSxJQUFBQSxnQkFBTyxFQUFDb0QsY0FBYyxDQUFDckMsUUFBUWtCO1FBQzdCLGdhQUFnYTtRQUNoYSxNQUFNcUIsUUFBUUMseUJBQWdCLENBQUN0QixJQUFJO1FBQ25DLElBQUksQ0FBQ3FCLE9BQU87WUFDVkUsUUFBUUMsSUFBSSxDQUFDLENBQUMsK0JBQStCLEVBQUV4QixJQUFJLENBQUM7WUFDcEQ7UUFDRjtRQUNBeUIsY0FBYztZQUNaLG9GQUFvRjtZQUNwRko7WUFDQS9IO1lBQ0F3RjtRQUNGO0lBQ0Y7SUFFQSxNQUFNLEVBQUMzRSxTQUFTLEVBQUMsR0FBR2IsTUFBTTZDLFFBQVE7SUFDbEMsSUFBSWhDLFVBQVUyRCxjQUFjLENBQUMyQyxNQUFNLEVBQUU7UUFDbkNpQixpQkFBaUJwSTtJQUNuQjtBQUNGO0FBRUEsTUFBTXFJLHVCQUF1QjtJQUFDO0lBQVU7Q0FBb0I7QUFFNUQsU0FBU0QsaUJBQWlCcEksS0FBNEI7SUFDcEQsTUFBTXNJLGVBQWU7UUFDbkJSLG9CQUFvQjlIO0lBQ3RCO0lBQ0FxSSxxQkFBcUI1RCxPQUFPLENBQUMsQ0FBQzhEO1FBQzVCaEYsT0FBT2lGLGdCQUFnQixDQUFDRCxNQUFNRDtRQUM5QnRJLE1BQU15QyxRQUFRLENBQUNnRyxJQUFBQSxvQ0FBa0IsRUFBQ2xGLFFBQVE7WUFBQ2dGO1lBQU1EO1NBQWE7SUFDaEU7SUFDQUE7QUFDRjtBQUVBLFNBQVNSLG9CQUFvQjlILEtBQTRCO0lBQ3ZELE1BQU0sRUFBQ2EsU0FBUyxFQUFFMEUsTUFBTSxFQUFDLEdBQUd2RixNQUFNNkMsUUFBUTtJQUMxQyxNQUFNNkYsUUFBUW5GLE9BQU9vRixVQUFVO0lBQy9CLElBQUlELFVBQVU3SCxVQUFVK0gsYUFBYSxFQUFFO1FBQ3JDLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUd0RDtRQUN2QnZGLE1BQU15QyxRQUFRLENBQUNxRyxJQUFBQSxzQ0FBb0IsRUFBQztZQUFDSjtZQUFPRztRQUFZO0lBQzFEO0FBQ0Y7QUFFQSxNQUFNRSxpQkFBaUIsQ0FDckJDLFFBQ0FDLFdBQ0dDLElBQUFBLGVBQU0sRUFBQ0MsSUFBQUEsa0JBQVMsRUFBQ0gsUUFBUUMsV0FBV0csZ0JBQU87QUFFaEQsTUFBTUMscUJBQXFCLENBQ3pCQyxjQUNBQztJQUVBOUUsSUFBQUEsZ0JBQU8sRUFBQzZFLGNBQWMsQ0FBQ0UsVUFBVXpIO1FBQy9CLDJJQUEySTtRQUMzSXlILFNBQVMvRSxPQUFPLENBQUMsQ0FBQ21DLFNBQVNnQjtZQUN6QixNQUFNM0MsZ0JBQWdCbEQsVUFBVW5FLGtCQUFrQmdLO1lBQ2xEMkIsY0FBYzNDLFNBQVM3RSxTQUFTa0Q7UUFDbEM7SUFDRjtBQUNGO0FBRUEsTUFBTXdFLHNCQUFzQixDQUFDaEU7SUFDM0IsTUFBTWMsU0FBUztRQUFDM0IsUUFBUWEsTUFBTWIsTUFBTTtRQUFFOEUsU0FBU2pFLE1BQU1pRSxPQUFPO0lBQUE7SUFDNUQsT0FBT3hMLG9CQUFvQjtRQUFDcUk7UUFBUXhGLFlBQUFBO0lBQVU7QUFDaEQ7QUFFQSx1TkFBdU47QUFDdk4sU0FBU29ILGNBQWMsRUFBQ0osS0FBSyxFQUFFL0gsS0FBSyxFQUFFd0YsTUFBTSxFQUFpQztJQUMzRW1FLHVCQUF1Qm5FO0lBQ3ZCLE1BQU0sRUFBQ29FLE9BQU9DLFVBQVUsRUFBRUMsU0FBU0MsWUFBWSxFQUFDLEdBQUdoQztJQUNuRCxNQUFNLEVBQUN4QyxNQUFNLEVBQUMsR0FBR3ZGLE1BQU02QyxRQUFRO0lBQy9CLE1BQU0sRUFBQ1QsV0FBVyxFQUFDLEdBQUdtRDtJQUN0QixNQUFNK0QsZUFBZVAsZUFBZXZELFFBQVFpRTtJQUU1QyxJQUFJLENBQUNPLElBQUFBLGFBQUksRUFBQ1YsZUFBZTtRQUN2QjtJQUNGO0lBRUE3RSxJQUFBQSxnQkFBTyxFQUFDNkUsY0FBYyxDQUFDRSxVQUFVOUM7UUFDL0IsTUFBTWpCLFFBQVFELE1BQU0sQ0FBQ2tCLElBQUk7UUFDekIsTUFBTSxFQUNKdUQsUUFBUUMsV0FBVyxFQUNuQm5FLElBQUloRSxPQUFPLEVBQ1g4RyxlQUFldEQsT0FBTzRFLGNBQWMsRUFDckMsR0FBRzFFO1FBQ0osTUFBTSxFQUFDNUQsWUFBWSxFQUFDLEdBQUdxSSxZQUFZM0QsTUFBTTtRQUV6QyxJQUFJLENBQUNwSCxrQkFBa0IwSixjQUFjdEQsT0FBTzRFLGNBQWMsR0FBRztZQUMzRG5LLE1BQU15QyxRQUFRLENBQUMySCxJQUFBQSxxQ0FBbUI7UUFDcEM7UUFFQSxJQUNFRixZQUFZeE0sWUFBWSxLQUFLMkUsaUNBQWdCLENBQUNnSSx5QkFBeUIsRUFDdkU7WUFDQSxNQUFNQyxVQUFVQyxNQUFNQyxPQUFPLENBQUMvRSxNQUFNYyxNQUFNLElBQ3RDZCxNQUFNYyxNQUFNLEdBQ1o7Z0JBQUNkLE1BQU1jLE1BQU07YUFBQztZQUVsQixvRkFBb0Y7WUFDcEYrRCxRQUFRN0YsT0FBTyxDQUFDLENBQUNVO2dCQUNmLE1BQU0sRUFBQ3NGLDBCQUEwQixFQUFDLEdBQUd0RjtnQkFDckMsTUFBTXVGLGNBQWMzRCxJQUFBQSxZQUFHLEVBQ3JCM0UsYUFDQSxDQUFDLEVBQUVQLGFBQWEsMEJBQTBCLENBQUMsRUFDM0MsRUFBRTtnQkFFSixNQUFNdUQsaUJBQWlCdUYsSUFBQUEsYUFBSSxFQUN6QkQsYUFDQSxDQUFDLEVBQUMzRSxFQUFFLEVBQUMsR0FBS0EsT0FBTzBFO2dCQUVuQixNQUFNcEYsWUFBWSxBQUFDRixDQUFBQSxZQUFZRSxTQUFTLElBQUksQ0FBQSxJQUFLO2dCQUNqRCxNQUFNQyxlQUFlLEFBQUNILENBQUFBLFlBQVl5RixZQUFZLElBQUksQ0FBQSxJQUFLO2dCQUV2RCxJQUFJLENBQUN4RixnQkFBZ0I7b0JBQ25CO2dCQUNGO2dCQUVBb0UsU0FBUy9FLE9BQU8sQ0FBQyxDQUFDUyxhQUFhMEM7b0JBQzdCLE1BQU0zQyxnQkFBZ0Js
15638RCxVQUFVbkUsa0JBQWtCZ0s7b0JBQ2xENUMscUJBQXFCO3dCQUNuQmhGO3dCQUNBaUY7d0JBQ0FDO3dCQUNBbkQ7d0JBQ0FvRDt3QkFDQXREO3dCQUNBdUQ7d0JBQ0FDO3dCQUNBQztvQkFDRjtnQkFDRjtZQUNGO1FBQ0Y7UUFFQSxJQUNFNEUsWUFBWXhNLFlBQVksS0FBSzJFLGlDQUFnQixDQUFDQyxvQkFBb0IsSUFDbEU3RSxjQUFjeU0sWUFBWXhNLFlBQVksR0FDdEM7WUFDQTZFLG1CQUFtQjtnQkFBQ3ZDO2dCQUFPNkI7Z0JBQWNFO1lBQU87UUFDbEQ7SUFDRjtJQUVBLE1BQU04SSxjQUFjLENBQUNDO1FBQ25CLE1BQU0sRUFBQ2pLLFNBQVMsRUFBQyxHQUFHYixNQUFNNkMsUUFBUTtRQUNsQ3dHLG1CQUFtQkMsY0FBYyxDQUFDMUMsU0FBUzdFLFNBQVNrRDtZQUNsRCxNQUFNUSxRQUFRRCxNQUFNLENBQUN6RCxRQUFRO1lBQzdCLE1BQU1nSixXQUFXbEssVUFBVW1LLFVBQVUsQ0FBQy9GLGNBQWM7WUFDcEQsTUFBTSxFQUFDZ0YsUUFBUUMsV0FBVyxFQUFFckIsZUFBZXRELE9BQU80RSxjQUFjLEVBQUMsR0FBRzFFO1lBQ3BFLDRFQUE0RTtZQUM1RSxJQUFJLENBQUMxRyxzQkFBc0I4SixjQUFjaEksVUFBVUMsYUFBYSxHQUFHO2dCQUNqRTtZQUNGO1lBQ0EsTUFBTW1LLHdCQUF3QixDQUFDOUYsY0FBYyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0rRixXQUFXbkIsYUFDZjtvQkFDRS9KO29CQUNBNEc7b0JBQ0FuQjtvQkFDQU47b0JBQ0EyRjtvQkFDQTdGO2dCQUNGLEdBQ0E4RjtnQkFFRixJQUFJLENBQUMzTCxhQUFhOEwsVUFBVUgsV0FBVztvQkFDckMvSyxNQUFNeUMsUUFBUSxDQUFDMEksSUFBQUEsbUNBQWlCLEVBQUNsRyxlQUFlaUc7Z0JBQ2xEO1lBQ0Y7WUFDQSxJQUNFaEIsWUFBWXhNLFlBQVksS0FBSzJFLGlDQUFnQixDQUFDZ0kseUJBQXlCLEVBQ3ZFO2dCQUNBLE1BQU1DLFVBQVVDLE1BQU1DLE9BQU8sQ0FBQy9FLE1BQU1jLE1BQU0sSUFDdENkLE1BQU1jLE1BQU0sR0FDWjtvQkFBQ2QsTUFBTWMsTUFBTTtpQkFBQztnQkFDbEIrRCxRQUFRN0YsT0FBTyxDQUFDd0c7WUFDbEIsT0FBTztnQkFDTEE7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxNQUFNRyx1QkFBdUJDLElBQUFBLGlCQUFRLEVBQUNSLGFBQWE5SztJQUVuRCxNQUFNdUwsZUFBZSxDQUFDLEVBQ3BCMUcsU0FBU2xELFFBQVEsRUFDakIsb0ZBQW9GO0lBQ3BGa0ksS0FBSyxFQUNMLDZGQUE2RjtJQUM3RnlCLFVBQVVFLGNBQWMsRUFDekI7UUFDQzNCLE1BQ0c0QixLQUFLLENBQUMsS0FDTkMsTUFBTSxDQUFDdkksUUFDUiw2RUFBNkU7U0FDNUV1QixPQUFPLENBQUMsQ0FBQzhEO1lBQ1IsTUFBTW1ELGNBQWNILGlCQUFpQkgsdUJBQXVCUDtZQUM1RGpHLE9BQU80RCxnQkFBZ0IsQ0FBQ0QsTUFBTW1EO1lBQzlCMUwsTUFBTXlDLFFBQVEsQ0FBQ2dHLElBQUFBLG9DQUFrQixFQUFDN0QsUUFBUTtnQkFBQzJEO2dCQUFNbUQ7YUFBWTtRQUMvRDtJQUNKO0lBRUEsSUFBSW5CLE1BQU1DLE9BQU8sQ0FBQ1gsYUFBYTtRQUM3QkEsV0FBV3BGLE9BQU8sQ0FBQzZHO0lBQ3JCLE9BQU8sSUFBSSxPQUFPekIsZUFBZSxVQUFVO1FBQ3pDeUIsYUFBYXZEO0lBQ2Y7QUFDRjtBQUVBOzs7Q0FHQyxHQUVELFNBQVM0Qix1QkFBdUJuRSxNQUFXO0lBQ3pDLElBQUksQ0FBQzNGLGtCQUFrQjtRQUNyQjtJQUNGO0lBRUEsTUFBTThMLG9CQUF5QyxDQUFDO0lBRWhELElBQUlDLFVBQVU7SUFDZCxJQUFLLE1BQU03SixXQUFXeUQsT0FBUTtRQUM1QixNQUFNLEVBQUNFLFdBQVcsRUFBRWQsTUFBTSxFQUFDLEdBQUdZLE1BQU0sQ0FBQ3pELFFBQVE7UUFFN0MsTUFBTThKLFdBQVc5SyxlQUFXK0ssZ0JBQWdCLENBQUNsSDtRQUM3QywyRUFBMkU7UUFDM0UsSUFBSStHLGlCQUFpQixDQUFDRSxTQUFTLEVBQUU7WUFDL0I7UUFDRjtRQUVBLDJGQUEyRjtRQUMzRixJQUNFbkcsZ0JBQWdCcUcsZ0NBQWUsQ0FBQ0MsV0FBVyxJQUMzQ3RHLGdCQUFnQnFHLGdDQUFlLENBQUNFLGtCQUFrQixFQUNsRDtZQUNBLDJFQUEyRTtZQUMzRU4saUJBQWlCLENBQUNFLFNBQVMsR0FBRztZQUM5QkQsV0FDRUMsV0FDQSxNQUNBLHFCQUNBLGdDQUNBO1FBQ0o7SUFDRjtJQUVBLElBQUlELFNBQVM7UUFDWCxNQUFNTSxRQUFReEssU0FBU3lLLGFBQWEsQ0FBQztRQUNyQ0QsTUFBTUUsV0FBVyxHQUFHUjtRQUNwQmxLLFNBQVMyQixJQUFJLENBQUNnSixXQUFXLENBQUNIO0lBQzVCO0FBQ0Y7QUFFQSxTQUFTM0osbUJBQW1CLEVBQzFCdkMsS0FBSyxFQUNMNkIsWUFBWSxFQUNaRSxPQUFPLEVBS1I7SUFDQyxNQUFNLEVBQUN3RCxNQUFNLEVBQUUxRSxTQUFTLEVBQUMsR0FBR2IsTUFBTTZDLFFBQVE7SUFDMUMsTUFBTSxFQUFDVCxXQUFXLEVBQUVvRCxNQUFNLEVBQUMsR0FBR0Q7SUFDOUIsaUVBQWlFO0lBQ2pFLE1BQU1FLFFBQVFELE1BQU0sQ0FBQ3pELFFBQVE7SUFDN0Isc0VBQXNFO0lBQ3RFLE1BQU1JLGFBQWFDLFdBQVcsQ0FBQ1AsYUFBYTtJQUU1QyxxR0FBcUc7SUFDckcsSUFBSU0sY0FBY0EsV0FBV21LLDJCQUEyQixFQUFFO1FBQ3hELE1BQU1DLG9CQUFvQnhGLElBQUFBLFlBQUcsRUFDM0I1RSxZQUNBLG1DQUNBLEVBQUU7UUFHSixtRkFBbUY7UUFDbkYsTUFBTTBHLGVBQWU5QixJQUFBQSxZQUFHLEVBQUN0QixPQUFPLGdCQUFnQkYsT0FBTzRFLGNBQWM7UUFDckUsSUFBSSxDQUFDcEwsc0JBQXNCOEosY0FBY2hJLFVBQVVDLGFBQWEsR0FBRztZQUNqRTtRQUNGO1FBRUF5TCxrQkFBa0I5SCxPQUFPLENBQUMsQ0FBQzZCO1lBQ3pCLE1BQU0sRUFBQ0MsUUFBUWlHLFVBQVUsRUFBRTlPLFlBQVksRUFBQyxHQUFHNEk7WUFDM0MsTUFBTUMsU0FDSixxRkFBcUY7WUFDckYsd0RBQXdEO1lBQ3hELHVFQUF1RTtZQUN2RWlHLFlBQVk1SCxRQUFRNkgsbUJBQW1CLFFBQ3ZDLHVFQUF1RTtZQUN2RUQsWUFBWTVILFFBQVE4SCxZQUFZLE9BRTVCO2dCQUFDOUgsUUFBUWEsTUFBTWIsTUFBTTtnQkFBRThFLFNBQVNqRSxNQUFNaUUsT0FBTztZQUFBLElBQzdDOEM7WUFDTixNQUFNRyxlQUFlek8sb0JBQW9CO2dCQUFDcUk7Z0JBQVFkO2dCQUFPMUUsWUFBQUE7WUFBVTtZQUNuRSxNQUFNaUcsa0JBQWtCMUgsYUFBYTVCO1lBRXJDaVAsYUFBYWxJLE9BQU8sQ0FBQyxDQUFDbUM7Z0JBQ3BCLE1BQU1RLGlCQUFpQkosa0JBQ25CekgscUJBQXFCN0IsZ0JBQWdCa0osU0FBU04sY0FDOUM7Z0JBQ0pnQixlQUFlO29CQUNiRCxhQUFhakoscUJBQ1g7d0JBQUN3STt3QkFBU047d0JBQVl2RixZQUFBQTtvQkFBVSxHQUNoQyw2REFBNkQ7b0JBQzdELG1CQUFtQjtvQkFDbkJxRztvQkFFRnBGLFdBQVc7b0JBQ1hoQztvQkFDQTR
15638HO29CQUNBN0U7b0JBQ0F1RTtvQkFDQXpFO29CQUNBdUY7Z0JBQ0Y7WUFDRjtRQUNGO0lBQ0Y7QUFDRjtBQUVPLFNBQVNqSyxvQkFBb0IsRUFBQzZDLEtBQUssRUFBaUM7SUFDekUsTUFBTSxFQUFDNE0sV0FBVyxFQUFDLEdBQUc1TSxNQUFNNkMsUUFBUTtJQUNwQzRCLElBQUFBLGdCQUFPLEVBQUNtSSxhQUFhLENBQUNDO1FBQ3BCLElBQUksQ0FBQ0EsU0FBU3RGLFVBQVUsRUFBRTtZQUN4QixNQUFNLEVBQUMxRixZQUFZLEVBQUVLLE9BQU8sRUFBQyxHQUFHMks7WUFDaENDLGVBQWVELFVBQVU3TTtZQUN6QixJQUFJa0MsU0FBUztnQkFDWGxDLE1BQU15QyxRQUFRLENBQ1pDLElBQUFBLDJDQUF5QixFQUFDO29CQUFDYjtvQkFBY2MsV0FBVztnQkFBSztZQUU3RDtRQUNGO0lBQ0Y7QUFDRjtBQUVPLFNBQVN6RixnQkFBZ0IsRUFDOUIsb0ZBQW9GO0FBQ3BGOEMsS0FBSyxFQUNMLDZEQUE2RDtBQUM3RCxtQkFBbUI7QUFDbkIrQixPQUFPLEVBQ1AsNkRBQTZEO0FBQzdELG1CQUFtQjtBQUNuQm1ELFdBQVcsRUFDWCw2REFBNkQ7QUFDN0QsbUJBQW1CO0FBQ25CRCxhQUFhLEVBQ2IsMkZBQTJGO0FBQzNGcEQsWUFBWSxFQUNiO0lBQ0MsTUFBTSxFQUFDK0ssV0FBVyxFQUFFL0wsU0FBUyxFQUFDLEdBQUdiLE1BQU02QyxRQUFRO0lBRS9DLDhEQUE4RDtJQUM5RCxNQUFNb0QsbUJBQ0pwRixVQUFVb0MsZ0JBQWdCLElBQUlpQyxjQUMxQm5FLGVBQVdtRixpQkFBaUIsQ0FBQ2hCLGFBQWFySCxxQkFDMUM7SUFFTjRHLElBQUFBLGdCQUFPLEVBQUNtSSxhQUFhLENBQUNDO1FBQ3BCLE1BQU1wRyxlQUFlTSxJQUFBQSxZQUFHLEVBQUM4RixVQUFVO1FBQ25DLDhFQUE4RTtRQUM5RSxNQUFNRSxnQkFBZ0I5SCxnQkFDbEI0SCxTQUFTNUgsYUFBYSxLQUFLQSxnQkFDM0I7UUFDSixzREFBc0Q7UUFDdEQsSUFDRTRILFNBQVNoTCxZQUFZLEtBQUtBLGdCQUMxQmdMLFNBQVM5SyxPQUFPLEtBQUtBLFdBQ3JCZ0wsZUFDQTtZQUNBLHFFQUFxRTtZQUNyRSxJQUNFOUcsb0JBQ0FRLGdCQUNBLENBQUMxRixlQUFXaU0sZUFBZSxDQUFDL0csa0JBQWtCNEcsU0FBU2pHLE9BQU8sR0FDOUQ7Z0JBQ0E7WUFDRjtZQUNBa0csZUFBZUQsVUFBVTdNO1lBQ3pCLElBQUk2TSxTQUFTM0ssT0FBTyxFQUFFO2dCQUNwQmxDLE1BQU15QyxRQUFRLENBQ1pDLElBQUFBLDJDQUF5QixFQUFDO29CQUFDYjtvQkFBY2MsV0FBVztnQkFBSztZQUU3RDtRQUNGO0lBQ0Y7QUFDRjtBQUVPLFNBQVMzRixpQkFBaUIsRUFDL0Isb0ZBQW9GO0FBQ3BGZ0QsS0FBSyxFQUNMLHNGQUFzRjtBQUN0RitCLE9BQU8sRUFDUCw2REFBNkQ7QUFDN0QsbUJBQW1CO0FBQ25CbUQsV0FBVyxFQUNYLDZEQUE2RDtBQUM3RCxtQkFBbUI7QUFDbkJELGFBQWEsRUFDYiwyRkFBMkY7QUFDM0ZwRCxZQUFZLEVBQ1o0RixhQUFhLENBQUMsRUFDZCw2REFBNkQ7QUFDN0QsbUJBQW1CO0FBQ25CekYsU0FBUyxFQUNULDZEQUE2RDtBQUM3RCxtQkFBbUI7QUFDbkJFLE9BQU8sRUFDUjtJQUNDLE1BQU0sRUFBQ3FELE1BQU0sRUFBRTFFLFNBQVMsRUFBQyxHQUFHYixNQUFNNkMsUUFBUTtJQUMxQyxNQUFNLEVBQUMyQyxNQUFNLEVBQUMsR0FBR0Q7SUFDakIsTUFBTUUsUUFBUUQsTUFBTSxDQUFDekQsUUFBUSxJQUFJLENBQUM7SUFDbEMsTUFBTSxFQUFDOEcsZUFBZXRELE9BQU80RSxjQUFjLEVBQUMsR0FBRzFFO0lBQy9DLE1BQU10RCxhQUFhNEUsSUFBQUEsWUFBRyxFQUFDeEIsUUFBUSxDQUFDLFlBQVksRUFBRTFELGFBQWEsQ0FBQyxFQUFFLENBQUM7SUFDL0QsTUFBTSxFQUFDb0wsZ0JBQWdCLEVBQUVYLDJCQUEyQixFQUFDLEdBQUduSztJQUN4RCxxQ0FBcUM7SUFDckMsSUFBSSxDQUFDOEssb0JBQW9CLENBQUNBLGlCQUFpQjlGLE1BQU0sRUFBRTtRQUNqRCxPQUFPO0lBQ1Q7SUFDQSxxREFBcUQ7SUFDckQsSUFBSU0sY0FBY3dGLGlCQUFpQjlGLE1BQU0sSUFBSUosSUFBQUEsWUFBRyxFQUFDdEIsT0FBTyxnQkFBZ0I7UUFDdEVnQyxhQUFhO0lBQ2Y7SUFDQSx3RkFBd0Y7SUFDeEYsSUFBSUEsZUFBZSxLQUFLNkUsNkJBQTZCO1FBQ25EN0U7SUFDRjtJQUNBLHdFQUF3RTtJQUN4RSxNQUFNeUYsZUFDSnpGLGVBQWUsS0FBTUEsZUFBZSxLQUFLNkU7SUFDM0MsTUFBTWEsZ0JBQ0pELGdCQUFnQnpQLGNBQWNnSSxNQUFNd0UsTUFBTSxFQUFFdk0sZ0JBQ3hDK0gsTUFBTWMsTUFBTSxDQUFDNkcsS0FBSyxHQUNsQkM7SUFFTix5REFBeUQ7SUFDekQsTUFBTWhILGNBQWNVLElBQUFBLFlBQUcsRUFBQ2tHLGtCQUFrQjtRQUFDeEY7UUFBWTtLQUFjLEVBQUUsRUFBRTtJQUN6RSxJQUFJLENBQUNwQixZQUFZYyxNQUFNLEVBQUU7UUFDdkIsT0FBTztJQUNUO0lBQ0Esc0VBQXNFO0lBQ3RFLElBQUksQ0FBQ3BJLHNCQUFzQjhKLGNBQWNoSSxVQUFVQyxhQUFhLEdBQUc7UUFDakUsT0FBTztJQUNUO0lBQ0Esc0VBQXNFO0lBQ3RFLE1BQU1tRixtQkFDSnBGLFVBQVVvQyxnQkFBZ0IsSUFBSWlDLGNBQzFCbkUsZUFBV21GLGlCQUFpQixDQUFDaEIsYUFBYXJILHFCQUMxQztJQUVOLE1BQU15UCxlQUFlN08sd0JBQXdCNEg7SUFDN0MsSUFBSWtILG1CQUFtQjtJQUV2QixvSkFBb0o7SUFDcEpsSCxZQUFZNUIsT0FBTyxDQUFDLENBQUM2QixZQUFZa0g7UUFDL0IsTUFBTSxFQUFDakgsTUFBTSxFQUFFN0ksWUFBWSxFQUFDLEdBQUc0STtRQUMvQixNQUFNVSxrQkFBa0IxSCxhQUFhNUI7UUFDckMsTUFBTSxFQUFDa0gsTUFBTSxFQUFDLEdBQUcyQjtRQUNqQixJQUFJLENBQUMzQixRQUFRO1lBQ1g7UUFDRjtRQUNBLE1BQU00QixjQUFjNUIsT0FBTzZCLFlBQVksR0FBR1IsbUJBQW1CO1FBQzdELE1BQU11RCxXQUFXdEwsb0JBQW9CO1lBQ25DcUk7WUFDQWQ7WUFDQVA7WUFDQXNCO1lBQ0F6RixZQUFBQTtRQUNGO1FBQ0F5SSxTQUFTL0UsT0FBTyxDQUFDLENBQUNtQyxTQUFTNkc7WUFDekIsTUFBTXJHLGlCQUFpQkosa0JBQ25CekgscUJBQXFCN0IsZ0JBQWdCa0osU0FBU04sY0FDOUM7WUFDSixNQUFNb0gsaUJBQWlCMUcsa0JBQ25CeEgsa0JBQWtCOUIsY0FBY2tKLFNBQVNOLGNBQ3pDO1lBQ0ppSCxtQkFBbUI7WUFDbkIsTUFBTUksWUFBWUwsaUJBQWlCRSxlQUFlQyxpQkFBaUI7WUFDbkUsTUFBTUcsZ0JBQWdCbFAsaUJBQWlCO2dCQUFDa0k7Z0JBQVNOO1lBQVU7WUFDM0QsTUFBTWUsY0FBY2pKLHFCQUNsQjtnQkFBQ3dJO2dCQUFTTjtnQkFBWXZGLFlBQUFBO1lBQVUsR0FDaEMsNkRBQTZEO1lBQzdELG1CQUFtQjtZQUNuQnFHO1lBR0ZFLGVBQWU7Z0JBQ2J0SDtnQkFDQTRHO2dCQUNBTjtnQkFDQXZFO2dCQUNBbUQ7Z0JBQ0FEO2dCQUNBcEQ7Z0JBQ0E0RjtnQkFDQWtHO2dCQUNBQztnQkFDQXZHO2dCQUNBckY7Z0JBQ0FFO2dCQUNBa0Y7Z0JBQ0FzRztnQkFDQVA7WUFDRjtRQUNGO0lBQ0Y7SUFDQSxPQUFPSTtBQUNUO0FBRUEsZ0ZBQWdGO0FBQ2hGLFNBQVNqRyxlQUFldUcsT0FBTztJQUM3QixNQUFNLEVBQUM3TixLQUFLLEVBQUU0TixhQUFhLEVBQUUsR0FBR0UsTUFBSyxHQUFHRDtJQUN4QyxNQUFNLEVBQ0pqSCxPQUFPLEVBQ1BOLFVBQVUsRUFFVnRFLFNBQVMsRUFDVG9GLGNBQWMsRUFFZEcsVUFBVSxFQUVWakMsWUFBWSxFQUNadkQsT0FBTyxFQUNSLEdBQUcrTDtJQUNKLE1BQU1DLFlBQVksQ0FBQ3hHO0lBQ25CLE1BQU15RyxhQUFhMVA7SUFFbkIsTUFBTSxFQUFDMlAsVUFBVSxFQUFFcE4sU0FBUyxFQUFFMEUsTUFBTSxFQUFDLEdBQUd2RixNQUFNNkMsUUFBUTtJQUN0RCxNQUFNcUwsWUFBWS9QLGFBQWE4UCxZQUFZckg7SUFDM0MsTUFBTSxFQUFDdUgsUUFBUSxFQUFDLEdBQUdGLFVBQVUsQ0FBQ0MsVUFBVSxJQUFJLENBQUM7SUFDN0MsTUFBTUUsVUFBVXJOLGVBQVdzTixVQUFVLENBQUN6SDtJQUV0QyxNQUFNMEgsYUFDSixtV0FBbVc7SUFDbld6TixVQUFVdUMsYUFBYSxJQUFJbUwsbUNBQWtCLENBQUNqSSxXQUFXNUksWUFBWSxDQUFDO0lBQ3hFLElBQUk4UTtJQUNKLElBQUlGLGNBQWMvRyxZQU
15638FZO1FBQzVCLE9BQVFoQyxPQUFPQyxNQUFNLENBQUN6RCxRQUFRLEVBQUUyRDtZQUM5QixLQUFLcUcsZ0NBQWUsQ0FBQzBDLFVBQVU7WUFDL0IsS0FBSzFDLGdDQUFlLENBQUMyQyxzQkFBc0I7Z0JBQ3pDRixjQUFjbEo7Z0JBQ2Q7WUFDRjtnQkFDRWtKLGNBQWM7Z0JBQ2Q7UUFDSjtJQUNGO0lBRUEsTUFBTUcsU0FBU2hRLGtCQUNiaUksU0FDQXVILFVBQ0FQLGVBQ0F0SCxZQUNBdkYsZ0JBQ0EsNkRBQTZEO0lBQzdELG1CQUFtQjtJQUNuQnFHO0lBR0ZwSCxNQUFNeUMsUUFBUSxDQUNabU0sSUFBQUEsK0JBQWEsRUFBQztRQUNaWjtRQUNBRTtRQUNBUztRQUNBUDtRQUNBRTtRQUNBRTtRQUNBLEdBQUdWLElBQUk7SUFDVDtJQUdGZSxvQkFBb0JuTixTQUFTMkIsSUFBSSxFQUFFLHlCQUF5QjJLO0lBRTVELElBQUloTSxXQUFXO1FBQ2I4TSx3QkFBd0I5TyxPQUFPZ087UUFDL0I7SUFDRjtJQUVBM1AsYUFBYTtRQUNYMkI7UUFDQSwwRkFBMEY7UUFDMUZDLFFBQVEsQ0FBQyxFQUFDMk0sV0FBVyxFQUFDLEdBQUtBLFdBQVcsQ0FBQ29CLFdBQVc7UUFDbEQ1TixVQUFVMk87SUFDWjtJQUVBLElBQUloQixXQUFXO1FBQ2IvTixNQUFNeUMsUUFBUSxDQUFDdU0sSUFBQUEsaUNBQWUsRUFBQ2hCLFlBQVluTixVQUFVUSxJQUFJO0lBQzNEO0FBQ0Y7QUFFQSxTQUFTeUwsZUFBZUQsUUFBYSxFQUFFN00sS0FBNEI7SUFDakU2TyxvQkFBb0JuTixTQUFTMkIsSUFBSSxFQUFFLDBCQUEwQjtRQUMzRDJLLFlBQVluQixTQUFTOUcsRUFBRTtRQUN2Qm5ELE9BQU81QyxNQUFNNkMsUUFBUTtJQUN2QjtJQUNBLE1BQU0sRUFBQ3FMLFNBQVMsRUFBRTVILFVBQVUsRUFBQyxHQUFHdUc7SUFDaEMsTUFBTSxFQUFDb0IsVUFBVSxFQUFDLEdBQUdqTyxNQUFNNkMsUUFBUTtJQUNuQyxNQUFNLEVBQUNvTSxHQUFHLEVBQUViLE9BQU8sRUFBQyxHQUFHSCxVQUFVLENBQUNDLFVBQVUsSUFBSSxDQUFDO0lBQ2pELElBQUlFLFlBQVl0USxjQUFjO1FBQzVCa0IsbUJBQW1CaVEsS0FBSzNJLFlBQVl2RjtJQUN0QztJQUNBZixNQUFNeUMsUUFBUSxDQUFDeU0sSUFBQUEsaUNBQWUsRUFBQ3JDLFNBQVM5RyxFQUFFO0FBQzVDO0FBRUEsU0FBUzhJLG9CQUNQakksT0FBMkIsRUFDM0J1SSxTQUFpQixFQUNqQkMsTUFLSztJQUVMLE1BQU0zSixRQUFRL0QsU0FBUzJOLFdBQVcsQ0FBQztJQUNuQzVKLE1BQU02SixlQUFlLENBQUNILFdBQVcsTUFBTSxNQUFNQztJQUM3Qyw2REFBNkQ7SUFDN0R4SSxRQUFRakYsYUFBYSxDQUFDOEQ7QUFDeEI7QUFFQSxTQUFTcUosd0JBQ1A5TyxLQUE0QixFQUM1QmdPLFVBQWtCO0lBRWxCLE1BQU0sRUFBQzVKLFlBQVksRUFBQyxHQUFHcEUsTUFBTTZDLFFBQVE7SUFDckM3QyxNQUFNeUMsUUFBUSxDQUFDdU0sSUFBQUEsaUNBQWUsRUFBQ2hCLFlBQVk7SUFDM0NoTyxNQUFNeUMsUUFBUSxDQUFDNEIsSUFBQUEsdUNBQXFCLEVBQUNFLFlBQVlKLEdBQUcsSUFBSUM7SUFDeEQsTUFBTSxFQUFDd0ksV0FBVyxFQUFDLEdBQUc1TSxNQUFNNkMsUUFBUTtJQUNwQ2tNLHFCQUFxQm5DLFdBQVcsQ0FBQ29CLFdBQVcsRUFBRWhPO0FBQ2hEO0FBRUEsU0FBUytPLHFCQUFxQmxDLFFBQWEsRUFBRTdNLEtBQTRCO0lBQ3ZFLE1BQU0sRUFDSitDLE1BQU0sRUFDTndFLFVBQVUsRUFDVmdJLFFBQVEsRUFDUnJCLFNBQVMsRUFDVDVILFVBQVUsRUFDVjVJLFlBQVksRUFDWjhSLFVBQVUsRUFDVkMsT0FBTyxFQUNQaEksVUFBVSxFQUNWMUYsT0FBTyxFQUNQbUQsV0FBVyxFQUNYRCxhQUFhLEVBQ2JwRCxZQUFZLEVBQ1o4TCxTQUFTLEVBQ1QrQixTQUFTLEVBQ1R4TixPQUFPLEVBQ1BrRixjQUFjLEVBQ2YsR0FBR3lGO0lBRUoscUVBQXFFO0lBQ3JFLE1BQU0sRUFBQ3RILE1BQU0sRUFBRTFFLFNBQVMsRUFBQyxHQUFHYixNQUFNNkMsUUFBUTtJQUMxQyxNQUFNLEVBQUMyQyxNQUFNLEVBQUMsR0FBR0Q7SUFDakIsTUFBTUUsUUFBUUQsVUFBVUEsTUFBTSxDQUFDekQsUUFBUSxHQUFHeUQsTUFBTSxDQUFDekQsUUFBUSxHQUFHLENBQUM7SUFDN0QsZ0dBQWdHO0lBQ2hHLE1BQU0sRUFBQzhHLGVBQWV0RCxPQUFPNEUsY0FBYyxFQUFDLEdBQUcxRTtJQUMvQyxJQUFJLENBQUMxRyxzQkFBc0I4SixjQUFjaEksVUFBVUMsYUFBYSxHQUFHO1FBQ2pFO0lBQ0Y7SUFFQSxJQUFJeUcsY0FBY3hFLFVBQVV3TSxVQUFVO1FBQ3BDLElBQUlFLFdBQVlELGVBQWV6UixrQkFBa0J3UixVQUFXO1lBQzFELHFEQUFxRDtZQUNyRHZQLE1BQU15QyxRQUFRLENBQ1prTixJQUFBQSxxQ0FBbUIsRUFBQ3pCLFdBQVd4USxjQUFjK1IsU0FBU25KO1lBRXhELE1BQU0sRUFBQzJILFVBQVUsRUFBQyxHQUFHak8sTUFBTTZDLFFBQVE7WUFDbkMsTUFBTSxFQUFDb00sR0FBRyxFQUFFYixPQUFPLEVBQUVELFFBQVEsRUFBQyxHQUFHRixVQUFVLENBQUNDLFVBQVUsSUFBSSxDQUFDO1lBQzNELE1BQU0wQixjQUFjekIsWUFBWUEsUUFBUSxDQUFDelEsYUFBYTtZQUV0RCxrQ0FBa0M7WUFDbEMsSUFBSTBRLFlBQVl0USxnQkFBZ0J3QixhQUFhNUIsZUFBZTtnQkFDMURhLGtCQUNFMFEsS0FDQWQsVUFDQXlCLGFBQ0E3TixTQUNBdUUsWUFDQW9KLFdBQ0EzTyxnQkFDQXlPLFlBQ0FwSTtZQUVKO1FBQ0Y7UUFFQSxJQUFJbUksVUFBVTtZQUNaLElBQUk1QixXQUFXO2dCQUNiLHVXQUF1VztnQkFDdlcsTUFBTW5MLFVBQVV4RixpQkFBaUI7b0JBQy9CZ0Q7b0JBQ0ErQjtvQkFDQW1EO29CQUNBRDtvQkFDQXBEO29CQUNBNEYsWUFBWUEsYUFBYTtvQkFDekJ2RjtnQkFDRjtnQkFDQSxJQUFJQSxXQUFXLENBQUNNLFNBQVM7b0JBQ3ZCeEMsTUFBTXlDLFFBQVEsQ0FDWkMsSUFBQUEsMkNBQXlCLEVBQUM7d0JBQUNiO3dCQUFjYyxXQUFXO29CQUFLO2dCQUU3RDtZQUNGO1lBRUFtSyxlQUFlRCxVQUFVN007UUFDM0I7SUFDRjtBQUNGIn0=
15639
15640}),
15641"8955": (function (__unused_webpack_module, exports, __webpack_require__) {
15642"use strict";
15643/* eslint-env browser */ 
15644Object.defineProperty(exports, "__esModule", ({
15645    value: true
15646}));
15647Object.defineProperty(exports, "default", ({
15648    enumerable: true,
15649    get: function() {
15650        return _default;
15651    }
15652}));
15653const _flow = /*#__PURE__*/ _interop_require_default(__webpack_require__(5801));
15654const _get = /*#__PURE__*/ _interop_require_default(__webpack_require__(4738));
15655const _clamp = /*#__PURE__*/ _interop_require_default(__webpack_require__(3789));
15656const _sharedconstants = __webpack_require__(7087);
15657const _IX2VanillaEngine = __webpack_require__(1970);
15658const _IX2EngineActions = __webpack_require__(3946);
15659const _shared = __webpack_require__(9468);
15660function _interop_require_default(obj) {
15661    return obj && obj.__esModule ? obj : {
15662        default: obj
15663    };
15664}
15665const { MOUSE_CLICK, MOUSE_SECOND_CLICK, MOUSE_DOWN, MOUSE_UP, MOUSE_OVER, MOUSE_OUT, DROPDOWN_CLOSE, DROPDOWN_OPEN, SLIDER_ACTIVE, SLIDER_INACTIVE, TAB_ACTIVE, TAB_INACTIVE, NAVBAR_CLOSE, NAVBAR_OPEN, MOUSE_MOVE, PAGE_SCROLL_DOWN, SCROLL_INTO_VIEW, SCROLL_OUT_OF_V
15665IEW, PAGE_SCROLL_UP, SCROLLING_IN_VIEW, PAGE_FINISH, ECOMMERCE_CART_CLOSE, ECOMMERCE_CART_OPEN, PAGE_START, PAGE_SCROLL } = _sharedconstants.EventTypeConsts;
15666const COMPONENT_ACTIVE = 'COMPONENT_ACTIVE';
15667const COMPONENT_INACTIVE = 'COMPONENT_INACTIVE';
15668const { COLON_DELIMITER } = _sharedconstants.IX2EngineConstants;
15669const { getNamespacedParameterId } = _shared.IX2VanillaUtils;
15670const composableFilter = (predicate)=>(options)=>{
15671        if (typeof options === 'object' && predicate(options)) {
15672            return true;
15673        }
15674        return options;
15675    };
15676const isElement = composableFilter(({ element, nativeEvent })=>{
15677    return element === nativeEvent.target;
15678});
15679const containsElement = composableFilter(({ element, nativeEvent })=>{
15680    return element.contains(nativeEvent.target);
15681});
15682const isOrContainsElement = (0, _flow.default)([
15683    isElement,
15684    containsElement
15685]);
15686const getAutoStopEvent = (store, autoStopEventId)=>{
15687    if (autoStopEventId) {
15688        const { ixData } = store.getState();
15689        const { events } = ixData;
15690        const eventToStop = events[autoStopEventId];
15691        // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ readonly PAGE_START: "PAGE_START"; readonly PAGE_FINISH: "PAGE_FINISH"; }'.
15692        if (eventToStop && !AUTO_STOP_DISABLED_EVENTS[eventToStop.eventTypeId]) {
15693            return eventToStop;
15694        }
15695    }
15696    return null;
15697};
15698// @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type.
15699const hasAutoStopEvent = ({ store, event })=>{
15700    const { action: eventAction } = event;
15701    const { autoStopEventId } = eventAction.config;
15702    return Boolean(getAutoStopEvent(store, autoStopEventId));
15703};
15704// @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'eventStateKey' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type.
15705const actionGroupCreator = ({ store, event, element, eventStateKey }, state)=>{
15706    const { action: eventAction, id: eventId } = event;
15707    const { actionListId, autoStopEventId } = eventAction.config;
15708    const eventToStop = getAutoStopEvent(store, autoStopEventId);
15709    if (eventToStop) {
15710        (0, _IX2VanillaEngine.stopActionGroup)({
15711            store,
15712            eventId: autoStopEventId,
15713            eventTarget: element,
15714            eventStateKey: autoStopEventId + COLON_DELIMITER + eventStateKey.split(COLON_DELIMITER)[1],
15715            actionListId: (0, _get.default)(eventToStop, 'action.config.actionListId')
15716        });
15717    }
15718    (0, _IX2VanillaEngine.stopActionGroup)({
15719        store,
15720        eventId,
15721        eventTarget: element,
15722        eventStateKey,
15723        actionListId
15724    });
15725    // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'.
15726    (0, _IX2VanillaEngine.startActionGroup)({
15727        store,
15728        eventId,
15729        eventTarget: element,
15730        eventStateKey,
15731        actionListId
15732    });
15733    return state;
15734};
15735// @ts-expect-error - TS7006 - Parameter 'filter' implicitly has an 'any' type. | TS7006 - Parameter 'handler' implicitly has an 'any' type.
15736const withFilter = (filter, handler)=>(options, state)=>filter(options, state) === true ? handler(options, state) : state;
15737const baseActionGroupOptions = {
15738    handler: withFilter(isOrContainsElement, actionGroupCreator)
15739};
15740const baseActivityActionGroupOptions = {
15741    ...baseActionGroupOptions,
15742    types: [
15743        COMPONENT_ACTIVE,
15744        COMPONENT_INACTIVE
15745    ].join(' ')
15746};
15747const SCROLL_EVENT_TYPES = [
15748    {
15749        target: window,
15750        types: 'resize orientationchange',
15751        throttle: true
15752    },
15753    {
15754        target: document,
15755        types: 'scroll wheel readystatechange IX2_PAGE_UPDATE',
15756        throttle: true
15757    }
15758];
15759const MOUSE_OVER_OUT_TYPES = 'mouseover mouseout';
15760const baseScrollActionGroupOptions = {
15761    types: SCROLL_EVENT_TYPES
15762};
15763const AUTO_STOP_DISABLED_EVENTS = {
15764    PAGE_START,
15765    PAGE_FINISH
15766};
15767const getDocumentState = (()=>{
15768    const supportOffset = window.pageXOffset !== undefined;
15769    const isCSS1Compat = document.compatMode === 'CSS1Compat';
15770    const rootElement = isCSS1Compat ? document.documentElement : document.body;
15771    return ()=>({
15772            scrollLeft: supportOffset ? window.pageXOffset : rootElement.scrollLeft,
15773            scrollTop: supportOffset ? window.pageYOffset : rootElement.scrollTop,
15774            // required to remove elasticity in Safari scrolling.
15775            stiffScrollTop: (0, _clamp.default)(supportOffset ? window.pageYOffset : rootElement.scrollTop, 0, rootElement.scrollHeight - window.innerHeight),
15776            scrollWidth: rootElement.scrollWidth,
15777            scrollHeight: rootElement.scrollHeight,
15778            clientWidth: rootElement.clientWidth,
15779            clientHeight: rootElement.clientHeight,
15780            innerWidth: window.innerWidth,
15781            innerHeight: window.innerHeight
15782        });
15783})();
15784const areBoxesIntersecting = (a, b)=>!(a.left > b.right || a.right < b.left || a.top > b.bottom || a.bottom < b.top);
15785// @ts-expect-error - TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'nativeEvent' implicitly has an 'any' type.
15786const isElementHovered = ({ element, nativeEvent })=>{
15787    const { type, target, relatedTarget } = nativeEvent;
15788    const containsTarget = element.contains(target);
15789    if (type === 'mouseover' && containsTarget) {
15790        return true;
15791    }
15792    const containsRelated = element.contains(relatedTarget);
15793    if (type === 'mouseout' && containsTarget && containsRelated) {
15794        return true;
15795    }
15796    return false;
15797};
15798const isElementVisible = (options)=>{
15799    const { element, event: { config } } = options;
15800    const { clientWidth, clientHeight } = getDocumentState();
15801    const scrollOffsetValue = config.scrollOffsetValue;
15802    const scrollOffsetUnit = config.scrollOffsetUnit;
15803    const isPX = scrollOffsetUnit === 'PX';
15804    const offsetPadding = isPX ? scrollOffsetValue : clientHeight * (scrollOffsetValue || 0) / 100;
15805    return areBoxesIntersecting(element.getBoundingClientRect(), {
15806        left: 0,
15807        top: offsetPadding,
15808        right: clientWidth,
15809        bottom: clientHeight - offsetPadding
15810    });
15811};
15812const whenComponentActiveChange = // @ts-expect-error - TS7006 - Parameter 'handler' implicitly has an 'any' type.
15813(handler)=>(options, oldState)=>{
15814        const { type } = options.nativeEvent;
15815        // prettier-ignore
15816        const isActive = [
15817            COMPONENT_ACTIVE,
15818            COMPONENT_INACTIVE
15819        ].indexOf(type) !== -1 ? type === COMPONENT_ACTIVE : oldState.isActive;
15820        const newState = {
15821            ...oldState,
15822            isActive
15823        };
15824        if (!oldState || newState.isActive !== oldState.isActive) {
15825            return handler(options, newState) || newState;
15826        }
15827        return newState;
15828    };
15829const whenElementHoverChange = (handler)=>(options, oldState)=>{
15830        const newState = {
15831            elementHovered: isElementHovered(options)
15832        };
15833        if (oldState ? newState.elementHovered !== oldState.elementHovered : newState.elementHovered) {
15834            // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness.
15835            return handler(options, newState) || newState;
15836        }
15837        return newState;
15838    };
15839const whenElementVisibiltyChange = (handler)=>(options, oldState)=>{
15840        const newState = {
15841            ...oldState,
15842            elementVisible: isElementVisible(options)
15843        };
15844        if (oldState ? newState.elementVisible !== oldState.elementVisible : newState.elementVisible) {
15845            return handler(options, newState) || newState;
15846        }
15847        return newState;
15848    };
15849const whenScrollDirectionChange = // @ts-expect-error - TS7006 - Parameter 'handler' implicitly has an 'any' type.
15850(handler)=>(options, oldState = {})=>{
15851        const { stiffScrollTop: scrollTop, scrollHeight, innerHeight } = getDocumentState();
15852        const { event: { config, eventTypeId } } = options;
15853        const { scrollOffsetValue, scrollOffsetUnit } = config;
15854        const isPX = scrollOffsetUnit === 'PX';
15855        const scrollHeightBounds = scrollHeight - innerHeight;
15856        // percent top since innerHeight may change for mobile devices which also changes the scrollTop value.
15857        const percentTop = Number((scrollTop / scrollHeightBounds).toFixed(2));
15858        // no state change
15859        // @ts-expect-error - TS2339 - Property 'percentTop' does not exist on type '{}'.
15860        if (oldState && oldState.percentTop === percentTop) {
15861            return oldState;
15862        }
15863        const scrollTopPadding = (isPX ? scrollOffsetValue : innerHeight * (scrollOffsetValue || 0) / 100) / scrollHeightBounds;
15864        let scrollingDown;
15865        let scrollDirectionChanged;
15866        let anchorTop = 0;
15867        if (oldState) {
15868            // @ts-expect-error - TS2339 - Property 'percentTop' does not exist on type '{}'.
15869            scrollingDown = percentTop > oldState.percentTop;
15870            // @ts-expect-error - TS2339 - Property 'scrollingDown' does not exist on type '{}'.
15871            scrollDirectionChanged = oldState.scrollingDown !== scrollingDown;
15872            // @ts-expect-error - TS2339 - Property 'anchorTop' does not exist on type '{}'.
15873            anchorTop = scrollDirectionChanged ? percentTop : oldState.anchorTop;
15874        }
15875        const inBounds = eventTypeId === PAGE_SCROLL_DOWN ? percentTop >= anchorTop + scrollTopPadding : percentTop <= anchorTop - scrollTopPadding;
15876        const newState = {
15877            ...oldState,
15878            percentTop,
15879            inBounds,
15880            anchorTop,
15881            scrollingDown
15882        };
15883        if (oldState && inBounds && // @ts-expect-error - TS2339 - Property 'inBounds' does not exist on type '{}'.
15884        (scrollDirectionChanged || newState.inBounds !== oldState.inBounds)) {
15885            return handler(options, newState) || newState;
15886        }
15887        return newState;
15888    };
15889const pointIntersects = (point, rect)=>point.left > rect.left && point.left < rect.right && point.top > rect.top && point.top < rect.bottom;
15890const whenPageLoadFinish = (handler)=>(options, oldState)=>{
15891        const newState = {
15892            finished: document.readyState === 'complete'
15893        };
15894        if (newState.finished && !(oldState && oldState.finshed)) {
15895            // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
15896            handler(options);
15897        }
15898        return newState;
15899    };
15900const whenPageLoadStart = (handler)=>(options, oldState)=>{
15901        const newState = {
15902            started: true
15903        };
15904        if (!oldState) {
15905            // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
15906            handler(options);
15907        }
15908        return newState;
15909    };
15910const whenClickCountChange = (handler)=>(options, oldState = {
15911        clickCount: 0
15912    })=>{
15913        const newState = {
15914            clickCount: oldState.clickCount % 2 + 1
15915        };
15916        if (newState.clickCount !== oldState.clickCount) {
15917            // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness.
15918            return handler(options, newState) || newState;
15919        }
15920        return newState;
15921    };
15922const getComponentActiveOptions = (allowNestedChildrenEvents = true)=>({
15923        ...baseActivityActionGroupOptions,
15924        handler: withFilter(allowNestedChildrenEvents ? isOrContainsElement : isElement, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type.
15925        whenComponentActiveChange((options, state)=>{
15926            return state.isActive ? baseActionGroupOptions.handler(options, state) : state;
15927        }))
15928    });
15929const getComponentInactiveOptions = (allowNestedChildrenEvents = true)=>({
15930        ...baseActivityActionGroupOptions,
15931        handler: withFilter(allowNestedChildrenEvents ? isOrContainsElement : isElement, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type.
15932        whenComponentActiveChange((options, state)=>{
15933            return !state.isActive ? baseActionGroupOptions.handler(options, state) : state;
15934        }))
15935    });
15936const scrollIntoOutOfViewOptions = {
15937    ...baseScrollActionGroupOptions,
15938    handler: whenElementVisibiltyChange((options, state)=>{
15939        const { elementVisible } = state;
15940        const { event, store } = options;
15941        const { ixData } = store.getState();
15942        const { events } = ixData;
15943        // trigger the handler only once if only one of SCROLL_INTO or SCROLL_OUT_OF event types
15944        // are registered.
15945        if (!events[event.action.config.autoStopEventId] && state.triggered) {
15946            return state;
15947        }
15948        if (event.eventTypeId === SCROLL_INTO_VIEW === elementVisible) {
15949            // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
15950            actionGroupCreator(options);
15951            return {
15952                ...state,
15953                triggered: true
15954            };
15955        } else {
15956            return state;
15957        }
15958    })
15959};
15960const MOUSE_OUT_ROUND_THRESHOLD = 0.05;
15961const _default = {
15962    [SLIDER_ACTIVE]: getComponentActiveOptions(),
15963    [SLIDER_INACTIVE]: getComponentInactiveOptions(),
15964    [DROPDOWN_OPEN]: getComponentActiveOptions(),
15965    [DROPDOWN_CLOSE]: getComponentInactiveOptions(),
15966    // navbar elements may contain nested components in the menu. To prevent activity misfires, only listed for activity
15967    // events where the target is the navbar element, and ignore children that dispatch activitiy events.
15968    [NAVBAR_OPEN]: getComponentActiveOptions(false),
15969    [NAVBAR_CLOSE]: getComponentInactiveOptions(false),
15970    [TAB_ACTIVE]: getComponentActiveOptions(),
15971    [TAB_INACTIVE]: getComponentInactiveOptions(),
15972    [ECOMMERCE_CART_OPEN]: {
15973        types: 'ecommerce-cart-open',
15974        handler: withFilter(isOrContainsElement, actionGroupCreator)
15975    },
15976    [ECOMMERCE_CART_CLOSE]: {
15977        types: 'ecommerce-cart-close',
15978        handler: withFilter(isOrContainsElement, actionGroupCreator)
15979    },
15980    [MOUSE_CLICK]: {
15981        types: 'click',
15982        handler: withFilter(isOrContainsElement, whenClickCountChange((options, { clickCount })=>{
15983            if (hasAutoStopEvent(options)) {
15984                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
15985                clickCount === 1 && actionGroupCreator(options);
15986            } else {
15987                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
15988                actionGroupCreator(options);
15989            }
15990        }))
15991    },
15992    [MOUSE_SECOND_CLICK]: {
15993        types: 'click',
15994        handler: withFilter(isOrContainsElement, whenClickCountChange((options, { clickCount })=>{
15995            if (clickCount === 2) {
15996                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
15997                actionGroupCreator(options);
15998            }
15999        }))
16000    },
16001    [MOUSE_DOWN]: {
16002        ...baseActionGroupOptions,
16003        types: 'mousedown'
16004    },
16005    [MOUSE_UP]: {
16006        ...baseActionGroupOptions,
16007        types: 'mouseup'
16008    },
16009    [MOUSE_OVER]: {
16010        types: MOUSE_OVER_OUT_TYPES,
16011        handler: withFilter(isOrContainsElement, whenElementHoverChange((options, state)=>{
16012            if (state.elementHovered) {
16013                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
16014                actionGroupCreator(options);
16015            }
16016        }))
16017    },
16018    [MOUSE_OUT]: {
16019        types: MOUSE_OVER_OUT_TYPES,
16020        handler: withFilter(isOrContainsElement, whenElementHoverChange((options, state)=>{
16021            if (!state.elementHovered) {
16022                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
16023                actionGroupCreator(options);
16024            }
16025        }))
16026    },
16027    [MOUSE_MOVE]: {
16028        types: 'mousemove mouseout scroll',
16029        handler: (// eslint-disable-next-line @typescript-eslint/ban-ts-comment
16030        // @ts-expect-error
16031        { store, element, eventConfig, nativeEvent, eventStateKey }, state = {
16032            clientX: 0,
16033            clientY: 0,
16034            pageX: 0,
16035            pageY: 0
16036        })=>{
16037            const { basedOn, selectedAxis, continuousParameterGroupId, reverse, restingState = 0 } = eventConfig;
16038            const { clientX = state.clientX, clientY = state.clientY, pageX = state.pageX, pageY = state.pageY } = nativeEvent;
16039            const isXAxis = selectedAxis === 'X_AXIS';
16040            const isMouseOut = nativeEvent.type === 'mouseout';
16041            let value = restingState / 100;
16042            let namespacedParameterId = continuousParameterGroupId;
16043            let elementHovered = false;
16044            switch(basedOn){
16045                case _sharedconstants.EventBasedOn.VIEWPORT:
16046                    {
16047                        value = isXAxis ? Math.min(clientX, window.innerWidth) / window.innerWidth : Math.min(clientY, window.innerHeight) / window.innerHeight;
16048                        break;
16049                    }
16050                // @ts-expect-error - TS2339 - Property 'PAGE' does not exist on type '{ readonly ELEMENT: "ELEMENT"; readonly VIEWPORT: "VIEWPORT"; }'.
16051                case _sharedconstants.EventBasedOn.PAGE:
16052                    {
16053                        const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = getDocumentState();
16054                        value = isXAxis ? Math.min(scrollLeft + pageX, scrollWidth) / scrollWidth : Math.min(scrollTop + pageY, scrollHeight) / scrollHeight;
16055                        break;
16056                    }
16057                case _sharedconstants.EventBasedOn.ELEMENT:
16058                default:
16059                    {
16060                        namespacedParameterId = getNamespacedParameterId(eventStateKey, continuousParameterGroupId);
16061                        const isMouseEvent = nativeEvent.type.indexOf('mouse') === 0;
16062                        // Use isOrContainsElement for mouse events since they are fired from the target
16063                        if (isMouseEvent && isOrContainsElement({
16064                            element,
16065                            nativeEvent
16066                        }) !== true) {
16067                            break;
16068                        }
16069                        const rect = element.getBoundingClientRect();
16070                        const { left, top, width, height } = rect;
16071                        // Otherwise we'll need to calculate the mouse position from the previous handler state
16072                        // against the target element's rect
16073                        if (!isMouseEvent && !pointIntersects({
16074                            left: clientX,
16075                            top: clientY
16076                        }, rect)) {
16077                            break;
16078                        }
16079                        elementHovered = true;
16080                        value = isXAxis ? (clientX - left) / width : (clientY - top) / height;
16081                        break;
16082                    }
16083            }
16084            // cover case where the event is a mouse out, but the value is not quite at 100%
16085            if (isMouseOut && (value > 1 - MOUSE_OUT_ROUND_THRESHOLD || value < MOUSE_OUT_ROUND_THRESHOLD)) {
16086                value = Math.round(value);
16087            }
16088            // Only update based on element if the mouse is moving over or has just left the element
16089            if (basedOn !== _sharedconstants.EventBasedOn.ELEMENT || elementHovered || // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16090            // @ts-expect-error
16091            elementHovered !== state.elementHovered) {
16092                value = reverse ? 1 - value : value;
16093                store.dispatch((0, _IX2EngineActions.parameterChanged)(namespacedParameterId, value));
16094            }
16095            return {
16096                elementHovered,
16097                clientX,
16098                clientY,
16099                pageX,
16100                pageY
16101            };
16102        }
16103    },
16104    [PAGE_SCROLL]: {
16105        types: SCROLL_EVENT_TYPES,
16106        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16107        // @ts-expect-error
16108        handler: ({ store, eventConfig })=>{
16109            const { continuousParameterGroupId, reverse } = eventConfig;
16110            const { scrollTop, scrollHeight, clientHeight } = getDocumentState();
16111            let value = scrollTop / (scrollHeight - clientHeight);
16112            value = reverse ? 1 - value : value;
16113            store.dispatch((0, _IX2EngineActions.parameterChanged)(continuousParameterGroupId, value));
16114        }
16115    },
16116    [SCROLLING_IN_VIEW]: {
16117        types: SCROLL_EVENT_TYPES,
16118        handler: (// eslint-disable-next-line @typescript-eslint/ban-ts-comment
16119        // @ts-expect-error
16120        { element, store, eventConfig, eventStateKey }, state = {
16121            scrollPercent: 0
16122        })=>{
16123            const { scrollLeft, scrollTop, scrollWidth, scrollHeight, clientHeight: visibleHeight } = getDocumentState();
16124            const { basedOn, selectedAxis, continuousParameterGroupId, startsEntering, startsExiting, addEndOffset, addStartOffset, addOffsetValue = 0, endOffsetValue = 0 } = eventConfig;
16125            const isXAxis = selectedAxis === 'X_AXIS';
16126            if (basedOn === _sharedconstants.EventBasedOn.VIEWPORT) {
16127                const value = isXAxis ? scrollLeft / scrollWidth : scrollTop / scrollHeight;
16128                if (value !== state.scrollPercent) {
16129                    store.dispatch((0, _IX2EngineActions.parameterChanged)(continuousParameterGroupId, value));
16130                }
16131                return {
16132                    scrollPercent: value
16133                };
16134            } else {
16135                const namespacedParameterId = getNamespacedParameterId(eventStateKey, continuousParameterGroupId);
16136                const elementRect = element.getBoundingClientRect();
16137                let offsetStartPerc = (addStartOffset ? addOffsetValue : 0) / 100;
16138                let offsetEndPerc = (addEndOffset ? endOffsetValue : 0) / 100;
16139                // flip the offset percentages depending on start / exit type
16140                offsetStartPerc = startsEntering ? offsetStartPerc : 1 - offsetStartPerc;
16141                offsetEndPerc = startsExiting ? offsetEndPerc : 1 - offsetEndPerc;
16142                const offsetElementTop = elementRect.top + Math.min(elementRect.height * offsetStartPerc, visibleHeight);
16143                const offsetElementBottom = elementRect.top + elementRect.height * offsetEndPerc;
16144                const offsetHeight = offsetElementBottom - offsetElementTop;
16145                const fixedScrollHeight = Math.min(visibleHeight + offsetHeight, scrollHeight);
16146                const fixedScrollTop = Math.min(Math.max(0, visibleHeight - offsetElementTop), fixedScrollHeight);
16147                const fixedScrollPerc = fixedScrollTop / fixedScrollHeight;
16148                if (fixedScrollPerc !== state.scrollPercent) {
16149                    store.dispatch((0, _IX2EngineActions.parameterChanged)(namespacedParameterId, fixedScrollPerc));
16150                }
16151                return {
16152                    scrollPercent: fixedScrollPerc
16153                };
16154            }
16155        }
16156    },
16157    [SCROLL_INTO_VIEW]: scrollIntoOutOfViewOptions,
16158    [SCROLL_OUT_OF_VIEW]: scrollIntoOutOfViewOptions,
16159    [PAGE_SCROLL_DOWN]: {
16160        ...baseScrollActionGroupOptions,
16161        // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type.
16162        handler: whenScrollDirectionChange((options, state)=>{
16163            if (state.scrollingDown) {
16164                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
16165                actionGroupCreator(options);
16166            }
16167        })
16168    },
16169    [PAGE_SCROLL_UP]: {
16170        ...baseScrollActionGroupOptions,
16171        // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type.
16172        handler: whenScrollDirectionChange((options, state)=>{
16173            if (!state.scrollingDown) {
16174                // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
16175                actionGroupCreator(options);
16176            }
16177        })
16178    },
16179    [PAGE_FINISH]: {
16180        types: 'readystatechange IX2_PAGE_UPDATE',
16181        handler: withFilter(isElement, whenPageLoadFinish(actionGroupCreator))
16182    },
16183    [PAGE_START]: {
16184        types: 'readystatechange IX2_PAGE_UPDATE',
16185        handler: withFilter(isElement, whenPageLoadStart(actionGroupCreator))
16186    }
16187};
16188
16189//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFFdmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5pbXBvcnQgZmxvdyBmcm9tICdsb2Rhc2gvZmxvdyc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGNsYW1wIGZyb20gJ2xvZGFzaC9jbGFtcCc7XG5cbmltcG9ydCB7XG4gIEV2ZW50VHlwZUNvbnN0cyxcbiAgRXZlbnRCYXNlZE9uLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtzdG9wQWN0aW9uR3JvdXAsIHN0YXJ0QWN0aW9uR3JvdXB9IGZyb20gJy4vSVgyVmFuaWxsYUVuZ2luZSc7XG5pbXBvcnQge3BhcmFtZXRlckNoYW5nZWR9IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5pbXBvcnQge0lYMlZhbmlsbGFVdGlsc30gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZCc7XG5cbmNvbnN0IHtcbiAgTU9VU0VfQ0xJQ0ssXG4gIE1PVVNFX1NFQ09ORF9DTElDSyxcbiAgTU9VU0VfRE9XTixcbiAgTU9VU0VfVVAsXG4gIE1PVVNFX09WRVIsXG4gIE1PVVNFX09VVCxcbiAgRFJPUERPV05fQ0xPU0UsXG4gIERST1BET1dOX09QRU4sXG4gIFNMSURFUl9BQ1RJVkUsXG4gIFNMSURFUl9JTkFDVElWRSxcbiAgVEFCX0FDVElWRSxcbiAgVEFCX0lOQUNUSVZFLFxuICBOQVZCQVJfQ0xPU0UsXG4gIE5BVkJBUl9PUEVOLFxuICBNT1VTRV9NT1ZFLFxuICBQQUdFX1NDUk9MTF9ET1dOLFxuICBTQ1JPTExfSU5UT19WSUVXLFxuICBTQ1JPTExfT1VUX09GX1ZJRVcsXG4gIFBBR0VfU0NST0xMX1VQLFxuICBTQ1JPTExJTkdfSU5fVklFVyxcbiAgUEFHRV9GSU5JU0gsXG4gIEVDT01NRVJDRV9DQVJUX0NMT1NFLFxuICBFQ09NTUVSQ0VfQ0FSVF9PUEVOLFxuICBQQUdFX1NUQVJULFxuICBQQUdFX1NDUk9MTCxcbn0gPSBFdmVudFR5cGVDb25zdHM7XG5cbmNvbnN0IENPTVBPTkVOVF9BQ1RJVkUgPSAnQ09NUE9ORU5UX0FDVElWRSc7XG5jb25zdCBDT01QT05FTlRfSU5BQ1RJVkUgPSAnQ09NUE9ORU5UX0lOQUNUSVZFJztcblxuY29uc3Qge0NPTE9OX0RFTElNSVRFUn0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5cbmNvbnN0IHtnZXROYW1lc3BhY2VkUGFyYW1ldGVySWR9ID0gSVgyVmFuaWxsYVV0aWxzO1xuXG5jb25zdCBjb21wb3NhYmxlRmlsdGVyID1cbiAgKHByZWRpY2F0ZTogKChhcmcxPzogYW55KSA9PiBhbnkpIHwgKChhcmcxPzogYW55KSA9PiBib29sZWFuKSkgPT5cbiAgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgcHJlZGljYXRlKG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG5cbmNvbnN0IGlzRWxlbWVudCA9IGNvbXBvc2FibGVGaWx0ZXIoKHtlbGVtZW50LCBuYXRpdmVFdmVudH0pID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQgPT09IG5hdGl2ZUV2ZW50LnRhcmdldDtcbn0pO1xuXG5jb25zdCBjb250YWluc0VsZW1lbnQgPSBjb21wb3NhYmxlRmlsdGVyKCh7ZWxlbWVudCwgbmF0aXZlRXZlbnR9KSA9PiB7XG4gIHJldHVybiBlbGVtZW50LmNvbnRhaW5zKG5hdGl2ZUV2ZW50LnRhcmdldCk7XG59KTtcblxuY29uc3QgaXNPckNvbnRhaW5zRWxlbWVudCA9IGZsb3coW2lzRWxlbWVudCwgY29udGFpbnNFbGVtZW50XSk7XG5cbmNvbnN0IGdldEF1dG9TdG9wRXZlbnQgPSAoc3RvcmU6IGFueSwgYXV0b1N0b3BFdmVudElkOiBhbnkpID0+IHtcbiAgaWYgKGF1dG9TdG9wRXZlbnRJZCkge1xuICAgIGNvbnN0IHtpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcbiAgICBjb25zdCBldmVudFRvU3RvcCA9IGV2ZW50c1thdXRvU3RvcEV2ZW50SWRdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7IHJlYWRvbmx5IFBBR0VfU1RBUlQ6IFwiUEFHRV9TVEFSVFwiOyByZWFkb25seSBQQUdFX0ZJTklTSDogXCJQQUdFX0ZJTklTSFwiOyB9Jy5cbiAgICBpZiAoZXZlbnRUb1N0b3AgJiYgIUFVVE9fU1RPUF9ESVNBQkxFRF9FVkVOVFNbZXZlbnRUb1N0b3AuZXZlbnRUeXBlSWRdKSB7XG4gICAgICByZXR1cm4gZXZlbnRUb1N0b3A7XG4gICAgfVxuICB9XG4gI
16189HJldHVybiBudWxsO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IGhhc0F1dG9TdG9wRXZlbnQgPSAoe3N0b3JlLCBldmVudH0pID0+IHtcbiAgY29uc3Qge2FjdGlvbjogZXZlbnRBY3Rpb259ID0gZXZlbnQ7XG4gIGNvbnN0IHthdXRvU3RvcEV2ZW50SWR9ID0gZXZlbnRBY3Rpb24uY29uZmlnO1xuICByZXR1cm4gQm9vbGVhbihnZXRBdXRvU3RvcEV2ZW50KHN0b3JlLCBhdXRvU3RvcEV2ZW50SWQpKTtcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3N0b3JlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRTdGF0ZUtleScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3N0YXRlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgYWN0aW9uR3JvdXBDcmVhdG9yID0gKHtzdG9yZSwgZXZlbnQsIGVsZW1lbnQsIGV2ZW50U3RhdGVLZXl9LCBzdGF0ZSkgPT4ge1xuICBjb25zdCB7YWN0aW9uOiBldmVudEFjdGlvbiwgaWQ6IGV2ZW50SWR9ID0gZXZlbnQ7XG4gIGNvbnN0IHthY3Rpb25MaXN0SWQsIGF1dG9TdG9wRXZlbnRJZH0gPSBldmVudEFjdGlvbi5jb25maWc7XG4gIGNvbnN0IGV2ZW50VG9TdG9wID0gZ2V0QXV0b1N0b3BFdmVudChzdG9yZSwgYXV0b1N0b3BFdmVudElkKTtcbiAgaWYgKGV2ZW50VG9TdG9wKSB7XG4gICAgc3RvcEFjdGlvbkdyb3VwKHtcbiAgICAgIHN0b3JlLFxuICAgICAgZXZlbnRJZDogYXV0b1N0b3BFdmVudElkLFxuICAgICAgZXZlbnRUYXJnZXQ6IGVsZW1lbnQsXG4gICAgICBldmVudFN0YXRlS2V5OlxuICAgICAgICBhdXRvU3RvcEV2ZW50SWQgK1xuICAgICAgICBDT0xPTl9ERUxJTUlURVIgK1xuICAgICAgICBldmVudFN0YXRlS2V5LnNwbGl0KENPTE9OX0RFTElNSVRFUilbMV0sXG4gICAgICBhY3Rpb25MaXN0SWQ6IGdldChldmVudFRvU3RvcCwgJ2FjdGlvbi5jb25maWcuYWN0aW9uTGlzdElkJyksXG4gICAgfSk7XG4gIH1cbiAgc3RvcEFjdGlvbkdyb3VwKHtcbiAgICBzdG9yZSxcbiAgICBldmVudElkLFxuICAgIGV2ZW50VGFyZ2V0OiBlbGVtZW50LFxuICAgIGV2ZW50U3RhdGVLZXksXG4gICAgYWN0aW9uTGlzdElkLFxuICB9KTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3sgc3RvcmU6IGFueTsgZXZlbnRJZDogYW55OyBldmVudFRhcmdldDogYW55OyBldmVudFN0YXRlS2V5OiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGdyb3VwSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nLlxuICBzdGFydEFjdGlvbkdyb3VwKHtcbiAgICBzdG9yZSxcbiAgICBldmVudElkLFxuICAgIGV2ZW50VGFyZ2V0OiBlbGVtZW50LFxuICAgIGV2ZW50U3RhdGVLZXksXG4gICAgYWN0aW9uTGlzdElkLFxuICB9KTtcbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnaGFuZGxlcicgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IHdpdGhGaWx0ZXIgPSAoZmlsdGVyLCBoYW5kbGVyKSA9PiAob3B0aW9uczogYW55LCBzdGF0ZTogYW55KSA9PlxuICBmaWx0ZXIob3B0aW9ucywgc3RhdGUpID09PSB0cnVlID8gaGFuZGxlcihvcHRpb25zLCBzdGF0ZSkgOiBzdGF0ZTtcblxuY29uc3QgYmFzZUFjdGlvbkdyb3VwT3B0aW9ucyA9IHtcbiAgaGFuZGxlcjogd2l0aEZpbHRlcihpc09yQ29udGFpbnNFbGVtZW50LCBhY3Rpb25Hcm91cENyZWF0b3IpLFxufSBhcyBjb25zdDtcblxuY29uc3QgYmFzZUFjdGl2aXR5QWN0aW9uR3JvdXBPcHRpb25zID0ge1xuICAuLi5iYXNlQWN0aW9uR3JvdXBPcHRpb25zLFxuICB0eXBlczogW0NPTVBPTkVOVF9BQ1RJVkUsIENPTVBPTkVOVF9JTkFDVElWRV0uam9pbignICcpLFxufSBhcyBjb25zdDtcblxuY29uc3QgU0NST0xMX0VWRU5UX1RZUEVTID0gW1xuICB7dGFyZ2V0OiB3aW5kb3csIHR5cGVzOiAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlJywgdGhyb3R0bGU6IHRydWV9LFxuICB7XG4gICAgdGFyZ2V0OiBkb2N1bWVudCxcbiAgICB0eXBlczogJ3Njcm9sbCB3aGVlbCByZWFkeXN0YXRlY2hhbmdlIElYMl9QQUdFX1VQREFURScsXG4gICAgdGhyb3R0bGU6IHRydWUsXG4gIH0sXG5dO1xuXG5jb25zdCBNT1VTRV9PVkVSX09VVF9UWVBFUyA9ICdtb3VzZW92ZXIgbW91c2VvdXQnO1xuXG5jb25zdCBiYXNlU2Nyb2xsQWN0aW9uR3JvdXBPcHRpb25zID0ge1xuICB0eXBlczogU0NST0xMX0VWRU5UX1RZUEVTLFxufSBhcyBjb25zdDtcblxuY29uc3QgQVVUT19TVE9QX0RJU0FCTEVEX0VWRU5UUyA9IHtcbiAgUEFHRV9TVEFSVCxcbiAgUEFHRV9GSU5JU0gsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBnZXREb2N1bWVudFN0YXRlID0gKCgpID0+IHtcbiAgY29uc3Qgc3VwcG9ydE9mZnNldCA9IHdpbmRvdy5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBpc0NTUzFDb21wYXQgPSBkb2N1bWVudC5jb21wYXRNb2RlID09PSAnQ1NTMUNvbXBhdCc7XG4gIGNvbnN0IHJvb3RFbGVtZW50ID0gaXNDU1MxQ29tcGF0ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuYm9keTtcbiAgcmV0dXJuICgpID0+ICh7XG4gICAgc2Nyb2xsTGVmdDogc3VwcG9ydE9mZnNldCA/IHdpbmRvdy5wYWdlWE9mZnNldCA6IHJvb3RFbGVtZW50LnNjcm9sbExlZnQsXG5cbiAgICBzY3JvbGxUb3A6IHN1cHBvcnRPZmZzZXQgPyB3aW5kb3cucGFnZVlPZmZzZXQgOiByb290RWxlbWVudC5zY3JvbGxUb3AsXG5cbiAgICAvLyByZXF1aXJlZCB0byByZW1vdmUgZWxhc3RpY2l0eSBpbiBTYWZhcmkgc2Nyb2xsaW5nLlxuICAgIHN0aWZmU2Nyb2xsVG9wOiBjbGFtcChcbiAgICAgIHN1cHBvcnRPZmZzZXQgPyB3aW5kb3cucGFnZVlPZmZzZXQgOiByb290RWxlbWVudC5zY3JvbGxUb3AsXG4gICAgICAwLFxuXG4gICAgICByb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICApLFxuXG4gICAgc2Nyb2xsV2lkdGg6IHJvb3RFbGVtZW50LnNjcm9sbFdpZHR
16189oLFxuXG4gICAgc2Nyb2xsSGVpZ2h0OiByb290RWxlbWVudC5zY3JvbGxIZWlnaHQsXG5cbiAgICBjbGllbnRXaWR0aDogcm9vdEVsZW1lbnQuY2xpZW50V2lkdGgsXG5cbiAgICBjbGllbnRIZWlnaHQ6IHJvb3RFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICBpbm5lcldpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICBpbm5lckhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICB9KTtcbn0pKCk7XG5cbmNvbnN0IGFyZUJveGVzSW50ZXJzZWN0aW5nID0gKFxuICBhOiBhbnksXG4gIGI6IHtcbiAgICBib3R0b206IG51bWJlcjtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgcmlnaHQ6IG51bWJlcjtcbiAgICB0b3A6IGFueSB8IG51bWJlcjtcbiAgfVxuKSA9PlxuICAhKFxuICAgIGEubGVmdCA+IGIucmlnaHQgfHxcbiAgICBhLnJpZ2h0IDwgYi5sZWZ0IHx8XG4gICAgYS50b3AgPiBiLmJvdHRvbSB8fFxuICAgIGEuYm90dG9tIDwgYi50b3BcbiAgKTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ25hdGl2ZUV2ZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgaXNFbGVtZW50SG92ZXJlZCA9ICh7ZWxlbWVudCwgbmF0aXZlRXZlbnR9KSA9PiB7XG4gIGNvbnN0IHt0eXBlLCB0YXJnZXQsIHJlbGF0ZWRUYXJnZXR9ID0gbmF0aXZlRXZlbnQ7XG4gIGNvbnN0IGNvbnRhaW5zVGFyZ2V0ID0gZWxlbWVudC5jb250YWlucyh0YXJnZXQpO1xuICBpZiAodHlwZSA9PT0gJ21vdXNlb3ZlcicgJiYgY29udGFpbnNUYXJnZXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBjb250YWluc1JlbGF0ZWQgPSBlbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICBpZiAodHlwZSA9PT0gJ21vdXNlb3V0JyAmJiBjb250YWluc1RhcmdldCAmJiBjb250YWluc1JlbGF0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc0VsZW1lbnRWaXNpYmxlID0gKG9wdGlvbnM6IGFueSkgPT4ge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBldmVudDoge2NvbmZpZ30sXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHtjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0fSA9IGdldERvY3VtZW50U3RhdGUoKTtcbiAgY29uc3Qgc2Nyb2xsT2Zmc2V0VmFsdWUgPSBjb25maWcuc2Nyb2xsT2Zmc2V0VmFsdWU7XG4gIGNvbnN0IHNjcm9sbE9mZnNldFVuaXQgPSBjb25maWcuc2Nyb2xsT2Zmc2V0VW5pdDtcbiAgY29uc3QgaXNQWCA9IHNjcm9sbE9mZnNldFVuaXQgPT09ICdQWCc7XG5cbiAgY29uc3Qgb2Zmc2V0UGFkZGluZyA9IGlzUFhcbiAgICA/IHNjcm9sbE9mZnNldFZhbHVlXG4gICAgOiAoY2xpZW50SGVpZ2h0ICogKHNjcm9sbE9mZnNldFZhbHVlIHx8IDApKSAvIDEwMDtcblxuICByZXR1cm4gYXJlQm94ZXNJbnRlcnNlY3RpbmcoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiBvZmZzZXRQYWRkaW5nLFxuICAgIHJpZ2h0OiBjbGllbnRXaWR0aCxcbiAgICBib3R0b206IGNsaWVudEhlaWdodCAtIG9mZnNldFBhZGRpbmcsXG4gIH0pO1xufTtcblxuY29uc3Qgd2hlbkNvbXBvbmVudEFjdGl2ZUNoYW5nZSA9XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2hhbmRsZXInIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIChoYW5kbGVyKSA9PiAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3Qge3R5cGV9ID0gb3B0aW9ucy5uYXRpdmVFdmVudDtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBpc0FjdGl2ZSA9IFtDT01QT05FTlRfQUNUSVZFLCBDT01QT05FTlRfSU5BQ1RJVkVdLmluZGV4T2YodHlwZSkgIT09IC0xXG4gICAgPyB0eXBlID09PSBDT01QT05FTlRfQUNUSVZFXG4gICAgOiBvbGRTdGF0ZS5pc0FjdGl2ZTtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgLi4ub2xkU3RhdGUsXG4gICAgICBpc0FjdGl2ZSxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgaWYgKCFvbGRTdGF0ZSB8fCBuZXdTdGF0ZS5pc0FjdGl2ZSAhPT0gb2xkU3RhdGUuaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVyKG9wdGlvbnMsIG5ld1N0YXRlKSB8fCBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5FbGVtZW50SG92ZXJDaGFuZ2UgPVxuICAoXG4gICAgaGFuZGxlcjogKFxuICAgICAgb3B0aW9uczogYW55LFxuICAgICAgc3RhdGU6IHtcbiAgICAgICAgZWxlbWVudEhvdmVyZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgKSA9PiB2b2lkXG4gICkgPT5cbiAgKG9wdGlvbnM6IGFueSwgb2xkU3RhdGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWxlbWVudEhvdmVyZWQ6IGlzRWxlbWVudEhvdmVyZWQob3B0aW9ucyksXG4gICAgfSBhcyBjb25zdDtcbiAgICBpZiAoXG4gICAgICBvbGRTdGF0ZVxuICAgICAgICA/IG5ld1N0YXRlLmVsZW1lbnRIb3ZlcmVkICE9PSBvbGRTdGF0ZS5lbGVtZW50SG92ZXJlZFxuICAgICAgICA6IG5ld1N0YXRlLmVsZW1lbnRIb3ZlcmVkXG4gICAgKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxMzQ1IC0gQW4gZXhwcmVzc2lvbiBvZiB0eXBlICd2b2lkJyBjYW5ub3QgYmUgdGVzdGVkIGZvciB0cnV0aGluZXNzLlxuICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5FbGVtZW50VmlzaWJpbHR5Q2hhbmdlID1cbiAgKGhhbmRsZXI6IChvcHRpb25zPzogYW55LCBzdGF0ZT86IGFueSkgPT4gYW55KSA9PlxuICAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5vbGRTdGF0ZSxcbiAgICAgIGVsZW1lbnRWaXNpYmxlOiBpc0VsZW1lbnRWaXNpYmxlKG9wdGlvbnMpLFxuICAgIH0gYXMgY29uc3Q7XG4gICAgaWYgKFxuICAgICAgb2xkU3RhdGVcbiAgICAgICAgPyBuZXdTdGF0ZS5lbGVtZW50VmlzaWJsZSAhPT0gb2xkU3RhdGUuZWxlbWVudFZpc2libGVcbiAgICAgICAgOiBuZXdTdGF0ZS5lbGVtZW50VmlzaWJsZVxuICAgICkge1xuICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5TY3JvbGxEaXJlY3Rpb25DaGFuZ2UgPVxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdoYW5kbGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuXG5cbiAgICAoaGFuZGxlcikgPT5cbiAgICAob3B0aW9uczogYW55LCBvbGRTdGF0ZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgI
16189HN0aWZmU2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgaW5uZXJIZWlnaHQsXG4gICAgICB9ID0gZ2V0RG9jdW1lbnRTdGF0ZSgpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBldmVudDoge2NvbmZpZywgZXZlbnRUeXBlSWR9LFxuICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCB7c2Nyb2xsT2Zmc2V0VmFsdWUsIHNjcm9sbE9mZnNldFVuaXR9ID0gY29uZmlnO1xuICAgICAgY29uc3QgaXNQWCA9IHNjcm9sbE9mZnNldFVuaXQgPT09ICdQWCc7XG5cbiAgICAgIGNvbnN0IHNjcm9sbEhlaWdodEJvdW5kcyA9IHNjcm9sbEhlaWdodCAtIGlubmVySGVpZ2h0O1xuICAgICAgLy8gcGVyY2VudCB0b3Agc2luY2UgaW5uZXJIZWlnaHQgbWF5IGNoYW5nZSBmb3IgbW9iaWxlIGRldmljZXMgd2hpY2ggYWxzbyBjaGFuZ2VzIHRoZSBzY3JvbGxUb3AgdmFsdWUuXG4gICAgICBjb25zdCBwZXJjZW50VG9wID0gTnVtYmVyKChzY3JvbGxUb3AgLyBzY3JvbGxIZWlnaHRCb3VuZHMpLnRvRml4ZWQoMikpO1xuXG4gICAgICAvLyBubyBzdGF0ZSBjaGFuZ2VcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAncGVyY2VudFRvcCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLlxuICAgICAgaWYgKG9sZFN0YXRlICYmIG9sZFN0YXRlLnBlcmNlbnRUb3AgPT09IHBlcmNlbnRUb3ApIHtcbiAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY3JvbGxUb3BQYWRkaW5nID1cbiAgICAgICAgKGlzUFhcbiAgICAgICAgICA/IHNjcm9sbE9mZnNldFZhbHVlXG4gICAgICAgICAgOiAoaW5uZXJIZWlnaHQgKiAoc2Nyb2xsT2Zmc2V0VmFsdWUgfHwgMCkpIC8gMTAwKSAvXG4gICAgICAgIHNjcm9sbEhlaWdodEJvdW5kcztcblxuICAgICAgbGV0IHNjcm9sbGluZ0Rvd247XG4gICAgICBsZXQgc2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZDtcbiAgICAgIGxldCBhbmNob3JUb3AgPSAwO1xuXG4gICAgICBpZiAob2xkU3RhdGUpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdwZXJjZW50VG9wJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gICAgICAgIHNjcm9sbGluZ0Rvd24gPSBwZXJjZW50VG9wID4gb2xkU3RhdGUucGVyY2VudFRvcDtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdzY3JvbGxpbmdEb3duJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gICAgICAgIHNjcm9sbERpcmVjdGlvbkNoYW5nZWQgPSBvbGRTdGF0ZS5zY3JvbGxpbmdEb3duICE9PSBzY3JvbGxpbmdEb3duO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ2FuY2hvclRvcCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLlxuICAgICAgICBhbmNob3JUb3AgPSBzY3JvbGxEaXJlY3Rpb25DaGFuZ2VkID8gcGVyY2VudFRvcCA6IG9sZFN0YXRlLmFuY2hvclRvcDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5Cb3VuZHMgPVxuICAgICAgICBldmVudFR5cGVJZCA9PT0gUEFHRV9TQ1JPTExfRE9XTlxuICAgICAgICAgID8gcGVyY2VudFRvcCA+PSBhbmNob3JUb3AgKyBzY3JvbGxUb3BQYWRkaW5nXG4gICAgICAgICAgOiBwZXJjZW50VG9wIDw9IGFuY2hvclRvcCAtIHNjcm9sbFRvcFBhZGRpbmc7XG5cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5vbGRTdGF0ZSxcbiAgICAgICAgcGVyY2VudFRvcCxcbiAgICAgICAgaW5Cb3VuZHMsXG4gICAgICAgIGFuY2hvclRvcCxcbiAgICAgICAgc2Nyb2xsaW5nRG93bixcbiAgICAgIH0gYXMgY29uc3Q7XG5cbiAgICAgIGlmIChcbiAgICAgICAgb2xkU3RhdGUgJiZcbiAgICAgICAgaW5Cb3VuZHMgJiZcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdpbkJvdW5kcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLlxuICAgICAgICAoc2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZCB8fCBuZXdTdGF0ZS5pbkJvdW5kcyAhPT0gb2xkU3RhdGUuaW5Cb3VuZHMpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfTtcblxuY29uc3QgcG9pbnRJbnRlcnNlY3RzID0gKFxuICBwb2ludDoge1xuICAgIGxlZnQ6IGFueSB8IG51bWJlcjtcbiAgICB0b3A6IGFueSB8IG51bWJlcjtcbiAgfSxcbiAgcmVjdDogYW55XG4pID0+XG4gIHBvaW50LmxlZnQgPiByZWN0LmxlZnQgJiZcbiAgcG9pbnQubGVmdCA8IHJlY3QucmlnaHQgJiZcbiAgcG9pbnQudG9wID4gcmVjdC50b3AgJiZcbiAgcG9pbnQudG9wIDwgcmVjdC5ib3R0b207XG5cbmNvbnN0IHdoZW5QYWdlTG9hZEZpbmlzaCA9XG4gIChoYW5kbGVyOiAoYXJnMTogYW55LCBzdGF0ZTogdW5kZWZpbmVkIHwgYW55KSA9PiB1bmRlZmluZWQgfCBhbnkpID0+XG4gIChvcHRpb25zOiBhbnksIG9sZFN0YXRlOiBhbnkpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGZpbmlzaGVkOiBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnLFxuICAgIH0gYXMgY29uc3Q7XG4gICAgaWYgKG5ld1N0YXRlLmZpbmlzaGVkICYmICEob2xkU3RhdGUgJiYgb2xkU3RhdGUuZmluc2hlZCkpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgaGFuZGxlcihvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9O1xuXG5jb25zdCB3aGVuUGFnZUxvYWRTdGFydCA9XG4gIChoYW5kbGVyOiAoYXJnMTogYW55LCBzdGF0ZTogdW5kZWZpbmVkIHwgYW55KSA9PiB1bmRlZmluZWQgfCBhbnkpID0+XG4gIChvcHRpb25zOiBhbnksIG9sZFN0YXRlOiBhbnkpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHN0YXJ0ZWQ6IHRydWUsXG4gICAgfSBhcyBjb25zdDtcbiAgICBpZiAoIW9sZFN0YXRl
16189KSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgIGhhbmRsZXIob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfTtcblxuY29uc3Qgd2hlbkNsaWNrQ291bnRDaGFuZ2UgPVxuICAoXG4gICAgaGFuZGxlcjogKFxuICAgICAgb3B0aW9uczogYW55LFxuICAgICAgYXJnMjoge1xuICAgICAgICBjbGlja0NvdW50OiBudW1iZXI7XG4gICAgICB9XG4gICAgKSA9PiB2b2lkXG4gICkgPT5cbiAgKG9wdGlvbnM6IGFueSwgb2xkU3RhdGUgPSB7Y2xpY2tDb3VudDogMH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGNsaWNrQ291bnQ6IChvbGRTdGF0ZS5jbGlja0NvdW50ICUgMikgKyAxLFxuICAgIH0gYXMgY29uc3Q7XG4gICAgaWYgKG5ld1N0YXRlLmNsaWNrQ291bnQgIT09IG9sZFN0YXRlLmNsaWNrQ291bnQpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzEzNDUgLSBBbiBleHByZXNzaW9uIG9mIHR5cGUgJ3ZvaWQnIGNhbm5vdCBiZSB0ZXN0ZWQgZm9yIHRydXRoaW5lc3MuXG4gICAgICByZXR1cm4gaGFuZGxlcihvcHRpb25zLCBuZXdTdGF0ZSkgfHwgbmV3U3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfTtcblxuY29uc3QgZ2V0Q29tcG9uZW50QWN0aXZlT3B0aW9ucyA9IChhbGxvd05lc3RlZENoaWxkcmVuRXZlbnRzID0gdHJ1ZSkgPT4gKHtcbiAgLi4uYmFzZUFjdGl2aXR5QWN0aW9uR3JvdXBPcHRpb25zLFxuICBoYW5kbGVyOiB3aXRoRmlsdGVyKFxuICAgIGFsbG93TmVzdGVkQ2hpbGRyZW5FdmVudHMgP
16189yBpc09yQ29udGFpbnNFbGVtZW50IDogaXNFbGVtZW50LFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ29wdGlvbnMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdzdGF0ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICB3aGVuQ29tcG9uZW50QWN0aXZlQ2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHN0YXRlLmlzQWN0aXZlXG4gICAgICAgID8gYmFzZUFjdGlvbkdyb3VwT3B0aW9ucy5oYW5kbGVyKG9wdGlvbnMsIHN0YXRlKVxuICAgICAgICA6IHN0YXRlO1xuICAgIH0pXG4gICksXG59KTtcblxuY29uc3QgZ2V0Q29tcG9uZW50SW5hY3RpdmVPcHRpb25zID0gKGFsbG93TmVzdGVkQ2hpbGRyZW5FdmVudHMgPSB0cnVlKSA9PiAoe1xuICAuLi5iYXNlQWN0aXZpdHlBY3Rpb25Hcm91cE9wdGlvbnMsXG4gIGhhbmRsZXI6IHdpdGhGaWx0ZXIoXG4gICAgYWxsb3dOZXN0ZWRDaGlsZHJlbkV2ZW50cyA/IGlzT3JDb250YWluc0VsZW1lbnQgOiBpc0VsZW1lbnQsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnb3B0aW9ucycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3N0YXRlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIHdoZW5Db21wb25lbnRBY3RpdmVDaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4gIXN0YXRlLmlzQWN0aXZlXG4gICAgICAgID8gYmFzZUFjdGlvbkdyb3VwT3B0aW9ucy5oYW5kbGVyKG9wdGlvbnMsIHN0YXRlKVxuICAgICAgICA6IHN0YXRlO1xuICAgIH0pXG4gICksXG59KTtcblxuY29uc3Qgc2Nyb2xsSW50b091dE9mVmlld09wdGlvbnMgPSB7XG4gIC4uLmJhc2VTY3JvbGxBY3Rpb25Hcm91cE9wdGlvbnMsXG4gIGhhbmRsZXI6IHdoZW5FbGVtZW50VmlzaWJpbHR5Q2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHtlbGVtZW50VmlzaWJsZX0gPSBzdGF0ZTtcbiAgICBjb25zdCB7ZXZlbnQsIHN0b3JlfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge2l4RGF0YX0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHtldmVudHN9ID0gaXhEYXRhO1xuXG4gICAgLy8gdHJpZ2dlciB0aGUgaGFuZGxlciBvbmx5IG9uY2UgaWYgb25seSBvbmUgb2YgU0NST0xMX0lOVE8gb3IgU0NST0xMX09VVF9PRiBldmVudCB0eXBlc1xuICAgIC8vIGFyZSByZWdpc3RlcmVkLlxuICAgIGlmICghZXZlbnRzW2V2ZW50LmFjdGlvbi5jb25maWcuYXV0b1N0b3BFdmVudElkXSAmJiBzdGF0ZS50cmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LmV2ZW50VHlwZUlkID09PSBTQ1JPTExfSU5UT19WSUVXKSA9PT0gZWxlbWVudFZpc2libGUpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHRyaWdnZXJlZDogdHJ1ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH0pLFxufSBhcyBjb25zdDtcblxuY29uc3QgTU9VU0VfT1VUX1JPVU5EX1RIUkVTSE9MRCA9IDAuMDU7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgW1NMSURFUl9BQ1RJVkVdOiBnZXRDb21wb25lbnRBY3RpdmVPcHRpb25zKCksXG4gIFtTTElERVJfSU5BQ1RJVkVdOiBnZXRDb21wb25lbnRJbmFjdGl2ZU9wdGlvbnMoKSxcbiAgW0RST1BET1dOX09QRU5dOiBnZXRDb21wb25lbnRBY3RpdmVPcHRpb25zKCksXG4gIFtEUk9QRE9XTl9DTE9TRV06IGdldENvbXBvbmVudEluYWN0aXZlT3B0aW9ucygpLFxuXG4gIC8vIG5hdmJhciBlbGVtZW50cyBtYXkgY29udGFpbiBuZXN0ZWQgY29tcG9uZW50cyBpbiB0aGUgbWVudS4gVG8gcHJldmVudCBhY3Rpdml0eSBtaXNmaXJlcywgb25seSBsaXN0ZWQgZm9yIGFjdGl2aXR5XG4gIC8vIGV2ZW50cyB3aGVyZSB0aGUgdGFyZ2V0IGlzIHRoZSBuYXZiYXIgZWxlbWVudCwgYW5kIGlnbm9yZSBjaGlsZHJlbiB0aGF0IGRpc3BhdGNoIGFjdGl2aXRpeSBldmVudHMuXG4gIFtOQVZCQVJfT1BFTl06IGdldENvbXBvbmVudEFjdGl2ZU9wdGlvbnMoZmFsc2UpLFxuICBbTkFWQkFSX0NMT1NFXTogZ2V0Q29tcG9uZW50SW5hY3RpdmVPcHRpb25zKGZhbHNlKSxcbiAgW1RBQl9BQ1RJVkVdOiBnZXRDb21wb25lbnRBY3RpdmVPcHRpb25zKCksXG4gIFtUQUJfSU5BQ1RJVkVdOiBnZXRDb21wb25lbnRJbmFjdGl2ZU9wdGlvbnMoKSxcbiAgW0VDT01NRVJDRV9DQVJUX09QRU5dOiB7XG4gICAgdHlwZXM6ICdlY29tbWVyY2UtY2FydC1vcGVuJyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKGlzT3JDb250YWluc0VsZW1lbnQsIGFjdGlvbkdyb3VwQ3JlYXRvciksXG4gIH0sXG4gIFtFQ09NTUVSQ0VfQ0FSVF9DTE9TRV06IHtcbiAgICB0eXBlczogJ2Vjb21tZXJjZS1jYXJ0LWNsb3NlJyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKGlzT3JDb250YWluc0VsZW1lbnQsIGFjdGlvbkdyb3VwQ3JlYXRvciksXG4gIH0sXG4gIFtNT1VTRV9DTElDS106IHtcbiAgICB0eXBlczogJ2NsaWNrJyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKFxuICAgICAgaXNPckNvbnRhaW5zRWxlbWVudCxcbiAgICAgIHdoZW5DbGlja0NvdW50Q2hhbmdlKChvcHRpb25zLCB7Y2xpY2tDb3VudH0pID0+IHtcbiAgICAgICAgaWYgKGhhc0F1dG9TdG9wRXZlbnQob3B0aW9ucykpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgICBjbGlja0NvdW50ID09PSAxICYmIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICAgI
16189H1cbiAgICAgIH0pXG4gICAgKSxcbiAgfSxcbiAgW01PVVNFX1NFQ09ORF9DTElDS106IHtcbiAgICB0eXBlczogJ2NsaWNrJyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKFxuICAgICAgaXNPckNvbnRhaW5zRWxlbWVudCxcbiAgICAgIHdoZW5DbGlja0NvdW50Q2hhbmdlKChvcHRpb25zLCB7Y2xpY2tDb3VudH0pID0+IHtcbiAgICAgICAgaWYgKGNsaWNrQ291bnQgPT09IDIpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKSxcbiAgfSxcbiAgW01PVVNFX0RPV05dOiB7XG4gICAgLi4uYmFzZUFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgICB0eXBlczogJ21vdXNlZG93bicsXG4gIH0sXG4gIFtNT1VTRV9VUF06IHtcbiAgICAuLi5iYXNlQWN0aW9uR3JvdXBPcHRpb25zLFxuICAgIHR5cGVzOiAnbW91c2V1cCcsXG4gIH0sXG4gIFtNT1VTRV9PVkVSXToge1xuICAgIHR5cGVzOiBNT1VTRV9PVkVSX09VVF9UWVBFUyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKFxuICAgICAgaXNPckNvbnRhaW5zRWxlbWVudCxcbiAgICAgIHdoZW5FbGVtZW50SG92ZXJDaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS5lbGVtZW50SG92ZXJlZCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApLFxuICB9LFxuICBbTU9VU0VfT1VUXToge1xuICAgIHR5cGVzOiBNT1VTRV9PVkVSX09VVF9UWVBFUyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKFxuICAgICAgaXNPckNvbnRhaW5zRWxlbWVudCxcbiAgICAgIHdoZW5FbGVtZW50SG92ZXJDaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgICAgIGlmICghc3RhdGUuZWxlbWVudEhvdmVyZWQpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKSxcbiAgfSxcbiAgW01PVVNFX01PVkVdOiB7XG4gICAgdHlwZXM6ICdtb3VzZW1vdmUgbW91c2VvdXQgc2Nyb2xsJyxcbiAgICBoYW5kbGVyOiAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB7c3RvcmUsIGVsZW1lbnQsIGV2ZW50Q29uZmlnLCBuYXRpdmVFdmVudCwgZXZlbnRTdGF0ZUtleX0sXG5cbiAgICAgIHN0YXRlID0ge2NsaWVudFg6IDAsIGNsaWVudFk6IDAsIHBhZ2VYOiAwLCBwYWdlWTogMH1cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYmFzZWRPbixcbiAgICAgICAgc2VsZWN0ZWRBeGlzLFxuICAgICAgICBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgICAgICAgcmV2ZXJzZSxcbiAgICAgICAgcmVzdGluZ1N0YXRlID0gMCxcbiAgICAgIH0gPSBldmVudENvbmZpZztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCA9IHN0YXRlLmNsaWVudFgsXG4gICAgICAgIGNsaWVudFkgPSBzdGF0ZS5jbGllbnRZLFxuICAgICAgICBwYWdlWCA9IHN0YXRlLnBhZ2VYLFxuICAgICAgICBwYWdlWSA9IHN0YXRlLnBhZ2VZLFxuICAgICAgfSA9IG5hdGl2ZUV2ZW50O1xuICAgICAgY29uc3QgaXNYQXhpcyA9IHNlbGVjdGVkQXhpcyA9PT0gJ1hfQVhJUyc7XG4gICAgICBjb25zdCBpc01vdXNlT3V0ID0gbmF0aXZlRXZlbnQudHlwZSA9PT0gJ21vdXNlb3V0JztcblxuICAgICAgbGV0IHZhbHVlID0gcmVzdGluZ1N0YXRlIC8gMTAwO1xuICAgICAgbGV0IG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCA9IGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkO1xuICAgICAgbGV0IGVsZW1lbnRIb3ZlcmVkID0gZmFsc2U7XG5cbiAgICAgIHN3aXRjaCAoYmFzZWRPbikge1xuICAgICAgICBjYXNlIEV2ZW50QmFzZWRPbi5WSUVXUE9SVDoge1xuICAgICAgICAgIHZhbHVlID0gaXNYQXhpc1xuICAgICAgICAgICAgPyBNYXRoLm1pbihjbGllbnRYLCB3aW5kb3cuaW5uZXJXaWR0aCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICAgICAgOiBNYXRoLm1pbihjbGllbnRZLCB3aW5kb3cuaW5uZXJIZWlnaHQpIC8gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnUEFHRScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAneyByZWFkb25seSBFTEVNRU5UOiBcIkVMRU1FTlRcIjsgcmVhZG9ubHkgVklFV1BPUlQ6IFwiVklFV1BPUlRcIjsgfScuXG4gICAgICAgIGNhc2UgRXZlbnRCYXNlZE9uLlBBR0U6IHtcbiAgICAgICAgICBjb25zdCB7c2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0fSA9XG4gICAgICAgICAgICBnZXREb2N1bWVudFN0YXRlKCk7XG4gICAgICAgICAgdmFsdWUgPSBpc1hBeGlzXG4gICAgICAgICAgICA/IE1hdGgubWluKHNjcm9sbExlZnQgKyBwYWdlWCwgc2Nyb2xsV2lkdGgpIC8gc2Nyb2xsV2lkdGhcbiAgICAgICAgICAgIDogTWF0aC5taW4oc2Nyb2xsVG9wICsgcGFnZVksIHNjcm9sbEhlaWdodCkgLyBzY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFdmVudEJhc2VkT24uRUxFTUVOVDpcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCA9IGdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZChcbiAgICAgICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgICAgICBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpc01vdXNlRXZlbnQgPSBuYXRpdmVFdmVudC50eXBlLmluZGV4T2YoJ21vdXNlJykgPT09IDA7XG5cbiAgICAgICAgICAvLyBVc2UgaXNPckNvbnRhaW5zRWxlbWVudCBmb3IgbW91c2UgZXZlbnRzIHNpbmNlIHRoZXkgYXJlIGZpcmVkIGZyb20gdGhlIHRhcmdldFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTW91c2VFdmVudCAmJlxuICAgICAgICAgICAgaXNPckNvbnRhaW5zRWxlbWVudCh7ZWxlbWVudCwgbmF0aXZlRXZlbnR9KSAhPT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3Qge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH0gPSByZWN0O1xuXG4gICAgICAgICAgLy8gT3RoZXJ3aXNlI
16189HdlJ2xsIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBtb3VzZSBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBoYW5kbGVyIHN0YXRlXG4gICAgICAgICAgLy8gYWdhaW5zdCB0aGUgdGFyZ2V0IGVsZW1lbnQncyByZWN0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzTW91c2VFdmVudCAmJlxuICAgICAgICAgICAgIXBvaW50SW50ZXJzZWN0cyh7bGVmdDogY2xpZW50WCwgdG9wOiBjbGllbnRZfSwgcmVjdClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnRIb3ZlcmVkID0gdHJ1ZTtcblxuICAgICAgICAgIHZhbHVlID0gaXNYQXhpcyA/IChjbGllbnRYIC0gbGVmdCkgLyB3aWR0aCA6IChjbGllbnRZIC0gdG9wKSAvIGhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjb3ZlciBjYXNlIHdoZXJlIHRoZSBldmVudCBpcyBhIG1vdXNlIG91dCwgYnV0IHRoZSB2YWx1ZSBpcyBub3QgcXVpdGUgYXQgMTAwJVxuICAgICAgaWYgKFxuICAgICAgICBpc01vdXNlT3V0ICYmXG4gICAgICAgICh2YWx1ZSA+IDEgLSBNT1VTRV9PVVRfUk9VTkRfVEhSRVNIT0xEIHx8XG4gICAgICAgICAgdmFsdWUgPCBNT1VTRV9PVVRfUk9VTkRfVEhSRVNIT0xEKVxuICAgICAgKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgdXBkYXRlIGJhc2VkIG9uIGVsZW1lbnQgaWYgdGhlIG1vdXNlIGlzIG1vdmluZyBvdmVyIG9yIGhhcyBqdXN0IGxlZnQgdGhlIGVsZW1lbnRcbiAgICAgIGlmIChcbiAgICAgICAgYmFzZWRPbiAhPT0gRXZlbnRCYXNlZE9uLkVMRU1FTlQgfHxcbiAgICAgICAgZWxlbWVudEhvdmVyZWQgfHxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGVsZW1lbnRIb3ZlcmVkICE9PSBzdGF0ZS5lbGVtZW50SG92ZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IDEgLSB2YWx1ZSA6IHZhbHVlO1xuICAgICAgICBzdG9yZS5kaXNwYXRjaChwYXJhbWV0ZXJDaGFuZ2VkKG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCwgdmFsdWUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudEhvdmVyZWQsXG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFksXG4gICAgICAgIHBhZ2VYLFxuICAgICAgICBwYWdlWSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSxcblxuICBbUEFHRV9TQ1JPTExdOiB7XG4gICAgdHlwZXM6IFNDUk9MTF9FVkVOVF9UWVBFUyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGhhbmRsZXI6ICh7c3RvcmUsIGV2ZW50Q29uZmlnfSkgPT4ge1xuICAgICAgY29uc3Qge2NvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLCByZX
16189ZlcnNlfSA9IGV2ZW50Q29uZmlnO1xuICAgICAgY29uc3Qge3Njcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHR9ID0gZ2V0RG9jdW1lbnRTdGF0ZSgpO1xuICAgICAgbGV0IHZhbHVlID0gc2Nyb2xsVG9wIC8gKHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCk7XG4gICAgICB2YWx1ZSA9IHJldmVyc2UgPyAxIC0gdmFsdWUgOiB2YWx1ZTtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKHBhcmFtZXRlckNoYW5nZWQoY29udGludW91c1BhcmFtZXRlckdyb3VwSWQsIHZhbHVlKSk7XG4gICAgfSxcbiAgfSxcblxuICBbU0NST0xMSU5HX0lOX1ZJRVddOiB7XG4gICAgdHlwZXM6IFNDUk9MTF9FVkVOVF9UWVBFUyxcbiAgICBoYW5kbGVyOiAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB7ZWxlbWVudCwgc3RvcmUsIGV2ZW50Q29uZmlnLCBldmVudFN0YXRlS2V5fSxcblxuICAgICAgc3RhdGUgPSB7c2Nyb2xsUGVyY2VudDogMH1cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxXaWR0aCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBjbGllbnRIZWlnaHQ6IHZpc2libGVIZWlnaHQsXG4gICAgICB9ID0gZ2V0RG9jdW1lbnRTdGF0ZSgpO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGJhc2VkT24sXG4gICAgICAgIHNlbGVjdGVkQXhpcyxcbiAgICAgICAgY29udGludW91c1BhcmFtZXRlckdyb3VwSWQsXG4gICAgICAgIHN0YXJ0c0VudGVyaW5nLFxuICAgICAgICBzdGFydHNFeGl0aW5nLFxuICAgICAgICBhZGRFbmRPZmZzZXQsXG4gICAgICAgIGFkZFN0YXJ0T2Zmc2V0LFxuICAgICAgICBhZGRPZmZzZXRWYWx1ZSA9IDAsXG4gICAgICAgIGVuZE9mZnNldFZhbHVlID0gMCxcbiAgICAgIH0gPSBldmVudENvbmZpZztcblxuICAgICAgY29uc3QgaXNYQXhpcyA9IHNlbGVjdGVkQXhpcyA9PT0gJ1hfQVhJUyc7XG5cbiAgICAgIGlmIChiYXNlZE9uID09PSBFdmVudEJhc2VkT24uVklFV1BPUlQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc1hBeGlzXG4gICAgICAgICAgPyBzY3JvbGxMZWZ0IC8gc2Nyb2xsV2lkdGhcbiAgICAgICAgICA6IHNjcm9sbFRvcCAvIHNjcm9sbEhlaWdodDtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBzdGF0ZS5zY3JvbGxQZXJjZW50KSB7XG4gICAgICAgICAgc3RvcmUuZGlzcGF0Y2gocGFyYW1ldGVyQ2hhbmdlZChjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbFBlcmNlbnQ6IHZhbHVlLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlZFBhcmFtZXRlcklkID0gZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkKFxuICAgICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgICAgY29udGludW91c1BhcmFtZXRlckdyb3VwSWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgb2Zmc2V0U3RhcnRQZXJjID0gKGFkZFN0YXJ0T2Zmc2V0ID8gYWRkT2Zmc2V0VmFsdWUgOiAwKSAvIDEwMDtcbiAgICAgICAgbGV0IG9mZnNldEVuZFBlcmMgPSAoYWRkRW5kT2Zmc2V0ID8gZW5kT2Zmc2V0VmFsdWUgOiAwKSAvIDEwMDtcblxuICAgICAgICAvLyBmbGlwIHRoZSBvZmZzZXQgcGVyY2VudGFnZXMgZGVwZW5kaW5nIG9uIHN0YXJ0IC8gZXhpdCB0eXBlXG4gICAgICAgIG9mZnNldFN0YXJ0UGVyYyA9IHN0YXJ0c0VudGVyaW5nXG4gICAgICAgICAgPyBvZmZzZXRTdGFydFBlcmNcbiAgICAgICAgICA6IDEgLSBvZmZzZXRTdGFydFBlcmM7XG4gICAgICAgIG9mZnNldEVuZFBlcmMgPSBzdGFydHNFeGl0aW5nID8gb2Zmc2V0RW5kUGVyYyA6IDEgLSBvZmZzZXRFbmRQZXJjO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldEVsZW1lbnRUb3AgPVxuICAgICAgICAgIGVsZW1lbnRSZWN0LnRvcCArXG4gICAgICAgICAgTWF0aC5taW4oZWxlbWVudFJlY3QuaGVpZ2h0ICogb2Zmc2V0U3RhcnRQZXJjLCB2aXNpYmxlSGVpZ2h0KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0RWxlbWVudEJvdHRvbSA9XG4gICAgICAgICAgZWxlbWVudFJlY3QudG9wICsgZWxlbWVudFJlY3QuaGVpZ2h0ICogb2Zmc2V0RW5kUGVyYztcbiAgICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gb2Zmc2V0RWxlbWVudEJvdHRvbSAtIG9mZnNldEVsZW1lbnRUb3A7XG5cbiAgICAgICAgY29uc3QgZml4ZWRTY3JvbGxIZWlnaHQgPSBNYXRoLm1pbihcbiAgICAgICAgICB2aXNpYmxlSGVpZ2h0ICsgb2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgIHNjcm9sbEhlaWdodFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZpeGVkU2Nyb2xsVG9wID0gTWF0aC5taW4oXG4gICAgICAgICAgTWF0aC5tYXgoMCwgdmlzaWJsZUhlaWdodCAtIG9mZnNldEVsZW1lbnRUb3ApLFxuICAgICAgICAgIGZpeGVkU2Nyb2xsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpeGVkU2Nyb2xsUGVyYyA9IGZpeGVkU2Nyb2xsVG9wIC8gZml4ZWRTY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgaWYgKGZpeGVkU2Nyb2xsUGVyYyAhPT0gc3RhdGUuc2Nyb2xsUGVyY2VudCkge1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgcGFyYW1ldGVyQ2hhbmdlZChuYW1lc3BhY2VkUGFyYW1ldGVySWQsIGZpeGVkU2Nyb2xsUGVyYylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsUGVyY2VudDogZml4ZWRTY3JvbGxQZXJjLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIFtTQ1JPTExfSU5UT19WSUVXXTogc2Nyb2xsSW50b091dE9mVmlld09wdGlvbnMsXG4gIFtTQ1JPTExfT1VUX09GX1ZJRVddOiBzY3JvbGxJbnRvT3V0T2ZWaWV3T3B0aW9ucyxcblxuICBbUEFHRV9TQ1JPTExfRE9XTl06IHtcbiAgICAuLi5iYXNlU2Nyb2xsQWN0aW9uR3JvdXBPcHRpb25zLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ29wdGlvbnMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdzdGF0ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICBoYW5kbGVyOiB3aGVuU2Nyb2xsRGlyZWN0aW9uQ2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKHN0YXRlLnNjcm9sbGluZ0Rvd24pIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgfSxcblxuICBbUEFHRV9TQ1JPTExfVVBdOiB7XG4gICAgLi4uYmFzZVNjcm9sbEFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdvcHRpb25zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciA
16189nc3RhdGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgaGFuZGxlcjogd2hlblNjcm9sbERpcmVjdGlvbkNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICAgIGlmICghc3RhdGUuc2Nyb2xsaW5nRG93bikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pLFxuICB9LFxuXG4gIFtQQUdFX0ZJTklTSF06IHtcbiAgICB0eXBlczogJ3JlYWR5c3RhdGVjaGFuZ2UgSVgyX1BBR0VfVVBEQVRFJyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKGlzRWxlbWVudCwgd2hlblBhZ2VMb2FkRmluaXNoKGFjdGlvbkdyb3VwQ3JlYXRvcikpLFxuICB9LFxuXG4gIFtQQUdFX1NUQVJUXToge1xuICAgIHR5cGVzOiAncmVhZHlzdGF0ZWNoYW5nZSBJWDJfUEFHRV9VUERBVEUnLFxuICAgIGhhbmRsZXI6IHdpdGhGaWx0ZXIoaXNFbGVtZW50LCB3aGVuUGFnZUxvYWRTdGFydChhY3Rpb25Hcm91cENyZWF0b3IpKSxcbiAgfSxcbn07XG4iXSwibmFtZXMiOlsiTU9VU0VfQ0xJQ0siLCJNT1VTRV9TRUNPTkRfQ0xJQ0siLCJNT1VTRV9ET1dOIiwiTU9VU0VfVVAiLCJNT1VTRV9PVkVSIiwiTU9VU0VfT1VUIiwiRFJPUERPV05fQ0xPU0UiLCJEUk9QRE9XTl9PUEVOIiwiU0xJREVSX0FDVElWRSIsIlNMSURFUl9JTkFDVElWRSIsIlRBQl9BQ1RJVkUiLCJUQUJfSU5BQ1RJVkUiLCJOQVZCQVJfQ0xPU0UiLCJOQVZCQVJfT1BFTiIsIk1PVVNFX01PVkUiLCJQQUdFX1NDUk9MTF9ET1dOIiwiU0NST0xMX0lOVE9fVklFVyIsIlNDUk9MTF9PVVRfT0ZfVklFVyIsIlBBR0VfU0NST0xMX1VQIiwiU0NST0xMSU5HX0lOX1ZJRVciLCJQQUdFX0ZJTklTSCIsIkVDT01NRVJDRV9DQVJUX0NMT1NFIiwiRUNPTU1FUkNFX0NBUlRfT1BFTiIsIlBBR0VfU1RBUlQiLCJQQUdFX1NDUk9MTCIsIkV2ZW50VHlwZUNvbnN0cyIsIkNPTVBPTkVOVF9BQ1RJVkUiLCJDT01QT05FTlRfSU5BQ1RJVkUiLCJDT0xPTl9ERUxJTUlURVIiLCJJWDJFbmdpbmVDb25zdGFudHMiLCJnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQiLCJJWDJWYW5pbGxhVXRpbHMiLCJjb21wb3NhYmxlRmlsdGVyIiwicHJlZGljYXRlIiwib3B0aW9ucyIsImlzRWxlbWVudCIsImVsZW1lbnQiLCJuYXRpdmVFdmVudCIsInRhcmdldCIsImNvbnRhaW5zRWxlbWVudCIsImNvbnRhaW5zIiwiaXNPckNvbnRhaW5zRWxlbWVudCIsImZsb3ciLCJnZXRBdXRvU3RvcEV2ZW50Iiwic3RvcmUiLCJhdXRvU3RvcEV2ZW50SWQiLCJpeERhdGEiLCJnZXRTdGF0ZSIsImV2ZW50cyIsImV2ZW50VG9TdG9wIiwiQVVUT19TVE9QX0RJU0FCTEVEX0VWRU5UUyIsImV2ZW50VHlwZUlkIiwiaGFzQXV0b1N0b3BFdmVudCIsImV2ZW50IiwiYWN0aW9uIiwiZXZlbnRBY3Rpb24iLCJjb25maWciLCJCb29sZWFuIiwiYWN0aW9uR3JvdXBDcmVhdG9yIiwiZXZlbnRTdGF0ZUtleSIsInN0YXRlIiwiaWQiLCJldmVudElkIiwiYWN0aW9uTGlzdElkIiwic3RvcEFjdGlvbkdyb3VwIiwiZXZlbnRUYXJnZXQiLCJzcGxpdCIsImdldCIsInN0YXJ0QWN0aW9uR3JvdXAiLCJ3aXRoRmlsdGVyIiwiZmlsdGVyIiwiaGFuZGxlciIsImJhc2VBY3Rpb25Hcm91cE9wdGlvbnMiLCJiYXNlQWN0aXZpdHlBY3Rpb25Hcm91cE9wdGlvbnMiLCJ0eXBlcyIsImpvaW4iLCJTQ1JPTExfRVZFTlRfVFlQRVMiLCJ3aW5kb3ciLCJ0aHJvdHRsZSIsImRvY3VtZW50IiwiTU9VU0VfT1ZFUl9PVVRfVFlQRVMiLCJiYXNlU2Nyb2xsQWN0aW9uR3JvdXBPcHRpb25zIiwiZ2V0RG9jdW1lbnRTdGF0ZSIsInN1cHBvcnRPZmZzZXQiLCJwYWdlWE9mZnNldCIsInVuZGVmaW5lZCIsImlzQ1NTMUNvbXBhdCIsImNvbXBhdE1vZGUiLCJyb290RWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsImJvZHkiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsVG9wIiwicGFnZVlPZmZzZXQiLCJzdGlmZlNjcm9sbFRvcCIsImNsYW1wIiwic2Nyb2xsSGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJzY3JvbGxXaWR0aCIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJXaWR0aCIsImFyZUJveGVzSW50ZXJzZWN0aW5nIiwiYSIsImIiLCJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJpc0VsZW1lbnRIb3ZlcmVkIiwidHlwZSIsInJlbGF0ZWRUYXJnZXQiLCJjb250YWluc1RhcmdldCIsImNvbnRhaW5zUmVsYXRlZCIsImlzRWxlbWVudFZpc2libGUiLCJzY3JvbGxPZmZzZXRWYWx1ZSIsInNjcm9sbE9mZnNldFVuaXQiLCJpc1BYIiwib2Zmc2V0UGFkZGluZyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndoZW5Db21wb25lbnRBY3RpdmVDaGFuZ2UiLCJvbGRTdGF0ZSIsImlzQWN0aXZlIiwiaW5kZXhPZiIsIm5ld1N0YXRlIiwid2hlbkVsZW1lbnRIb3ZlckNoYW5nZSIsImVsZW1lbnRIb3ZlcmVkIiwid2hlbkVsZW1lbnRWaXNpYmlsdHlDaGFuZ2UiLCJlbGVtZW50VmlzaWJsZSIsIndoZW5TY3JvbGxEaXJlY3Rpb25DaGFuZ2UiLCJzY3JvbGxIZWlnaHRCb3VuZHMiLCJwZXJjZW50VG9wIiwiTnVtYmVyIiwidG9GaXhlZCIsInNjcm9sbFRvcFBhZGRpbmciLCJzY3JvbGxpbmdEb3duIiwic2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZCIsImFuY2hvclRvcCIsImluQm91bmRzIiwicG9pbnRJbnRlcnNlY3RzIiwicG9pbnQiLCJyZWN0Iiwid2hlblBhZ2VMb2FkRmluaXNoIiwiZmluaXNoZWQiLCJyZWFkeVN0YXRlIiwiZmluc2hlZCIsIndoZW5QYWdlTG9hZFN0YXJ0Iiwic3RhcnRlZCIsIndoZW5DbGlja0NvdW50Q2hhbmdlIiwiY2xpY2tDb3VudCIsImdldENvbXBvbmVudEFjdGl2ZU9wdGlvbnMiLCJhbGxvd05lc3RlZENoaWxkcmVuRXZlbnRzIiwiZ2V0Q29tcG9uZW50SW5hY3RpdmVPcHRpb25zIiwic2Nyb2xsSW50b091dE9mVmlld09wdGlvbnMiLCJ0cmlnZ2VyZWQiLCJNT1VTRV9PVVRfUk9VTkRfVEhSRVNIT0xEIiwiZXZlbnRDb25maWciLCJjbGllbnRYIiwiY2xpZW50WSIsInBhZ2VYIiwicGFnZVkiLCJiYXNlZE9uIiwic2VsZWN0ZWRBeGlzIiwiY29udGludW91c1BhcmFtZXRlckdyb3VwSWQiLCJyZXZlcnNlIiwicmVzdGluZ1N0YXRlIiwiaXNYQXhpcyIsImlzTW91c2VPdXQiLCJ2YWx1ZSIsIm5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsIkV2ZW50QmFzZWRPbiIsIlZJRVdQT1JUIiwiTWF0aCIsIm1pbiIsIlBBR0UiLCJFTEVNRU5UIiwiaXNNb3VzZUV2ZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJyb3VuZCIsImRpc3BhdGNoIiwicGFyYW1ldGVyQ2hhbmdlZCIsInNjcm9sbFBlcmNlbnQiLCJ2aXNpYmxlSGVpZ2h0Iiwic3RhcnRzRW50ZXJpbmciLCJzdGFydHNFeGl0aW5nIiwiYWRkRW5kT2Zmc2V0IiwiYWRkU3R
16189hcnRPZmZzZXQiLCJhZGRPZmZzZXRWYWx1ZSIsImVuZE9mZnNldFZhbHVlIiwiZWxlbWVudFJlY3QiLCJvZmZzZXRTdGFydFBlcmMiLCJvZmZzZXRFbmRQZXJjIiwib2Zmc2V0RWxlbWVudFRvcCIsIm9mZnNldEVsZW1lbnRCb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJmaXhlZFNjcm9sbEhlaWdodCIsImZpeGVkU2Nyb2xsVG9wIiwibWF4IiwiZml4ZWRTY3JvbGxQZXJjIl0sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7Ozs7K0JBcWV0Qjs7O2VBQUE7Ozs2REFwZWlCOzREQUNEOzhEQUNFO2lDQU1YO2tDQUV5QztrQ0FDakI7d0JBQ0Q7Ozs7OztBQUU5QixNQUFNLEVBQ0pBLFdBQVcsRUFDWEMsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLFFBQVEsRUFDUkMsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZEMsYUFBYSxFQUNiQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxFQUNYQyxVQUFVLEVBQ1ZDLGdCQUFnQixFQUNoQkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLG9CQUFvQixFQUNwQkMsbUJBQW1CLEVBQ25CQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWixHQUFHQyxnQ0FBZTtBQUVuQixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMscUJBQXFCO0FBRTNCLE1BQU0sRUFBQ0MsZUFBZSxFQUFDLEdBQUdDLG1DQUFrQjtBQUU1QyxNQUFNLEVBQUNDLHdCQUF3QixFQUFDLEdBQUdDLHVCQUFlO0FBRWxELE1BQU1DLG1CQUNKLENBQUNDLFlBQ0QsQ0FBQ0M7UUFDQyxJQUFJLE9BQU9BLFlBQVksWUFBWUQsVUFBVUMsVUFBVTtZQUNyRCxPQUFPO1FBQ1Q7UUFDQSxPQUFPQTtJQUNUO0FBRUYsTUFBTUMsWUFBWUgsaUJBQWlCLENBQUMsRUFBQ0ksT0FBTyxFQU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
16190
16191}),
16192"4609": (function (__unused_webpack_module, exports, __webpack_require__) {
16193"use strict";
16194
16195Object.defineProperty(exports, "__esModule", ({
16196    value: true
16197}));
16198Object.defineProperty(exports, "ixData", ({
16199    enumerable: true,
16200    get: function() {
16201        return ixData;
16202    }
16203}));
16204const _sharedconstants = __webpack_require__(7087);
16205const { IX2_RAW_DATA_IMPORTED } = _sharedconstants.IX2EngineActionTypes;
16206const ixData = (state = Object.freeze({}), action)=>{
16207    switch(action.type){
16208        case IX2_RAW_DATA_IMPORTED:
16209            {
16210                return action.payload.ixData || Object.freeze({});
16211            }
16212        default:
16213            {
16214                return state;
16215            }
16216    }
16217};
16218
16219//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkRhdGFSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCB7cmF3RGF0YUltcG9ydGVkUGF5bG9hZH0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcbmNvbnN0IHtJWDJfUkFXX0RBVEFfSU1QT1JURUR9ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5cbnR5cGUgaXhEYXRhUmVkdWNlckFjdGlvbiA9IHtcbiAgdHlwZTogdHlwZW9mIElYMl9SQVdfREFUQV9JTVBPUlRFRDtcbiAgcGF5bG9hZDogcmF3RGF0YUltcG9ydGVkUGF5bG9hZDtcbn07XG5cbmV4cG9ydCB0eXBlIGl4RGF0YVJlZHVjZXJTdGF0ZSA9IHJhd0RhdGFJbXBvcnRlZFBheWxvYWRbJ2l4RGF0YSddO1xuXG5leHBvcnQgY29uc3QgaXhEYXRhID0gKFxuICBzdGF0ZTogaXhEYXRhUmVkdWNlclN0YXRlID0gT2JqZWN0LmZyZWV6ZShcbiAgICB7fVxuICApIGFzIHJhd0RhdGFJbXBvcnRlZFBheWxvYWRbJ2l4RGF0YSddLFxuICBhY3Rpb246IGl4RGF0YVJlZHVjZXJBY3Rpb25cbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybi
16219BhY3Rpb24ucGF5bG9hZC5peERhdGEgfHwgT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiaXhEYXRhIiwiSVgyX1JBV19EQVRBX0lNUE9SVEVEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJzdGF0ZSIsIk9iamVjdCIsImZyZWV6ZSIsImFjdGlvbiIsInR5cGUiLCJwYXlsb2FkIl0sIm1hcHBpbmdzIjoiOzs7OytCQVdhQTs7O2VBQUFBOzs7aUNBWHNCO0FBRW5DLE1BQU0sRUFBQ0MscUJBQXFCLEVBQUMsR0FBR0MscUNBQW9CO0FBUzdDLE1BQU1GLFNBQVMsQ0FDcEJHLFFBQTRCQyxPQUFPQyxNQUFNLENBQ3ZDLENBQUMsRUFDa0MsRUFDckNDO0lBRUEsT0FBUUEsT0FBT0MsSUFBSTtRQUNqQixLQUFLTjtZQUF1QjtnQkFDMUIsT0FBT0ssT0FBT0UsT0FBTyxDQUFDUixNQUFNLElBQUlJLE9BQU9DLE1BQU0sQ0FBQyxDQUFDO1lBQ2pEO1FBQ0E7WUFBUztnQkFDUCxPQUFPRjtZQUNUO0lBQ0Y7QUFDRiJ9
16220
16221}),
16222"7718": (function (__unused_webpack_module, exports, __webpack_require__) {
16223"use strict";
16224/* eslint-env browser */ 
16225Object.defineProperty(exports, "__esModule", ({
16226    value: true
16227}));
16228Object.defineProperty(exports, "ixInstances", ({
16229    enumerable: true,
16230    get: function() {
16231        return ixInstances;
16232    }
16233}));
16234const _sharedconstants = __webpack_require__(7087);
16235const _shared = __webpack_require__(9468);
16236const _timm = __webpack_require__(1185);
16237const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_STOPPED, IX2_INSTANCE_ADDED, IX2_INSTANCE_STARTED, IX2_INSTANCE_REMOVED, IX2_ANIMATION_FRAME_CHANGED } = _sharedconstants.IX2EngineActionTypes;
16238const { optimizeFloat, applyEasing, createBezierEasing } = _shared.IX2EasingUtils;
16239const { RENDER_GENERAL } = _sharedconstants.IX2EngineConstants;
16240const { getItemConfigByKey, getRenderType, getStyleProp } = _shared.IX2VanillaUtils;
16241const continuousInstance = (state, action)=>{
16242    const { position: lastPosition, parameterId, actionGroups, destinationKeys, smoothing, restingValue, actionTypeId, customEasingFn, skipMotion, skipToValue } = state;
16243    const { parameters } = action.payload;
16244    let velocity = Math.max(1 - smoothing, 0.01);
16245    let paramValue = parameters[parameterId];
16246    if (paramValue == null) {
16247        velocity = 1;
16248        paramValue = restingValue;
16249    }
16250    const nextPosition = Math.max(paramValue, 0) || 0;
16251    const positionDiff = optimizeFloat(nextPosition - lastPosition);
16252    const position = skipMotion ? skipToValue : optimizeFloat(lastPosition + positionDiff * velocity);
16253    const keyframePosition = position * 100;
16254    if (position === lastPosition && state.current) {
16255        return state;
16256    }
16257    let fromActionItem;
16258    let toActionItem;
16259    let positionOffset;
16260    let positionRange;
16261    for(let i = 0, { length } = actionGroups; i < length; i++){
16262        const { keyframe, actionItems } = actionGroups[i];
16263        if (i === 0) {
16264            fromActionItem = actionItems[0];
16265        }
16266        if (keyframePosition >= keyframe) {
16267            fromActionItem = actionItems[0];
16268            const nextGroup = actionGroups[i + 1];
16269            const hasNextItem = nextGroup && keyframePosition !== keyframe;
16270            toActionItem = hasNextItem ? nextGroup.actionItems[0] : null;
16271            if (hasNextItem) {
16272                positionOffset = keyframe / 100;
16273                positionRange = (nextGroup.keyframe - keyframe) / 100;
16274            }
16275        }
16276    }
16277    const current = {};
16278    if (fromActionItem && !toActionItem) {
16279        for(let i = 0, { length } = destinationKeys; i < length; i++){
16280            const key = destinationKeys[i];
16281            current[key] = getItemConfigByKey(actionTypeId, key, fromActionItem.config);
16282        }
16283    } else if (fromActionItem && toActionItem && positionOffset !== undefined && positionRange !== undefined) {
16284        const localPosition = (position - positionOffset) / positionRange;
16285        const easing = fromActionItem.config.easing;
16286        const eased = applyEasing(easing, localPosition, customEasingFn);
16287        for(let i = 0, { length } = destinationKeys; i < length; i++){
16288            const key = destinationKeys[i];
16289            const fromVal = getItemConfigByKey(actionTypeId, key, fromActionItem.config);
16290            const toVal = getItemConfigByKey(actionTypeId, key, toActionItem.config);
16291            const diff = toVal - fromVal;
16292            const value = diff * eased + fromVal;
16293            current[key] = value;
16294        }
16295    }
16296    return (0, _timm.merge)(state, {
16297        position,
16298        current
16299    });
16300};
16301const timedInstance = (state, action)=>{
16302    const { active, origin, start, immediate, renderType, verbose, actionItem, destination, destinationKeys, pluginDuration, instanceDelay, customEasingFn, skipMotion } = state;
16303    const easing = actionItem.config.easing;
16304    let { duration, delay } = actionItem.config;
16305    if (pluginDuration != null) {
16306        duration = pluginDuration;
16307    }
16308    delay = instanceDelay != null ? instanceDelay : delay;
16309    if (renderType === RENDER_GENERAL) {
16310        duration = 0;
16311    } else if (immediate || skipMotion) {
16312        duration = delay = 0;
16313    }
16314    const { now } = action.payload;
16315    if (active && origin) {
16316        const delta = now - (start + delay);
16317        if (verbose) {
16318            const verboseDelta = now - start;
16319            const verboseDuration = duration + delay;
16320            const verbosePosition = optimizeFloat(Math.min(Math.max(0, verboseDelta / verboseDuration), 1));
16321            state = (0, _timm.set)(state, 'verboseTimeElapsed', verboseDuration * verbosePosition);
16322        }
16323        if (delta < 0) {
16324            return state;
16325        }
16326        const position = optimizeFloat(Math.min(Math.max(0, delta / duration), 1));
16327        const eased = applyEasing(easing, position, customEasingFn);
16328        const newProps = {};
16329        let current = null;
16330        if (destinationKeys.length) {
16331            // @ts-expect-error - TS2347 - Untyped function calls may not accept type arguments. | TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'key' implicitly has an 'any' type.
16332            current = destinationKeys.reduce((result, key)=>{
16333                const destValue = destination[key];
16334                const originVal = parseFloat(origin[key]) || 0;
16335                const diff = parseFloat(destValue) - originVal;
16336                const value = diff * eased + originVal;
16337                result[key] = value;
16338                return result;
16339            }, {});
16340        }
16341        newProps.current = current;
16342        newProps.position = position;
16343        if (position === 1) {
16344            newProps.active = false;
16345            newProps.complete = true;
16346        }
16347        return (0, _timm.merge)(state, newProps);
16348    }
16349    return state;
16350};
16351const ixInstances = (state = Object.freeze({}), action)=>{
16352    switch(action.type){
16353        case IX2_RAW_DATA_IMPORTED:
16354            {
16355                return action.payload.ixInstances || Object.freeze({});
16356            }
16357        case IX2_SESSION_STOPPED:
16358            {
16359                return Object.freeze({});
16360            }
16361        case IX2_INSTANCE_ADDED:
16362            {
16363                const { instanceId, elementId, actionItem, eventId, eventTarget, eventStateKey, actionListId, groupIndex, isCarrier, origin, destination, immediate, verbose, continuous, parameterId, actionGroups, smoothing, restingValue, pluginInstance, pluginDuration, instanceDelay, skipMotion, skipToValue } = action.payload;
16364                const { actionTypeId } = actionItem;
16365                const renderType = getRenderType(actionTypeId);
16366                const styleProp = getStyleProp(renderType, actionTypeId);
16367                const destinationKeys = Object.keys(destination).filter((key)=>// Skip null destination values
16368                    destination[key] != null && // Skip string destination values
16369                    typeof destination[key] !== 'string');
16370                const { easing } = actionItem.config;
16371                return (0, _timm.set)(state, instanceId, {
16372                    id: instanceId,
16373                    elementId,
16374                    active: false,
16375                    position: 0,
16376                    start: 0,
16377                    origin,
16378                    destination,
16379                    destinationKeys,
16380                    immediate,
16381                    verbose,
16382                    current: null,
16383                    actionItem,
16384                    actionTypeId,
16385                    eventId,
16386                    eventTarget,
16387                    eventStateKey,
16388                    actionListId,
16389                    groupIndex,
16390                    renderType,
16391                    isCarrier,
16392                    styleProp,
16393                    continuous,
16394                    parameterId,
16395                    actionGroups,
16396                    smoothing,
16397                    restingValue,
16398                    pluginInstance,
16399                    pluginDuration,
16400                    instanceDelay,
16401                    skipMotion,
16402                    skipToValue,
16403                    customEasingFn: Array.isArray(easing) && easing.length === 4 ? createBezierEasing(easing) : undefined
16404                });
16405            }
16406        case IX2_INSTANCE_STARTED:
16407            {
16408                const { instanceId, time } = action.payload;
16409                return (0, _timm.mergeIn)(state, [
16410                    instanceId
16411                ], {
16412                    active: true,
16413                    complete: false,
16414                    start: time
16415                });
16416            }
16417        case IX2_INSTANCE_REMOVED:
16418            {
16419                const { instanceId } = action.payload;
16420                if (!state[instanceId]) {
16421                    return state;
16422                }
16423                const newState = {};
16424                const keys = Object.keys(state);
16425                const { length } = keys;
16426                for(let i = 0; i < length; i++){
16427                    const key = keys[i];
16428                    if (key !== instanceId) {
16429                        // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type.
16430                        newState[key] = state[key];
16431                    }
16432                }
16433                return newState;
16434            }
16435        case IX2_ANIMATION_FRAME_CHANGED:
16436            {
16437                let newState = state;
16438                const keys = Object.keys(state);
16439                const { length } = keys;
16440                for(let i = 0; i < length; i++){
16441                    const key = keys[i];
16442                    // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type.
16443                    const instance = state[key];
16444                    const reducer = instance.continuous ? continuousInstance : timedInstance;
16445                    // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'Key'.
16446                    newState = (0, _timm.set)(newState, key, reducer(instance, action));
16447                }
16448                return newState;
16449            }
16450        default:
16451            {
16452                return state;
16453            }
16454    }
16455};
16456
16457//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkluc3RhbmNlc1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbmltcG9ydCB7XG4gIElYMkVuZ2luZUNvbnN0YW50cyxcbiAgSVgyRW5naW5lQWN0aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtJWDJFYXNpbmdVdGlscywgSVgyVmFuaWxsYVV0aWxzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcblxuY29uc3Qge1xuICBJWDJfUkFXX0RBVEFfSU1QT1JURUQsXG4gIElYMl9TRVNTSU9OX1NUT1BQRUQsXG4gIElYMl9JTlNUQU5DRV9BRERFRCxcbiAgSVgyX0lOU1RBTkNFX1NUQVJURUQsXG4gIElYMl9JTlNUQU5DRV9SRU1PVkVELFxuICBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG59ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5jb25zdCB7b3B0aW1pemVGbG9hdCwgYXBwbHlFYXNpbmcsIGNyZWF0ZUJlemllckVhc2luZ30gPSBJWDJFYXNpbmdVdGlscztcbmNvbnN0IHtSRU5ERVJfR0VORVJBTH0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5jb25zdCB7Z2V0SXRlbUNvbmZpZ0J5S2V5LCBnZXRSZW5kZXJUeXBlLCBnZXRTdHlsZVByb3B9ID0gSVgyVmFuaWxsYVV0aWxzO1xuXG5pbXBvcnQge3NldCwgbWVyZ2UsIG1lcmdlSW59IGZyb20gJ3RpbW0nO1xuXG5jb25zdCBjb250aW51b3VzSW5zdGFuY2UgPSAoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnkpID0+IHtcbiAgY29uc3Qge1xuICAgIHBvc2l0aW9uOiBsYXN0UG9zaXRpb24sXG4gICAgcGFyYW1ldGVySWQsXG4gICAgYWN0aW9uR3JvdXBzLFxuICAgIGRlc3RpbmF0aW9uS2V5cyxcbiAgICBzbW9vdGhpbmcsXG4gICAgcmVzdGluZ1ZhbHVlLFxuICAgIGFjdGlvblR5cGVJZCxcbiAgICBjdXN0b21FYXNpbmdGbixcbiAgICBza2lwTW90aW9uLFxuICAgIHNraXBUb1ZhbHVlLFxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3Qge3BhcmFtZXRlcnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGxldCB2ZWxvY2l0eSA9IE1hdGgubWF4KDEgLSBzbW9vdGhpbmcsIDAuMDEpO1xuICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtZXRlcnNbcGFyYW1ldGVySWRdO1xuICBpZiAocGFyYW1WYWx1ZSA9PSBudWxsKSB7XG4gICAgdmVsb2NpdHkgPSAxO1xuICAgIHBhcmFtVmFsdWUgPSByZXN0aW5nVmFsdWU7XG4gIH1cbiAgY29uc3QgbmV4dFBvc2l0aW9uID0gTWF0aC5tYXgocGFyYW1WYWx1ZSwgMCkgfHwgMDtcbiAgY29uc3QgcG9zaXRpb25EaWZmID0gb3B0aW1pemVGbG9hdChuZXh0UG9zaXRpb24gLSBsYXN0UG9zaXRpb24pO1xuICBjb25zdCBwb3NpdGlvbiA9IHNraXBNb3Rpb25cbiAgICA/IHNraXBUb1ZhbHVlXG4gICAgOiBvcHRpbWl6ZUZsb2F0KGxhc3RQb3NpdGlvbiArIHBvc2l0aW9uRGlmZiAqIHZlbG9jaXR5KTtcbiAgY29uc3Qga2V5ZnJhbWVQb3NpdGlvbiA9IHBvc2l0aW9uICogMTAwO1xuXG4gIGlmIChwb3NpdGlvbiA9PT0gbGFzdFBvc2l0aW9uICYmIHN0YXRlLmN1cnJlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZnJvbUFjdGlvbkl0ZW07XG4gIGxldCB0b0FjdGlvbkl0ZW07XG4gIGxldCBwb3NpdGlvbk9mZnNldDtcbiAgbGV0IHBvc2l0aW9uUmFuZ2U7XG5cbiAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gYWN0aW9uR3JvdXBzOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7a2V5ZnJhbWUsIGFjdGlvbkl0ZW1zfSA9IGFjdGlvbkdyb3Vwc1tpXTtcblxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBmcm9tQWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zWzBdO1xuICAgIH1cblxuICAgIGlmIChrZXlmcmFtZVBvc2l0aW9uID49IGtleWZyYW1lKSB7XG4gICAgICBmcm9tQWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zWzBdO1xuXG4gICAgICBjb25zdCBuZXh0R3JvdXAgPSBhY3Rpb25Hcm91cHNbaSArIDFdO1xuICAgICAgY29uc3QgaGFzTmV4dEl0ZW0gPSBuZXh0R3JvdXAgJiYga2V5ZnJhbWVQb3NpdGlvbiAhPT0ga2V5ZnJhbWU7XG5cbiAgICAgIHRvQWN0aW9uSXRlbSA9IGh
16457hc05leHRJdGVtID8gbmV4dEdyb3VwLmFjdGlvbkl0ZW1zWzBdIDogbnVsbDtcblxuICAgICAgaWYgKGhhc05leHRJdGVtKSB7XG4gICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0ga2V5ZnJhbWUgLyAxMDA7XG4gICAgICAgIHBvc2l0aW9uUmFuZ2UgPSAobmV4dEdyb3VwLmtleWZyYW1lIC0ga2V5ZnJhbWUpIC8gMTAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBpZiAoZnJvbUFjdGlvbkl0ZW0gJiYgIXRvQWN0aW9uSXRlbSkge1xuICAgIGZvciAobGV0IGkgPSAwLCB7bGVuZ3RofSA9IGRlc3RpbmF0aW9uS2V5czsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBkZXN0aW5hdGlvbktleXNbaV07XG4gICAgICBjdXJyZW50W2tleV0gPSBnZXRJdGVtQ29uZmlnQnlLZXkoXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAga2V5LFxuICAgICAgICBmcm9tQWN0aW9uSXRlbS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGZyb21BY3Rpb25JdGVtICYmXG4gICAgdG9BY3Rpb25JdGVtICYmXG4gICAgcG9zaXRpb25PZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHBvc2l0aW9uUmFuZ2UgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBjb25zdCBsb2NhbFBvc2l0aW9uID0gKHBvc2l0aW9uIC0gcG9zaXRpb25PZmZzZXQpIC8gcG9zaXRpb25SYW5nZTtcbiAgICBjb25zdCBlYXNpbmcgPSBmcm9tQWN0aW9uSXRlbS5jb25maWcuZWFzaW5nO1xuICAgIGNvbnN0IGVhc2VkID0gYXBwbHlFYXNpbmcoZWFzaW5nLCBsb2NhbFBvc2l0aW9uLCBjdXN0b21FYXNpbmdGbik7XG4gICAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gZGVzdGluYXRpb25LZXlzOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGRlc3RpbmF0aW9uS2V5c1tpXTtcbiAgICAgIGNvbnN0IGZyb21WYWwgPSBnZXRJdGVtQ29uZmlnQnlLZXkoXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAga2V5LFxuICAgICAgICBmcm9tQWN0aW9uSXRlbS5jb25maWdcbiAgICAgICk7XG4gICAgICBjb25zdCB0b1ZhbCA9IGdldEl0ZW1Db25maWdCeUtleShhY3Rpb25UeXBlSWQsIGtleSwgdG9BY3Rpb25JdGVtLmNvbmZpZyk7XG4gICAgICBjb25zdCBkaWZmID0gdG9WYWwgLSBmcm9tVmFsO1xuICAgICAgY29uc3QgdmFsdWUgPSBkaWZmICogZWFzZWQgKyBmcm9tVmFsO1xuICAgICAgY3VycmVudFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlKHN0YXRlLCB7XG4gICAgcG9zaXRpb24sXG4gICAgY3VycmVudCxcbiAgfSk7XG59O1xuXG5jb25zdCB0aW1lZEluc3RhbmNlID0gKHN0YXRlOiBhbnksIGFjdGlvbjogYW55KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgb3JpZ2luLFxuICAgIHN0YXJ0LFxuICAgIGltbWVkaWF0ZSxcbiAgICByZW5kZXJUeXBlLFxuICAgIHZlcmJvc2UsXG4gICAgYWN0aW9uSXRlbSxcbiAgICBkZXN0aW5hdGlvbixcbiAgICBkZXN0aW5hdGlvbktleXMsXG4gICAgcGx1Z2luRHVyYXRpb24sXG4gICAgaW5zdGFuY2VEZWxheSxcbiAgICBjdXN0b21FYXNpbmdGbixcbiAgICBza2lwTW90aW9uLFxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgZWFzaW5nID0gYWN0aW9uSXRlbS5jb25maWcuZWFzaW5nO1xuICBsZXQge2R1cmF0aW9uLCBkZWxheX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcblxuICBpZiAocGx1Z2luRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGR1cmF0aW9uID0gcGx1Z2luRHVyYXRpb247XG4gIH1cblxuICBkZWxheSA9IGluc3RhbmNlRGVsYXkgIT0gbnVsbCA/IGluc3RhbmNlRGVsYXkgOiBkZWxheTtcblxuICBpZiAocmVuZGVyVHlwZSA9PT0gUkVOREVSX0dFTkVSQUwpIHtcbiAgICBkdXJhdGlvbiA9IDA7XG4gIH0gZWxzZSBpZiAoaW1tZWRpYXRlIHx8IHNraXBNb3Rpb24pIHtcbiAgICBkdXJhdGlvbiA9IGRlbGF5ID0gMDtcbiAgfVxuICBjb25zdCB7bm93fSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGlmIChhY3RpdmUgJiYgb3JpZ2luKSB7XG4gICAgY29uc3QgZGVsdGEgPSBub3cgLSAoc3RhcnQgKyBkZWxheSk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgY29uc3QgdmVyYm9zZURlbHRhID0gbm93IC0gc3RhcnQ7XG4gICAgICBjb25zdCB2ZXJib3NlRHVyYXRpb24gPSBkdXJhdGlvbiArIGRlbGF5O1xuICAgICAgY29uc3QgdmVyYm9zZVBvc2l0aW9uID0gb3B0aW1pemVGbG9hdChcbiAgICAgICAgTWF0aC5taW4oTWF0aC5tYXgoMCwgdmVyYm9zZURlbHRhIC8gdmVyYm9zZUR1cmF0aW9uKSwgMSlcbiAgICAgICk7XG4gICAgICBzdGF0ZSA9IHNldChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgICd2ZXJib3NlVGltZUVsYXBzZWQnLFxuICAgICAgICB2ZXJib3NlRHVyYXRpb24gKiB2ZXJib3NlUG9zaXRpb25cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0gb3B0aW1pemVGbG9hdChNYXRoLm1pbihNYXRoLm1heCgwLCBkZWx0YSAvIGR1cmF0aW9uKSwgMSkpO1xuICAgIGNvbnN0IGVhc2VkID0gYXBwbHlFYXNpbmcoZWFzaW5nLCBwb3NpdGlvbiwgY3VzdG9tRWFzaW5nRm4pO1xuXG4gICAgY29uc3QgbmV3UHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGxldCBjdXJyZW50ID0gbnVsbDtcblxuICAgIGlmIChkZXN0aW5hdGlvbktleXMubGVuZ3RoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ3IC0gVW50eXBlZCBmdW5jdGlvbiBjYWxscyBtYXkgbm90IGFjY2VwdCB0eXBlIGFyZ3VtZW50cy4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Jlc3VsdCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2tleScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICAgIGN1cnJlbnQgPSBkZXN0aW5hdGlvbktleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBkZXN0VmFsdWUgPSBkZXN0aW5
16457hdGlvbltrZXldO1xuICAgICAgICBjb25zdCBvcmlnaW5WYWwgPSBwYXJzZUZsb2F0KG9yaWdpbltrZXldKSB8fCAwO1xuICAgICAgICBjb25zdCBkaWZmID0gcGFyc2VGbG9hdChkZXN0VmFsdWUpIC0gb3JpZ2luVmFsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRpZmYgKiBlYXNlZCArIG9yaWdpblZhbDtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBuZXdQcm9wcy5jdXJyZW50ID0gY3VycmVudDtcbiAgICBuZXdQcm9wcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgICBuZXdQcm9wcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIG5ld1Byb3BzLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2Uoc3RhdGUsIG5ld1Byb3BzKTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59O1xuXG50eXBlIGl4SW5zdGFuY2VzUmVkdWNlclN0YXRlID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIC8vIFRPRE86IG1hbnkgb2YgdGhlIHZhbGlkIGZpZWxkcyBhcmUgc3RpbGwgbWlzc2luZyBpbiB0aGlzIHNoYXBlIC0gYWRkIHRoZW0sIHBsZWFzZVxuICB7Y29udGludW91czogYm9vbGVhbjsgYWN0aW9uTGlzdElkOiBzdHJpbmc7IHZlcmJvc2U6IGJvb2xlYW59XG4+O1xuXG5leHBvcnQgY29uc3QgaXhJbnN0YW5jZXMgPSAoXG4gIHN0YXRlOiBpeEluc3RhbmNlc1JlZHVjZXJTdGF0ZSA9IE9iamVjdC5mcmVlemUoe30pLFxuICBhY3Rpb246IGFueVxuKTogaXhJbnN0YW5jZXNSZWR1Y2VyU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZC5peEluc3RhbmNlcyB8fCBPYmplY3QuZnJlZXplKHt9KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVE9QUEVEOiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgfVxuICAgIGNhc2UgSVgyX0lOU1RBTkNFX0FEREVEOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgZ3JvdXBJbmRleCxcbiAgICAgICAgaXNDYXJyaWVyLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBpbW1lZGlhdGUsXG4gICAgICAgIHZlcmJvc2UsXG4gICAgICAgIGNvbnRpbnVvdXMsXG4gICAgICAgIHBhcmFtZXRlcklkLFxuICAgICAgICBhY3Rpb25Hcm91cHMsXG4gICAgICAgIHNtb290aGluZyxcbiAgICAgICAgcmVzdGluZ1ZhbHVlLFxuICAgICAgICBwbHVnaW5JbnN0YW5jZSxcbiAgICAgICAgcGx1Z2luRHVyYXRpb24sXG4gICAgICAgIGluc3RhbmNlRGVsYXksXG4gICAgICAgIHNraXBNb3Rpb24sXG4gICAgICAgIHNraXBUb1ZhbHVlLFxuICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBjb25zdCByZW5kZXJUeXBlID0gZ2V0UmVuZGVyVHlwZShhY3Rpb25UeXBlSWQpO1xuICAgICAgY29uc3Qgc3R5bGVQcm9wID0gZ2V0U3R5bGVQcm9wKHJlbmRlclR5cGUsIGFjdGlvblR5cGVJZCk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbktleXMgPSBPYmplY3Qua2V5cyhkZXN0aW5hdGlvbikuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PlxuICAgICAgICAgIC8vIFNraXAgbnVsbCBkZXN0aW5hdGlvbiB2YWx1ZXNcbiAgICAgICAgICBkZXN0aW5hdGlvbltrZXldICE9IG51bGwgJiZcbiAgICAgICAgICAvLyBTa2lwIHN0cmluZyBkZXN0aW5hdGlvbiB2YWx1ZXNcbiAgICAgICAgICB0eXBlb2YgZGVzdGluYXRpb25ba2V5XSAhPT0gJ3N0cmluZydcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtlYXNpbmd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG5cbiAgICAgIHJldHVybiBzZXQoc3RhdGUsIGluc3RhbmNlSWQsIHtcbiAgICAgICAgaWQ6IGluc3RhbmNlSWQsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBkZXN0aW5hdGlvbktleXMsXG4gICAgICAgIGltbWVkaWF0ZSxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgY3VycmVudDogbnVsbCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBldmVudElkLFxuICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgZXZlbnRTdGF0ZUtleSxcbiAgICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgICBncm91cEluZGV4LFxuICAgICAgICByZW5kZXJUeXBlLFxuICAgICAgICBpc0NhcnJpZXIsXG4gICAgICAgIHN0eWxlUHJvcCxcbiAgICAgICAgY29udGludW91cyxcbiAgICAgICAgcGFyYW1ldGVySWQsXG4gICAgICAgIGFjdGlvbkdyb3VwcyxcbiAgICAgICAgc21vb3RoaW5nLFxuICAgICAgICByZXN0aW5nVmFsdWUsXG4gICAgICAgIHBsdWdpbkluc3RhbmNlLFxuICAgICAgICBwbHVnaW5EdXJhdGlvbixcbiAgICAgICAgaW5zdGFuY2VEZWxheSxcbiAgICAgICAgc2tpcE1vdGlvbixcbiAgICAgICAgc2tpcFRvVmFsdWUsXG4gICAgICAgIGN1c3RvbUVhc2luZ0ZuOlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoZWFzaW5nKSAmJiBlYXNpbmcubGVuZ3RoID09PSA0XG4gICAgICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdhbnlbXScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ0lYMkVhc2luZ0N1c3RvbVR5cGUnLlxuICAgICAgICAgICAgICBjcmVhdGVCZXppZXJFYXNpbmcoZWFzaW5nKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfSU5TVEFOQ0VfU1RBUlRFRDoge1xuICAgICAgY29uc3Qge2luc3RhbmNlSWQsIHRpbWV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gbWVyZ2VJbihzdGF0ZSwgW2luc3RhbmNlSWRdLCB7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY29tcGxldGU6IGZhbHNlLFxuICAgICAgICBzdGFydDogdGltZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIElYMl9JTlNUQU5DRV9SRU1PVkVEOiB7XG4gICAgICBjb25zdCB7aW5zdGFuY2VJZH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGlmICghc3RhdGVbaW5zdGFuY2VJZF0pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGF0ZSk7XG4gICAgICBjb25zdCB7bGVuZ3RofSA9IGtleXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChrZXkgIT09IGluc3RhbmNlSWQpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLiB8IFRTMjUzOCAtIFR5cGUgJ3VuZGVmaW5lZCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS5cbiAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gc3RhdGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRDoge1xuICAgICAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhdGUpO1xuICAgICAgY29uc3Qge2xlbmd0aH0gPSBrZXlzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHN0YXRlW2tleV07XG4gICAgICAgIGNvbnN0IHJlZHVjZXIgPSBpbnN0YW5jZS5jb250aW51b3VzXG4gICAgICAgICAgPyBjb250aW51b3VzSW5zdGFuY2VcbiAgICAgICAgICA6IHRpbWVkSW5zdGFuY2U7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdLZXknLlxuICAgICAgICBuZXdTdGF0ZSA9IHNldChuZXdTdGF0ZSwga2V5LCByZWR1Y2VyKGluc3RhbmNlLCBhY3Rpb24pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybi
16457BuZXdTdGF0ZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJpeEluc3RhbmNlcyIsIklYMl9SQVdfREFUQV9JTVBPUlRFRCIsIklYMl9TRVNTSU9OX1NUT1BQRUQiLCJJWDJfSU5TVEFOQ0VfQURERUQiLCJJWDJfSU5TVEFOQ0VfU1RBUlRFRCIsIklYMl9JTlNUQU5DRV9SRU1PVkVEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJvcHRpbWl6ZUZsb2F0IiwiYXBwbHlFYXNpbmciLCJjcmVhdGVCZXppZXJFYXNpbmciLCJJWDJFYXNpbmdVdGlscyIsIlJFTkRFUl9HRU5FUkFMIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZ2V0SXRlbUNvbmZpZ0J5S2V5IiwiZ2V0UmVuZGVyVHlwZSIsImdldFN0eWxlUHJvcCIsIklYMlZhbmlsbGFVdGlscyIsImNvbnRpbnVvdXNJbnN0YW5jZSIsInN0YXRlIiwiYWN0aW9uIiwicG9zaXRpb24iLCJsYXN0UG9zaXRpb24iLCJwYXJhbWV0ZXJJZCIsImFjdGlvbkdyb3VwcyIsImRlc3RpbmF0aW9uS2V5cyIsInNtb290aGluZyIsInJlc3RpbmdWYWx1ZSIsImFjdGlvblR5cGVJZCIsImN1c3RvbUVhc2luZ0ZuIiwic2tpcE1vdGlvbiIsInNraXBUb1ZhbHVlIiwicGFyYW1ldGVycyIsInBheWxvYWQiLCJ2ZWxvY2l0eSIsIk1hdGgiLCJtYXgiLCJwYXJhbVZhbHVlIiwibmV4dFBvc2l0aW9uIiwicG9zaXRpb25EaWZmIiwia2V5ZnJhbWVQb3NpdGlvbiIsImN1cnJlbnQiLCJmcm9tQWN0aW9uSXRlbSIsInRvQWN0aW9uSXRlbSIsInBvc2l0aW9uT2Zmc2V0IiwicG9zaXRpb25SYW5nZSIsImkiLCJsZW5ndGgiLCJrZXlmcmFtZSIsImFjdGlvbkl0ZW1zIiwibmV4dEdyb3VwIiwiaGFzTmV4dEl0ZW0iLCJrZXkiLCJjb25maWciLCJ1bmRlZmluZWQiLCJsb2NhbFBvc2l0aW9uIiwiZWFzaW5nIiwiZWFzZWQiLCJmcm9tVmFsIiwidG9WYWwiLCJkaWZmIiwidmFsdWUiLCJtZXJnZSIsInRpbWVkSW5zdGFuY2UiLCJhY3RpdmUiLCJvcmlnaW4iLCJzdGFydCIsImltbWVkaWF0ZSIsInJlbmRlclR5cGUiLCJ2ZXJib3NlIiwiYWN0aW9uSXRlbSIsImRlc3RpbmF0aW9uIiwicGx1Z2luRHVyYXRpb24iLCJpbnN0YW5jZURlbGF5IiwiZHVyYXRpb24iLCJkZWxheSIsIm5vdyIsImRlbHRhIiwidmVyYm9zZURlbHRhIiwidmVyYm9zZUR1cmF0aW9uIiwidmVyYm9zZVBvc2l0aW9uIiwibWluIiwic2V0IiwibmV3UHJvcHMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkZXN0VmFsdWUiLCJvcmlnaW5WYWwiLCJwYXJzZUZsb2F0IiwiY29tcGxldGUiLCJPYmplY3QiLCJmcmVlemUiLCJ0eXBlIiwiaW5zdGFuY2VJZCIsImVsZW1lbnRJZCIsImV2ZW50SWQiLCJldmVudFRhcmdldCIsImV2ZW50U3RhdGVLZXkiLCJhY3Rpb25MaXN0SWQiLCJncm91cEluZGV4IiwiaXNDYXJyaWVyIiwiY29udGludW91cyIsInBsdWdpbkluc3RhbmNlIiwic3R5bGVQcm9wIiwia2V5cyIsImZpbHRlciIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwidGltZSIsIm1lcmdlSW4iLCJuZXdTdGF0ZSIsImluc3RhbmNlIiwicmVkdWNlciJdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCOzs7OytCQXFOVEE7OztlQUFBQTs7O2lDQWhOTjt3QkFFdUM7c0JBY1o7QUFabEMsTUFBTSxFQUNKQyxxQkFBcUIsRUFDckJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxvQkFBb0IsRUFDcEJDLG9CQUFvQixFQUNwQkMsMkJBQTJCLEVBQzVCLEdBQUdDLHFDQUFvQjtBQUN4QixNQUFNLEVBQUNDLGFBQWEsRUFBRUMsV0FBVyxFQUFFQyxrQkFBa0IsRUFBQyxHQUFHQyxzQkFBY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
16458
16459}),
16460"1540": (function (__unused_webpack_module, exports, __webpack_require__) {
16461"use strict";
16462
16463Object.defineProperty(exports, "__esModule", ({
16464    value: true
16465}));
16466Object.defineProperty(exports, "ixParameters", ({
16467    enumerable: true,
16468    get: function() {
16469        return ixParameters;
16470    }
16471}));
16472const _sharedconstants = __webpack_require__(7087);
16473const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_STOPPED, IX2_PARAMETER_CHANGED } = _sharedconstants.IX2EngineActionTypes;
16474const ixParameters = (state = {}, action)=>{
16475    switch(action.type){
16476        case IX2_RAW_DATA_IMPORTED:
16477            {
16478                return(// @ts-expect-error - Further investigation is needed as looks like IX2_RAW_DATA_IMPORTED is never triggered with ixParameters
16479                action.payload.ixParameters || {});
16480            }
16481        case IX2_SESSION_STOPPED:
16482            {
16483                return {};
16484            }
16485        case IX2_PARAMETER_CHANGED:
16486            {
16487                const { key, value } = action.payload;
16488                state[key] = value;
16489                return state;
16490            }
16491        default:
16492            {
16493                return state;
16494            }
16495    }
16496};
16497
16498//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlBhcmFtZXRlcnNSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCB7cmF3RGF0YUltcG9ydGVkUGF5bG9hZH0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcbmNvbnN0IHtJWDJfUkFXX0RBVEFfSU1QT1JURUQsIElYMl9TRVNTSU9OX1NUT1BQRUQsIElYMl9QQVJBTUVURVJfQ0hBTkdFRH0gPVxuICBJWDJFbmdpbmVBY3Rpb25UeXBlcztcblxudHlwZSBpeFBhcmFtZXRlcnNBY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfUkFXX0RBVEFfSU1QT1JURUQ7XG4gICAgICBwYXlsb2FkOiByYXdEYXRhSW1wb3J0ZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eX
16498BlOiB0eXBlb2YgSVgyX1NFU1NJT05fU1RPUFBFRDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9QQVJBTUVURVJfQ0hBTkdFRDtcbiAgICAgIHBheWxvYWQ6IHtrZXk6IHN0cmluZzsgdmFsdWU6IG51bWJlcn07XG4gICAgfTtcblxudHlwZSBpeFBhcmFtZXRlcnNSZWR1Y2VyU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCBjb25zdCBpeFBhcmFtZXRlcnMgPSAoXG4gIHN0YXRlOiBpeFBhcmFtZXRlcnNSZWR1Y2VyU3RhdGUgPSB7LyptdXRhYmxlIGZsYXQgc3RhdGUqL30sXG4gIGFjdGlvbjogaXhQYXJhbWV0ZXJzQWN0aW9uXG4pOiBpeFBhcmFtZXRlcnNSZWR1Y2VyU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBGdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVlZGVkIGFzIGxvb2tzIGxpa2UgSVgyX1JBV19EQVRBX0lNUE9SVEVEIGlzIG5ldmVyIHRyaWdnZXJlZCB3aXRoIGl4UGFyYW1ldGVyc1xuICAgICAgICBhY3Rpb24ucGF5bG9hZC5peFBhcmFtZXRlcnMgfHwgey8qbXV0YWJsZSBmbGF0IHN0YXRlKi99XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIElYMl9TRVNTSU9OX1NUT1BQRUQ6IHtcbiAgICAgIHJldHVybiB7LyptdXRhYmxlIGZsYXQgc3RhdGUqL307XG4gICAgfVxuICAgIGNhc2UgSVgyX1BBUkFNRVRFUl9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7a2V5LCB2YWx1ZX0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHN0YXRlW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJpeFBhcmFtZXRlcnMiLCJJWDJfUkFXX0RBVEFfSU1QT1JURUQiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX1BBUkFNRVRFUl9DSEFOR0VEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJwYXlsb2FkIiwia2V5IiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBcUJhQTs7O2VBQUFBOzs7aUNBckJzQjtBQUVuQyxNQUFNLEVBQUNDLHFCQUFxQixFQUFFQyxtQkFBbUIsRUFBRUMscUJBQXFCLEVBQUMsR0FDdkVDLHFDQUFvQjtBQWtCZixNQUFNSixlQUFlLENBQzFCSyxRQUFrQyxDQUF1QixDQUFDLEVBQzFEQztJQUVBLE9BQVFBLE9BQU9DLElBQUk7UUFDakIsS0FBS047WUFBdUI7Z0JBQzFCLE9BQ0UsOEhBQThIO2dCQUM5SEssT0FBT0UsT0FBTyxDQUFDUixZQUFZLElBQUksQ0FBdUI7WUFFMUQ7UUFDQSxLQUFLRTtZQUFxQjtnQkFDeEIsT0FBTyxDQUF1QjtZQUNoQztRQUNBLEtBQUtDO1lBQXVCO2dCQUMxQixNQUFNLEVBQUNNLEdBQUcsRUFBRUMsS0FBSyxFQUFDLEdBQUdKLE9BQU9FLE9BQU87Z0JBQ25DSCxLQUFLLENBQUNJLElBQUksR0FBR0M7Z0JBQ2IsT0FBT0w7WUFDVDtRQUNBO1lBQVM7Z0JBQ1AsT0FBT0E7WUFDVDtJQUNGO0FBQ0YifQ==
16499
16500}),
16501"7243": (function (__unused_webpack_module, exports, __webpack_require__) {
16502"use strict";
16503
16504Object.defineProperty(exports, "__esModule", ({
16505    value: true
16506}));
16507Object.defineProperty(exports, "default", ({
16508    enumerable: true,
16509    get: function() {
16510        return _default;
16511    }
16512}));
16513const _redux = __webpack_require__(9516);
16514const _IX2DataReducer = __webpack_require__(4609);
16515const _IX2RequestReducer = __webpack_require__(628);
16516const _IX2SessionReducer = __webpack_require__(5862);
16517const _shared = __webpack_require__(9468);
16518const _IX2InstancesReducer = __webpack_require__(7718);
16519const _IX2ParametersReducer = __webpack_require__(1540);
16520const { ixElements } = _shared.IX2ElementsReducer;
16521const _default = (0, _redux.combineReducers)({
16522    ixData: _IX2DataReducer.ixData,
16523    ixRequest: _IX2RequestReducer.ixRequest,
16524    ixSession: _IX2SessionReducer.ixSession,
16525    ixElements,
16526    ixInstances: _IX2InstancesReducer.ixInstances,
16527    ixParameters: _IX2ParametersReducer.ixParameters
16528});
16529
16530//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdG9yZSwgY29tYmluZVJlZHVjZXJzLCB0eXBlIFJlZHVjZXJ9IGZyb20gJ3JlZHV4JztcblxuaW1wb3J0IHtpeERhdGEsIHR5cGUgaXhEYXRhUmVkdWNlclN0YXRlfSBmcm9tICcuL0lYMkRhdGFSZWR1Y2VyJztcbmltcG9ydCB7aXhSZXF1ZXN0fSBmcm9tICcuL0lYMlJlcXVlc3RSZWR1Y2VyJztcbmltcG9ydCB7aXhTZXNzaW9ufSBmcm9tICcuL0lYMlNlc3Npb25SZWR1Y2VyJztcbmltcG9ydCB7SVgyRWxlbWVudHNSZWR1Y2VyfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcbmNvbnN0IHtpeEVsZW1lbnRzfSA9IElYMkVsZW1lbnRzUmVkdWNlcjtcbmltcG9ydCB7aXhJbnN0YW5jZXN9IGZyb20gJy4vSVgySW5zdGFuY2VzUmVkdWNlcic7XG5pbXBvcnQge2l4UGFyYW1ldGVyc30gZnJvbSAnLi9JWDJQYXJhbWV0ZXJzUmVkdWNlcic7XG5cbmV4cG9ydCB0eXBlIElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlID0ge1xuICBpeERhdGE6IFJldHVyblR5cGU8dHlwZW9mIGl4RGF0YT47XG4gIGl4UGFyYW1ldGVyczogUmV0dXJuVHlwZTx0eXBlb2YgaXhQYXJhbWV0ZXJzPjtcbiAgaXhTZXNzaW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBpeFNlc3Npb24+O1xuICBpeEVsZW1lbnRzOiBSZXR1cm5UeXBlPHR5cGVvZiBpeEVsZW1lbnRzPjtcbiAgaXhJbnN0YW5jZXM6IFJldHVyblR5cGU8dHlwZW9mIGl4SW5zdGFuY2VzPjtcbiAgaXhSZXF1ZXN0OiBSZXR1cm5UeXBlPHR5cGVvZiBpeFJlcXVlc3Q+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzPElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlPih7XG4gIGl4RGF0YTogaXhEYXRhIGFzIFJlZHVjZXI8aXhEYXRhUmVkdWNlclN0YXRlPixcbiAgaXhSZXF1ZXN0LFxuICBpeFNlc3Npb24sXG4gIGl4RWxlbWVudHMsXG4gIGl4SW5zdGFuY2VzLFxuICBpeFBhcmFtZXRlcnMsXG59KTtcblxuZXhwb3J0IHR5cGUgSVgyRW5naW5lUmVkdWNlclN0b3JlID0gU3RvcmU8SVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGU+O1xuIl0sIm5hbWVzIjpbIml4RWxlbWVudHMiLCJJWDJFbGVtZW50c1JlZHVjZXIiLCJjb21iaW5lUmVkdWNlcnMiLCJpeERhdGEiLCJpeFJlcXVlc3QiLCJpeFNlc3Npb24iLCJpeEluc3RhbmNlcyIsIml4UGFyYW1ldGVycyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFtQkE7OztlQUFBOzs7dUJBbkJtRDtnQ0FFTDttQ0FDdEI7bUNBQ0E7d0JBQ1M7cUNBRVA7c0NBQ0M7QUFGM0IsTUFBTSxFQUFDQSxVQUFVLEVBQUMsR0FBR0MsMEJBQWtCO01BYXZDLFdBQWVDLElBQUFBLHNCQUFlLEVBQTZCO0lBQ3pEQyxRQUFRQSxzQkFBTTtJQUNkQyxXQUFBQSw0QkFBUztJQUNUQyxXQUFBQSw0QkFBUztJQUNUTDtJQUNBTSxhQUFBQSxnQ0FBVztJQUNYQyxjQUFBQSxrQ0FBWTtBQUNkIn0=
16531
16532}),
16533"628": (function (__unused_webpack_module, exports, __webpack_require__) {
16534"use strict";
16535
16536Object.defineProperty(exports, "__esModule", ({
16537    value: true
16538}));
16539Object.defineProperty(exports, "ixRequest", ({
16540    enumerable: true,
16541    get: function() {
16542        return ixRequest;
16543    }
16544}));
16545const _sharedconstants = __webpack_require__(7087);
16546const _timm = __webpack_require__(1185);
16547const { IX2_PREVIEW_REQUESTED, IX2_PLAYBACK_REQUESTED, IX2_STOP_REQUESTED, IX2_CLEAR_REQUESTED } = _sharedconstants.IX2EngineActionTypes;
16548const initialState = {
16549    preview: {},
16550    playback: {},
16551    stop: {},
16552    clear: {}
16553};
16554const stateKeys = Object.create(null, {
16555    [IX2_PREVIEW_REQUESTED]: {
16556        value: 'preview'
16557    },
16558    [IX2_PLAYBACK_REQUESTED]: {
16559        value: 'playback'
16560    },
16561    [IX2_STOP_REQUESTED]: {
16562        value: 'stop'
16563    },
16564    [IX2_CLEAR_REQUESTED]: {
16565        value: 'clear'
16566    }
16567});
16568const ixRequest = (state = initialState, action)=>{
16569    if (action.type in stateKeys) {
16570        const key = [
16571            stateKeys[action.type]
16572        ];
16573        return (0, _timm.setIn)(state, [
16574            key
16575        ], {
16576            ...action.payload
16577        });
16578    }
16579    return state;
16580};
16581
16582//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlJlcXVlc3RSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmNvbnN0IHtcbiAgSVgyX1BSRVZJRVdfUkVRVUVTVEVELFxuICBJWDJfUExBWUJBQ0tfUkVRVUVTVEVELFxuICBJWDJfU1RPUF9SRVFVRVNURUQsXG4gIElYMl9DTEVBUl9SRVFVRVNURUQsXG59ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5pbXBvcnQge3NldElufSBmcm9tICd0aW1tJztcbmltcG9ydCB7XG4gIHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZCxcbiAgcHJldmlld1JlcXVlc3RlZFBheWxvYWQsXG4gIHN0b3BSZXF1ZXN0ZWRQYXlsb2FkLFxufSBmcm9tICcuLi9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMnO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIHByZXZpZXc6IHt9IGFzIHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkLFxuICBwbGF5YmFjazoge30gYXMgcGxheWJhY2tSZXF1ZXN0ZWRQYXlsb2FkLFxuICBzdG9wOiB7fSBhcyBzdG9wUmVxdWVzdGVkUGF5bG9hZCxcbiAgY2xlYXI6IHt9LFxufTtcblxuY29uc3Qgc3RhdGVLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gIFtJWDJfUFJFVklFV19SRVFVRVNURURdOiB7dmFsdWU6ICdwcmV2aWV3J30sXG4gIFtJWDJfUExBWUJBQ0tfUkVRVUVTVEVEXToge3ZhbHVlOiAncGxheWJhY2snfSxcbiAgW0lYMl9TVE9QX1JFUVVFU1RFRF06IHt2YWx1ZTogJ3N0b3AnfSxcbiAgW0lYMl9DTEVBUl9SRVFVRVNURURdOiB7dmFsdWU6ICdjbGVhcid9LFxufSk7XG5cbnR5cGUgaXhSZXF1ZXN0U3RhdGUgPSB7XG4gIHByZXZpZXc6IHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkO1xuICBwbGF5YmFjazogcGxheWJhY2tSZXF1ZXN0ZWRQYXlsb2FkO1xuICBzdG9wOiBzdG9wUmVxdWVzdGVkUGF5bG9hZDtcbiAgY2xlYXI6IFJlY29yZDxuZXZlciwgbmV2ZXI+O1xufTtcblxudHlwZSBpeFJlcXVlc3RBY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfUFJFVklFV19SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkOiBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9QTEFZQkFDS19SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkOiBwbGF5YmFja1JlcXVlc3RlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfU1RPUF9SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkOiBzdG9wUmVxdWVzdGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9DTEVBUl9SRVFVRVNURUQ7XG4gICAgICBwYXlsb2FkPzogbmV2ZXI7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGl4UmVxdWVzdCA9IChcbiAgc3RhdGU6IGl4UmVxdWVzdFN0YXRlID0gaW5pdGlhbFN0YXRlLFxuICBhY3Rpb246IGl4UmVxdWVzdEFjdGlvblxuKTogaXhSZXF1ZXN0U3RhdGUgPT4ge1xuICBpZiAoYWN0aW9uLnR5cGUgaW4gc3RhdGVLZXlzKSB7XG4gICAgY29uc3Qga2V5ID0gW3N0YXRlS2V5c1thY3Rpb24udHlwZV1dIGFzIGFueTtcbiAgICByZXR1cm4gc2V0SW4oc3RhdGUsIFtrZXldLCB7Li4uYWN0aW9uLnBheWxvYWR9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59O1xuIl0sIm5hbWVzIjpbIml4UmVxdWVzdCIsIklYMl9QUkVWSUVXX1JFUVVFU1RFRCIsIklYMl9QTEFZQkFDS19SRVFVRVNURUQiLCJJWDJfU1RPUF9SRVFVRVNURUQiLCJJWDJfQ0xFQVJfUkVRVUVTVEVEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJpbml0aWFsU3RhdGUiLCJwcmV2aWV3IiwicGxheWJhY2siLCJzdG9wIiwiY2xlYXIiLCJzdGF0ZUtleXMiLCJPYmplY3QiLCJjcmVhdGUiLCJ2YWx1ZSIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsImtleSIsInNldEluIiwicGF5bG9hZCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFxRGFBOzs7ZUFBQUE7OztpQ0FyRHNCO3NCQU9mO0FBTnBCLE1BQU0sRUFDSkMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ3BCLEdBQUdDLHFDQUFvQjtBQVF4QixNQUFNQyxlQUFlO0lBQ25CQyxTQUFTLENBQUM7SUFDVkMsVUFBVSxDQUFDO0lBQ1hDLE1BQU0sQ0FBQztJQUNQQyxPQUFPLENBQUM7QUFDVjtBQUVBLE1BQU1DLFlBQVlDLE9BQU9DLE1BQU0sQ0FBQyxNQUFNO0lBQ3BDLENBQUNaLHNCQUFzQixFQUFFO1FBQUNhLE9BQU87SUFBUztJQUMxQyxDQUFDWix1QkFBdUIsRUFBRTtRQUFDWSxPQUFPO0lBQVU7SUFDNUMsQ0FBQ1gsbUJBQW1CLEVBQUU7UUFBQ1csT0FBTztJQUFNO0lBQ3BDLENBQUNWLG9CQUFvQixFQUFFO1FBQUNVLE9BQU87SUFBTztBQUN4QztBQTJCTyxNQUFNZCxZQUFZLENBQ3ZCZSxRQUF3QlQsWUFBWSxFQUNwQ1U7SUFFQSxJQUFJQSxPQUFPQyxJQUFJLElBQUlOLFdBQVc7UUFDNUIsTUFBTU8sTUFBTTtZQUFDUCxTQUFTLENBQUNLLE9BQU9DLElBQUksQ0FBQztTQUFDO1FBQ3BDLE9BQU9FLElBQUFBLFdBQUssRUFBQ0osT0FBTztZQUFDRztTQUFJLEVBQUU7WUFBQyxHQUFHRixPQUFPSSxPQUFPO1FBQUE7SUFDL0M7SUFDQSxPQUFPTDtBQUNUIn0=
16583
16584}),
16585"5862": (function (__unused_webpack_module, exports, __webpack_require__) {
16586"use strict";
16587
16588Object.defineProperty(exports, "__esModule", ({
16589    value: true
16590}));
16591Object.defineProperty(exports, "ixSession", ({
16592    enumerable: true,
16593    get: function() {
16594        return ixSession;
16595    }
16596}));
16597const _sharedconstants = __webpack_require__(7087);
16598const _timm = __webpack_require__(1185);
16599const { IX2_SESSION_INITIALIZED, IX2_SESSION_STARTED, IX2_TEST_FRAME_RENDERED, IX2_SESSION_STOPPED, IX2_EVENT_LISTENER_ADDED, IX2_EVENT_STATE_CHANGED, IX2_ANIMATION_FRAME_CHANGED, IX2_ACTION_LIST_PLAYBACK_CHANGED, IX2_VIEWPORT_WIDTH_CHANGED, IX2_MEDIA_QUERIES_DEFINED } = _sharedconstants.IX2EngineActionTypes;
16600const initialState = {
16601    active: false,
16602    tick: 0,
16603    eventListeners: [],
16604    eventState: {},
16605    playbackState: {},
16606    viewportWidth: 0,
16607    mediaQueryKey: null,
16608    hasBoundaryNodes: false,
16609    hasDefinedMediaQueries: false,
16610    reducedMotion: false
16611};
16612const TEST_FRAME_STEPS_SIZE = 20;
16613const ixSession = (state = initialState, action)=>{
16614    switch(action.type){
16615        case IX2_SESSION_INITIALIZED:
16616            {
16617                const { hasBoundaryNodes, reducedMotion } = action.payload;
16618                return (0, _timm.merge)(state, {
16619                    hasBoundaryNodes,
16620                    reducedMotion
16621                });
16622            }
16623        case IX2_SESSION_STARTED:
16624            {
16625                return (0, _timm.set)(state, 'active', true);
16626            }
16627        case IX2_TEST_FRAME_RENDERED:
16628            {
16629                const { payload: { step = TEST_FRAME_STEPS_SIZE } } = action;
16630                return (0, _timm.set)(state, 'tick', state.tick + step);
16631            }
16632        case IX2_SESSION_STOPPED:
16633            {
16634                return initialState;
16635            }
16636        case IX2_ANIMATION_FRAME_CHANGED:
16637            {
16638                const { payload: { now } } = action;
16639                return (0, _timm.set)(state, 'tick', now);
16640            }
16641        case IX2_EVENT_LISTENER_ADDED:
16642            {
16643                const eventListeners = (0, _timm.addLast)(state.eventListeners, action.payload);
16644                return (0, _timm.set)(state, 'eventListeners', eventListeners);
16645            }
16646        case IX2_EVENT_STATE_CHANGED:
16647            {
16648                const { stateKey, newState } = action.payload;
16649                return (0, _timm.setIn)(state, [
16650                    'eventState',
16651                    stateKey
16652                ], newState);
16653            }
16654        case IX2_ACTION_LIST_PLAYBACK_CHANGED:
16655            {
16656                const { actionListId, isPlaying } = action.payload;
16657                return (0, _timm.setIn)(state, [
16658                    'playbackState',
16659                    actionListId
16660                ], isPlaying);
16661            }
16662        case IX2_VIEWPORT_WIDTH_CHANGED:
16663            {
16664                const { width, mediaQueries } = action.payload;
16665                const mediaQueryCount = mediaQueries.length;
16666                let mediaQueryKey = null;
16667                for(let i = 0; i < mediaQueryCount; i++){
16668                    const { key, min, max } = mediaQueries[i];
16669                    if (width >= min && width <= max) {
16670                        mediaQueryKey = key;
16671                        break;
16672                    }
16673                }
16674                return (0, _timm.merge)(state, {
16675                    viewportWidth: width,
16676                    mediaQueryKey
16677                });
16678            }
16679        case IX2_MEDIA_QUERIES_DEFINED:
16680            {
16681                return (0, _timm.set)(state, 'hasDefinedMediaQueries', true);
16682            }
16683        default:
16684            {
16685                return state;
16686            }
16687    }
16688};
16689
16690//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlNlc3Npb25SZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmNvbnN0IHtcbiAgSVgyX1NFU1NJT05fSU5JVElBTElaRUQsXG4gIElYMl9TRVNTSU9OX1NUQVJURUQsXG4gIElYMl9URVNUX0ZSQU1
16690FX1JFTkRFUkVELFxuICBJWDJfU0VTU0lPTl9TVE9QUEVELFxuICBJWDJfRVZFTlRfTElTVEVORVJfQURERUQsXG4gIElYMl9FVkVOVF9TVEFURV9DSEFOR0VELFxuICBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG4gIElYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VELFxuICBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCxcbiAgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCxcbn0gPSBJWDJFbmdpbmVBY3Rpb25UeXBlcztcbmltcG9ydCB7c2V0LCBzZXRJbiwgYWRkTGFzdCwgbWVyZ2V9IGZyb20gJ3RpbW0nO1xuaW1wb3J0IHtcbiAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZFBheWxvYWQsXG4gIGFuaW1hdGlvbkZyYW1lQ2hhbmdlZFBheWxvYWQsXG4gIGV2ZW50TGlzdGVuZXJBZGRlZFBheWxvYWQsXG4gIGV2ZW50U3RhdGVDaGFuZ2VkUGF5bG9hZCxcbiAgc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCxcbiAgdGVzdEZyYW1lUmVuZGVyZWRQYXlsb2FkLFxuICB2aWV3cG9ydFdpZHRoQ2hhbmdlZFBheWxvYWQsXG59IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgYWN0aXZlOiBmYWxzZSxcbiAgdGljazogMCxcbiAgZXZlbnRMaXN0ZW5lcnM6IFtdLFxuICBldmVudFN0YXRlOiB7fSxcbiAgcGxheWJhY2tTdGF0ZToge30sXG4gIHZpZXdwb3J0V2lkdGg6IDAsXG4gIG1lZGlhUXVlcnlLZXk6IG51bGwsXG4gIGhhc0JvdW5kYXJ5Tm9kZXM6IGZhbHNlLFxuICBoYXNEZWZpbmVkTWVkaWFRdWVyaWVzOiBmYWxzZSxcbiAgcmVkdWNlZE1vdGlvbjogZmFsc2UsXG59O1xuXG5jb25zdCBURVNUX0ZSQU1FX1NURVBTX1NJWkUgPSAyMDtcblxudHlwZSBpeFNlc3Npb25SZWR1Y2VyU3RhdGUgPSB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgdGljazogbnVtYmVyO1xuICBldmVudExpc3RlbmVyczogYW55W107XG4gIGV2ZW50U3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBsYXliYWNrU3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHZpZXdwb3J0V2lkdGg6IG51bWJlcjtcbiAgbWVkaWFRdWVyeUtleTogbnVsbDtcbiAgaGFzQm91bmRhcnlOb2RlczogYm9vbGVhbjtcbiAgaGFzRGVmaW5lZE1lZGlhUXVlcmllczogYm9vbGVhbjtcbiAgcmVkdWNlZE1vdGlvbjogYm9vbGVhbjtcbn07XG5cbnR5cGUgaXhTZXNzaW9uUmVkdWNlckFjdGlvbiA9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVEO1xuICAgICAgcGF5bG9hZDogc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX1NUQVJURUQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRDtcbiAgICAgIHBheWxvYWQ6IHRlc3RGcmFtZVJlbmRlcmVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX1NUT1BQRUQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQ7XG4gICAgICBwYXlsb2FkOiBhbmltYXRpb25GcmFtZUNoYW5nZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVEO1xuICAgICAgcGF5bG9hZDogZXZlbnRMaXN0ZW5lckFkZGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9FVkVOVF9TVEFURV9DSEFOR0VEO1xuICAgICAgcGF5bG9hZDogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQ7XG4gICAgICBwYXlsb2FkOiBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEO1xuICAgICAgcGF5bG9hZDogdmlld3BvcnRXaWR0aENoYW5nZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRDtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgaXhTZXNzaW9uID0gKFxuICBzdGF0ZTogaXhTZXNzaW9uUmVkdWNlclN0YXRlID0gaW5pdGlhbFN0YXRlLFxuICBhY3Rpb246IGl4U2Vzc2lvblJlZHVjZXJBY3Rpb25cbik6IGl4U2Vzc2lvblJlZHVjZXJTdGF0ZSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVEOiB7XG4gICAgICBjb25zdCB7aGFzQm91bmRhcnlOb2RlcywgcmVkdWNlZE1vdGlvbn0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHJldHVybiBtZXJnZShzdGF0ZSwge1xuICAgICAgICBoYXNCb3VuZGFyeU5vZGVzLFxuICAgICAgICByZWR1Y2VkTW90aW9uLFxuICAgICAgfSkgYXMgaXhTZXNzaW9uUmVkdWNlclN0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9TRVNTSU9OX1NUQVJURUQ6IHtcbiAgICAgIHJldHVybiBzZXQoc3RhdGUsICdhY3RpdmUnLCB0cnVlKTtcbiAgICB9XG4gICAgY2FzZSBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRDoge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYXlsb2FkOiB7c3RlcCA9IFRFU1RfRlJBTUVfU1RFUFNfU0laRX0sXG4gICAgICB9ID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIHNldChzdGF0ZSwgJ3RpY2snLCBzdGF0ZS50aWNrICsgc3RlcCk7XG4gICAgfVxuICAgIGNhc2UgSVgyX1NFU1NJT05fU1RPUFBFRDoge1xuICAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGF5bG9hZDoge25vd30sXG4gICAgICB9ID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIHNldChzdGF0ZSwgJ3RpY2snLCBub3cpO1xuICAgIH1cbiAgICBjYXNlIElYMl9FVkVOVF9MSVNURU5FUl9BRERFRDoge1xuICAgICAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBhZGRMYXN0KHN0YXRlLmV2ZW50TGlzdGVuZXJzLCBhY3Rpb24ucGF5bG9hZCk7XG4gICAgICByZXR1cm4gc2V0KHN0YXRlLCAnZXZlbnRMaXN0ZW5lcnMnLCBldmVudExpc3RlbmVycyk7XG4gICAgfVxuICAgIGNhc2UgSVgyX0VWRU5UX1NUQVRFX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHtzdGF0ZUtleSwgbmV3U3RhdGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gc2V0SW4oc3RhdGUsIFsnZXZlbnRTdGF0ZScsIHN0YXRlS2V5XSwgbmV3U3RhdGUpO1xuICAgIH1cbiAgICBjYXNlIElYMl9BQ1RJT05fTElT
16690VF9QTEFZQkFDS19DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7YWN0aW9uTGlzdElkLCBpc1BsYXlpbmd9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gc2V0SW4oc3RhdGUsIFsncGxheWJhY2tTdGF0ZScsIGFjdGlvbkxpc3RJZF0sIGlzUGxheWluZyk7XG4gICAgfVxuICAgIGNhc2UgSVgyX1ZJRVdQT1JUX1dJRFRIX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHt3aWR0aCwgbWVkaWFRdWVyaWVzfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgY29uc3QgbWVkaWFRdWVyeUNvdW50ID0gbWVkaWFRdWVyaWVzLmxlbmd0aDtcbiAgICAgIGxldCBtZWRpYVF1ZXJ5S2V5ID0gbnVsbDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVkaWFRdWVyeUNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qge2tleSwgbWluLCBtYXh9ID0gbWVkaWFRdWVyaWVzW2ldO1xuICAgICAgICBpZiAod2lkdGggPj0gbWluICYmIHdpZHRoIDw9IG1heCkge1xuICAgICAgICAgIG1lZGlhUXVlcnlLZXkgPSBrZXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXJnZShzdGF0ZSwge1xuICAgICAgICB2aWV3cG9ydFdpZHRoOiB3aWR0aCxcbiAgICAgICAgbWVkaWFRdWVyeUtleSxcbiAgICAgIH0pIGFzIGl4U2Vzc2lvblJlZHVjZXJTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSBJWDJfTUVESUFfUVVFUklFU19ERUZJTkVEOiB7XG4gICAgICByZXR1cm4gc2V0KHN0YXRlLCAnaGFzRGVmaW5lZE1lZGlhUXVlcmllcycsIHRydWUpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59O1xuIl0sIm5hbWVzIjpbIml4U2Vzc2lvbiIsIklYMl9TRVNTSU9OX0lOSVRJQUxJWkVEIiwiSVgyX1NFU1NJT05fU1RBUlRFRCIsIklYMl9URVNUX0ZSQU1FX1JFTkRFUkVEIiwiSVgyX1NFU1NJT05fU1RPUFBFRCIsIklYMl9FVkVOVF9MSVNURU5FUl9BRERFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQiLCJJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCIsIklYMl9NRURJQV9RVUVSSUVTX0RFRklORUQiLCJJWDJFbmdpbmVBY3Rpb25UeXBlcyIsImluaXRpYWxTdGF0ZSIsImFjdGl2ZSIsInRpY2siLCJldmVudExpc3RlbmVycyIsImV2ZW50U3RhdGUiLCJwbGF5YmFja1N0YXRlIiwidmlld3BvcnRXaWR0aCIsIm1lZGlhUXVlcnlLZXkiLCJoYXNCb3VuZGFyeU5vZGVzIiwiaGFzRGVmaW5lZE1lZGlhUXVlcmllcyIsInJlZHVjZWRNb3Rpb24iLCJURVNUX0ZSQU1FX1NURVBTX1NJWkUiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJwYXlsb2FkIiwibWVyZ2UiLCJzZXQiLCJzdGVwIiwibm93IiwiYWRkTGFzdCIsInN0YXRlS2V5IiwibmV3U3RhdGUiLCJzZXRJbiIsImFjdGlvbkxpc3RJZCIsImlzUGxheWluZyIsIndpZHRoIiwibWVkaWFRdWVyaWVzIiwibWVkaWFRdWVyeUNvdW50IiwibGVuZ3RoIiwiaSIsImtleSIsIm1pbiIsIm1heCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEyRmFBOzs7ZUFBQUE7OztpQ0EzRnNCO3NCQWFNO0FBWnpDLE1BQU0sRUFDSkMsdUJBQXVCLEVBQ3ZCQyxtQkFBbUIsRUFDbkJDLHVCQUF1QixFQUN2QkMsbUJBQW1CLEVBQ25CQyx3QkFBd0IsRUFDeEJDLHVCQUF1QixFQUN2QkMsMkJBQTJCLEVBQzNCQyxnQ0FBZ0MsRUFDaENDLDBCQUEwQixFQUMxQkMseUJBQXlCLEVBQzFCLEdBQUdDLHFDQUFvQjtBQVl4QixNQUFNQyxlQUFlO0lBQ25CQyxRQUFRO0l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
16691
16692}),
16693"7377": (function (__unused_webpack_module, exports) {
16694"use strict";
16695/* eslint-env browser */ 
16696Object.defineProperty(exports, "__esModule", ({
16697    value: true
16698}));
16699function _export(target, all) {
16700    for(var name in all)Object.defineProperty(target, name, {
16701        enumerable: true,
16702        get: all[name]
16703    });
16704}
16705_export(exports, {
16706    clearPlugin: function() {
16707        return clearPlugin;
16708    },
16709    createPluginInstance: function() {
16710        return createPluginInstance;
16711    },
16712    getPluginConfig: function() {
16713        return getPluginConfig;
16714    },
16715    getPluginDestination: function() {
16716        return getPluginDestination;
16717    },
16718    getPluginDuration: function() {
16719        return getPluginDuration;
16720    },
16721    getPluginOrigin: function() {
16722        return getPluginOrigin;
16723    },
16724    renderPlugin: function() {
16725        return renderPlugin;
16726    }
16727});
16728const getPluginConfig = (actionItemConfig)=>{
16729    return actionItemConfig.value;
16730};
16731const getPluginDuration = (element, actionItem)=>{
16732    if (actionItem.config.duration !== 'auto') {
16733        return null;
16734    }
16735    const duration = parseFloat(element.getAttribute('data-duration'));
16736    if (duration > 0) {
16737        return duration * 1000;
16738    }
16739    return parseFloat(element.getAttribute('data-default-duration')) * 1000;
16740};
16741const getPluginOrigin = (refState)=>{
16742    return refState || {
16743        value: 0
16744    };
16745};
16746const getPluginDestination = (actionItemConfig)=>{
16747    return {
16748        value: actionItemConfig.value
16749    };
16750};
16751const createPluginInstance = (element)=>{
16752    const lottie = window.Webflow.require('lottie');
16753    if (!lottie) return null;
16754    const instance = lottie.createInstance(element);
16755    instance.stop();
16756    instance.setSubframe(true);
16757    return instance;
16758};
16759const renderPlugin = (pluginInstance, refState, actionItem)=>{
16760    if (!pluginInstance) {
16761        return;
16762    }
16763    const percent = refState[actionItem.actionTypeId].value / 100;
16764    pluginInstance.goToFrame(pluginInstance.frames * percent);
16765};
16766const clearPlugin = (element)=>{
16767    const lottie = window.Webflow.require('lottie');
16768    if (lottie) {
16769        lottie.createInstance(element).stop();
16770    }
16771};
16772
16773//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkxvdHRpZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkNvbmZpZyA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gKGVsZW1lbnQsIGFjdGlvbkl0ZW0pID0+IHtcbiAgaWYgKGFjdGlvbkl0ZW0uY29uZmlnLmR1cmF0aW9uICE9PSAnYXV0bycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VGbG9hdChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1kdXJhdGlvbicpKTtcblxuICBpZiAoZHVyYXRpb24gPiAwKSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uICogMTAwMDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUZsb2F0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWRlZmF1bHQtZHVyYXRpb24nKSkgKiAxMDAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSkgPT4ge1xuICByZXR1cm4gcmVmU3RhdGUgfHwge3ZhbHVlOiAwfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EZXN0aW5hdGlvbiA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiB7dmFsdWU6IGFjdGlvbkl0ZW1Db25maWcudmFsdWV9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gKGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbG90dGllID0gd2luZG93LldlYmZsb3cucmVxdWlyZSgnbG90dGllJyk7XG4gIGlmICghbG90dGllKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5zdGFuY2UgPSBsb3R0aWUuY3JlYXRlSW5zdGFuY2UoZWxlbWVudCk7XG4gIGluc3RhbmNlLnN0b3AoKTtcbiAgaW5zdGFuY2Uuc2V0U3ViZnJhbWUodHJ1ZSk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAocGx1Z2luSW5zdGFuY2UsIHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGlmICghcGx1Z2luSW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGVyY2VudCA9IHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXS52YWx1ZSAvIDEwMDtcbiAgcGx1Z2luSW5zdGFuY2UuZ29Ub0ZyYW1lKHBsdWdpbkluc3RhbmNlLmZyYW1lcyAqIHBlcmNlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbG90dGllID0gd2luZG93LldlYmZsb3cucmVxdWlyZSgnbG90dGllJyk7XG4gIGlmIChsb3R0aWUpIHtcbiAgICBsb3R0aWUuY3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuc3RvcCgpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJ
16773nZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwicmVuZGVyUGx1Z2luIiwiYWN0aW9uSXRlbUNvbmZpZyIsInZhbHVlIiwiZWxlbWVudCIsImFjdGlvbkl0ZW0iLCJjb25maWciLCJkdXJhdGlvbiIsInBhcnNlRmxvYXQiLCJnZXRBdHRyaWJ1dGUiLCJyZWZTdGF0ZSIsImxvdHRpZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiaW5zdGFuY2UiLCJjcmVhdGVJbnN0YW5jZSIsInN0b3AiLCJzZXRTdWJmcmFtZSIsInBsdWdpbkluc3RhbmNlIiwicGVyY2VudCIsImFjdGlvblR5cGVJZCIsImdvVG9GcmFtZSIsImZyYW1lcyJdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCOzs7Ozs7Ozs7OztJQTZDVEEsV0FBVztlQUFYQTs7SUFqQkFDLG9CQUFvQjtlQUFwQkE7O0lBMUJBQyxlQUFlO2VBQWZBOztJQXNCQUMsb0JBQW9CO2VBQXBCQTs7SUFsQkFDLGlCQUFpQjtlQUFqQkE7O0lBY0FDLGVBQWU7ZUFBZkE7O0lBaUJBQyxZQUFZO2VBQVpBOzs7QUFuQ04sTUFBTUosa0JBQWtCLENBQUNLO0lBQzlCLE9BQU9BLGlCQUFpQkMsS0FBSztBQUMvQjtBQUVPLE1BQU1KLG9CQUFvQixDQUFDSyxTQUFTQztJQUN6QyxJQUFJQSxXQUFXQyxNQUFNLENBQUNDLFFBQVEsS0FBSyxRQUFRO1FBQ3pDLE9BQU87SUFDVDtJQUVBLE1BQU1BLFdBQVdDLFdBQVdKLFFBQVFLLFlBQVksQ0FBQztJQUVqRCxJQUFJRixXQUFXLEdBQUc7UUFDaEIsT0FBT0EsV0FBVztJQUNwQjtJQUVBLE9BQU9DLFdBQVdKLFFBQVFLLFlBQVksQ0FBQyw0QkFBNEI7QUFDckU7QUFFTyxNQUFNVCxrQkFBa0IsQ0FBQ1U7SUFDOUIsT0FBT0EsWUFBWTtRQUFDUCxPQUFPO0lBQUM7QUFDOUI7QUFFTyxNQUFNTCx1QkFBdUIsQ0FBQ0k7SUFDbkMsT0FBTztRQUFDQyxPQUFPRCxpQkFBaUJDLEtBQUs7SUFBQTtBQUN2QztBQUVPLE1BQU1QLHVCQUF1QixDQUFDUTtJQUNuQyxNQUFNTyxTQUFTQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztJQUN0QyxJQUFJLENBQUNILFFBQVEsT0FBTztJQUNwQixNQUFNSSxXQUFXSixPQUFPSyxjQUFjLENBQUNaO0lBQ3ZDVyxTQUFTRSxJQUFJO0lBQ2JGLFNBQVNHLFdBQVcsQ0FBQztJQUNyQixPQUFPSDtBQUNUO0FBRU8sTUFBTWQsZUFBZSxDQUFDa0IsZ0JBQWdCVCxVQUFVTDtJQUNyRCxJQUFJLENBQUNjLGdCQUFnQjtRQUNuQjtJQUNGO0lBQ0EsTUFBTUMsVUFBVVYsUUFBUSxDQUFDTCxXQUFXZ0IsWUFBWSxDQUFDLENBQUNsQixLQUFLLEdBQUc7SUFDMURnQixlQUFlRyxTQUFTLENBQUNILGVBQWVJLE1BQU0sR0FBR0g7QUFDbkQ7QUFFTyxNQUFNekIsY0FBYyxDQUFDUztJQUMxQixNQUFNTyxTQUFTQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztJQUN0QyxJQUFJSCxRQUFRO1FBQ1ZBLE9BQU9LLGNBQWMsQ0FBQ1osU0FBU2EsSUFBSTtJQUNyQztBQUNGIn0=
16774
16775}),
16776"5163": (function (__unused_webpack_module, exports) {
16777"use strict";
16778/* eslint-env browser */ 
16779Object.defineProperty(exports, "__esModule", ({
16780    value: true
16781}));
16782function _export(target, all) {
16783    for(var name in all)Object.defineProperty(target, name, {
16784        enumerable: true,
16785        get: all[name]
16786    });
16787}
16788_export(exports, {
16789    clearPlugin: function() {
16790        return clearPlugin;
16791    },
16792    createPluginInstance: function() {
16793        return createPluginInstance;
16794    },
16795    getPluginConfig: function() {
16796        return getPluginConfig;
16797    },
16798    getPluginDestination: function() {
16799        return getPluginDestination;
16800    },
16801    getPluginDuration: function() {
16802        return getPluginDuration;
16803    },
16804    getPluginOrigin: function() {
16805        return getPluginOrigin;
16806    },
16807    renderPlugin: function() {
16808        return renderPlugin;
16809    }
16810});
16811const FIT_KEY = '--wf-rive-fit';
16812const ALIGNMENT_KEY = '--wf-rive-alignment';
16813const queryContainerElement = (elementId)=>document.querySelector(`[data-w-id="${elementId}"]`);
16814const getFrontendModule = ()=>window.Webflow.require('rive');
16815const getPluginConfig = (actionItemConfig, key)=>actionItemConfig.value.inputs[key];
16816const getPluginDuration = ()=>null; // Not used by this plugin
16817const getPluginOrigin = (refState, actionItem)=>{
16818    if (refState) return refState;
16819    const result = {};
16820    const { inputs = {} } = actionItem.config.value;
16821    for(const input in inputs)if (inputs[input] == null) result[input] = 0;
16822    return result;
16823};
16824const getPluginDestination = (actionItemConfig)=>actionItemConfig.value.inputs ?? {};
16825const createPluginInstance = (element, actionItem)=>{
16826    const selectorGuids = actionItem.config?.target?.selectorGuids || [];
16827    if (selectorGuids.length > 0) return element;
16828    // In this case, we define pluginInstance as a reference to the container element
16829    const pluginElementId = actionItem?.config?.target?.pluginElement;
16830    return pluginElementId ? queryContainerElement(pluginElementId) : null;
16831};
16832const renderPlugin = (containerElement, { PLUGIN_RIVE: props }, actionItem)=>{
16833    const frontendModule = getFrontendModule();
16834    if (!frontendModule) return;
16835    const instance = frontendModule.getInstance(containerElement);
16836    const StateMachineInputType = frontendModule.rive.StateMachineInputType;
16837    const { name, inputs = {} } = actionItem.config.value || {};
16838    function renderRive(riveInstance) {
16839        if (riveInstance.loaded) {
16840            render();
16841        } else {
16842            // Render instance immediately on load and then clean up handler
16843            const onLoad = ()=>{
16844                render();
16845                riveInstance?.off('load', onLoad);
16846            };
16847            riveInstance?.on('load', onLoad);
16848        }
16849        function render() {
16850            const stateMachineInputs = riveInstance.stateMachineInputs(name);
16851            if (stateMachineInputs == null) return;
16851 // exit early since no inputs found
16852            if (!riveInstance.isPlaying) riveInstance.play(name, false); // set autoplay: false because IX engine is controlling playback.
16853            if (FIT_KEY in inputs || ALIGNMENT_KEY in inputs) {
16854                const currentLayout = riveInstance.layout;
16855                const nextFit = inputs[FIT_KEY] ?? currentLayout.fit;
16856                const nextAlignment = inputs[ALIGNMENT_KEY] ?? currentLayout.alignment;
16857                if (nextFit !== currentLayout.fit || nextAlignment !== currentLayout.alignment) {
16858                    riveInstance.layout = currentLayout.copyWith({
16859                        fit: nextFit,
16860                        alignment: nextAlignment
16861                    });
16862                }
16863            }
16864            for(const inputName in inputs){
16865                if (inputName === FIT_KEY || inputName === ALIGNMENT_KEY) continue;
16866                const machineInput = stateMachineInputs.find((m)=>m.name === inputName);
16867                if (machineInput == null) continue;
16868                switch(machineInput.type){
16869                    case StateMachineInputType.Boolean:
16870                        {
16871                            if (inputs[inputName] != null) {
16872                                const booleanValue = Boolean(inputs[inputName]);
16873                                machineInput.value = booleanValue;
16874                            }
16875                            break;
16876                        }
16877                    case StateMachineInputType.Number:
16878                        {
16879                            const numberValue = props[inputName];
16880                            if (numberValue != null) machineInput.value = numberValue;
16881                            break;
16882                        }
16883                    case StateMachineInputType.Trigger:
16884                        {
16885                            if (inputs[inputName]) machineInput.fire();
16886                            break;
16887                        }
16888                }
16889            }
16890        }
16891    }
16892    // Render rive if the instance is available
16893    if (instance?.rive) renderRive(instance.rive);
16894    else frontendModule.setLoadHandler(containerElement, renderRive);
16895};
16896const clearPlugin = (_containerElement, _actionItem)=>null; // Not used by this plugin
16897
16898//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlJpdmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbmNvbnN0IEZJVF9LRVkgPSAnLS13Zi1yaXZlLWZpdCc7XG5jb25zdCBBTElHTk1FTlRfS0VZID0gJy0td2Ytcml2ZS1hbGlnbm1lbnQnO1xuXG5jb25zdCBxdWVyeUNvbnRhaW5lckVsZW1lbnQgPSAoZWxlbWVudElkKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS13LWlkPVwiJHtlbGVtZW50SWR9XCJdYCk7XG5cbmNvbnN0IGdldEZyb250ZW5kTW9kdWxlID0gKCkgPT4gd2luZG93LldlYmZsb3cucmVxdWlyZSgncml2ZScpO1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luQ29uZmlnID0gKGFjdGlvbkl0ZW1Db25maWcsIGtleSkgPT5cbiAgYWN0aW9uSXRlbUNvbmZpZy52YWx1ZS5pbnB1dHNba2V5XTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gKCkgPT4gbnVsbDsgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSwgYWN0aW9uSXRlbSkgPT4ge1xuICBpZiAocmVmU3RhdGUpIHJldHVybiByZWZTdGF0ZTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IHtpbnB1dHMgPSB7fX0gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZTtcbiAgZm9yIChjb25zdCBpbnB1dCBpbiBpbnB1dHMpIGlmIChpbnB1dHNbaW5wdXRdID09IG51bGwpIHJlc3VsdFtpbnB1dF0gPSAwO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkRlc3RpbmF0aW9uID0gKGFjdGlvbkl0ZW1Db25maWcpID0+XG4gIGFjdGlvbkl0ZW1Db25maWcudmFsdWUuaW5wdXRzID8/IHt9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGx1Z2luSW5zdGFuY2UgPSAoZWxlbWVudCwgYWN0aW9uSXRlbSkgPT4ge1xuICBjb25zdCBzZWxlY3Rvckd1aWRzID0gYWN0aW9uSXRlbS5jb25maWc/LnRhcmdldD8uc2VsZWN0b3JHdWlkcyB8fCBbXTtcbiAgaWYgKHNlbGVjdG9yR3VpZHMubGVuZ3RoID4gMCkgcmV0dXJuIGVsZW1lbnQ7XG5cbiAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBkZWZpbmUgcGx1Z2luSW5zdGFuY2UgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5lciBlbGVtZW50XG4gIGNvbnN0IHBsdWdpbkVsZW1lbnRJZCA9IGFjdGlvbkl0ZW0/LmNvbmZpZz8udGFyZ2V0Py5wbHVnaW5FbGVtZW50O1xuICByZXR1cm4gcGx1Z2luRWxlbWVudElkID8gcXVlcnlDb250YWluZXJFbGVtZW50KHBsdWdpbkVsZW1lbnRJZCkgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclBsdWdpbiA9IChcbiAgY29udGFpbmVyRWxlbWVudCxcbiAge1BMVUdJTl9SSVZFOiBwcm9wc30sXG4gIGFjdGlvbkl0ZW1cbikgPT4ge1xuICBjb25zdCBmcm9udGVuZE1vZHVsZSA9IGdldEZyb250ZW5kTW9kdWxlKCk7XG4gIGlmICghZnJvbnRlbmRNb2R1bGUpIHJldHVybjtcbiAgY29uc3QgaW5zdGFuY2UgPSBmcm9udGVuZE1vZHVsZS5nZXRJbnN0YW5jZShjb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgU3RhdGVNYWNoaW5lSW5wdXRUeXBlID0gZnJvbnRlbmRNb2R1bGUucml2ZS5TdGF0ZU1hY2hpbmVJbnB1dFR5cGU7XG4gIGNvbnN0IHtuYW1lLCBpbnB1dHMgPSB7fX0gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZSB8fCB7fTtcblxuICBmdW5jdGlvbiByZW5kZXJSaXZlKHJpdmVJbnN0YW5jZSkge1xuICAgIGlmIChyaXZlSW5zdGFuY2UubG9hZGVkKSB7XG4gICAgICByZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVuZGVyIGluc3RhbmNlIGltbWVkaWF0ZWx5IG9uIGxvYWQgYW5kIHR
16898oZW4gY2xlYW4gdXAgaGFuZGxlclxuICAgICAgY29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgcml2ZUluc3RhbmNlPy5vZmYoJ2xvYWQnLCBvbkxvYWQpO1xuICAgICAgfTtcblxuICAgICAgcml2ZUluc3RhbmNlPy5vbignbG9hZCcsIG9uTG9hZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lSW5wdXRzID0gcml2ZUluc3RhbmNlLnN0YXRlTWFjaGluZUlucHV0cyhuYW1lKTtcbiAgICAgIGlmIChzdGF0ZU1hY2hpbmVJbnB1dHMgPT0gbnVsbCkgcmV0dXJuOyAvLyBleGl0IGVhcmx5IHNpbmNlIG5vIGlucHV0cyBmb3VuZFxuXG4gICAgICBpZiAoIXJpdmVJbnN0YW5jZS5pc1BsYXlpbmcpIHJpdmVJbnN0YW5jZS5wbGF5KG5hbWUsIGZhbHNlKTsgLy8gc2V0IGF1dG9wbGF5OiBmYWxzZSBiZWNhdXNlIElYIGVuZ2luZSBpcyBjb250cm9sbGluZyBwbGF5YmFjay5cblxuICAgICAgaWYgKEZJVF9LRVkgaW4gaW5wdXRzIHx8IEFMSUdOTUVOVF9LRVkgaW4gaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXlvdXQgPSByaXZlSW5zdGFuY2UubGF5b3V0O1xuICAgICAgICBjb25zdCBuZXh0Rml0ID0gaW5wdXRzW0ZJVF9LRVldID8/IGN1cnJlbnRMYXlvdXQuZml0O1xuICAgICAgICBjb25zdCBuZXh0QWxpZ25tZW50ID0gaW5wdXRzW0FMSUdOTUVOVF9LRVldID8/IGN1cnJlbnRMYXlvdXQuYWxpZ25tZW50O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXh0Rml0ICE9PSBjdXJyZW50TGF5b3V0LmZpdCB8fFxuICAgICAgICAgIG5leHRBbGlnbm1lbnQgIT09IGN1cnJlbnRMYXlvdXQuYWxpZ25tZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHJpdmVJbnN0YW5jZS5sYXlvdXQgPSBjdXJyZW50TGF5b3V0LmNvcHlXaXRoKHtcbiAgICAgICAgICAgIGZpdDogbmV4dEZpdCxcbiAgICAgICAgICAgIGFsaWdubWVudDogbmV4dEFsaWdubWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBpbnB1dHMpIHtcbiAgICAgICAgaWYgKGlucHV0TmFtZSA9PT0gRklUX0tFWSB8fCBpbnB1dE5hbWUgPT09IEFMSUdOTUVOVF9LRVkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IG1hY2hpbmVJbnB1dCA9IHN0YXRlTWFjaGluZUlucHV0cy5maW5kKFxuICAgICAgICAgIChtKSA9PiBtLm5hbWUgPT09IGlucHV0TmFtZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYWNoaW5lSW5wdXQgPT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgc3dpdGNoIChtYWNoaW5lSW5wdXQudHlwZSkge1xuICAgICAgICAgIGNhc2UgU3RhdGVNYWNoaW5lSW5wdXRUeXBlLkJvb2xlYW46IHtcbiAgICAgICAgICAgIGlmIChpbnB1dHNbaW5wdXROYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5WYWx1ZSA9IEJvb2xlYW4oaW5wdXRzW2lucHV0TmFtZV0pO1xuICAgICAgICAgICAgICBtYWNoaW5lSW5wdXQudmFsdWUgPSBib29sZWFuVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFN0YXRlTWFjaGluZUlucHV0VHlwZS5OdW1iZXI6IHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlclZhbHVlID0gcHJvcHNbaW5wdXROYW1lXTtcbiAgICAgICAgICAgIGlmIChudW1iZXJWYWx1ZSAhPSBudWxsKSBtYWNoaW5lSW5wdXQudmFsdWUgPSBudW1iZXJWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgU3RhdGVNYWNoaW5lSW5wdXRUeXBlLlRyaWdnZXI6IHtcbiAgICAgICAgICAgIGlmIChpbnB1dHNbaW5wdXROYW1lXSkgbWFjaGluZUlucHV0LmZpcmUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbmRlciByaXZlIGlmIHRoZSBpbnN0YW5jZSBpcyBhdmFpbGFibGVcbiAgaWYgKGluc3RhbmNlPy5yaXZlKSByZW5kZXJSaXZlKGluc3RhbmNlLnJpdmUpO1xuICAvLyBPdGhlcndpc2UsIHN0b3JlIGxhdGVzdCByZW5kZXIgYXMgYSBjYWxsYmFjayB0byBmaXJlIHdoZW4gbG9hZGVkXG4gIGVsc2UgZnJvbnRlbmRNb2R1bGUuc2V0TG9hZEhhbmRsZXIoY29udGFpbmVyRWxlbWVudCwgcmVuZGVyUml2ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJQbHVnaW4gPSAoX2NvbnRhaW5lckVsZW1lbnQsIF9hY3Rpb25JdGVtKSA9PiBudWxsOyAvLyBOb3QgdXNlZCBieSB0aGlzIHBsdWdpblxuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwicmVuZGVyUGx1Z2luIiwiRklUX0tFWSIsIkFMSUdOTUVOVF9LRVkiLCJxdWVyeUNvbnRhaW5lckVsZW1lbnQiLCJlbGVtZW50SWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRGcm9udGVuZE1vZHVsZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiYWN0aW9uSXRlbUNvbmZpZyIsImtleSIsInZhbHVlIiwiaW5wdXRzIiwicmVmU3RhdGUiLCJhY3Rpb25JdGVtIiwicmVzdWx0IiwiY29uZmlnIiwiaW5wdXQiLCJlbGVtZW50Iiwic2VsZWN0b3JHdWlkcyIsInRhcmdldCIsImxlbmd0aCIsInBsdWdpbkVsZW1lbnRJZCIsInBsdWdpbkVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwiUExVR0lOX1JJVkUiLCJwcm9wcyIsImZyb250ZW5kTW9kdWxlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIlN0YXRlTWFjaGluZUlucHV0VHlwZSIsInJpdmUiLCJuYW1lIiwicmVuZGVyUml2ZSIsInJpdmVJbnN0YW5jZSIsImxvYWRlZCIsInJlbmRlciIsIm9uTG9hZCIsIm9mZiIsIm9uIiwic3RhdGVNYWNoaW5lSW5wdXRzIiwiaXNQbGF5aW5nIiwicGxheSIsImN1cnJlbnRMYXlvdXQiLCJsYXlvdXQiLCJuZXh0Rml0IiwiZml0IiwibmV4dEFsaWdubWVudCIsImFsaWdubWVudCIsImNvcHlXaXRoIiwiaW5wdXROYW1lIiwibWFjaGluZUlucHV0IiwiZmluZCIsIm0iLCJ0eXBlIiwiQm9vbGVhbiIsImJvb2xlYW5WYWx1ZSIsIk51bWJlciIsIm51bWJlclZhbHVlIiwiVHJpZ2dlciIsImZpcmUiLCJzZXRMb2FkSGFuZGxlciIsIl9jb250YWluZXJFbGVtZW50IiwiX2FjdGlvbkl0ZW0iXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUF3SFRBLFdBQVc7ZUFBWEE7O0lBOUZBQyxvQkFBb0I7ZUFBcEJBOztJQWhCQUMsZUFBZTtlQUFmQTs7SUFhQUMsb0JBQW9CO2VBQXBCQTs7SUFWQUMsaUJBQWlCO2VBQWpCQTs7SUFFQUMsZUFBZTtlQUFmQTs7SUFvQkFDLFlBQVk7ZUFBWkE7OztBQWpDYixNQUFNQyxVQUFVO0FBQ2hCLE1BQU1DLGdCQUFnQjtBQUV0QixNQUFNQyx3QkFBd0IsQ0FBQ0MsWUFDN0JDLFNBQVNDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRUYsVUFBVSxFQUFFLENBQUM7QUFFckQsTUFBTUcsb0JBQW9CLElBQU1DLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDO0FBRWhELE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
16899
16900}),
16901"2866": (function (__unused_webpack_module, exports) {
16902"use strict";
16903/* eslint-env browser */ 
16904Object.defineProperty(exports, "__esModule", ({
16905    value: true
16906}));
16907function _export(target, all) {
16908    for(var name in all)Object.defineProperty(target, name, {
16909        enumerable: true,
16910        get: all[name]
16911    });
16912}
16913_export(exports, {
16914    clearPlugin: function() {
16915        return clearPlugin;
16916    },
16917    createPluginInstance: function() {
16918        return createPluginInstance;
16919    },
16920    getPluginConfig: function() {
16921        return getPluginConfig;
16922    },
16923    getPluginDestination: function() {
16924        return getPluginDestination;
16925    },
16926    getPluginDuration: function() {
16927        return getPluginDuration;
16928    },
16929    getPluginOrigin: function() {
16930        return getPluginOrigin;
16931    },
16932    renderPlugin: function() {
16933        return renderPlugin;
16934    }
16935});
16936const queryContainerElement = (elementId)=>document.querySelector(`[data-w-id="${elementId}"]`);
16937const getFrontendModule = ()=>window.Webflow.require('spline');
16938const difference = (arr1, arr2)=>arr1.filter((x)=>!arr2.includes(x));
16939const getPluginConfig = (actionItemConfig, key)=>{
16940    return actionItemConfig.value[key];
16941};
16942const getPluginDuration = ()=>{
16943    // Not used by this plugin
16944    return null;
16945};
16946const DEFAULT_VALUES = Object.freeze({
16947    positionX: 0,
16948    positionY: 0,
16949    positionZ: 0,
16950    rotationX: 0,
16951    rotationY: 0,
16952    rotationZ: 0,
16953    scaleX: 1,
16954    scaleY: 1,
16955    scaleZ: 1
16956});
16957const getPluginOrigin = (refState, actionItem)=>{
16958    // Determine which props we care about in the destination
16959    const destination = actionItem.config.value;
16960    const destinationKeys = Object.keys(destination);
16961    // Check the current state for any missing origin props
16962    if (refState) {
16963        const stateKeys = Object.keys(refState);
16964        const diffKeys = difference(destinationKeys, stateKeys);
16965        // If new props are needed, merge new origin values with current state
16966        if (diffKeys.length) {
16967            const origin = diffKeys.reduce((result, key)=>{
16968                result[key] = DEFAULT_VALUES[key];
16969                return result;
16970            }, refState);
16971            return origin;
16972        }
16973        // No difference, return current state
16974        return refState;
16975    }
16976    // State doesn't exist so define new origin based on destination
16977    const origin = destinationKeys.reduce((result, key)=>{
16978        result[key] = DEFAULT_VALUES[key];
16979        return result;
16980    }, {});
16981    return origin;
16982};
16983const getPluginDestination = (actionItemConfig)=>{
16984    return actionItemConfig.value;
16985};
16986const createPluginInstance = (element, actionItem)=>{
16987    // In this case, we define pluginInstance as a reference to the container element
16988    const pluginElementId = actionItem?.config?.target?.pluginElement;
16989    return pluginElementId ? queryContainerElement(pluginElementId) : null;
16990};
16991const renderPlugin = (containerElement, refState, actionItem)=>{
16992    const frontendModule = getFrontendModule();
16993    if (!frontendModule) return;
16994    const instance = frontendModule.getInstance(containerElement);
16995    const objectId = actionItem.config.target.objectId;
16996    const renderSpline = (spline)=>{
16997        if (!spline) {
16998            throw new Error('Invalid spline app passed to render
16998Spline');
16999        }
17000        const obj = objectId && spline.findObjectById(objectId);
17001        if (!obj) {
17002            return;
17003        }
17004        const { PLUGIN_SPLINE: props } = refState;
17005        if (props.positionX != null) {
17006            obj.position.x = props.positionX;
17007        }
17008        if (props.positionY != null) {
17009            obj.position.y = props.positionY;
17010        }
17011        if (props.positionZ != null) {
17012            obj.position.z = props.positionZ;
17013        }
17014        if (props.rotationX != null) {
17015            obj.rotation.x = props.rotationX;
17016        }
17017        if (props.rotationY != null) {
17018            obj.rotation.y = props.rotationY;
17019        }
17020        if (props.rotationZ != null) {
17021            obj.rotation.z = props.rotationZ;
17022        }
17023        if (props.scaleX != null) {
17024            obj.scale.x = props.scaleX;
17025        }
17026        if (props.scaleY != null) {
17027            obj.scale.y = props.scaleY;
17028        }
17029        if (props.scaleZ != null) {
17030            obj.scale.z = props.scaleZ;
17031        }
17032    };
17033    if (instance) {
17034        // Render spline if the app instance is already loaded
17035        renderSpline(instance.spline);
17036    } else {
17037        // Otherwise, store latest render as a callback to fire when loaded
17038        frontendModule.setLoadHandler(containerElement, renderSpline);
17039    }
17040};
17041const clearPlugin = ()=>{
17042    // Not used by this plugin
17043    return null;
17044};
17045
17046//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlNwbGluZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuY29uc3QgcXVlcnlDb250YWluZXJFbGVtZW50ID0gKGVsZW1lbnRJZCkgPT5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtdy1pZD1cIiR7ZWxlbWVudElkfVwiXWApO1xuXG5jb25zdCBnZXRGcm9udGVuZE1vZHVsZSA9ICgpID0+IHdpbmRvdy5XZWJmbG93LnJlcXVpcmUoJ3NwbGluZScpO1xuXG5jb25zdCBkaWZmZXJlbmNlID0gKGFycjEsIGFycjIpID0+IGFycjEuZmlsdGVyKCh4KSA9PiAhYXJyMi5pbmNsdWRlcyh4KSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5Db25maWcgPSAoYWN0aW9uSXRlbUNvbmZpZywga2V5KSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlW2tleV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRHVyYXRpb24gPSAoKSA9PiB7XG4gIC8vIE5vdCB1c2VkIGJ5IHRoaXMgcGx1Z2luXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgREVGQVVMVF9WQUxVRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgcG9zaXRpb25YOiAwLFxuICBwb3NpdGlvblk6IDAsXG4gIHBvc2l0aW9uWjogMCxcbiAgcm90YXRpb25YOiAwLFxuICByb3RhdGlvblk6IDAsXG4gIHJvdGF0aW9uWjogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDEsXG4gIHNjYWxlWjogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luT3JpZ2luID0gKHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB3ZSBjYXJlIGFib3V0IGluIHRoZSBkZXN0aW5hdGlvblxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGFjdGlvbkl0ZW0uY29uZmlnLnZhbHVlO1xuICBjb25zdCBkZXN0aW5hdGlvbktleXMgPSBPYmplY3Qua2V5cyhkZXN0aW5hdGlvbik7XG4gIC8vIENoZWNrIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnkgbWlzc2luZyBvcmlnaW4gcHJvcHNcbiAgaWYgKHJlZlN0YXRlKSB7XG4gICAgY29uc3Qgc3RhdGVLZXlzID0gT2JqZWN0LmtleXMocmVmU3RhdGUpO1xuICAgIGNvbnN0IGRpZmZLZXlzID0gZGlmZmVyZW5jZShkZXN0aW5hdGlvbktleXMsIHN0YXRlS2V5cyk7XG4gICAgLy8gSWYgbmV3IHByb3BzIGFyZSBuZWVkZWQsIG1lcmdlIG5ldyBvcmlnaW4gdmFsdWVzIHdpdGggY3VycmVudCBzdGF0ZVxuICAgIGlmIChkaWZmS2V5cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IGRpZmZLZXlzLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBERUZBVUxUX1ZBTFVFU1trZXldO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgcmVmU3RhdGUpO1xuICAgICAgcmV0dXJuIG9yaWdpbjtcbiAgICB9XG4gICAgLy8gTm8gZGlmZmVyZW5jZSwgcmV0dXJuIGN1cnJlbnQgc3RhdGVcbiAgICByZXR1cm4gcmVmU3RhdGU7XG4gIH1cbiAgLy8gU3RhdGUgZG9lc24ndCBleGlzdCBzbyBkZWZpbmUgbmV3IG9yaWdpbiBiYXNlZCBvbiBkZXN0aW5hdGlvblxuICBjb25zdCBvcmlnaW4gPSBkZXN0aW5hdGlvbktleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIHJlc3VsdFtrZXldID0gREVGQVVMVF9WQUxVRVNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRGVzdGluYXRpb24gPSAoYWN0aW9uSXRlbUNvbmZpZykgPT4ge1xuICByZXR1cm4gYWN0aW9uSXRlbUNvbmZpZy52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQbHVnaW5JbnN0YW5jZSA9IChlbGVtZW50LCBhY3Rpb25JdGVtKSA9PiB7XG4gIC8vIEluIHRoaXMgY2FzZSwgd2UgZGVmaW5lIHBsdWdpbkluc3RhbmNlIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICBjb25zdCBwbHVnaW5FbGVtZW50SWQgPSBhY3Rpb25JdGVtPy5jb25maWc/LnRhcmdldD8ucGx1Z2luRWxlbWVudDtcbiAgcmV0dXJuIHBsdWdpbkVsZW1lbnRJZCA/IHF1ZXJ5Q29udGFpbmVyRWxlbWVudChwbHVnaW5FbGVtZW50SWQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAoY29udGFpbmVyRWxlbWVudCwgcmVmU3RhdGUsIGFjdGlvbkl0ZW0pID0+IHtcbiAgY29uc3QgZnJvbnRlbmRNb2R1bGUgPSBnZXRGcm9udGVuZE1vZHVsZSgpO1xuICBpZiAoIWZyb250ZW5kTW9kdWxlKSByZXR1cm47XG4gIGNvbnN0IGluc3RhbmNlID0gZnJvbnRlbmRNb2R1bGUuZ2V0SW5zdGFuY2UoY29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IG9iamVjdElkID0gYWN0aW9uSXRlbS5jb25maWcudGFyZ2V0Lm9iamVjdElkO1xuXG4gIGNvbnN0IHJlbmRlclNwbGluZSA9IChzcGxpbmUpID0+IHtcbiAgICBpZiAoIXNwbGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNwbGluZSBhcHAgcGFzc2VkIHRvIHJlbmRlclNwbGluZScpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSBvYmplY3RJZCAmJiBzcGxpbmUuZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpO1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtQTFVHSU5fU1BMSU5FOiBwcm9wc30gPSByZWZTdGF0ZTtcbiAgICBpZiAocHJvcHMucG9zaXRpb25YICE9IG51bGwpIHtcbiAgICAgIG9iai5wb3NpdGlvbi54ID0gcHJvcHMucG9zaXRpb25YO1xuICAgIH1cbiAgICBpZiAocHJvcHMucG9zaXRpb25ZICE9IG51bGwpIHtcbiAgICAgIG9iai5wb3NpdGlvbi55ID0gcHJvcHMucG9zaXRpb25ZO1xuICAgIH1cbiAgICBpZiAocHJvcHMucG9zaXRpb25aICE9IG51bGwpIHtcbiAgICAgIG9iai5wb3NpdGlvbi56ID0gcHJvcHMucG9zaXRpb25aO1xuICAgIH1cbiAgICBpZiAocHJvcHMucm90YXRpb25YICE9IG51bGwpIHtcbiAgICAgIG9iai5yb3RhdGlvbi54ID0gcHJvcHMucm90YXRpb25YO1xuICAgIH1cbiAgICBpZiAocHJvcHMucm90YXRpb25ZICE9IG51bGwpIHtcbiAgICAgIG9iai5yb3RhdGlvbi55ID0gcHJvcHMucm90YXRpb25ZO1xuICAgIH1cbiAgICBpZiAocHJvcHMucm90YXRpb25aICE9IG51bGwpIHtcbiAgICAgIG9iai5yb3RhdGlvbi56ID0gcHJvcHMucm90YXRpb25aO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2NhbGVYICE9IG51bGwpIHtcbiAgICAgIG9iai5zY2FsZS54ID0gcHJvcHMuc2NhbGVYO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2NhbGVZICE9IG51bGwpIHtcbiAgICAgIG9iai5zY2FsZS55ID0gcHJvcHMuc2NhbGVZO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2NhbGVaICE9IG51bGwpIHtcbiAgICAgIG9iai5zY2FsZS56ID0gcHJvcHMuc2NhbGVaO1xuICAgIH1cbiAgfTtcblxuICBpZiAoaW5zdGFuY2UpIHtcbiAgICAvLyBSZW5kZXIgc3BsaW5lIGlmIHRoZSBhcHAgaW5zdGFuY2UgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICByZW5kZXJTcGxpbmUoaW5zdGFuY2Uuc3BsaW5lKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHN0b3JlIGxhdGVzdCByZW5kZXIgYXMgYSBjYWxsYmFjayB0byBmaXJlIHdoZW4gbG9hZGVkXG4gICAgZnJvbnRlbmRNb2R1bGUuc2V0TG9hZEhhbmRsZXIoY29udGFpbmVyRWxlbWVudCwgcmVuZGVyU3BsaW5lKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKCkgPT4ge1xuICAvLyBOb3QgdXNlZCBieSB0aGlzIHBsdWdpblxuICByZXR1cm4gbnVsbDtcbn07XG4iXSwibmFtZXMiOlsiY2xlYXJQbHVnaW4iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkNvbmZpZyIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJnZXRQbHVnaW5PcmlnaW4iLCJyZW5kZXJQbHVnaW4iLCJxdWVyeUNvbnRhaW5lckVsZW1lbnQiLCJlbGVtZW50SWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRGcm9udGVuZE1vZHVsZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiZGlmZmVyZW5jZSIsImFycjEiLCJhcnIyIiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiYWN0aW9uSXRlbUNvbmZpZyIsImtleSIsInZhbHVlIiwiREVGQVVMVF9WQUxVRVMiLCJPYmplY3QiLCJmcmVlemUiLCJwb3NpdGlvblgiLCJwb3NpdGlvblkiLCJwb3NpdGlvbloiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJyZWZTdGF0ZSIsImFjdGlvbkl0ZW0iLCJkZXN0aW5hdGlvbiIsImNvbmZpZyIsImRlc3RpbmF0aW9uS2V5cyIsImtleXMiLCJzdGF0ZUtleXMiLCJkaWZmS2V5cyIsImxlbmd0aCIsIm9yaWdpbiIsInJlZHVjZSIsInJlc3VsdCIsImVsZW1lbnQiLCJwbHVnaW5FbGVtZW50SWQiLCJ0YXJnZXQiLCJwbHVnaW5FbGVtZW50IiwiY29udGFpbmVyRWxlbWVudCIsImZyb250ZW5kTW9kdWxlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIm9iamVjdElkIiwicmVuZGVyU3BsaW5lIiwic3BsaW5lIiwiRXJyb3IiLCJvYmoiLCJmaW5kT2JqZWN0QnlJZCIsIlBMVUdJTl9TUExJTkUiLCJwcm9wcyIsInBvc2l0aW9uIiwieSIsInoiLCJyb3RhdGlvbiIsInNjYWxlIiwic2V0TG9hZEhhbmRsZXIiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUF3SFRBLFdBQVc7ZUFBWEE7O0lBM0RBQyxvQkFBb0I7ZUFBcEJBOztJQXBEQUMsZUFBZTtlQUFmQTs7SUFnREFDLG9CQUFvQjtlQUFwQkE7O0lBNUNBQyxpQkFBaUI7ZUFBakJBOztJQWlCQUMsZUFBZTtlQUFmQTs7SUFxQ0FDLFlBQVk7ZUFBWkE7OztBQWpFYixNQUFNQyx3QkFBd0IsQ0FBQ0MsWUFDN0JDLFNBQVNDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRUYsVUFBVSxFQUFFLENBQUM7QUFFckQsTUFBTUcsb0JBQW9CLElBQU1DLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDO0FBRXZELE1BQU1DLGFBQWEsQ0FBQ0MsTUFBTUMsT0FBU0QsS0FBS0UsTUFBTSxDQUFDLENBQUNDLElBQU0sQ0FBQ0YsS0FBS0csUUFBUSxDQUFDRDtBQUU5RCxNQUFNakIsa0JBQWtCLENBQUNtQixrQkFBa0JDO0lBQ2hELE9BQU9ELGlCQUFpQkUsS0FBSyxDQUFDRCxJQUFJO0FBQ3BDO0FBRU8sTUFBTWxCLG9CQUFvQjtJQUMvQiwwQkFBMEI7SUFDMUIsT0FBTztBQUNUO0FBRUEsTUFBTW9CLGlCQUFpQkMsT0FBT0MsTUFBTSxDQUFDO0lBQ25DQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsV0FBVztJQUNYQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsV0FBVztJQUNYQyxRQUFRO0lBQ1JDLFF
17046BQVE7SUFDUkMsUUFBUTtBQUNWO0FBRU8sTUFBTTlCLGtCQUFrQixDQUFDK0IsVUFBVUM7SUFDeEMseURBQXlEO0lBQ3pELE1BQU1DLGNBQWNELFdBQVdFLE1BQU0sQ0FBQ2hCLEtBQUs7SUFDM0MsTUFBTWlCLGtCQUFrQmYsT0FBT2dCLElBQUksQ0FBQ0g7SUFDcEMsdURBQXVEO0lBQ3ZELElBQUlGLFVBQVU7UUFDWixNQUFNTSxZQUFZakIsT0FBT2dCLElBQUksQ0FBQ0w7UUFDOUIsTUFBTU8sV0FBVzVCLFdBQVd5QixpQkFBaUJFO1FBQzdDLHNFQUFzRTtRQUN0RSxJQUFJQyxTQUFTQyxNQUFNLEVBQUU7WUFDbkIsTUFBTUMsU0FBU0YsU0FBU0csTUFBTSxDQUFDLENBQUNDLFFBQVF6QjtnQkFDdEN5QixNQUFNLENBQUN6QixJQUFJLEdBQUdFLGNBQWMsQ0FBQ0YsSUFBSTtnQkFDakMsT0FBT3lCO1lBQ1QsR0FBR1g7WUFDSCxPQUFPUztRQUNUO1FBQ0Esc0NBQXNDO1FBQ3RDLE9BQU9UO0lBQ1Q7SUFDQSxnRUFBZ0U7SUFDaEUsTUFBTVMsU0FBU0wsZ0JBQWdCTSxNQUFNLENBQUMsQ0FBQ0MsUUFBUXpCO1FBQzdDeUIsTUFBTSxDQUFDekIsSUFBSSxHQUFHRSxjQUFjLENBQUNGLElBQUk7UUFDakMsT0FBT3lCO0lBQ1QsR0FBRyxDQUFDO0lBQ0osT0FBT0Y7QUFDVDtBQUVPLE1BQU0xQyx1QkFBdUIsQ0FBQ2tCO0lBQ25DLE9BQU9BLGlCQUFpQkUsS0FBSztBQUMvQjtBQUVPLE1BQU10Qix1QkFBdUIsQ0FBQytDLFNBQVNYO0lBQzVDLGlGQUFpRjtJQUNqRixNQUFNWSxrQkFBa0JaLFlBQVlFLFFBQVFXLFFBQVFDO0lBQ3BELE9BQU9GLGtCQUFrQjFDLHNCQUFzQjBDLG1CQUFtQjtBQUNwRTtBQUVPLE1BQU0zQyxlQUFlLENBQUM4QyxrQkFBa0JoQixVQUFVQztJQUN2RCxNQUFNZ0IsaUJBQWlCMUM7SUFDdkIsSUFBSSxDQUFDMEMsZ0JBQWdCO0lBQ3JCLE1BQU1DLFdBQVdELGVBQWVFLFdBQVcsQ0FBQ0g7SUFDNUMsTUFBTUksV0FBV25CLFdBQVdFLE1BQU0sQ0FBQ1csTUFBTSxDQUFDTSxRQUFRO0lBRWxELE1BQU1DLGVBQWUsQ0FBQ0M7UUFDcEIsSUFBSSxDQUFDQSxRQUFRO1lBQ1gsTUFBTSxJQUFJQyxNQUFNO1FBQ2xCO1FBQ0EsTUFBTUMsTUFBTUosWUFBWUUsT0FBT0csY0FBYyxDQUFDTDtRQUM5QyxJQUFJLENBQUNJLEtBQUs7WUFDUjtRQUNGO1FBQ0EsTUFBTSxFQUFDRSxlQUFlQyxLQUFLLEVBQUMsR0FBRzNCO1FBQy9CLElBQUkyQixNQUFNcEMsU0FBUyxJQUFJLE1BQU07WUFDM0JpQyxJQUFJSSxRQUFRLENBQUM3QyxDQUFDLEdBQUc0QyxNQUFNcEMsU0FBUztRQUNsQztRQUNBLElBQUlvQyxNQUFNbkMsU0FBUyxJQUFJLE1BQU07WUFDM0JnQyxJQUFJSSxRQUFRLENBQUNDLENBQUMsR0FBR0YsTUFBTW5DLFNBQVM7UUFDbEM7UUFDQSxJQUFJbUMsTUFBTWxDLFNBQVMsSUFBSSxNQUFNO1lBQzNCK0IsSUFBSUksUUFBUSxDQUFDRSxDQUFDLEdBQUdILE1BQU1sQyxTQUFTO1FBQ2xDO1FBQ0EsSUFBSWtDLE1BQU1qQyxTQUFTLElBQUksTUFBTTtZQUMzQjhCLElBQUlPLFFBQVEsQ0FBQ2hELENBQUMsR0FBRzRDLE1BQU1qQyxTQUFTO1FBQ2xDO1FBQ0EsSUFBSWlDLE1BQU1oQyxTQUFTLElBQUksTUFBTTtZQUMzQjZCLElBQUlPLFFBQVEsQ0FBQ0YsQ0FBQyxHQUFHRixNQUFNaEMsU0FBUztRQUNsQztRQUNBLElBQUlnQyxNQUFNL0IsU0FBUyxJQUFJLE1BQU07WUFDM0I0QixJQUFJTyxRQUFRLENBQUNELENBQUMsR0FBR0gsTUFBTS9CLFNBQVM7UUFDbEM7UUFDQSxJQUFJK0IsTUFBTTlCLE1BQU0sSUFBSSxNQUFNO1lBQ3hCMkIsSUFBSVEsS0FBSyxDQUFDakQsQ0FBQyxHQUFHNEMsTUFBTTlCLE1BQU07UUFDNUI7UUFDQSxJQUFJOEIsTUFBTTdCLE1BQU0sSUFBSSxNQUFNO1lBQ3hCMEIsSUFBSVEsS0FBSyxDQUFDSCxDQUFDLEdBQUdGLE1BQU03QixNQUFNO1FBQzVCO1FBQ0EsSUFBSTZCLE1BQU01QixNQUFNLElBQUksTUFBTTtZQUN4QnlCLElBQUlRLEtBQUssQ0FBQ0YsQ0FBQyxHQUFHSCxNQUFNNUIsTUFBTTtRQUM1QjtJQUNGO0lBRUEsSUFBSW1CLFVBQVU7UUFDWixzREFBc0Q7UUFDdERHLGFBQWFILFNBQVNJLE1BQU07SUFDOUIsT0FBTztRQUNMLG1FQUFtRTtRQUNuRUwsZUFBZWdCLGNBQWMsQ0FBQ2pCLGtCQUFrQks7SUFDbEQ7QUFDRjtBQUVPLE1BQU16RCxjQUFjO0lBQ3pCLDBCQUEwQjtJQUMxQixPQUFPO0FBQ1QifQ==
17047
17048}),
17049"1407": (function (__unused_webpack_module, exports, __webpack_require__) {
17050"use strict";
17051/* eslint-env browser */ // Importing directly to avoid importing the entire shared-utils package.
17052// eslint-disable-next-line webflow/package-boundaries
17053
17054Object.defineProperty(exports, "__esModule", ({
17055    value: true
17056}));
17057function _export(target, all) {
17058    for(var name in all)Object.defineProperty(target, name, {
17059        enumerable: true,
17060        get: all[name]
17061    });
17062}
17063_export(exports, {
17064    clearPlugin: function() {
17065        return clearPlugin;
17066    },
17067    createPluginInstance: function() {
17068        return createPluginInstance;
17069    },
17070    getPluginConfig: function() {
17071        return getPluginConfig;
17072    },
17073    getPluginDestination: function() {
17074        return getPluginDestination;
17075    },
17076    getPluginDuration: function() {
17077        return getPluginDuration;
17078    },
17079    getPluginOrigin: function() {
17080        return getPluginOrigin;
17081    },
17082    renderPlugin: function() {
17083        return renderPlugin;
17084    }
17085});
17086const _normalizeColor = __webpack_require__(380);
17087const getPluginConfig = (actionItemConfig, key)=>{
17088    return actionItemConfig.value[key];
17089};
17090const getPluginDuration = ()=>{
17091    // Not used by this plugin
17092    return null;
17093};
17094const getPluginOrigin = (refState, actionItem)=>{
17095    if (refState) {
17096        return refState;
17097    }
17098    // Determine which props we care about in the destination
17099    const destination = actionItem.config.value;
17100    // Look up root variable to parse origin values
17101    const objectId = actionItem.config.target.objectId;
17102    const computedValue = getComputedStyle(document.documentElement).getPropertyValue(objectId);
17103    if (destination.size != null) {
17104        return {
17105            size: parseInt(computedValue, 10)
17106        };
17107    }
17108    if (destination.unit === '%' || destination.unit === '-') {
17109        return {
17110            size: parseFloat(computedValue)
17111        };
17112    }
17113    if (destination.red != null && destination.green != null && destination.blue != null) {
17114        return (0, _normalizeColor.normalizeColor)(computedValue);
17115    }
17116};
17117const getPluginDestination = (actionItemConfig)=>{
17118    return actionItemConfig.value;
17119};
17120const createPluginInstance = ()=>{
17121    // Not used by this plugin
17122    return null;
17123};
17124const variableHandlers = {
17125    color: {
17126        match: ({ red, green, blue, alpha })=>[
17127                red,
17128                green,
17129                blue,
17130                alpha
17131            ].every((x)=>x != null),
17132        getValue: ({ red, green, blue, alpha })=>`rgba(${red}, ${green}, ${blue}, ${alpha})`
17133    },
17134    // Size, Percentage, and Unitless variables.
17135    size: {
17136        match: ({ size })=>size != null,
17137        getValue: ({ size }, unit)=>{
17138            switch(unit){
17139                case '-':
17140                    return size;
17141                default:
17142                    return `${size}${unit}`;
17143            }
17144        }
17145    }
17146};
17147const renderPlugin = (_, refState, actionItem)=>{
17148    const { target: { objectId }, value: { unit } } = actionItem.config;
17149    const props = refState.PLUGIN_VARIABLE;
17150    const handler = Object.values(variableHandlers).find((h)=>h.match(props, unit));
17151    if (handler) {
17152        document.documentElement.style.setProperty(objectId, handler.getValue(props, unit));
17153    }
17154};
17155const clearPlugin = (ref, actionItem)=>{
17156    const objectId = actionItem.config.target.objectId;
17157    document.documentElement.style.removeProperty(objectId);
17158};
17159
17160//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vLyBJbXBvcnRpbmcgZGlyZWN0bHkgdG8gYXZvaWQgaW1wb3J0aW5nIHRoZSBlbnRpcmUgc2hhcmVkLXV0aWxzIHBhY2thZ2UuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2ViZmxvdy9wYWNrYWdlLWJvdW5kYXJpZXNcbmltcG9ydCB7bm9ybWFsaXplQ29sb3J9IGZyb20gJy4uL3NoYXJlZC11dGlscy9ub3JtYWxpem
17160VDb2xvcic7XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5Db25maWcgPSAoYWN0aW9uSXRlbUNvbmZpZywga2V5KSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlW2tleV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRHVyYXRpb24gPSAoKSA9PiB7XG4gIC8vIE5vdCB1c2VkIGJ5IHRoaXMgcGx1Z2luXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSwgYWN0aW9uSXRlbSkgPT4ge1xuICBpZiAocmVmU3RhdGUpIHtcbiAgICByZXR1cm4gcmVmU3RhdGU7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgd2UgY2FyZSBhYm91dCBpbiB0aGUgZGVzdGluYXRpb25cbiAgY29uc3QgZGVzdGluYXRpb24gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZTtcblxuICAvLyBMb29rIHVwIHJvb3QgdmFyaWFibGUgdG8gcGFyc2Ugb3JpZ2luIHZhbHVlc1xuICBjb25zdCBvYmplY3RJZCA9IGFjdGlvbkl0ZW0uY29uZmlnLnRhcmdldC5vYmplY3RJZDtcbiAgY29uc3QgY29tcHV0ZWRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkuZ2V0UHJvcGVydHlWYWx1ZShvYmplY3RJZCk7XG5cbiAgaWYgKGRlc3RpbmF0aW9uLnNpemUgIT0gbnVsbCkge1xuICAgIHJldHVybiB7c2l6ZTogcGFyc2VJbnQoY29tcHV0ZWRWYWx1ZSwgMTApfTtcbiAgfVxuXG4gIGlmIChkZXN0aW5hdGlvbi51bml0ID09PSAnJScgfHwgZGVzdGluYXRpb24udW5pdCA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIHtzaXplOiBwYXJzZUZsb2F0KGNvbXB1dGVkVmFsdWUpfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkZXN0aW5hdGlvbi5yZWQgIT0gbnVsbCAmJlxuICAgIGRlc3RpbmF0aW9uLmdyZWVuICE9IG51bGwgJiZcbiAgICBkZXN0aW5hdGlvbi5ibHVlICE9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvbG9yKGNvbXB1dGVkVmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luRGVzdGluYXRpb24gPSAoYWN0aW9uSXRlbUNvbmZpZykgPT4ge1xuICByZXR1cm4gYWN0aW9uSXRlbUNvbmZpZy52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQbHVnaW5JbnN0YW5jZSA9ICgpID0+IHtcbiAgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCB2YXJpYWJsZUhhbmRsZXJzID0ge1xuICBjb2xvcjoge1xuICAgIG1hdGNoOiAoe3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhfSkgPT5cbiAgICAgIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0uZXZlcnkoKHgpID0+IHggIT0gbnVsbCksXG4gICAgZ2V0VmFsdWU6ICh7cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGF9KSA9PlxuICAgICAgYHJnYmEoJHtyZWR9LCAke2dyZWVufSwgJHtibHVlfSwgJHthbHBoYX0pYCxcbiAgfSxcblxuICAvLyBTaXplLCBQZXJjZW50YWdlLCBhbmQgVW5pdGxlc3MgdmFyaWFibGVzLlxuICBzaXplOiB7XG4gICAgbWF0Y2g6ICh7c2l6ZX0pID0+IHNpemUgIT0gbnVsbCxcbiAgICBnZXRWYWx1ZTogKHtzaXplfSwgdW5pdCkgPT4ge1xuICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIHJldHVybiBzaXplO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBgJHtzaXplfSR7dW5pdH1gO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyUGx1Z2luID0gKF8sIHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXQ6IHtvYmplY3RJZH0sXG4gICAgdmFsdWU6IHt1bml0fSxcbiAgfSA9IGFjdGlvbkl0ZW0uY29uZmlnO1xuICBjb25zdCBwcm9wcyA9IHJlZlN0YXRlLlBMVUdJTl9WQVJJQUJMRTtcblxuICBjb25zdCBoYW5kbGVyID0gT2JqZWN0LnZhbHVlcyh2YXJpYWJsZUhhbmRsZXJzKS5maW5kKChoKSA9PlxuICAgIGgubWF0Y2gocHJvcHMsIHVuaXQpXG4gICk7XG5cbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICBvYmplY3RJZCxcbiAgICAgIGhhbmRsZXIuZ2V0VmFsdWUocHJvcHMsIHVuaXQpXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKHJlZiwgYWN0aW9uSXRlbSkgPT4ge1xuICBjb25zdCBvYmplY3RJZCA9IGFjdGlvbkl0ZW0uY29uZmlnLnRhcmdldC5vYmplY3RJZDtcbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KG9iamVjdElkKTtcbn07XG4iXSwibmFtZXMiOlsiY2xlYXJQbHVnaW4iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkNvbmZpZyIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJnZXRQbHVnaW5PcmlnaW4iLCJyZW5kZXJQbHVnaW4iLCJhY3Rpb25JdGVtQ29uZmlnIiwia2V5IiwidmFsdWUiLCJyZWZTdGF0ZSIsImFjdGlvbkl0ZW0iLCJkZXN0aW5hdGlvbiIsImNvbmZpZyIsIm9iamVjdElkIiwidGFyZ2V0IiwiY29tcHV0ZWRWYWx1ZSIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJzaXplIiwicGFyc2VJbnQiLCJ1bml0IiwicGFyc2VGbG9hdCIsInJlZCIsImdyZWVuIiwiYmx1ZSIsIm5vcm1hbGl6ZUNvbG9yIiwidmFyaWFibGVIYW5kbGVycyIsImNvbG9yIiwibWF0Y2giLCJhbHBoYSIsImV2ZXJ5IiwieCIsImdldFZhbHVlIiwiXyIsInByb3BzIiwiUExVR0lOX1ZBUklBQkxFIiwiaGFuZGxlciIsIk9iamVjdCIsInZhbHVlcyIsImZpbmQiLCJoIiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsInJlZiIsInJlbW92ZVByb3BlcnR5Il0sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0IsR0FFdEIseUVBQXlFO0FBQ3pFLHNEQUFzRDs7Ozs7Ozs7Ozs7O0lBNkZ6Q0EsV0FBVztlQUFYQTs7SUE5Q0FDLG9CQUFvQjtlQUFwQkE7O0lBNUNBQyxlQUFlO2VBQWZBOztJQXdDQUMsb0JBQW9CO2VBQXBCQTs7SUFwQ0FDLGlCQUFpQjtlQUFqQkE7O0lBS0FDLGVBQWU7ZUFBZkE7O0lBOERBQyxZQUFZO2VBQVpBOzs7Z0NBekVnQjtBQUV0QixNQUFNSixrQkFBa0IsQ0FBQ0ssa0JBQWtCQztJQUNoRCxPQUFPRCxpQkFBaUJFLEtBQUssQ0FBQ0QsSUFBSTtBQUNwQztBQUVPLE1BQU1KLG9CQUFvQjtJQUMvQiwwQkFBMEI7SUFDMUIsT0FBTztBQUNUO0FBRU8sTUFBTUMsa0JBQWtCLENBQUNLLFVBQVVDO0lBQ3hDLElBQUlELFVBQVU7UUFDWixPQUFPQTtJQUNUO0lBRUEseURBQXlEO0lBQ3pELE1BQU1FLGNBQWNELFdBQVdFLE1BQU0sQ0FBQ0osS0FBSztJQUUzQywrQ0FBK0M7SUFDL0MsTUFBTUssV0FBV0gsV0FBV0UsTUFBTSxDQUFDRSxNQUFNLENBQUNELFFBQVE7SUFDbEQsTUFBTUUsZ0JBQWdCQyxpQkFDcEJDLFNBQVNDLGVBQWUsRUFDeEJDLGdCQUFnQixDQUFDTjtJQUVuQixJQUFJRixZQUFZUyxJQUFJLElBQUksTUFBTTtRQUM1QixPQUFPO1lBQUNBLE1BQU1DLFNBQVNOLGVBQWU7UUFBRztJQUMzQztJQUVBLElBQUlKLFlBQVlXLElBQUksS0FBSyxPQUFPWCxZQUFZVyxJQUFJLEtBQUssS0FBSztRQUN4RCxPQUFPO1lBQUNGLE1BQU1HLFdBQVdSO1FBQWM7SUFDekM7SUFFQSxJQUNFSixZQU
17160FZYSxHQUFHLElBQUksUUFDbkJiLFlBQVljLEtBQUssSUFBSSxRQUNyQmQsWUFBWWUsSUFBSSxJQUFJLE1BQ3BCO1FBQ0EsT0FBT0MsSUFBQUEsOEJBQWMsRUFBQ1o7SUFDeEI7QUFDRjtBQUVPLE1BQU1iLHVCQUF1QixDQUFDSTtJQUNuQyxPQUFPQSxpQkFBaUJFLEtBQUs7QUFDL0I7QUFFTyxNQUFNUix1QkFBdUI7SUFDbEMsMEJBQTBCO0lBQzFCLE9BQU87QUFDVDtBQUVBLE1BQU00QixtQkFBbUI7SUFDdkJDLE9BQU87UUFDTEMsT0FBTyxDQUFDLEVBQUNOLEdBQUcsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUVLLEtBQUssRUFBQyxHQUMvQjtnQkFBQ1A7Z0JBQUtDO2dCQUFPQztnQkFBTUs7YUFBTSxDQUFDQyxLQUFLLENBQUMsQ0FBQ0MsSUFBTUEsS0FBSztRQUM5Q0MsVUFBVSxDQUFDLEVBQUNWLEdBQUcsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUVLLEtBQUssRUFBQyxHQUNsQyxDQUFDLEtBQUssRUFBRVAsSUFBSSxFQUFFLEVBQUVDLE1BQU0sRUFBRSxFQUFFQyxLQUFLLEVBQUUsRUFBRUssTUFBTSxDQUFDLENBQUM7SUFDL0M7SUFFQSw0Q0FBNEM7SUFDNUNYLE1BQU07UUFDSlUsT0FBTyxDQUFDLEVBQUNWLElBQUksRUFBQyxHQUFLQSxRQUFRO1FBQzNCYyxVQUFVLENBQUMsRUFBQ2QsSUFBSSxFQUFDLEVBQUVFO1lBQ2pCLE9BQVFBO2dCQUNOLEtBQUs7b0JBQ0gsT0FBT0Y7Z0JBQ1Q7b0JBQ0UsT0FBTyxDQUFDLEVBQUVBLEtBQUssRUFBRUUsS0FBSyxDQUFDO1lBQzNCO1FBQ0Y7SUFDRjtBQUNGO0FBRU8sTUFBTWpCLGVBQWUsQ0FBQzhCLEdBQUcxQixVQUFVQztJQUN4QyxNQUFNLEVBQ0pJLFFBQVEsRUFBQ0QsUUFBUSxFQUFDLEVBQ2xCTCxPQUFPLEVBQUNjLElBQUksRUFBQyxFQUNkLEdBQUdaLFdBQVdFLE1BQU07SUFDckIsTUFBTXdCLFFBQVEzQixTQUFTNEIsZUFBZTtJQUV0QyxNQUFNQyxVQUFVQyxPQUFPQyxNQUFNLENBQUNaLGtCQUFrQmEsSUFBSSxDQUFDLENBQUNDLElBQ3BEQSxFQUFFWixLQUFLLENBQUNNLE9BQU9kO0lBR2pCLElBQUlnQixTQUFTO1FBQ1hyQixTQUFTQyxlQUFlLENBQUN5QixLQUFLLENBQUNDLFdBQVcsQ0FDeEMvQixVQUNBeUIsUUFBUUosUUFBUSxDQUFDRSxPQUFPZDtJQUU1QjtBQUNGO0FBRU8sTUFBTXZCLGNBQWMsQ0FBQzhDLEtBQUtuQztJQUMvQixNQUFNRyxXQUFXSCxXQUFXRSxNQUFNLENBQUNFLE1BQU0sQ0FBQ0QsUUFBUTtJQUNsREksU0FBU0MsZUFBZSxDQUFDeUIsS0FBSyxDQUFDRyxjQUFjLENBQUNqQztBQUNoRCJ9
17161
17162}),
17163"3690": (function (__unused_webpack_module, exports, __webpack_require__) {
17164"use strict";
17165
17166Object.defineProperty(exports, "__esModule", ({
17167    value: true
17168}));
17169Object.defineProperty(exports, "pluginMethodMap", ({
17170    enumerable: true,
17171    get: function() {
17172        return pluginMethodMap;
17173    }
17174}));
17175const _sharedconstants = __webpack_require__(7087);
17176const _IX2Lottie = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(7377));
17177const _IX2Spline = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2866));
17178const _IX2Rive = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5163));
17179const _IX2Variable = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(1407));
17180function _getRequireWildcardCache(nodeInterop) {
17181    if (typeof WeakMap !== "function") return null;
17182    var cacheBabelInterop = new WeakMap();
17183    var cacheNodeInterop = new WeakMap();
17184    return (_getRequireWildcardCache = function(nodeInterop) {
17185        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
17186    })(nodeInterop);
17187}
17188function _interop_require_wildcard(obj, nodeInterop) {
17189    if (!nodeInterop && obj && obj.__esModule) {
17190        return obj;
17191    }
17192    if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
17193        return {
17194            default: obj
17195        };
17196    }
17197    var cache = _getRequireWildcardCache(nodeInterop);
17198    if (cache && cache.has(obj)) {
17199        return cache.get(obj);
17200    }
17201    var newObj = {
17202        __proto__: null
17203    };
17204    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
17205    for(var key in obj){
17206        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
17207            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
17208            if (desc && (desc.get || desc.set)) {
17209                Object.defineProperty(newObj, key, desc);
17210            } else {
17211                newObj[key] = obj[key];
17212            }
17213        }
17214    }
17215    newObj.default = obj;
17216    if (cache) {
17217        cache.set(obj, newObj);
17218    }
17219    return newObj;
17220}
17221const pluginMethodMap = new Map([
17222    [
17223        _sharedconstants.ActionTypeConsts.PLUGIN_LOTTIE,
17224        {
17225            ..._IX2Lottie
17226        }
17227    ],
17228    [
17229        _sharedconstants.ActionTypeConsts.PLUGIN_SPLINE,
17230        {
17231            ..._IX2Spline
17232        }
17233    ],
17234    [
17235        _sharedconstants.ActionTypeConsts.PLUGIN_RIVE,
17236        {
17237            ..._IX2Rive
17238        }
17239    ],
17240    [
17241        _sharedconstants.ActionTypeConsts.PLUGIN_VARIABLE,
17242        {
17243            ..._IX2Variable
17244        }
17245    ]
17246]);
17247
17248//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9uVHlwZUNvbnN0c30gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMnO1xuXG5pbXBvcnQgKiBhcyBsb3R0aWUgZnJvbSAnLi9JWDJMb3R0aWUnO1xuaW1wb3J0ICogYXMgc3BsaW5lIGZyb20gJy4vSVgyU3BsaW5lJztcbmltcG9ydCAqIGFzIHJpdmUgZnJvbSAnLi9JWDJSaXZlJztcbmltcG9ydCAqIGFzIHZhcmlhYmxlIGZyb20gJy4vSVgyVmFyaWFibGUnO1xuXG5leHBvcnQgdHlwZSBQbHVnaW5UeXBlID1cbiAgfCB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fTE9UVElFXG4gIHwgdHlwZW9mIEFjdGlvblR5cGVDb25zdHMuUExVR0lOX1NQTElORVxuICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9WQVJJQUJMRVxuICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9SSVZFO1xuXG5leHBvcnQgY29uc3QgcGx1Z2luTWV0aG9kTWFwID0gbmV3IE1hcChbXG4gIFtBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9MT1RUSUUsIHsuLi5sb3R0aWV9XSxcbiAgW0FjdGlvblR5cGVDb25zdHMuUExVR0lOX1NQTElORSwgey4uLnNwbGluZX1dLFxuICBbQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fUklWRSwgey4uLnJpdmV9XSxcbiAgW0FjdGlvblR5cGVDb25zdHMuUExVR0lOX1ZBUklBQkxFLCB7Li4udmFyaWFibGV9XSxcbl0pO1xuIl0sIm5hbWVzIjpbInBsdWdpbk1ldGhvZE1hcCIsIk1hcCIsIkFjdGlvblR5cGVDb25zdHMiLCJQTFVHSU5fTE9UVElFIiwibG90dGllIiwiUExVR0lOX1NQTElORSIsInNwbGluZSIsIlBMVUdJTl9SSVZFIiwicml2ZSIsIlBMVUdJTl9WQVJJQUJMRSIsInZhcmlhYmxlIl0sIm1hcHBpbmdzIjoiOzs7OytCQWFhQTs7O2VBQUFBOzs7aUNBYmtCO21FQUVQO21FQUNBO2lFQUNGO3FFQUNJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRbkIsTUFBTUEsa0JBQWtCLElBQUlDLElBQUk7SUFDckM7UUFBQ0MsaUNBQWdCLENBQUNDLGFBQWE7UUFBRTtZQUFDLEdBQUdDLFVBQU07UUFBQTtLQUFFO0lBQzdDO1FBQUNGLGlDQUFnQixDQUFDRyxhQUFhO1FBQUU7WUFBQyxHQUFHQyxVQUFNO1FBQUE7S0
17248FBRTtJQUM3QztRQUFDSixpQ0FBZ0IsQ0FBQ0ssV0FBVztRQUFFO1lBQUMsR0FBR0MsUUFBSTtRQUFBO0tBQUU7SUFDekM7UUFBQ04saUNBQWdCLENBQUNPLGVBQWU7UUFBRTtZQUFDLEdBQUdDLFlBQVE7UUFBQTtLQUFFO0NBQ2xEIn0=
17249
17250}),
17251"8023": (function (__unused_webpack_module, exports) {
17252"use strict";
17253
17254Object.defineProperty(exports, "__esModule", ({
17255    value: true
17256}));
17257function _export(target, all) {
17258    for(var name in all)Object.defineProperty(target, name, {
17259        enumerable: true,
17260        get: all[name]
17261    });
17262}
17263_export(exports, {
17264    IX2_ACTION_LIST_PLAYBACK_CHANGED: function() {
17265        return IX2_ACTION_LIST_PLAYBACK_CHANGED;
17266    },
17267    IX2_ANIMATION_FRAME_CHANGED: function() {
17268        return IX2_ANIMATION_FRAME_CHANGED;
17269    },
17270    IX2_CLEAR_REQUESTED: function() {
17271        return IX2_CLEAR_REQUESTED;
17272    },
17273    IX2_ELEMENT_STATE_CHANGED: function() {
17274        return IX2_ELEMENT_STATE_CHANGED;
17275    },
17276    IX2_EVENT_LISTENER_ADDED: function() {
17277        return IX2_EVENT_LISTENER_ADDED;
17278    },
17279    IX2_EVENT_STATE_CHANGED: function() {
17280        return IX2_EVENT_STATE_CHANGED;
17281    },
17282    IX2_INSTANCE_ADDED: function() {
17283        return IX2_INSTANCE_ADDED;
17284    },
17285    IX2_INSTANCE_REMOVED: function() {
17286        return IX2_INSTANCE_REMOVED;
17287    },
17288    IX2_INSTANCE_STARTED: function() {
17289        return IX2_INSTANCE_STARTED;
17290    },
17291    IX2_MEDIA_QUERIES_DEFINED: function() {
17292        return IX2_MEDIA_QUERIES_DEFINED;
17293    },
17294    IX2_PARAMETER_CHANGED: function() {
17295        return IX2_PARAMETER_CHANGED;
17296    },
17297    IX2_PLAYBACK_REQUESTED: function() {
17298        return IX2_PLAYBACK_REQUESTED;
17299    },
17300    IX2_PREVIEW_REQUESTED: function() {
17301        return IX2_PREVIEW_REQUESTED;
17302    },
17303    IX2_RAW_DATA_IMPORTED: function() {
17304        return IX2_RAW_DATA_IMPORTED;
17305    },
17306    IX2_SESSION_INITIALIZED: function() {
17307        return IX2_SESSION_INITIALIZED;
17308    },
17309    IX2_SESSION_STARTED: function() {
17310        return IX2_SESSION_STARTED;
17311    },
17312    IX2_SESSION_STOPPED: function() {
17313        return IX2_SESSION_STOPPED;
17314    },
17315    IX2_STOP_REQUESTED: function() {
17316        return IX2_STOP_REQUESTED;
17317    },
17318    IX2_TEST_FRAME_RENDERED: function() {
17319        return IX2_TEST_FRAME_RENDERED;
17320    },
17321    IX2_VIEWPORT_WIDTH_CHANGED: function() {
17322        return IX2_VIEWPORT_WIDTH_CHANGED;
17323    }
17324});
17325const IX2_RAW_DATA_IMPORTED = 'IX2_RAW_DATA_IMPORTED';
17326const IX2_SESSION_INITIALIZED = 'IX2_SESSION_INITIALIZED';
17327const IX2_SESSION_STARTED = 'IX2_SESSION_STARTED';
17328const IX2_SESSION_STOPPED = 'IX2_SESSION_STOPPED';
17329const IX2_PREVIEW_REQUESTED = 'IX2_PREVIEW_REQUESTED';
17330const IX2_PLAYBACK_REQUESTED = 'IX2_PLAYBACK_REQUESTED';
17331const IX2_STOP_REQUESTED = 'IX2_STOP_REQUESTED';
17332const IX2_CLEAR_REQUESTED = 'IX2_CLEAR_REQUESTED';
17333const IX2_EVENT_LISTENER_ADDED = 'IX2_EVENT_LISTENER_ADDED';
17334const IX2_EVENT_STATE_CHANGED = 'IX2_EVENT_STATE_CHANGED';
17335const IX2_ANIMATION_FRAME_CHANGED = 'IX2_ANIMATION_FRAME_CHANGED';
17336const IX2_PARAMETER_CHANGED = 'IX2_PARAMETER_CHANGED';
17337const IX2_INSTANCE_ADDED = 'IX2_INSTANCE_ADDED';
17338const IX2_INSTANCE_STARTED = 'IX2_INSTANCE_STARTED';
17339const IX2_INSTANCE_REMOVED = 'IX2_INSTANCE_REMOVED';
17340const IX2_ELEMENT_STATE_CHANGED = 'IX2_ELEMENT_STATE_CHANGED';
17341const IX2_ACTION_LIST_PLAYBACK_CHANGED = 'IX2_ACTION_LIST_PLAYBACK_CHANGED';
17342const IX2_VIEWPORT_WIDTH_CHANGED = 'IX2_VIEWPORT_WIDTH_CHANGED';
17343const IX2_MEDIA_QUERIES_DEFINED = 'IX2_MEDIA_QUERIES_DEFINED';
17344const IX2_TEST_FRAME_RENDERED = 'IX2_TEST_FRAME_RENDERED';
17345
17346//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVuZ2luZUFjdGlvblR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJWDJfUkFXX0RBVEFfSU1QT1JURUQgPSAnSVgyX1JBV19EQVRBX0lNUE9SVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCA9ICdJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCc7XG5leHBvcnQgY29uc3QgSVgyX1NFU1NJT05fU1RBUlRFRCA9ICdJWDJfU0VTU0lPTl9TVEFSVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfU0VTU0lPTl9TVE9QUEVEID0gJ0lYMl9TRVNTSU9OX1NUT1BQRUQnO1xuZXhwb3J0IGNvbnN0IElYMl9QUkVWSUVXX1JFUVVFU1RFRCA9ICdJWDJfUFJFVklFV19SRVFVRVNURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9QTEFZQkFDS19SRVFVRVNURUQgPSAnSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCc7XG5leHBvcnQgY29uc3QgSVgyX1NUT1BfUkVRVUVTVEVEID0gJ0lYMl9TVE9QX1JFUVVFU1RFRCc7XG5leHBvcnQgY29uc3QgSVgyX0NMRUFSX1JFUVVFU1RFRCA9ICdJWDJfQ0xFQVJfUkVRVUVTVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfRVZFTlRfTElTVEVORVJfQURERUQgPSAnSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVEJztcbmV4cG9ydCBjb25zdCBJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRCA9ICdJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEID0gJ0lYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX1BBUkFNRVRFUl9DSEFOR0VEID0gJ0lYMl9QQVJBTUVURVJfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX0lOU1RBTkNFX0FEREVEID0gJ0lYMl9JTlNUQU5DRV9BRERFRCc7XG5leHBvcnQgY29uc3QgSVgyX0lOU1RBTkNFX1NUQVJURUQgPSAnSVgyX0lOU1RBTkNFX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9JTlNUQU5DRV9SRU1PVkVEID0gJ0lYMl9JTlNUQU5DRV9SRU1PVkVEJztcbmV4cG9ydCBjb25zdCBJWDJfRUxFTUVOVF9TVEFURV9DSEFOR0VEID0gJ0lYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQnO1xuZXhwb3J0IGNvbnN0IElYMl9BQ1RJT05fTElT
17346VF9QTEFZQkFDS19DSEFOR0VEID1cbiAgJ0lYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCA9ICdJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCA9ICdJWDJfTUVESUFfUVVFUklFU19ERUZJTkVEJztcbmV4cG9ydCBjb25zdCBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCA9ICdJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCc7XG4iXSwibmFtZXMiOlsiSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQiLCJJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQiLCJJWDJfQ0xFQVJfUkVRVUVTVEVEIiwiSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCIsIklYMl9FVkVOVF9MSVNURU5FUl9BRERFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0lOU1RBTkNFX1JFTU9WRUQiLCJJWDJfSU5TVEFOQ0VfU1RBUlRFRCIsIklYMl9NRURJQV9RVUVSSUVTX0RFRklORUQiLCJJWDJfUEFSQU1FVEVSX0NIQU5HRUQiLCJJWDJfUExBWUJBQ0tfUkVRVUVTVEVEIiwiSVgyX1BSRVZJRVdfUkVRVUVTVEVEIiwiSVgyX1JBV19EQVRBX0lNUE9SVEVEIiwiSVgyX1NFU1NJT05fSU5JVElBTElaRUQiLCJJWDJfU0VTU0lPTl9TVEFSVEVEIiwiSVgyX1NFU1NJT05fU1RPUFBFRCIsIklYMl9TVE9QX1JFUVVFU1RFRCIsIklYMl9URVNUX0ZSQU1FX1JFTkRFUkVEIiwiSVgyX1ZJRVdQT1JUX1dJRFRIX0NIQU5HRUQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBZ0JhQSxnQ0FBZ0M7ZUFBaENBOztJQU5BQywyQkFBMkI7ZUFBM0JBOztJQUhBQyxtQkFBbUI7ZUFBbkJBOztJQVFBQyx5QkFBeUI7ZUFBekJBOztJQVBBQyx3QkFBd0I7ZUFBeEJBOztJQUNBQyx1QkFBdUI7ZUFBdkJBOztJQUdBQyxrQkFBa0I7ZUFBbEJBOztJQUVBQyxvQkFBb0I7ZUFBcEJBOztJQURBQyxvQkFBb0I7ZUFBcEJBOztJQU1BQyx5QkFBeUI7ZUFBekJBOztJQVJBQyxxQkFBcUI7ZUFBckJBOztJQU5BQyxzQkFBc0I7ZUFBdEJBOztJQURBQyxxQkFBcUI7ZUFBckJBOztJQUpBQyxxQkFBcUI7ZUFBckJBOztJQUNBQyx1QkFBdUI7ZUFBdkJBOztJQUNBQyxtQkFBbUI7ZUFBbkJBOztJQUNBQyxtQkFBbUI7ZUFBbkJBOztJQUdBQyxrQkFBa0I7ZUFBbEJBOztJQWNBQyx1QkFBdUI7ZUFBdkJBOztJQUZBQywwQkFBMEI7ZUFBMUJBOzs7QUFsQk4sTUFBTU4sd0JBQXdCO0FBQzlCLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1KLHdCQUF3QjtB
17346QUM5QixNQUFNRCx5QkFBeUI7QUFDL0IsTUFBTU0scUJBQXFCO0FBQzNCLE1BQU1mLHNCQUFzQjtBQUM1QixNQUFNRSwyQkFBMkI7QUFDakMsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1KLDhCQUE4QjtBQUNwQyxNQUFNUyx3QkFBd0I7QUFDOUIsTUFBTUoscUJBQXFCO0FBQzNCLE1BQU1FLHVCQUF1QjtBQUM3QixNQUFNRCx1QkFBdUI7QUFDN0IsTUFBTUosNEJBQTRCO0FBQ2xDLE1BQU1ILG1DQUNYO0FBQ0ssTUFBTW1CLDZCQUE2QjtBQUNuQyxNQUFNViw0QkFBNEI7QUFDbEMsTUFBTVMsMEJBQTBCIn0=
17347
17348}),
17349"2686": (function (__unused_webpack_module, exports) {
17350"use strict";
17351
17352Object.defineProperty(exports, "__esModule", ({
17353    value: true
17354}));
17355function _export(target, all) {
17356    for(var name in all)Object.defineProperty(target, name, {
17357        enumerable: true,
17358        get: all[name]
17359    });
17360}
17361_export(exports, {
17362    ABSTRACT_NODE: function() {
17363        return ABSTRACT_NODE;
17364    },
17365    AUTO: function() {
17366        return AUTO;
17367    },
17368    BACKGROUND: function() {
17369        return BACKGROUND;
17370    },
17371    BACKGROUND_COLOR: function() {
17372        return BACKGROUND_COLOR;
17373    },
17374    BAR_DELIMITER: function() {
17375        return BAR_DELIMITER;
17376    },
17377    BORDER_COLOR: function() {
17378        return BORDER_COLOR;
17379    },
17380    BOUNDARY_SELECTOR: function() {
17381        return BOUNDARY_SELECTOR;
17382    },
17383    CHILDREN: function() {
17384        return CHILDREN;
17385    },
17386    COLON_DELIMITER: function() {
17387        return COLON_DELIMITER;
17388    },
17389    COLOR: function() {
17390        return COLOR;
17391    },
17392    COMMA_DELIMITER: function() {
17393        return COMMA_DELIMITER;
17394    },
17395    CONFIG_UNIT: function() {
17396        return CONFIG_UNIT;
17397    },
17398    CONFIG_VALUE: function() {
17399        return CONFIG_VALUE;
17400    },
17401    CONFIG_X_UNIT: function() {
17402        return CONFIG_X_UNIT;
17403    },
17404    CONFIG_X_VALUE: function() {
17405        return CONFIG_X_VALUE;
17406    },
17407    CONFIG_Y_UNIT: function() {
17408        return CONFIG_Y_UNIT;
17409    },
17410    CONFIG_Y_VALUE: function() {
17411        return CONFIG_Y_VALUE;
17412    },
17413    CONFIG_Z_UNIT: function() {
17414        return CONFIG_Z_UNIT;
17415    },
17416    CONFIG_Z_VALUE: function() {
17417        return CONFIG_Z_VALUE;
17418    },
17419    DISPLAY: function() {
17420        return DISPLAY;
17421    },
17422    FILTER: function() {
17423        return FILTER;
17424    },
17425    FLEX: function() {
17426        return FLEX;
17427    },
17428    FONT_VARIATION_SETTINGS: function() {
17429        return FONT_VARIATION_SETTINGS;
17430    },
17431    HEIGHT: function() {
17432        return HEIGHT;
17433    },
17434    HTML_ELEMENT: function() {
17435        return HTML_ELEMENT;
17436    },
17437    IMMEDIATE_CHILDREN: function() {
17438        return IMMEDIATE_CHILDREN;
17439    },
17440    IX2_ID_DELIMITER: function() {
17441        return IX2_ID_DELIMITER;
17442    },
17443    OPACITY: function() {
17444        return OPACITY;
17445    },
17446    PARENT: function() {
17447        return PARENT;
17448    },
17449    PLAIN_OBJECT: function() {
17450        return PLAIN_OBJECT;
17451    },
17452    PRESERVE_3D: function() {
17453        return PRESERVE_3D;
17454    },
17455    RENDER_GENERAL: function() {
17456        return RENDER_GENERAL;
17457    },
17458    RENDER_PLUGIN: function() {
17459        return RENDER_PLUGIN;
17460    },
17461    RENDER_STYLE: function() {
17462        return RENDER_STYLE;
17463    },
17464    RENDER_TRANSFORM: function() {
17465        return RENDER_TRANSFORM;
17466    },
17467    ROTATE_X: function() {
17468        return ROTATE_X;
17469    },
17470    ROTATE_Y: function() {
17471        return ROTATE_Y;
17472    },
17473    ROTATE_Z: function() {
17474        return ROTATE_Z;
17475    },
17476    SCALE_3D: function() {
17477        return SCALE_3D;
17478    },
17479    SCALE_X: function() {
17480        return SCALE_X;
17481    },
17482    SCALE_Y: function() {
17483        return SCALE_Y;
17484    },
17485    SCALE_Z: function() {
17486        return SCALE_Z;
17487    },
17488    SIBLINGS: function() {
17489        return SIBLINGS;
17490    },
17491    SKEW: function() {
17492        return SKEW;
17493    },
17494    SKEW_X: function() {
17495        return SKEW_X;
17496    },
17497    SKEW_Y: function() {
17498        return SKEW_Y;
17499    },
17500    TRANSFORM: function() {
17501        return TRANSFORM;
17502    },
17503    TRANSLATE_3D: function() {
17504        return TRANSLATE_3D;
17505    },
17506    TRANSLATE_X: function() {
17507        return TRANSLATE_X;
17508    },
17509    TRANSLATE_Y: function() {
17510        return TRANSLATE_Y;
17511    },
17512    TRANSLATE_Z: function() {
17513        return TRANSLATE_Z;
17514    },
17515    WF_PAGE: function() {
17516        return WF_PAGE;
17517    },
17518    WIDTH: function() {
17519        return WIDTH;
17520    },
17521    WILL_CHANGE: function() {
17522        return WILL_CHANGE;
17523    },
17524    W_MOD_IX: function() {
17525        return W_MOD_IX;
17526    },
17527    W_MOD_JS: function() {
17528        return W_MOD_JS;
17529    }
17530});
17531const IX2_ID_DELIMITER = '|';
17532const WF_PAGE = 'data-wf-page';
17533const W_MOD_JS = 'w-mod-js';
17534const W_MOD_IX = 'w-mod-ix';
17535const BOUNDARY_SELECTOR = '.w-dyn-item';
17536const CONFIG_X_VALUE = 'xValue';
17537const CONFIG_Y_VALUE = 'yValue';
17538const CONFIG_Z_VALUE = 'zValue';
17539const CONFIG_VALUE = 'value';
17540const CONFIG_X_UNIT = 'xUnit';
17541const CONFIG_Y_UNIT = 'yUnit';
17542const CONFIG_Z_UNIT = 'zUnit';
17543const CONFIG_UNIT = 'unit';
17544const TRANSFORM = 'transform';
17545const TRANSLATE_X = 'translateX';
17546const TRANSLATE_Y = 'translateY';
17547const TRANSLATE_Z = 'translateZ';
17548const TRANSLATE_3D = 'translate3d';
17549const SCALE_X = 'scaleX';
17550const SCALE_Y = 'scaleY';
17551const SCALE_Z = 'scaleZ';
17552const SCALE_3D = 'scale3d';
17553const ROTATE_X = 'rotateX';
17554const ROTATE_Y = 'rotateY';
17555const ROTATE_Z = 'rotateZ';
17556const SKEW = 'skew';
17557const SKEW_X = 'skewX';
17558const SKEW_Y = 'skewY';
17559const OPACITY = 'opacity';
17560const FILTER = 'filter';
17561const FONT_VARIATION_SETTINGS = 'font-variation-settings';
17562const WIDTH = 'width';
17563const HEIGHT = 'height';
17564const BACKGROUND_COLOR = 'backgroundColor';
17565const BACKGROUND = 'background';
17566const BORDER_COLOR = 'borderColor';
17567const COLOR = 'color';
17568const DISPLAY = 'display';
17569const FLEX = 'flex';
17570const WILL_CHANGE = 'willChange';
17571const AUTO = 'AUTO';
17572const COMMA_DELIMITER = ',';
17573const COLON_DELIMITER = ':';
17574const BAR_DELIMITER = '|';
17575const CHILDREN = 'CHILDREN';
17576const IMMEDIATE_CHILDREN = 'IMMEDIATE_CHILDREN';
17577const SIBLINGS = 'SIBLINGS';
17578const PARENT = 'PARENT';
17579const PRESERVE_3D = 'preserve-3d';
17580const HTML_ELEMENT = 'HTML_ELEMENT';
17581const PLAIN_OBJECT = 'PLAIN_OBJECT';
17582const ABSTRACT_NODE = 'ABSTRACT_NODE';
17583const RENDER_TRANSFORM = 'RENDER_TRANSFORM';
17584const RENDER_GENERAL = 'RENDER_GENERAL';
17585const RENDER_STYLE = 'RENDER_STYLE';
17586const RENDER_PLUGIN = 'RENDER_PLUGIN';
17587
17588//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVuZ2luZUNvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgSVgyX0lEX0RFTElNSVRFUiA9ICd8Jztcbi8qKlxuICogU3RvcmVzIHBhZ2VJZCBvZiB0aGUgY3VycmVudCBwYWdlLCBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIElYMkJyb3dzZXJBcGlcbiAqL1xuZXhwb3J0IGNvbnN0IFdGX1BBR0UgPSAnZGF0YS13Zi1wYWdlJztcbmV4cG9ydCBjb25zdCBXX01PRF9KUyA9ICd3LW1vZC1qcyc7XG5leHBvcnQgY29uc3QgV19NT0RfSVggPSAndy1tb2QtaXgnO1xuZXhwb3J0IGNvbnN0IEJPVU5EQVJZX1NFTEVDVE9SID0gJy53LWR5bi1pdGVtJztcbmV4cG9ydCBjb25zdCBDT05GSUdfWF9WQUxVRSA9ICd4VmFsdWUnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19ZX1ZBTFVFID0gJ3lWYWx1ZSc7XG5leHBvcnQgY29uc3QgQ09ORklHX1pfVkFMVUUgPSAnelZhbHVlJztcbmV4cG9ydCBjb25zdCBDT05GSUdfVkFMVUUgPSAndmFsdWUnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19YX1VOSVQgPSAneFVuaXQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19ZX1VOSVQgPSAneVVuaXQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19aX1VOSVQgPSAnelVuaXQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19VTklUID0gJ3VuaXQnO1xuZXhwb3J0IGNvbnN0IFRSQU5TRk9STSA9ICd0cmFuc2Zvcm0nO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9YID0gJ3RyYW5zbGF0ZVgnO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9ZID0gJ3RyYW5zbGF0ZVknO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9aID0gJ3RyYW5zbGF0ZVonO1xuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV8zRCA9ICd0cmFuc2xhdGUzZCc7XG5leHBvcnQgY29uc3QgU0NBTEVfWCA9ICdzY2FsZVgnO1xuZXhwb3J0IGNvbnN0IFNDQUxFX1kgPSAnc2NhbGVZJztcbmV4cG9ydCBjb25zdCBTQ0FMRV9aID0gJ3NjYWxlWic7XG5leHBvcnQgY29uc3QgU0NBTEVfM0QgPSAnc2NhbGUzZCc7XG5leHBvcnQgY29uc3QgUk9UQVRFX1ggPSAncm90YXRlWCc7XG5leHBvcnQgY29uc3QgUk9UQVRFX1kgPSAncm90YXRlWSc7XG5leHBvcnQgY29uc3QgUk9UQVRFX1ogPSAncm90YXRlWic7XG5leHBvcnQgY29uc3QgU0tFVyA9ICdza2V3JztcbmV4cG9ydCBjb25zdCBTS0VXX1ggPSAnc2tld1gnO1xuZXhwb3J0IGNvbnN0IFNLRVdfWSA9ICdza2V3WSc7XG5leHBvcnQgY29uc3QgT1BBQ0lUWSA9ICdvcGFjaXR5JztcbmV4cG9ydCBjb25zdCBGSUxURVIgPSAnZmlsdGVyJztcbmV4cG9ydCBjb25zdCBGT05UX1ZBUklBVElPTl9TRVRUSU5HUyA9ICdmb250LXZhcmlhdGlvbi1zZXR0aW5ncyc7XG5leHBvcnQgY29uc3QgV0lEVEggPSAnd2lkdGgnO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnO1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfQ09MT1IgPSAnYmFja2dyb3VuZENvbG9yJztcbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EID0gJ2JhY2tncm91bmQnO1xuZXhwb3J0IGNvbnN0IEJPUkRFUl9DT0xPUiA9ICdib3JkZXJDb2xvcic7XG5leHBvcnQgY29uc3QgQ09MT1IgPSAnY29sb3InO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSAnZGlzcGxheSc7XG5leHBvcnQgY29uc3QgRkxFWCA9ICdmbGV4JztcbmV4cG9ydCBjb25zdCBXSUxMX0NIQU5HRSA9ICd3aWxsQ2hhbmdlJztcbmV4cG9ydCBjb25zdCBBVVRPID0gJ0FVVE8nO1xuZXhwb3J0IGNvbnN0IENPTU1BX0RFTElNSVRFUiA9ICcsJztcbmV4cG9ydCBjb25zdCBDT0xPTl9ERUxJTUlURVIgPSAnOic7XG5leHBvcnQgY29uc3QgQkFSX0RFTElNSVRFUiA9ICd8JztcbmV4cG9ydCBjb25zdCBDSElMRFJFTiA9ICdDSElMRFJFTic7XG5leHBvcnQgY29uc3QgSU1NRURJQVRFX0NISUxEUkVOID0gJ0lNTUVESUFURV9DSElMRFJFTic7XG5leHBvcnQgY29uc3QgU0lCTElOR1MgPSAnU0lCTElOR1MnO1xuZXhwb3J0IGNvbnN0IFBBUkVOVCA9ICdQQVJFTlQnO1xuZXhwb3J0IGNvbnN0IFBSRVNFUlZFXzNEID0gJ3ByZXNlcnZlLTNkJztcbmV4cG9ydCBjb25zdCBIVE1MX0VMRU1FTlQgPSAnSFRNTF9FTEVNRU5UJztcbmV4cG9ydCBjb25zdCBQTEFJTl9PQkpFQ1QgPSAnUExBSU5fT0JKRUNUJztcbmV4cG9ydCBjb25zdCBBQlNUUkFDVF9OT0RFID0gJ0FCU1RSQUNUX05PREUnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9UUkFOU0ZPUk0gPSAnUkVOREVSX1RSQU5TRk9STSc7XG5leHBvcnQgY29uc3QgUkVOREVSX0dFTkVSQUwgPSAnUkVOREVSX0dFTkVSQUwnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9TVFlMRSA9ICdSRU5ERVJfU1RZTEUnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9QTFVHSU4gPSAnUkVOREVSX1BMVUdJTic7XG4iXSwibmFtZXMiOlsiQUJTVFJBQ1RfTk9ERSIsIkFVVE8iLCJCQUNLR1JPVU5EIiwiQkFDS0dST1VORF9DT0xPUiIsIkJBUl9ERUxJTUlURVIiLCJCT1JERVJfQ09MT1IiLCJCT1VOREFSWV9TRUxFQ1RPUiIsIkNISUxEUkVOIiwiQ09MT05fREVMSU1JVEVSIiwiQ09MT1IiLCJDT01NQV9ERUxJTUlURVIiLCJDT05GSUdfVU5JVCIsIkNPTkZJR19WQUxVRSIsIkNPTkZJR19YX1VOSVQiLCJDT05GSUdfWF9WQUxVRSIsIkNPTkZJR19ZX1VOSVQiLCJDT05GSUdfWV9WQUxVRSIsIkNPTkZJR19aX1VOSVQiLCJDT05GSUdfWl9WQUxVRSIsIkRJU1BMQVkiLCJGSUxURVIiLCJGTEVYIiwiRk9OVF9WQVJJQVRJT05fU0VUVElOR1MiLCJIRUlHSFQiLCJIVE1MX0VMRU1FTlQiLCJJTU1FRElBVEVfQ0hJTERSRU4iLCJJWDJfSURfREVMSU1JVEVSIiwiT1BBQ0lUWSIsIlBBUkVOVCIsIlBMQUlOX09CSkVDVCIsIlBSRVNFUlZFXzNEIiwiUkVOREVSX0dFTkVSQUwiLCJSRU5ERVJfUExVR0lOIiwiUkVOREVSX1NUWUxFIiwiUkVOREVSX1RSQU5TRk9STSIsIlJPVEFURV9YIiwiUk9UQVRFX1kiLCJST1RBVEVfWiIsIlNDQUxFXzNEIiwiU0NBTEVfWCIsIlNDQUxFX1kiLCJTQ0FMRV9aIiwiU0lCTElOR1MiLCJTS0VXIiwiU0tFV19YIiwiU0tFV19ZIiwiVFJBTlNGT1JNIiwiVFJBTlNMQVRFXzNEIiwiVFJBTlNMQVRFX1giLCJUUkFOU0xBVEVfWSIsIlRSQU5TTEFURV9aIiwiV0ZfUEFHRSIsIldJRFRIIiwiV0lMTF9DSEFOR0UiLCJXX01PRF9JWCIsIldfTU9EX0pTIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXNEYUEsYUFBYTtlQUFiQTs7SUFYQUMsSUFBSTtlQUFKQTs7SUFOQUMsVUFBVTtlQUFWQTs7SUFEQUMsZ0JBQWdCO2VBQWhCQTs7SUFVQUMsYUFBYTtlQUFiQTs7SUFSQUMsWUFBWTtlQUFaQTs7SUEvQkFDLGlCQUFpQjtlQUFqQkE7O0lBd0NBQyxRQUFRO2VBQVJBOztJQUZBQyxlQUFlO2VBQWZBOztJQU5BQyxLQUFLO2VBQUxBOztJQUtBQyxlQUFlO2VBQWZBOztJQTdCQUMsV0FBVztlQUFYQTs7SUFKQUMsWUFBWTtlQUFaQTs7SUFDQUMsYUFBYTtlQUFiQTs7SUFKQUMsY0FBYztlQUFkQTs7SUFLQUMsYUFBYTtlQUFiQTs7SUFKQUMsY0FBYztlQUFkQTs7SUFLQUMsYUFBYTtlQUFiQTs7SUFKQUMsY0FBYztlQUFkQTs7SUE4QkFDLE9BQU87ZUFBUEE7O0lBUkFDLE1BQU07ZUFBTkE7O0lBU0FDLElBQUk7ZU
17588FBSkE7O0lBUkFDLHVCQUF1QjtlQUF2QkE7O0lBRUFDLE1BQU07ZUFBTkE7O0lBaUJBQyxZQUFZO2VBQVpBOztJQUpBQyxrQkFBa0I7ZUFBbEJBOztJQWhEQUMsZ0JBQWdCO2VBQWhCQTs7SUErQkFDLE9BQU87ZUFBUEE7O0lBbUJBQyxNQUFNO2VBQU5BOztJQUdBQyxZQUFZO2VBQVpBOztJQUZBQyxXQUFXO2VBQVhBOztJQUtBQyxjQUFjO2VBQWRBOztJQUVBQyxhQUFhO2VBQWJBOztJQURBQyxZQUFZO2VBQVpBOztJQUZBQyxnQkFBZ0I7ZUFBaEJBOztJQTlCQUMsUUFBUTtlQUFSQTs7SUFDQUMsUUFBUTtlQUFSQTs7SUFDQUMsUUFBUTtlQUFSQTs7SUFIQUMsUUFBUTtlQUFSQTs7SUFIQUMsT0FBTztlQUFQQTs7SUFDQUMsT0FBTztlQUFQQTs7SUFDQUMsT0FBTztlQUFQQTs7SUEwQkFDLFFBQVE7ZUFBUkE7O0lBckJBQyxJQUFJO2VBQUpBOztJQUNBQyxNQUFNO2VBQU5BOztJQUNBQyxNQUFNO2VBQU5BOztJQWRBQyxTQUFTO2VBQVRBOztJQUlBQyxZQUFZO2VBQVpBOztJQUhBQyxXQUFXO2VBQVhBOztJQUNBQyxXQUFXO2VBQVhBOztJQUNBQyxXQUFXO2VBQVhBOztJQWZBQyxPQUFPO2VBQVBBOztJQThCQUMsS0FBSztlQUFMQTs7SUFRQUMsV0FBVztlQUFYQTs7SUFwQ0FDLFFBQVE7ZUFBUkE7O0lBREFDLFFBQVE7ZUFBUkE7OztBQUxOLE1BQU03QixtQkFBbUI7QUFJekIsTUFBTXlCLFVBQVU7QUFDaEIsTUFBTUksV0FBVztBQUNqQixNQUFNRCxXQUFXO0FBQ2pCLE1BQU1oRCxvQkFBb0I7QUFDMUIsTUFBTVEsaUJBQWlCO0FBQ3ZCLE1BQU1FLGlCQUFpQjtBQUN2QixNQUFNRSxpQkFBaUI7QUFDdkIsTUFBTU4sZUFBZTtBQUNyQixNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUUsZ0JBQWdCO0FBQ3RCLE1BQU1FLGdCQUFnQjtBQUN0QixNQUFNTixjQUFjO0FBQ3BCLE1BQU1tQyxZQUFZO0FBQ2xCLE1BQU1FLGNBQWM7QUFDcEIsTUFBTUMsY0FBYztBQUNwQixNQUFNQyxjQUFjO0FBQ3BCLE1BQU1ILGVBQWU7QUFDckIsTUFBTVIsVUFBVTtBQUNoQixNQUFNQyxVQUFVO0FBQ2hCLE1BQU1DLFVBQVU7QUFDaEIsTUFBTUgsV0FBVztBQUNqQixNQUFNSCxXQUFXO0FBQ2pCLE1BQU1DLFdBQVc7QUFDakIsTUFBTUMsV0FBVztBQUNqQixNQUFNTSxPQUFPO0FBQ2IsTUFBTUMsU0FBUztBQUNmLE1BQU1DLFNBQVM7QUFDZixNQUFNbEIsVUFBVTtBQUNoQixNQUFNUCxTQUFTO0FBQ2YsTUFBTUUsMEJBQTBCO0FBQ2hDLE1BQU04QixRQUFRO0FBQ2QsTUFBTTdCLFNBQVM7QUFDZixNQUFNcEIsbUJBQW1CO0FBQ3pCLE1BQU1ELGFBQWE7QUFDbkIsTUFBTUcsZUFBZTtBQUNyQixNQUFNSSxRQUFRO0FBQ2QsTUFBTVUsVUFBVTtBQUNoQixNQUFNRSxPQUFPO0FBQ2IsTUFBTWdDLGNBQWM7QUFDcEIsTUFBTXBELE9BQU87QUFDYixNQUFNUyxrQkFBa0I7QUFDeEIsTUFBTUYsa0JBQWtCO0FBQ3hCLE1BQU1KLGdCQUFnQjtBQUN0QixNQUFNRyxXQUFXO0FBQ2pCLE1BQU1rQixxQkFBcUI7QUFDM0IsTUFBTWlCLFdBQVc7QUFDakIsTUFBTWQsU0FBUztBQUNmLE1BQU1FLGNBQWM7QUFDcEIsTUFBTU4sZUFBZTtBQUNyQixNQUFNSyxlQUFlO0FBQ3JCLE1BQU03QixnQkFBZ0I7QUFDdEIsTUFBTWtDLG1CQUFtQjtBQUN6QixNQUFNSCxpQkFBaUI7QUFDdkIsTUFBTUUsZUFBZTtBQUNyQixNQUFNRCxnQkFBZ0IifQ==
17589
17590}),
17591"262": (function (__unused_webpack_module, exports) {
17592"use strict";
17593
17594Object.defineProperty(exports, "__esModule", ({
17595    value: true
17596}));
17597function _export(target, all) {
17598    for(var name in all)Object.defineProperty(target, name, {
17599        enumerable: true,
17600        get: all[name]
17601    });
17602}
17603_export(exports, {
17604    ActionAppliesTo: function() {
17605        return ActionAppliesTo;
17606    },
17607    ActionTypeConsts: function() {
17608        return ActionTypeConsts;
17609    }
17610});
17611const ActionTypeConsts = {
17612    TRANSFORM_MOVE: 'TRANSFORM_MOVE',
17613    TRANSFORM_SCALE: 'TRANSFORM_SCALE',
17614    TRANSFORM_ROTATE: 'TRANSFORM_ROTATE',
17615    TRANSFORM_SKEW: 'TRANSFORM_SKEW',
17616    STYLE_OPACITY: 'STYLE_OPACITY',
17617    STYLE_SIZE: 'STYLE_SIZE',
17618    STYLE_FILTER: 'STYLE_FILTER',
17619    STYLE_FONT_VARIATION: 'STYLE_FONT_VARIATION',
17620    STYLE_BACKGROUND_COLOR: 'STYLE_BACKGROUND_COLOR',
17621    STYLE_BORDER: 'STYLE_BORDER',
17622    STYLE_TEXT_COLOR: 'STYLE_TEXT_COLOR',
17623    OBJECT_VALUE: 'OBJECT_VALUE',
17624    PLUGIN_LOTTIE: 'PLUGIN_LOTTIE',
17625    PLUGIN_SPLINE: 'PLUGIN_SPLINE',
17626    PLUGIN_RIVE: 'PLUGIN_RIVE',
17627    PLUGIN_VARIABLE: 'PLUGIN_VARIABLE',
17628    GENERAL_DISPLAY: 'GENERAL_DISPLAY',
17629    GENERAL_START_ACTION: 'GENERAL_START_ACTION',
17630    GENERAL_CONTINUOUS_ACTION: 'GENERAL_CONTINUOUS_ACTION',
17631    // TODO: Clean these up below because they're not used at this time
17632    GENERAL_COMBO_CLASS: 'GENERAL_COMBO_CLASS',
17633    GENERAL_STOP_ACTION: 'GENERAL_STOP_ACTION',
17634    GENERAL_LOOP: 'GENERAL_LOOP',
17635    STYLE_BOX_SHADOW: 'STYLE_BOX_SHADOW'
17636};
17637const ActionAppliesTo = {
17638    ELEMENT: 'ELEMENT',
17639    ELEMENT_CLASS: 'ELEMENT_CLASS',
17640    TRIGGER_ELEMENT: 'TRIGGER_ELEMENT'
17641};
17642
17643//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuaW1hdGlvbi1hY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBY3Rpb25UeXBlQ29uc3RzID0ge1xuICBUUkFOU0ZPUk1fTU9WRTogJ1RSQU5TRk9STV9NT1ZFJyBhcyBjb25zdCxcbiAgVFJBTlNGT1JNX1NDQUxFOiAnVFJBTlNGT1JNX1NDQUxFJyBhcyBjb25zdCxcbiAgVFJBTlNGT1JNX1JPVEFURTogJ1RSQU5TRk9STV9ST1RBVEUnIGFzIGNvbnN0LFxuICBUUkFOU0ZPUk1fU0tFVzogJ1RSQU5TRk9STV9TS0VXJyBhcyBjb25zdCxcbiAgU1RZTEVfT1BBQ0lUWTogJ1NUWUxFX09Q
17643QUNJVFknIGFzIGNvbnN0LFxuICBTVFlMRV9TSVpFOiAnU1RZTEVfU0laRScgYXMgY29uc3QsXG4gIFNUWUxFX0ZJTFRFUjogJ1NUWUxFX0ZJTFRFUicgYXMgY29uc3QsXG4gIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiAnU1RZTEVfRk9OVF9WQVJJQVRJT04nIGFzIGNvbnN0LFxuICBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOiAnU1RZTEVfQkFDS0dST1VORF9DT0xPUicgYXMgY29uc3QsXG4gIFNUWUxFX0JPUkRFUjogJ1NUWUxFX0JPUkRFUicgYXMgY29uc3QsXG4gIFNUWUxFX1RFWFRfQ09MT1I6ICdTVFlMRV9URVhUX0NPTE9SJyBhcyBjb25zdCxcbiAgT0JKRUNUX1ZBTFVFOiAnT0JKRUNUX1ZBTFVFJyBhcyBjb25zdCxcbiAgUExVR0lOX0xPVFRJRTogJ1BMVUdJTl9MT1RUSUUnIGFzIGNvbnN0LFxuICBQTFVHSU5fU1BMSU5FOiAnUExVR0lOX1NQTElORScgYXMgY29uc3QsXG4gIFBMVUdJTl9SSVZFOiAnUExVR0lOX1JJVkUnIGFzIGNvbnN0LFxuICBQTFVHSU5fVkFSSUFCTEU6ICdQTFVHSU5fVkFSSUFCTEUnIGFzIGNvbnN0LFxuICBHRU5FUkFMX0RJU1BMQVk6ICdHRU5FUkFMX0RJU1BMQVknIGFzIGNvbnN0LFxuICBHRU5FUkFMX1NUQVJUX0FDVElPTjogJ0dFTkVSQUxfU1RBUlRfQUNUSU9OJyBhcyBjb25zdCxcbiAgR0VORVJBTF9DT05USU5VT1VTX0FDVElPTjogJ0dFTkVSQUxfQ09OVElOVU9VU19BQ1RJT04nIGFzIGNvbnN0LFxuXG4gIC8vIFRPRE86IENsZWFuIHRoZXNlIHVwIGJlbG93IGJlY2F1c2UgdGhleSdyZSBub3QgdXNlZCBhdCB0aGlzIHRpbWVcbiAgR0VORVJBTF9DT01CT19DTEFTUzogJ0dFTkVSQUxfQ09NQk9fQ0xBU1MnIGFzIGNvbnN0LFxuICBHRU5FUkFMX1NUT1BfQUNUSU9OOiAnR0VORVJBTF9TVE9QX0FDVElPTicgYXMgY29uc3QsXG4gIEdFTkVSQUxfTE9PUDogJ0dFTkVSQUxfTE9PUCcgYXMgY29uc3QsXG4gIFNUWUxFX0JPWF9TSEFET1c6ICdTVFlMRV9CT1hfU0hBRE9XJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblR5cGVJZFR5cGUgPSBrZXlvZiB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cztcblxuZXhwb3J0IGNvbnN0IEFjdGlvbkFwcGxpZXNUbyA9IHtcbiAgRUxFTUVOVDogJ0VMRU1FTlQnIGFzIGNvbnN0LFxuICBFTEVNRU5UX0NMQVNTOiAnRUxFTUVOVF9DTEFTUycgYXMgY29uc3QsXG4gIFRSSUdHRVJfRUxFTUVOVDogJ1RSSUdHRVJfRUxFTUVOVCcgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuIl0sIm5hbWVzIjpbIkFjdGlvbkFwcGxpZXNUbyIsIkFjdGlvblR5cGVDb25zdHMiLCJUUkFOU0ZPUk1fTU9WRSIsIlRSQU5TRk9STV9TQ0FMRSIsIlRSQU5TRk9STV9ST1RBVEUiLCJUUkFOU0ZPUk1fU0tFVyIsIlNUWUxFX09Q
17643QUNJVFkiLCJTVFlMRV9TSVpFIiwiU1RZTEVfRklMVEVSIiwiU1RZTEVfRk9OVF9WQVJJQVRJT04iLCJTVFlMRV9CQUNLR1JPVU5EX0NPTE9SIiwiU1RZTEVfQk9SREVSIiwiU1RZTEVfVEVYVF9DT0xPUiIsIk9CSkVDVF9WQUxVRSIsIlBMVUdJTl9MT1RUSUUiLCJQTFVHSU5fU1BMSU5FIiwiUExVR0lOX1JJVkUiLCJQTFVHSU5fVkFSSUFCTEUiLCJHRU5FUkFMX0RJU1BMQVkiLCJHRU5FUkFMX1NUQVJUX0FDVElPTiIsIkdFTkVSQUxfQ09OVElOVU9VU19BQ1RJT04iLCJHRU5FUkFMX0NPTUJPX0NMQVNTIiwiR0VORVJBTF9TVE9QX0FDVElPTiIsIkdFTkVSQUxfTE9PUCIsIlNUWUxFX0JPWF9TSEFET1ciLCJFTEVNRU5UIiwiRUxFTUVOVF9DTEFTUyIsIlRSSUdHRVJfRUxFTUVOVCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUE4QmFBLGVBQWU7ZUFBZkE7O0lBOUJBQyxnQkFBZ0I7ZUFBaEJBOzs7QUFBTixNQUFNQSxtQkFBbUI7SUFDOUJDLGdCQUFnQjtJQUNoQkMsaUJBQWlCO0lBQ2pCQyxrQkFBa0I7SUFDbEJDLGdCQUFnQjtJQUNoQkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLGNBQWM7SUFDZEMsc0JBQXNCO0lBQ3RCQyx3QkFBd0I7SUFDeEJDLGNBQWM7SUFDZEMsa0JBQWtCO0lBQ2xCQyxjQUFjO0lBQ2RDLGVBQWU7SUFDZkMsZUFBZTtJQUNmQyxhQUFhO0lBQ2JDLGlCQUFpQjtJQUNqQkMsaUJBQWlCO0lBQ2pCQyxzQkFBc0I7SUFDdEJDLDJCQUEyQjtJQUUzQixtRUFBbUU7SUFDbkVDLHFCQUFxQjtJQUNyQkMscUJBQXFCO0lBQ3JCQyxjQUFjO0lBQ2RDLGtCQUFrQjtBQUNwQjtBQUlPLE1BQU14QixrQkFBa0I7SUFDN0J5QixTQUFTO0lBQ1RDLGVBQWU7SUFDZkMsaUJBQWlCO0FBQ25CIn0=
17644
17645}),
17646"7087": (function (__unused_webpack_module, exports, __webpack_require__) {
17647"use strict";
17648
17649Object.defineProperty(exports, "__esModule", ({
17650    value: true
17651}));
17652function _export(target, all) {
17653    for(var name in all)Object.defineProperty(target, name, {
17654        enumerable: true,
17655        get: all[name]
17656    });
17657}
17658_export(exports, {
17659    ActionTypeConsts: function() {
17660        return _animationactions.ActionTypeConsts;
17661    },
17662    IX2EngineActionTypes: function() {
17663        return _IX2EngineActionTypes;
17664    },
17665    IX2EngineConstants: function() {
17666        return _IX2EngineConstants;
17667    },
17668    QuickEffectIds: function() {
17669        return _triggerevents.QuickEffectIds;
17670    }
17671});
17672const _triggerevents = _export_star(__webpack_require__(1833), exports);
17673const _animationactions = _export_star(__webpack_require__(262), exports);
17674_export_star(__webpack_require__(8704), exports);
17675_export_star(__webpack_require__(3213), exports);
17676const _IX2EngineActionTypes = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8023));
17677const _IX2EngineConstants = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2686));
17678function _export_star(from, to) {
17679    Object.keys(from).forEach(function(k) {
17680        if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
17681            Object.defineProperty(to, k, {
17682                enumerable: true,
17683                get: function() {
17684                    return from[k];
17685                }
17686            });
17687        }
17688    });
17689    return from;
17690}
17691function _getRequireWildcardCache(nodeInterop) {
17692    if (typeof WeakMap !== "function") return null;
17693    var cacheBabelInterop = new WeakMap();
17694    var cacheNodeInterop = new WeakMap();
17695    return (_getRequireWildcardCache = function(nodeInterop) {
17696        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
17697    })(nodeInterop);
17698}
17699function _interop_require_wildcard(obj, nodeInterop) {
17700    if (!nodeInterop && obj && obj.__esModule) {
17701        return obj;
17702    }
17703    if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
17704        return {
17705            default: obj
17706        };
17707    }
17708    var cache = _getRequireWildcardCache(nodeInterop);
17709    if (cache && cache.has(obj)) {
17710        return cache.get(obj);
17711    }
17712    var newObj = {
17713        __proto__: null
17714    };
17715    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
17716    for(var key in obj){
17717        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
17718            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
17719            if (desc && (desc.get || desc.set)) {
17720                Object.defineProperty(newObj, key, desc);
17721            } else {
17722                newObj[key] = obj[key];
17723            }
17724        }
17725    }
17726    newObj.default = obj;
17727    if (cache) {
17728        cache.set(obj, newObj);
17729    }
17730    return newObj;
17731}
17732
17733//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHJpZ2dlci1ldmVud
17733HMnO1xuZXhwb3J0ICogZnJvbSAnLi9hbmltYXRpb24tYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3RyaWdnZXItaW50ZXJhY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcmVkdWNlZC1tb3Rpb24nO1xuXG5pbXBvcnQgKiBhcyBJWDJFbmdpbmVBY3Rpb25UeXBlcyBmcm9tICcuL0lYMkVuZ2luZUFjdGlvblR5cGVzJztcbmltcG9ydCAqIGFzIElYMkVuZ2luZUNvbnN0YW50cyBmcm9tICcuL0lYMkVuZ2luZUNvbnN0YW50cyc7XG5leHBvcnQge0lYMkVuZ2luZUFjdGlvblR5cGVzLCBJWDJFbmdpbmVDb25zdGFudHN9O1xuXG5leHBvcnQge0FjdGlvblR5cGVDb25zdHN9IGZyb20gJy4vYW5pbWF0aW9uLWFjdGlvbnMnO1xuZXhwb3J0IHtRdWlja0VmZmVjdElkc30gZnJvbSAnLi90cmlnZ2VyLWV2ZW50cyc7XG4iXSwibmFtZXMiOlsiQWN0aW9uVHlwZUNvbnN0cyIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiUXVpY2tFZmZlY3RJZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBU1FBLGdCQUFnQjtlQUFoQkEsa0NBQWdCOztJQUZoQkMsb0JBQW9CO2VBQXBCQTs7SUFBc0JDLGtCQUFrQjtlQUFsQkE7O0lBR3RCQyxjQUFjO2VBQWRBLDZCQUFjOzs7NENBVlI7K0NBQ0E7cUJBQ0E7cUJBQ0E7OEVBRXdCOzRFQUNGIn0=
17734
17735}),
17736"3213": (function (__unused_webpack_module, exports, __webpack_require__) {
17737"use strict";
17738
17739Object.defineProperty(exports, "__esModule", ({
17740    value: true
17741}));
17742Object.defineProperty(exports, "ReducedMotionTypes", ({
17743    enumerable: true,
17744    get: function() {
17745        return ReducedMotionTypes;
17746    }
17747}));
17748const _animationactions = __webpack_require__(262);
17749const { TRANSFORM_MOVE, TRANSFORM_SCALE, TRANSFORM_ROTATE, TRANSFORM_SKEW, STYLE_SIZE, STYLE_FILTER, STYLE_FONT_VARIATION } = _animationactions.ActionTypeConsts;
17750const ReducedMotionTypes = {
17751    [TRANSFORM_MOVE]: true,
17752    [TRANSFORM_SCALE]: true,
17753    [TRANSFORM_ROTATE]: true,
17754    [TRANSFORM_SKEW]: true,
17755    [STYLE_SIZE]: true,
17756    [STYLE_FILTER]: true,
17757    [STYLE_FONT_VARIATION]: true
17758};
17759
17760//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlZHVjZWQtbW90aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9uVHlwZUNvbnN0c30gZnJvbSAnLi9hbmltYXRpb24tYWN0aW9ucyc7XG5cbmNvbnN0IHtcbiAgVFJBTlNGT1JNX01PVkUsXG4gIFRSQU5TRk9STV9TQ0FMRSxcbiAgVFJBTlNGT1JNX1JPVEFURSxcbiAgVFJBTlNGT1JNX1NLRVcsXG4gIFNUWUxFX1NJWkUsXG4gIFNUWUxFX0ZJTFRFUixcbiAgU1RZTEVfRk9OVF9WQVJJQVRJT04sXG59ID0gQWN0aW9uVHlwZUNvbnN0cztcblxuLyoqXG4gKiBSZWR1Y2VkIE1vdGlvbjogQWN0aW9uIHR5cGVzIHRvIGJ5cGFzcyBkdXJpbmcgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXG4gKi9cblxuZXhwb3J0IGNvbnN0IFJlZHVjZWRNb3Rpb25UeXBlcyA9IHtcbiAgW1RSQU5TRk9STV9NT1ZFXTogdHJ1ZSxcbiAgW1RSQU5TRk9STV9TQ0FMRV06IHRydWUsXG4gIFtUUkFOU0ZPUk1fUk9UQVRFXTogdHJ1ZSxcbiAgW1RSQU5TRk9STV9TS0VXXTogdHJ1ZSxcbiAgW1NUWUxFX1NJWkVdOiB0cnVlLFxuICBbU1RZTEVfRklMVEVSXTogdHJ1ZSxcbiAgW1NUWUxFX0ZPTlRfVkFSSUFUSU9OXTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiUmVkdWNlZE1vdGlvblR5cGVzIiwiVFJBTlNGT1JNX01PVkUiLCJUUkFOU0ZPUk1fU0NBTEUiLCJUUkFOU0ZPUk1fUk9UQVRFIiwiVFJBTlNGT1JNX1NLRVciLCJTVFlMRV9TSVpFIiwiU1RZTEVfRklMVEVSIiwiU1RZTEVfRk9OVF9WQVJJQVRJT04iLCJBY3Rpb25UeXBlQ29uc3RzIl0sIm1hcHBpbmdzIjoiOzs7OytCQWdCYUE7OztlQUFBQTs7O2tDQWhCa0I7QUFFL0IsTUFBTSxFQUNKQyxjQUFjLEVBQ2RDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxjQUFjLEVBQ2RDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxvQkFBb0IsRUFDckIsR0FBR0Msa0NBQWdCO0FBTWIsTUFBTVIscUJBQXFCO0lBQ2hDLENBQUNDLGVBQWUsRUFBRTtJQUNsQixDQUFDQyxnQkFBZ0IsRUFBRTtJQUNuQixDQUFDQyxpQkFBaUIsRUFBRTtJQUNwQixDQUFDQyxlQUFlLEVBQUU7SUFDbEIsQ0FBQ0MsV0FBVyxFQUFFO0lBQ2QsQ0FBQ0MsYUFBYSxFQUFFO0lBQ2hCLENBQUNDLHFCQUFxQixFQUFFO0FBQzFCIn0=
17761
17762}),
17763"1833": (function (__unused_webpack_module, exports) {
17764"use strict";
17765/**
17766 * Event Type IDs
17767 */ 
17768Object.defineProperty(exports, "__esModule", ({
17769    value: true
17770}));
17771function _export(target, all) {
17772    for(var name in all)Object.defineProperty(target, name, {
17773        enumerable: true,
17774        get: all[name]
17775    });
17776}
17777_export(exports, {
17778    EventAppliesTo: function() {
17779        return EventAppliesTo;
17780    },
17781    EventBasedOn: function() {
17782        return EventBasedOn;
17783    },
17784    EventContinuousMouseAxes: function() {
17785        return EventContinuousMouseAxes;
17786    },
17787    EventLimitAffectedElements: function() {
17788        return EventLimitAffectedElements;
17789    },
17790    EventTypeConsts: function() {
17791        return EventTypeConsts;
17792    },
17793    QuickEffectDirectionConsts: function() {
17794        return QuickEffectDirectionConsts;
17795    },
17796    QuickEffectIds: function() {
17797        return QuickEffectIds;
17798    }
17799});
17800const EventTypeConsts = {
17801    NAVBAR_OPEN: 'NAVBAR_OPEN',
17802    NAVBAR_CLOSE: 'NAVBAR_CLOSE',
17803    TAB_ACTIVE: 'TAB_ACTIVE',
17804    TAB_INACTIVE: 'TAB_INACTIVE',
17805    SLIDER_ACTIVE: 'SLIDER_ACTIVE',
17806    SLIDER_INACTIVE: 'SLIDER_INACTIVE',
17807    DROPDOWN_OPEN: 'DROPDOWN_OPEN',
17808    DROPDOWN_CLOSE: 'DROPDOWN_CLOSE',
17809    MOUSE_CLICK: 'MOUSE_CLICK',
17810    MOUSE_SECOND_CLICK: 'MOUSE_SECOND_CLICK',
17811    MOUSE_DOWN: 'MOUSE_DOWN',
17812    MOUSE_UP: 'MOUSE_UP',
17813    MOUSE_OVER: 'MOUSE_OVER',
17814    MOUSE_OUT: 'MOUSE_OUT',
17815    MOUSE_MOVE: 'MOUSE_MOVE',
17816    MOUSE_MOVE_IN_VIEWPORT: 'MOUSE_MOVE_IN_VIEWPORT',
17817    SCROLL_INTO_VIEW: 'SCROLL_INTO_VIEW',
17818    SCROLL_OUT_OF_VIEW: 'SCROLL_OUT_OF_VIEW',
17819    SCROLLING_IN_VIEW: 'SCROLLING_IN_VIEW',
17820    ECOMMERCE_CART_OPEN: 'ECOMMERCE_CART_OPEN',
17821    ECOMMERCE_CART_CLOSE: 'ECOMMERCE_CART_CLOSE',
17822    PAGE_START: 'PAGE_START',
17823    PAGE_FINISH: 'PAGE_FINISH',
17824    PAGE_SCROLL_UP: 'PAGE_SCROLL_UP',
17825    PAGE_SCROLL_DOWN: 'PAGE_SCROLL_DOWN',
17826    PAGE_SCROLL: 'PAGE_SCROLL'
17827};
17828const EventAppliesTo = {
17829    ELEMENT: 'ELEMENT',
17830    CLASS: 'CLASS',
17831    PAGE: 'PAGE'
17832};
17833const EventBasedOn = {
17834    ELEMENT: 'ELEMENT',
17835    VIEWPORT: 'VIEWPORT'
17836};
17837const EventContinuousMouseAxes = {
17838    X_AXIS: 'X_AXIS',
17839    Y_AXIS: 'Y_AXIS'
17840};
17841const EventLimitAffectedElements = {
17842    CHILDREN: 'CHILDREN',
17843    SIBLINGS: 'SIBLINGS',
17844    IMMEDIATE_CHILDREN: 'IMMEDIATE_CHILDREN'
17845};
17846const QuickEffectIds = {
17847    FADE_EFFECT: 'FADE_EFFECT',
17848    SLIDE_EFFECT: 'SLIDE_EFFECT',
17849    GROW_EFFECT: 'GROW_EFFECT',
17850    SHRINK_EFFECT: 'SHRINK_EFFECT',
17851    SPIN_EFFECT: 'SPIN_EFFECT',
17852    FLY_EFFECT: 'FLY_EFFECT',
17853    POP_EFFECT: 'POP_EFFECT',
17854    FLIP_EFFECT: 'FLIP_EFFECT',
17855    JIGGLE_EFFECT: 'JIGGLE_EFFECT',
17856    PULSE_EFFECT: 'PULSE_EFFECT',
17857    DROP_EFFECT: 'DROP_EFFECT',
17858    BLINK_EFFECT: 'BLINK_EFFECT',
17859    BOUNCE_EFFECT: 'BOUNCE_EFFECT',
17860    FLIP_LEFT_TO_RIGHT_EFFECT: 'FLIP_LEFT_TO_RIGHT_EFFECT',
17861    FLIP_RIGHT_TO_LEFT_EFFECT: 'FLIP_RIGHT_TO_LEFT_EFFECT',
17862    RUBBER_BAND_EFFECT: 'RUBBER_BAND_EFFECT',
17863    JELLO_EFFECT: 'JELLO_EFFECT',
17864    GROW_BIG_EFFECT: 'GROW_BIG_EFFECT',
17865    SHRINK_BIG_EFFECT: 'SHRINK_BIG_EFFECT',
17866    PLUGIN_LOTTIE_EFFECT: 'PLUGIN_LOTTIE_EFFECT'
17867};
17868const QuickEffectDirectionConsts = {
17869    LEFT: 'LEFT',
17870    RIGHT: 'RIGHT',
17871    BOTTOM: 'BOTTOM',
17872    TOP: 'TOP',
17873    BOTTOM_LEFT: 'BOTTOM_LEFT',
17874    BOTTOM_RIGHT: 'BOTTOM_RIGHT',
17875    TOP_RIGHT: 'TOP_RIGHT',
17876    TOP_LEFT: 'TOP_LEFT',
17877    CLOCKWISE: 'CLOCKWISE',
17878    COUNTER_CLOCKWISE: 'COUNTER_CLOCKWISE'
17879};
17880
17881//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyaWdnZXItZXZlbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgVHlwZSBJRHNcbiAqL1xuXG5leHBvcnQgY29uc3QgRXZlbnRUeXBlQ29uc3RzID0ge1xuICBOQVZCQVJfT1BFTjogJ05BVkJBUl9PUEVOJyBhcyBjb25zdCxcbiAgTkFWQkFSX0NMT1NFOiAnTkFWQkFSX0NMT1NFJyBhcyBjb25zdCxcbiAgVEFCX0FDVElWRTogJ1RBQl9BQ1RJVkUnIGFzIGNvbnN0LFxuICBUQUJfSU5BQ1RJVkU6ICdUQUJfSU5BQ1RJVkUnIGFzIGNvbnN0LFxuICBTTElERVJfQUNUSVZFOiAnU0xJREVSX0FDVElWRScgYXMgY29uc3QsXG4gIFNMSURFUl9JTkFDVElWRTogJ1NMSURFUl9JTkFDVElWRScgYXMgY29uc3QsXG4gIERST1BET1dOX09QRU46ICdEUk9QRE9XTl9PUEVOJyBhcyBjb25zdCxcbiAgRFJPUERPV05fQ0xPU0U6ICdEUk9QRE9XTl9DTE9TRScgYXMgY29uc3QsXG4gIE1PVVNFX0NMSUNLOiAnTU9VU0VfQ0xJQ0snIGFzIGNvbnN0LFxuICBNT1VTRV9TRUNPTkRfQ0xJQ0s6ICdNT1VTRV9TRUNPTkRfQ0xJQ0snIGFzIGNvbnN0LFxuICBNT1VTRV9ET1dOOiAnTU9VU0VfRE9XTicgYXMgY29uc3QsXG4gIE1PVVNFX1VQOiAnTU9VU0VfVVAnIGFzIGNvbnN0LFxuICBNT1VTRV9PVkVSOiAnTU9VU0VfT1ZFUicgYXMgY29uc3QsXG4gIE1PVVNFX09VVDogJ01PVVNFX09VVCcgYXMgY29uc3QsXG4gIE1PVVNFX01PVkU6ICdNT1VTRV9NT1ZFJyBhcyBjb25zdCxcbiAgTU9VU0VfTU9WRV9JTl9WSUVXUE9SVDogJ01PVVNFX01PVkVfSU5fVklFV1BPUlQnIGFzIGNvbnN0LFxuICBTQ1JPTExfSU5UT19WSUVXOiAnU0NST0xMX0lOVE9fVklFVycgYXMgY29uc3QsXG4gIFNDUk9MTF9PVVRfT0ZfVklFVzogJ1NDUk9MTF9PVVRfT0ZfVklFVycgYXMgY29uc3QsXG4gIFNDUk9MTElOR19JTl9WSUVXOiAnU0NST0xMSU5HX0lOX1ZJRVcnIGFzIGNvbnN0LFxuICBFQ09NTUVSQ0VfQ0FSVF9PUEVOOiAnRUNPTU1FUkNFX0NBUlRfT1BFTicgYXMgY29uc3QsXG4gIEVDT01NRVJDRV9DQVJUX0NMT1NFOiAnRUNPTU1FUkNFX0NBUlRfQ0xPU0UnIGFzIGNvbnN0LFxuICBQQUdFX1NUQVJUOiAnUEFHRV9TVEFSVCcgYXMgY29uc3QsXG4gIFBBR0VfRklOSVNIOiAnUEFHRV9GSU5JU0gnIGFzIGNvbnN0LFxuICBQQUdFX1NDUk9MTF9VUDogJ1BBR0VfU0NST0xMX1VQJyBhcyBjb25zdCxcbiAgUEFHRV9TQ1JPTExfRE9XTjogJ1BBR0VfU0NST0xMX0RPV04nIGFzIGNvbnN0LFxuICBQQUdFX1NDUk9MTDogJ1BBR0VfU0NST0xMJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRXZlbnQgQ29uZmlnIEVudW1zXG4gKi9cblxuZXhwb3J0IGNvbnN0IEV2ZW50QXBwbGllc1RvID0ge1xuICBFTEVNRU5UOiAnRUxFTUVOVCcgYXMgY29uc3QsXG4gIENMQVNTOiAnQ0xBU1MnIGFzIGNvbnN0LFxuICBQQUdFOiAnUEFHRScgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRXZlbnRCYXNlZE9uID0ge1xuICBFTEVNRU5UOiAnRUxFTUVOVCcgYXMgY29uc3QsXG4gIFZJRVdQT1JUOiAnVklFV1BPUlQnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEV2ZW50Q29udGludW91c01vdXNlQXhlcyA9IHtcbiAgWF9BWElTOiAnWF9BWElTJyBhcyBjb25zdCxcbiAgWV9BWElTOiAnWV9BWElTJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBFdmVudExpbWl0QWZmZWN0ZWRFbGVtZW50cyA9IHtcbiAgQ0hJTERSRU46ICdDSElMRFJFTicgYXMgY29uc3QsXG4gIFNJQkxJTkdTOiAnU0lCTElOR1MnIGFzIGNvbnN0LFxuICBJTU1FRElBVEVfQ0hJTERSRU46ICdJTU1FRElBVEVfQ0hJTERSRU4nIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBRdWljayBFZmZlY3QgRW51bXNcbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrRWZmZWN0SWRzID0ge1xuICBGQURFX0VGRkVDVDogJ0ZBREVfRUZGRUNUJyBhcyBjb25zdCxcbiAgU0xJREVfRUZGRUNUOiAnU0xJREVfRUZGRUNUJyBhcyBjb25zdCxcbiAgR1JPV19FRkZFQ1Q6ICdHUk9XX0VGRkVDVCcgYXMgY29uc3QsXG4gIFNIUklOS19FRkZFQ1Q6ICdTSFJJTktfRUZGRUNUJyBhcyBjb25zdCxcbiAgU1BJTl9FRkZFQ1Q6ICdTUElOX0VGRkVDVCcgYXMgY29uc3QsXG4gIEZMWV9FRkZFQ1Q6ICdGTFlfRUZGRUNUJyBhcyBjb25zdCxcbiAgUE9QX0VGRkVDVDogJ1BPUF9FRkZFQ1QnIGFzIGNvbnN0LFxuICBGTElQX0VGRkVDVDogJ0ZMSVBfRUZGRUNUJyBhcyBjb25zdCxcbiAgSklHR0xFX0VGRkVDVDogJ0pJR0dMRV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBQVUxTRV9FRkZFQ1Q6ICdQVUxTRV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBEUk9QX0VGRkVDVDogJ0RST1BfRUZGRUNUJyBhcyBjb25zdCxcbiAgQkxJTktfRUZGRUNUOiAnQkxJTktfRUZGRUNUJyBhcyBjb25zdCxcbiAgQk9VTkNFX0VGRkVDVDogJ0JPVU5DRV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBGTElQX0xFRlRfVE9fUklHSFRfRUZGRUNUOiAnRkxJUF9MRUZUX1RPX1JJR0hUX0VGRkVDVCcgYXMgY29uc3QsXG4gIEZMSVBfUklHSFRfVE9fTEVGVF9FRkZFQ1Q6ICdGTElQX1JJR0hUX1RPX0xFRlRfRUZGRUNUJyBhcyBjb25zdCxcbiAgUlVCQkVSX0JBTkRfRUZGRUNUOiAnUlVCQkVSX0JBTkRfRUZGRUNUJyBhcyBjb25zdCxcbiAgSkVMTE9fRUZGRUNUOiAnSkVMTE9fRUZGRUNUJyBhcyBjb25zdCxcbiAgR1JPV19CSUdfRUZGRUNUOiAnR1JPV19CSUdfRUZGRUNUJyBhcyBjb25zdCxcbiAgU0
17881hSSU5LX0JJR19FRkZFQ1Q6ICdTSFJJTktfQklHX0VGRkVDVCcgYXMgY29uc3QsXG4gIFBMVUdJTl9MT1RUSUVfRUZGRUNUOiAnUExVR0lOX0xPVFRJRV9FRkZFQ1QnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBRdWljayBFZmZlY3QgRGlyZWN0aW9uIEVudW1zXG4gKi9cbmV4cG9ydCBjb25zdCBRdWlja0VmZmVjdERpcmVjdGlvbkNvbnN0cyA9IHtcbiAgTEVGVDogJ0xFRlQnIGFzIGNvbnN0LFxuICBSSUdIVDogJ1JJR0hUJyBhcyBjb25zdCxcbiAgQk9UVE9NOiAnQk9UVE9NJyBhcyBjb25zdCxcbiAgVE9QOiAnVE9QJyBhcyBjb25zdCxcbiAgQk9UVE9NX0xFRlQ6ICdCT1RUT01fTEVGVCcgYXMgY29uc3QsXG4gIEJPVFRPTV9SSUdIVDogJ0JPVFRPTV9SSUdIVCcgYXMgY29uc3QsXG4gIFRPUF9SSUdIVDogJ1RPUF9SSUdIVCcgYXMgY29uc3QsXG4gIFRPUF9MRUZUOiAnVE9QX0xFRlQnIGFzIGNvbnN0LFxuICBDTE9DS1dJU0U6ICdDTE9DS1dJU0UnIGFzIGNvbnN0LFxuICBDT1VOVEVSX0NMT0NLV0lTRTogJ0NPVU5URVJfQ0xPQ0tXSVNFJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiRXZlbnRBcHBsaWVzVG8iLCJFdmVudEJhc2VkT24iLCJFdmVudENvbnRpbnVvdXNNb3VzZUF4ZXMiLCJFdmVudExpbWl0QWZmZWN0ZWRFbGVtZW50cyIsIkV2ZW50VHlwZUNvbnN0cyIsIlF1aWNrRWZmZWN0RGlyZWN0aW9uQ29uc3RzIiwiUXVpY2tFZmZlY3RJZHMiLCJOQVZCQVJfT1BFTiIsIk5BVkJBUl9DTE9TRSIsIlRBQl9BQ1RJVkUiLCJUQUJfSU5BQ1RJVkUiLCJTTElERVJfQUNUSVZFIiwiU0xJREVSX0lOQUNUSVZFIiwiRFJPUERPV05fT1BFTiIsIkRST1BET1dOX0NMT1NFIiwiTU9VU0VfQ0xJQ0siLCJNT1VTRV9TRUNPTkRfQ0xJQ0siLCJNT1VTRV9ET1dOIiwiTU9VU0VfVVAiLCJNT1VTRV9PVkVSIiwiTU9VU0VfT1VUIiwiTU9VU0VfTU9WRSIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlQiLCJTQ1JPTExfSU5UT19WSUVXIiwiU0NST0xMX09VVF9PRl9WSUVXIiwiU0NST0xMSU5HX0lOX1ZJRVciLCJFQ09NTUVSQ0VfQ0FSVF9PUEVOIiwiRUNPTU1FUkNFX0NBUlRfQ0xPU0UiLCJQQUdFX1NUQVJUIiwiUEFHRV9GSU5JU0giLCJQQUdFX1NDUk9MTF9VUCIsIlBBR0VfU0NST0xMX0RPV04iLCJQQUdFX1NDUk9MTCIsIkVMRU1FTlQiLCJDTEFTUyIsIlBBR0UiLCJWSUVXUE9SVCIsIlhfQVhJUyIsIllfQVhJUyIsIkNISUxEUkVOIiwiU0lCTElOR1MiLCJJTU1FRElBVEVfQ0hJTERSRU4iLCJGQURFX0VGRkVDVCIsIlNMSURFX0VGRkVDVCIsIkdST1dfRUZGRUNUIiwiU0hSSU5LX0VGRkVDVCIsIlNQSU5fRUZGRUNUIiwiRkxZX0VGRkVDVCIsIlBPUF9FRkZFQ1QiLCJGTElQX0VGRkVDVCIsIkpJR0dMRV9FRkZFQ1QiLCJQVUxTRV9FRkZFQ1QiLCJEUk9QX0VGRkVDVCIsIkJMSU5LX0VGRkVDVCIsIkJPVU5DRV9FRkZFQ1QiLCJGTElQX0xFRlRfVE9fUklHSFRfRUZGRUNUIiwiRkxJUF9SSUdIVF9UT19MRUZUX0VGRkVDVCIsIlJVQkJFUl9CQU5EX0VGRkVDVCIsIkpFTExPX0VGRkVDVCIsIkdST1dfQklHX0VGRkVDVCIsIlNIUklOS19CSUdfRUZGRUNUIiwiUExVR0lOX0xPVFRJRV9FRkZFQ1QiLCJMRUZUIiwiUklHSFQiLCJCT1RUT00iLCJUT1AiLCJCT1RUT01fTEVGVCIsIkJPVFRPTV9SSUdIVCIsIlRPUF9SSUdIVCIsIlRPUF9MRUZUIiwiQ0xPQ0tXSVNFIiwiQ09VTlRFUl9DTE9DS1dJU0UiXSwibWFwcGluZ3MiOiJBQUFBOztDQUVDOzs7Ozs7Ozs7OztJQW1DWUEsY0FBYztlQUFkQTs7SUFNQUMsWUFBWTtlQUFaQTs7SUFLQUMsd0JBQXdCO2VBQXhCQTs7SUFLQUMsMEJBQTBCO2VBQTFCQTs7SUFqREFDLGVBQWU7ZUFBZkE7O0lBb0ZBQywwQkFBMEI7ZUFBMUJBOztJQTFCQUMsY0FBYztlQUFkQTs7O0FBMUROLE1BQU1GLGtCQUFrQjtJQUM3QkcsYUFBYTtJQUNiQyxjQUFjO0lBQ2RDLFlBQVk7SUFDWkMsY0FBYztJQUNkQyxlQUFlO0lBQ2ZDLGlCQUFpQjtJQUNqQkMsZUFBZTtJQUNmQyxnQkFBZ0I7SUFDaEJDLGFBQWE7SUFDYkMsb0JBQW9CO0lBQ3BCQyxZQUFZO0lBQ1pDLFVBQVU7SUFDVkMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLFlBQVk7SUFDWkMsd0JBQXdCO0lBQ3hCQyxrQkFBa0I7SUFDbEJDLG9CQUFvQjtJQUNwQkMsbUJBQW1CO0lBQ25CQyxxQkFBcUI7SUFDckJDLHNCQUFzQjtJQUN0QkMsWUFBWTtJQUNaQyxhQUFhO0lBQ2JDLGdCQUFnQjtJQUNoQkMsa0JBQWtCO0lBQ2xCQyxhQUFhO0FBQ2Y7QUFNTyxNQUFNaEMsaUJBQWlCO0lBQzVCaUMsU0FBUztJQUNUQyxPQUFPO0lBQ1BDLE1BQU07QUFDUjtBQUVPLE1BQU1sQyxlQUFlO0lBQzFCZ0MsU0FBUztJQUNURyxVQUFVO0FBQ1o7QUFFTyxNQUFNbEMsMkJBQTJCO0lBQ3RDbUMsUUFBUTtJQUNSQyxRQUFRO0FBQ1Y7QUFFTyxNQUFNbkMsNkJBQTZCO0lBQ3hDb0MsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLG9CQUFvQjtBQUN0QjtBQUtPLE1BQU1uQyxpQkFBaUI7SUFDNUJvQyxhQUFhO0lBQ2JDLGNBQWM7SUFDZEMsYUFBYTtJQUNiQyxlQUFlO0lBQ2ZDLGFBQWE7SUFDYkMsWUFBWTtJQUNaQyxZQUFZO0lBQ1pDLGFBQWE7SUFDYkMsZUFBZTtJQUNmQyxjQUFjO0lBQ2RDLGFBQWE7SUFDYkMsY0FBYztJQUNkQyxlQUFlO0lBQ2ZDLDJCQUEyQjtJQUMzQkMsMkJBQTJCO0lBQzNCQyxvQkFBb0I7SUFDcEJDLGNBQWM7SUFDZEMsaUJBQWlCO0lBQ2pCQyxtQkFBbUI7SUFDbkJDLHNCQUFzQjtBQUN4QjtBQUtPLE1BQU14RCw2QkFBNkI7SUFDeEN5RCxNQUFNO0lBQ05DLE9BQU87SUFDUEMsUUFBUTtJQUNSQyxLQUFLO0lBQ0xDLGFBQWE7SUFDYkMsY0FBYztJQUNkQyxXQUFXO0lBQ1hDLFVBQVU7SUFDVkMsV0FBVztJQUNYQyxtQkFBbUI7QUFDckIifQ==
17882
17883}),
17884"8704": (function (__unused_webpack_module, exports) {
17885"use strict";
17886
17887Object.defineProperty(exports, "__esModule", ({
17888    value: true
17889}));
17890Object.defineProperty(exports, "InteractionTypeConsts", ({
17891    enumerable: true,
17892    get: function() {
17893        return InteractionTypeConsts;
17894    }
17895}));
17896const InteractionTypeConsts = {
17897    MOUSE_CLICK_INTERACTION: 'MOUSE_CLICK_INTERACTION',
17898    MOUSE_HOVER_INTERACTION: 'MOUSE_HOVER_INTERACTION',
17899    MOUSE_MOVE_INTERACTION: 'MOUSE_MOVE_INTERACTION',
17900    SCROLL_INTO_VIEW_INTERACTION: 'SCROLL_INTO_VIEW_INTERACTION',
17901    SCROLLING_IN_VIEW_INTERACTION: 'SCROLLING_IN_VIEW_INTERACTION',
17902    MOUSE_MOVE_IN_VIEWPORT_INTERACTION: 'MOUSE_MOVE_IN_VIEWPORT_INTERACTION',
17903    PAGE_IS_SCROLLING_INTERACTION: 'PAGE_IS_SCROLLING_INTERACTION',
17904    PAGE_LOAD_INTERACTION: 'PAGE_LOAD_INTERACTION',
17905    PAGE_SCROLLED_INTERACTION: 'PAGE_SCROLLED_INTERACTION',
17906    NAVBAR_INTERACTION: 'NAVBAR_INTERACTION',
17907    DROPDOWN_INTERACTION: 'DROPDOWN_INTERACTION',
17908    ECOMMERCE_CART_INTERACTION: 'ECOMMERCE_CART_INTERACTION',
17909    TAB_INTERACTION: 'TAB_INTERACTION',
17910    SLIDER_INTERACTION: 'SLIDER_INTERACTION'
17911};
17912
17913//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyaWdnZXItaW50ZXJhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJbnRlcmFjdGlvblR5cGVDb25zdHMgPSB7XG4gIE1PVVNFX0NMSUNLX0lOVEVSQUNUSU9OOiAnTU9VU0VfQ0xJQ0tfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBNT1VTRV9IT1ZFUl9JTlRFUkFDVElPTjogJ01PVVNFX0hPVkVSX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgTU9VU0VfTU9WRV9JTlRFUkFDVElPTjogJ01PVVNFX01PVkVfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBTQ1JPTExfSU5UT19WSUVXX0lOVEVSQUNUSU9OOiAnU0NST0xMX0lOVE9fVklFV19JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFNDUk9MTElOR19JTl9WSUVXX0lOVEVSQUNUSU9OOiAnU0NST0xMSU5HX0lOX1ZJRVdfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBNT1VTRV9NT1ZFX0lOX1ZJRVdQT1JUX0lOVEVSQUNUSU9OOlxuICAgICdNT1VTRV9NT1ZFX0lOX1ZJRVdQT1JUX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgUEFHRV9JU19TQ1JPTExJTkdfSU5URVJBQ1RJT046ICdQQUdFX0lTX1NDUk9MTElOR19JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFBBR0VfTE9BRF9JTlRFUkFDVElPTjogJ1BBR0VfTE9BRF9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFBBR0VfU0NST0xMRURfSU5URVJBQ1RJT046ICdQQUdFX1NDUk9MTEVEX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgTkFWQkFSX0lOVEVSQUNUSU9OOiAnTkFWQkFSX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgRFJPUERPV05fSU5URVJBQ1RJT046ICdEUk9QRE9XTl9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIEVDT01NRVJDRV9DQVJUX0lOVEVSQUNUSU9OOiAnRUNPTU1FUkNFX0NBUlRfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBUQUJfSU5URVJBQ1RJT046ICdUQUJfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBTTElERVJfSU5URVJBQ1RJT046ICdTTElERVJfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcbiJdLCJuYW1lcyI6WyJJbnRlcmFjdGlvblR5cGVDb25zdHMiLCJNT1VTRV9DTElDS19JTlRFUkFDVElPTiIsIk1PVVNFX0hPVkVSX0lOVEVSQUNUSU9OIiwiTU9VU0VfTU9WRV9JTlRFUkFDVElPTiIsIlNDUk9MTF9JTlRPX1ZJRVdfSU5URVJBQ1RJT04iLCJTQ1JPTExJTkdfSU5fVklFV19JTlRFUkFDVElPTiIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlRfSU5URVJBQ1RJT04iLCJQQUdFX0lTX1NDUk9MTElOR19JTlRFUkFDVElPTiIsIlBBR0VfTE9BRF9JTlRFUkFDVElPTiIsIlBBR0VfU0NST0xMRURfSU5URVJBQ1RJT04iLCJOQVZCQVJfSU5URVJBQ1RJT04iLCJEUk9QRE9XTl9JTlRFUkFDVElPTiIsIkVDT01NRVJDRV9DQVJUX0lOVEVSQUNUSU9OIiwiVEFCX0lOVEVSQUNUSU9OIiwiU0xJREVSX0lOVEVSQUNUSU9OIl0sIm1hcHBpbmdzIjoiOzs7OytCQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSx3QkFBd0I7SUFDbkNDLHlCQUF5QjtJQUN6QkMseUJBQXlCO0lBQ3pCQyx3QkFBd0I7SUFDeEJDLDhCQUE4QjtJQUM5QkMsK0JBQStCO0lBQy9CQyxvQ0FDRTtJQUNGQywrQkFBK0I7SUFDL0JDLHVCQUF1QjtJQUN2QkMsMkJBQTJCO0lBQzNCQyxvQkFBb0I7SUFDcEJDLHNCQUFzQjtJQUN0QkMsNEJBQTRCO0lBQzVCQyxpQkFBaUI7SUFDakJDLG9CQUFvQjtB
17913QUN0QiJ9
17914
17915}),
17916"380": (function (__unused_webpack_module, exports) {
17917"use strict";
17918// Big List of Colors
17919// ------------------
17920// <https://www.w3.org/TR/css-color-4/#named-colors>
17921
17922Object.defineProperty(exports, "__esModule", ({
17923    value: true
17924}));
17925Object.defineProperty(exports, "normalizeColor", ({
17926    enumerable: true,
17927    get: function() {
17928        return normalizeColor;
17929    }
17930}));
17931const colorNamesObj = {
17932    aliceblue: '#F0F8FF',
17933    antiquewhite: '#FAEBD7',
17934    aqua: '#00FFFF',
17935    aquamarine: '#7FFFD4',
17936    azure: '#F0FFFF',
17937    beige: '#F5F5DC',
17938    bisque: '#FFE4C4',
17939    black: '#000000',
17940    blanchedalmond: '#FFEBCD',
17941    blue: '#0000FF',
17942    blueviolet: '#8A2BE2',
17943    brown: '#A52A2A',
17944    burlywood: '#DEB887',
17945    cadetblue: '#5F9EA0',
17946    chartreuse: '#7FFF00',
17947    chocolate: '#D2691E',
17948    coral: '#FF7F50',
17949    cornflowerblue: '#6495ED',
17950    cornsilk: '#FFF8DC',
17951    crimson: '#DC143C',
17952    cyan: '#00FFFF',
17953    darkblue: '#00008B',
17954    darkcyan: '#008B8B',
17955    darkgoldenrod: '#B8860B',
17956    darkgray: '#A9A9A9',
17957    darkgreen: '#006400',
17958    darkgrey: '#A9A9A9',
17959    darkkhaki: '#BDB76B',
17960    darkmagenta: '#8B008B',
17961    darkolivegreen: '#556B2F',
17962    darkorange: '#FF8C00',
17963    darkorchid: '#9932CC',
17964    darkred: '#8B0000',
17965    darksalmon: '#E9967A',
17966    darkseagreen: '#8FBC8F',
17967    darkslateblue: '#483D8B',
17968    darkslategray: '#2F4F4F',
17969    darkslategrey: '#2F4F4F',
17970    darkturquoise: '#00CED1',
17971    darkviolet: '#9400D3',
17972    deeppink: '#FF1493',
17973    deepskyblue: '#00BFFF',
17974    dimgray: '#696969',
17975    dimgrey: '#696969',
17976    dodgerblue: '#1E90FF',
17977    firebrick: '#B22222',
17978    floralwhite: '#FFFAF0',
17979    forestgreen: '#228B22',
17980    fuchsia: '#FF00FF',
17981    gainsboro: '#DCDCDC',
17982    ghostwhite: '#F8F8FF',
17983    gold: '#FFD700',
17984    goldenrod: '#DAA520',
17985    gray: '#808080',
17986    green: '#008000',
17987    greenyellow: '#ADFF2F',
17988    grey: '#808080',
17989    honeydew: '#F0FFF0',
17990    hotpink: '#FF69B4',
17991    indianred: '#CD5C5C',
17992    indigo: '#4B0082',
17993    ivory: '#FFFFF0',
17994    khaki: '#F0E68C',
17995    lavender: '#E6E6FA',
17996    lavenderblush: '#FFF0F5',
17997    lawngreen: '#7CFC00',
17998    lemonchiffon: '#FFFACD',
17999    lightblue: '#ADD8E6',
18000    lightcoral: '#F08080',
18001    lightcyan: '#E0FFFF',
18002    lightgoldenrodyellow: '#FAFAD2',
18003    lightgray: '#D3D3D3',
18004    lightgreen: '#90EE90',
18005    lightgrey: '#D3D3D3',
18006    lightpink: '#FFB6C1',
18007    lightsalmon: '#FFA07A',
18008    lightseagreen: '#20B2AA',
18009    lightskyblue: '#87CEFA',
18010    lightslategray: '#778899',
18011    lightslategrey: '#778899',
18012    lightsteelblue: '#B0C4DE',
18013    lightyellow: '#FFFFE0',
18014    lime: '#00FF00',
18015    limegreen: '#32CD32',
18016    linen: '#FAF0E6',
18017    magenta: '#FF00FF',
18018    maroon: '#800000',
18019    mediumaquamarine: '#66CDAA',
18020    mediumblue: '#0000CD',
18021    mediumorchid: '#BA55D3',
18022    mediumpurple: '#9370DB',
18023    mediumseagreen: '#3CB371',
18024    mediumslateblue: '#7B68EE',
18025    mediumspringgreen: '#00FA9A',
18026    mediumturquoise: '#48D1CC',
18027    mediumvioletred: '#C71585',
18028    midnightblue: '#191970',
18029    mintcream: '#F5FFFA',
18030    mistyrose: '#FFE4E1',
18031    moccasin: '#FFE4B5',
18032    navajowhite: '#FFDEAD',
18033    navy: '#000080',
18034    oldlace: '#FDF5E6',
18035    olive: '#808000',
18036    olivedrab: '#6B8E23',
18037    orange: '#FFA500',
18038    orangered: '#FF4500',
18039    orchid: '#DA70D6',
18040    palegoldenrod: '#EEE8AA',
18041    palegreen: '#98FB98',
18042    paleturquoise: '#AFEEEE',
18043    palevioletred: '#DB7093',
18044    papayawhip: '#FFEFD5',
18045    peachpuff: '#FFDAB9',
18046    peru: '#CD853F',
18047    pink: '#FFC0CB',
18048    plum: '#DDA0DD',
18049    powderblue: '#B0E0E6',
18050    purple: '#800080',
18051    rebeccapurple: '#663399',
18052    red: '#FF0000',
18053    rosybrown: '#BC8F8F',
18054    royalblue: '#4169E1',
18055    saddlebrown: '#8B4513',
18056    salmon: '#FA8072',
18057    sandybrown: '#F4A460',
18058    seagreen: '#2E8B57',
18059    seashell: '#FFF5EE',
18060    sienna: '#A0522D',
18061    silver: '#C0C0C0',
18062    skyblue: '#87CEEB',
18063    slateblue: '#6A5ACD',
18064    slategray: '#708090',
18065    slategrey: '#708090',
18066    snow: '#FFFAFA',
18067    springgreen: '#00FF7F',
18068    steelblue: '#4682B4',
18069    tan: '#D2B48C',
18070    teal: '#008080',
18071    thistle: '#D8BFD8',
18072    tomato: '#FF6347',
18073    turquoise: '#40E0D0',
18074    violet: '#EE82EE',
18075    wheat: '#F5DEB3',
18076    white: '#FFFFFF',
18077    whitesmoke: '#F5F5F5',
18078    yellow: '#FFFF00',
18079    yellowgreen: '#9ACD32'
18080};
18081function normalizeColor(inputColor) {
18082    let red;
18083    let green;
18084    let blue;
18085    let alpha = 1; // Default alpha to 1
18086    const rawColor = inputColor.replace(/\s/g, '').toLowerCase();
18087    const namedColor = typeof colorNamesObj[rawColor] === 'string' ? colorNamesObj[rawColor].toLowerCase() : null;
18088    const cleanColor = namedColor || rawColor;
18089    if (cleanColor.startsWith('#')) {
18090        const hex = cleanColor.substring(1);
18091        if (hex.length === 3 || hex.length === 4) {
18092            red = parseInt(hex[0] + hex[0], 16);
18093            green = parseInt(hex[1] + hex[1], 16);
18094            blue = parseInt(hex[2] + hex[2], 16);
18095            if (hex.length === 4) {
18096                alpha = parseInt(hex[3] + hex[3], 16) / 255;
18097            }
18098        } else if (hex.length === 6 || hex.length === 8) {
18099            red = parseInt(hex.substring(0, 2), 16);
18100            green = parseInt(hex.substring(2, 4), 16);
18101            blue = parseInt(hex.substring(4, 6), 16);
18102            if (hex.length === 8) {
18103                alpha = parseInt(hex.substring(6, 8), 16) / 255;
18104            }
18105        }
18106    } else if (cleanColor.startsWith('rgba')) {
18107        const rgbaValues = cleanColor.match(/rgba\(([^)]+)\)/)[1].split(',');
18108        red = parseInt(rgbaValues[0], 10);
18109        green = parseInt(rgbaValues[1], 10);
18110        blue = parseInt(rgbaValues[2], 10);
18111        alpha = parseFloat(rgbaValues[3]);
18112    } else if (cleanColor.startsWith('rgb')) {
18113        const rgbValues = cleanColor.match(/rgb\(([^)]+)\)/)[1].split(',');
18114        red = parseInt(rgbValues[0], 10);
18115        green = parseInt(rgbValues[1], 10);
18116        blue = parseInt(rgbValues[2], 10);
18117    } else if (cleanColor.startsWith('hsla')) {
18118        const hslaValues = cleanColor.match(/hsla\(([^)]+)\)/)[1].split(',');
18119        const h = parseFloat(hslaValues[0]);
18120        const s = parseFloat(hslaValues[1].replace('%', '')) / 100;
18121        const l = parseFloat(hslaValues[2].replace('%', '')) / 100;
18122        alpha = parseFloat(hslaValues[3]);
18123        // Convert HSL to RGB
18124        const C = (1 - Math.abs(2 * l - 1)) * s;
18125        const X = C * (1 - Math.abs(h / 60 % 2 - 1));
18126        const m = l - C / 2;
18127        let R;
18128        let G;
18129        let B;
18130        if (h >= 0 && h < 60) {
18131            R = C;
18132            G = X;
18133            B = 0;
18134        } else if (h >= 60 && h < 120) {
18135            R = X;
18136            G = C;
18137            B = 0;
18138        } else if (h >= 120 && h < 180) {
18139            R = 0;
18140            G = C;
18141            B = X;
18142        } else if (h >= 180 && h < 240) {
18143            R = 0;
18144            G = X;
18145            B = C;
18146        } else if (h >= 240 && h < 300) {
18147            R = X;
18148            G = 0;
18149            B = C;
18150        } else {
18151            R = C;
18152            G = 0;
18153            B = X;
18154        }
18155        red = Math.round((R + m) * 255);
18156        green = Math.round((G + m) * 255);
18157        blue = Math.round((B + m) * 255);
18158    } else if (cleanColor.startsWith('hsl')) {
18159        const hslValues = cleanColor.match(/hsl\(([^)]+)\)/)[1].split(',');
18160        const h = parseFloat(hslValues[0]);
18161        const s = parseFloat(hslValues[1].replace('%', '')) / 100;
18162        const l = parseFloat(hslValues[2].replace('%', '')) / 100;
18163        // Convert HSL to RGB (without alpha)
18164        const C = (1 - Math.abs(2 * l - 1)) * s;
18165        const X = C * (1 - Math.abs(h / 60 % 2 - 1));
18166        const m = l - C / 2;
18167        let R;
18168        let G;
18169        let B;
18170        if (h >= 0 && h < 60) {
18171            R = C;
18172            G = X;
18173            B = 0;
18174        } else if (h >= 60 && h < 120) {
18175            R = X;
18176            G = C;
18177            B = 0;
18178        } else if (h >= 120 && h < 180) {
18179            R = 0;
18180            G = C;
18181            B = X;
18182        } else if (h >= 180 && h < 240) {
18183            R = 0;
18184            G = X;
18185            B = C;
18186        } else if (h >= 240 && h < 300) {
18187            R = X;
18188            G = 0;
18189            B = C;
18190        } else {
18191            R = C;
18192            G = 0;
18193            B = X;
18194        }
18195        red = Math.round((R + m) * 255);
18196        green = Math.round((G + m) * 255);
18197        blue = Math.round((B + m) * 255);
18198    }
18199    if (Number.isNaN(red) || Number.isNaN(green) || Number.isNaN(blue)) {
18200        throw new Error(`Invalid color in [ix2/shared/utils/normalizeColor.js] '${inputColor}'`);
18201    }
18202    return {
18203        red,
18204        green,
18205        blue,
18206        alpha
18207    };
18208}
18209
18210//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vcm1hbGl6ZUNvbG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEJpZyBMaXN0IG9mIENvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNuYW1lZC1jb2xvcnM+XG5jb25zdCBjb2xvck5hbWVzT2JqID0ge1xuICBhbGljZWJsdWU6ICcjRjBGOEZGJyxcbiAgYW50aXF1ZXdoaXRlOiAnI0ZBRUJENycsXG4gIGFxdWE6ICcjMDBGRkZGJyxcbiAgYXF1YW1hcmluZTogJyM3RkZGRDQnLFxuICBhenVyZTogJyNGMEZGRkYnLFxuICBiZWlnZTogJyNGNUY1REMnLFxuICBiaXNxdWU6ICcjRkZFNEM0JyxcbiAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgYmxhbmNoZWRhbG1vbmQ6ICcjRkZFQkNEJyxcbiAgYmx1ZTogJyMwMDAwRkYnLFxuICBibHVldmlvbGV0OiAnIzhBMkJFMicsXG4gIGJyb3duOiAnI0E1MkEyQScsXG4gIGJ1cmx5d29vZDogJyNERUI4ODcnLFxuICBjYWRldGJsdWU6ICcjNUY5RUEwJyxcbiAgY2hhcnRyZXVzZTogJyM3RkZGMDAnLFxuICBjaG9jb2x
18210hdGU6ICcjRDI2OTFFJyxcbiAgY29yYWw6ICcjRkY3RjUwJyxcbiAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NUVEJyxcbiAgY29ybnNpbGs6ICcjRkZGOERDJyxcbiAgY3JpbXNvbjogJyNEQzE0M0MnLFxuICBjeWFuOiAnIzAwRkZGRicsXG4gIGRhcmtibHVlOiAnIzAwMDA4QicsXG4gIGRhcmtjeWFuOiAnIzAwOEI4QicsXG4gIGRhcmtnb2xkZW5yb2Q6ICcjQjg4NjBCJyxcbiAgZGFya2dyYXk6ICcjQTlBOUE5JyxcbiAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gIGRhcmtncmV5OiAnI0E5QTlBOScsXG4gIGRhcmtraGFraTogJyNCREI3NkInLFxuICBkYXJrbWFnZW50YTogJyM4QjAwOEInLFxuICBkYXJrb2xpdmVncmVlbjogJyM1NTZCMkYnLFxuICBkYXJrb3JhbmdlOiAnI0ZGOEMwMCcsXG4gIGRhcmtvcmNoaWQ6ICcjOTkzMkNDJyxcbiAgZGFya3JlZDogJyM4QjAwMDAnLFxuICBkYXJrc2FsbW9uOiAnI0U5OTY3QScsXG4gIGRhcmtzZWFncmVlbjogJyM4RkJDOEYnLFxuICBkYXJrc2xhdGVibHVlOiAnIzQ4M0Q4QicsXG4gIGRhcmtzbGF0ZWdyYXk6ICcjMkY0RjRGJyxcbiAgZGFya3NsYXRlZ3JleTogJyMyRjRGNEYnLFxuICBkYXJrdHVycXVvaXNlOiAnIzAwQ0VEMScsXG4gIGRhcmt2aW9sZXQ6ICcjOTQwMEQzJyxcbiAgZGVlcHBpbms6ICcjRkYxNDkzJyxcbiAgZGVlcHNreWJsdWU6ICcjMDBCRkZGJyxcbiAgZGltZ3JheTogJyM2OTY5NjknLFxuICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gIGRvZGdlcmJsdWU6ICcjMUU5MEZGJyxcbiAgZmlyZWJyaWNrOiAnI0IyMjIyMicsXG4gIGZsb3JhbHdoaXRlOiAnI0ZGRkFGMCcsXG4gIGZvcmVzdGdyZWVuOiAnIzIyOEIyMicsXG4gIGZ1Y2hzaWE6ICcjRkYwMEZGJyxcbiAgZ2FpbnNib3JvOiAnI0RDRENEQycsXG4gIGdob3N0d2hpdGU6ICcjRjhGOEZGJyxcbiAgZ29sZDogJyNGRkQ3MDAnLFxuICBnb2xkZW5yb2Q6ICcjREFBNTIwJyxcbiAgZ3JheTogJyM4MDgwODAnLFxuICBncmVlbjogJyMwMDgwMDAnLFxuICBncmVlbnllbGxvdzogJyNBREZGMkYnLFxuICBncmV5OiAnIzgwODA4MCcsXG4gIGhvbmV5ZGV3OiAnI0YwRkZGMCcsXG4gIGhvdHBpbms6ICcjRkY2OUI0JyxcbiAgaW5kaWFucmVkOiAnI0NENUM1QycsXG4gIGluZGlnbzogJyM0QjAwODInLFxuICBpdm9yeTogJyNGRkZGRjAnLFxuICBraGFraTogJyNGMEU2OEMnLFxuICBsYXZlbmRlcjogJyNFNkU2RkEnLFxuICBsYXZlbmRlcmJsdXNoOiAnI0ZGRjBGNScsXG4gIGxhd25ncmVlbjogJyM3Q0ZDMDAnLFxuICBsZW1vbmNoaWZmb246ICcjRkZGQUNEJyxcbiAgbGlnaHRibHVlOiAnI0FERDhFNicsXG4gIGxpZ2h0Y29yYWw6ICcjRjA4MDgwJyxcbiAgbGlnaHRjeWFuOiAnI0UwRkZGRicsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI0ZBRkFEMicsXG4gIGxpZ2h0Z3JheTogJyNEM0QzRDMnLFxuICBsaWdodGdyZWVuOiAnIzkwRUU5MCcsXG4gIGxpZ2h0Z3JleTogJyNEM0QzRDMnLFxuICBsaWdodHBpbms6ICcjRkZCNkMxJyxcbiAgbGlnaHRzYWxtb246ICcjRkZBMDdBJyxcbiAgbGlnaHRzZWFncmVlbjogJyMyMEIyQUEnLFxuICBsaWdodHNreWJsdWU6ICcjODdDRUZBJyxcbiAgbGlnaHRzbGF0ZWdyYXk6ICcjNzc4ODk5JyxcbiAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgbGlnaHRzdGVlbGJsdWU6ICcjQjBDNERFJyxcbiAgbGlnaHR5ZWxsb3c6ICcjRkZGRkUwJyxcbiAgbGltZTogJyMwMEZGMDAnLFxuICBsaW1lZ3JlZW46ICcjMzJDRDMyJyxcbiAgbGluZW46ICcjRkFGMEU2JyxcbiAgbWFnZW50YTogJyNGRjAwRkYnLFxuICBtYXJvb246ICcjODAwMDAwJyxcbiAgbWVkaXVtYXF1YW1hcmluZTogJyM2NkNEQUEnLFxuICBtZWRpdW1ibHVlOiAnIzAwMDBDRCcsXG4gIG1lZGl1bW9yY2hpZDogJyNCQTU1RDMnLFxuICBtZWRpdW1wdXJwbGU6ICcjOTM3MERCJyxcbiAgbWVkaXVtc2VhZ3JlZW46ICcjM0NCMzcxJyxcbiAgbWVkaXVtc2xhdGVibHVlOiAnIzdCNjhFRScsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwRkE5QScsXG4gIG1lZGl1bXR1cnF1b2lzZTogJyM0OEQxQ0MnLFxuICBtZWRpdW12aW9sZXRyZWQ6ICcjQzcxNTg1JyxcbiAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gIG1pbnRjcmVhbTogJyNGNUZGRkEnLFxuICBtaXN0eXJvc2U6ICcjRkZFNEUxJyxcbiAgbW9jY2FzaW46ICcjRkZFNEI1JyxcbiAgbmF2YWpvd2hpdGU6ICcjRkZERUFEJyxcbiAgbmF2eTogJyMwMDAwODAnLFxuICBvbGRsYWNlOiAnI0ZERjVFNicsXG4gIG9saXZlOiAnIzgwODAwMCcsXG4gIG9saXZlZHJhYjogJyM2QjhFMjMnLFxuICBvcmFuZ2U6ICcjRkZBNTAwJyxcbiAgb3JhbmdlcmVkOiAnI0ZGNDUwMCcsXG4gIG9yY2hpZDogJyNEQTcwRDYnLFxuICBwYWxlZ29sZGVucm9kOiAnI0VFRThBQScsXG4gIHBhbGVncmVlbjogJyM5OEZCOTgnLFxuICBwYWxldHVycXVvaXNlOiAnI0FGRUVFRScsXG4gIHBhbGV2aW9sZXRyZWQ6ICcjREI3MDkzJyxcbiAgcGFwYXlhd2hpcDogJyNGRkVGRDUnLFxuICBwZWFjaHB1ZmY6ICcjRkZEQUI5JyxcbiAgcGVydTogJyNDRDg1M0YnLFxuICBwaW5rOiAnI0ZGQzBDQicsXG4gIHBsdW06ICcjRERBMEREJyxcbiAgcG93ZGVyYmx1ZTogJyNCMEUwRTYnLFxuICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICByZWQ6ICcjRkYwMDAwJyxcbiAgcm9zeWJyb3duOiAnI0JDOEY4RicsXG4gIHJveWFsYmx1ZTogJyM0MTY5RTEnLFxuICBzYWRkbGVicm93bjogJyM4QjQ1MTMnLFxuICBzYWxtb246ICcjRkE4MDcyJyxcbiAgc2FuZHlicm93bjogJyNGNEE0NjAnLFxuICBzZWFncmVlbjogJyMyRThCNTcnLFxuICBzZWFzaGVsbDogJyNGRkY1RUUnLFxuICBzaWVubmE6ICcjQTA1MjJEJyxcbiAgc2lsdmVyOiAnI0MwQzBDMCcsXG4gIHNreWJsdWU6ICcjODdDRUVCJyxcbiAgc2xhdGVibHVlOiAnIzZBNUFDRCcsXG4gIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICBzbGF0ZWdyZXk6ICcjNzA4MDkwJyxcbiAgc25vdzogJyNGRkZBRkEnLFxuICBzcHJpbmdncmVlbjogJyMwMEZGN0YnLFxuICBzdGVlbGJsdWU6ICcjNDY4MkI0JyxcbiAgdGFuOiAnI0QyQjQ4QycsXG4gIHRlYWw6ICcjMDA4MDgwJyxcbiAgdGhpc3RsZTogJyNEOEJGRDgnLFxuICB0b21hdG86ICcjRkY2MzQ3JyxcbiAgdHVycXVvaXNlOiAnIzQwRTBEMCcsXG4gIHZpb2xldDogJyNFRTgyRUUnLFxuICB3aGVhdDogJyNGNURFQjMnLFxuICB3aGl0ZTogJyNGRkZGRkYnLFxuICB3aGl0ZXNtb2tlOiAnI0Y1RjVGNScsXG4gIHllbGxvdzogJyNGRkZGMDAnLFxuICB5ZWxsb3dncmVlbjogJyM5QUNEMzInLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbG9yKGlucHV0Q29sb3IpIHtcbiAgbGV0IHJlZDtcbiAgbGV0IGdyZWVuO1xuICBsZXQgYmx1ZTtcbiAgbGV0IGFscGhhID0gMTsgLy8gRGVmYXVsdCBhbHBoYSB0byAxXG4gIGNvbnN0IHJhd0NvbG9yID0gaW5wdXRDb2xvci5yZXBsYWNlKC9cXHMvZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG5hbWVkQ29sb3IgPVxuICAgIHR5cGVvZiBjb2xvck5hbWVzT2JqW3Jhd0NvbG9yXSA9PT0gJ3N0cmluZydcbiAgICAgID8gY29sb3JOYW1lc09ialtyYXdDb2xvcl0udG9Mb3dlckNhc2UoKVxuICAgICAgOiBudWxsO1xuICBjb25zdCBjbGVhbkNvbG9yID0gbmFtZWRDb2xvciB8fCByYXdDb2xvcjtcblxuICBpZiAoY2xlYW5Db2xvci5zdGFydHNXaXRoKCcjJykpIHtcbiAgICBjb25zdCBoZXggPSBjbGVhbkNvbG9yLnN1YnN0cmluZygxKTtcblxuICAgIGlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJlZCA9IHBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpO1xuICAgICAgZ3JlZW4gPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTtcbiAgICAgIGJsdWUgPSBwYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTtcbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIGFscGhhID0gcGFyc2VJbnQoaGV4WzNdICsgaGV4WzNdLCAxNikgLyAyNTU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHtcbiAgICAgIHJlZCA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcbiAgICAgIGdyZWVuID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xuICAgICAgYmx1ZSA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSA4KSB7XG4gICAgICAgIGFscGhhID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg2LCA4KSwgMTYpIC8gMjU1O1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGVhbkNvbG9yLnN0YXJ0c1dpdGgoJ3JnYmEnKSkge1xuICAgIGNvbnN0IHJnYmFWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9yZ2JhXFwoKFteKV0rKVxcKS8pWzFdLnNwbGl0KCcsJyk7XG4gICAgcmVkID0gcGFyc2VJbnQocmdiYVZhbHVlc1swXSwgMTApO1xuICAgIGdyZWVuID0gcGFyc2VJbnQocmdiYVZhbHVlc1sxXSwgMTApO1xuICAgIGJsdWUgPSBwYXJzZUludChyZ2JhVmFsdWVzWzJdLCAxMCk7XG4gICAgYWxwaGEgPSBwYXJzZU
18210Zsb2F0KHJnYmFWYWx1ZXNbM10pO1xuICB9IGVsc2UgaWYgKGNsZWFuQ29sb3Iuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICBjb25zdCByZ2JWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9yZ2JcXCgoW14pXSspXFwpLylbMV0uc3BsaXQoJywnKTtcbiAgICByZWQgPSBwYXJzZUludChyZ2JWYWx1ZXNbMF0sIDEwKTtcbiAgICBncmVlbiA9IHBhcnNlSW50KHJnYlZhbHVlc1sxXSwgMTApO1xuICAgIGJsdWUgPSBwYXJzZUludChyZ2JWYWx1ZXNbMl0sIDEwKTtcbiAgfSBlbHNlIGlmIChjbGVhbkNvbG9yLnN0YXJ0c1dpdGgoJ2hzbGEnKSkge1xuICAgIGNvbnN0IGhzbGFWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9oc2xhXFwoKFteKV0rKVxcKS8pWzFdLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgaCA9IHBhcnNlRmxvYXQoaHNsYVZhbHVlc1swXSk7XG4gICAgY29uc3QgcyA9IHBhcnNlRmxvYXQoaHNsYVZhbHVlc1sxXS5yZXBsYWNlKCclJywgJycpKSAvIDEwMDtcbiAgICBjb25zdCBsID0gcGFyc2VGbG9hdChoc2xhVmFsdWVzWzJdLnJlcGxhY2UoJyUnLCAnJykpIC8gMTAwO1xuICAgIGFscGhhID0gcGFyc2VGbG9hdChoc2xhVmFsdWVzWzNdKTtcblxuICAgIC8vIENvbnZlcnQgSFNMIHRvIFJHQlxuICAgIGNvbnN0IEMgPSAoMSAtIE1hdGguYWJzKDIgKiBsIC0gMSkpICogcztcbiAgICBjb25zdCBYID0gQyAqICgxIC0gTWF0aC5hYnMoKChoIC8gNjApICUgMikgLSAxKSk7XG4gICAgY29uc3QgbSA9IGwgLSBDIC8gMjtcbiAgICBsZXQgUjtcbiAgICBsZXQgRztcbiAgICBsZXQgQjtcblxuICAgIGlmIChoID49IDAgJiYgaCA8IDYwKSB7XG4gICAgICBSID0gQztcbiAgICAgIEcgPSBYO1xuICAgICAgQiA9IDA7XG4gICAgfSBlbHNlIGlmIChoID49IDYwICYmIGggPCAxMjApIHtcbiAgICAgIFIgPSBYO1xuICAgICAgRyA9IEM7XG4gICAgICBCID0gMDtcbiAgICB9IGVsc2UgaWYgKGggPj0gMTIwICYmIGggPCAxODApIHtcbiAgICAgIFIgPSAwO1xuICAgICAgRyA9IEM7XG4gICAgICBCID0gWDtcbiAgICB9IGVsc2UgaWYgKGggPj0gMTgwICYmIGggPCAyNDApIHtcbiAgICAgIFIgPSAwO1xuICAgICAgRyA9IFg7XG4gICAgICBCID0gQztcbiAgICB9IGVsc2UgaWYgKGggPj0gMjQwICYmIGggPCAzMDApIHtcbiAgICAgIFIgPSBYO1xuICAgICAgRyA9IDA7XG4gICAgICBCID0gQztcbiAgICB9IGVsc2Uge1xuICAgICAgUiA9IEM7XG4gICAgICBHID0gMDtcbiAgICAgIEIgPSBYO1xuICAgIH1cblxuICAgIHJlZCA9IE1hdGgucm91bmQoKFIgKyBtKSAqIDI1NSk7XG4gICAgZ3JlZW4gPSBNYXRoLnJvdW5kKChHICsgbSkgKiAyNTUpO1xuICAgIGJsdWUgPSBNYXRoLnJvdW5kKChCICsgbSkgKiAyNTUpO1xuICB9IGVsc2UgaWYgKGNsZWFuQ29sb3Iuc3RhcnRzV2l0aCgnaHNsJykpIHtcbiAgICBjb25zdCBoc2xWYWx1ZXMgPSBjbGVhbkNvbG9yLm1hdGNoKC9oc2xcXCgoW14pXSspXFwpLylbMV0uc3BsaXQoJywnKTtcbiAgICBjb25zdCBoID0gcGFyc2VGbG9hdChoc2xWYWx1ZXNbMF0pO1xuICAgIGNvbnN0IHMgPSBwYXJzZUZsb2F0KGhzbFZhbHVlc1sxXS5yZXBsYWNlKCclJywgJycpKSAvIDEwMDtcbiAgICBjb25zdCBsID0gcGFyc2VGbG9hdChoc2xWYWx1ZXNbMl0ucmVwbGFjZSgnJScsICcnKSkgLyAxMDA7XG5cbiAgICAvLyBDb252ZXJ0IEhTTCB0byBSR0IgKHdpdGhvdXQgYWxwaGEpXG4gICAgY29uc3QgQyA9ICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSkgKiBzO1xuICAgIGNvbnN0IFggPSBDICogKDEgLSBNYXRoLmFicygoKGggLyA2MCkgJSAyKSAtIDEpKTtcbiAgICBjb25zdCBtID0gbCAtIEMgLyAyO1xuICAgIGxldCBSO1xuICAgIGxldCBHO1xuICAgIGxldCBCO1xuXG4gICAgaWYgKGggPj0gMCAmJiBoIDwgNjApIHtcbiAgICAgIFIgPSBDO1xuICAgICAgRyA9IFg7XG4gICAgICBCID0gMDtcbiAgICB9IGVsc2UgaWYgKGggPj0gNjAgJiYgaCA8IDEyMCkge1xuICAgICAgUiA9IFg7XG4gICAgICBHID0gQztcbiAgICAgIEIgPSAwO1xuICAgIH0gZWxzZSBpZiAoaCA+PSAxMjAgJiYgaCA8IDE4MCkge1xuICAgICAgUiA9IDA7XG4gICAgICBHID0gQztcbiAgICAgIEIgPSBYO1xuICAgIH0gZWxzZSBpZiAoaCA+PSAxODAgJiYgaCA8IDI0MCkge1xuICAgICAgUiA9IDA7XG4gICAgICBHID0gWDtcbiAgICAgIEIgPSBDO1xuICAgIH0gZWxzZSBpZiAoaCA+PSAyNDAgJiYgaCA8IDMwMCkge1xuICAgICAgUiA9IFg7XG4gICAgICBHID0gMDtcbiAgICAgIEIgPSBDO1xuICAgIH0gZWxzZSB7XG4gICAgICBSID0gQztcbiAgICAgIEcgPSAwO1xuICAgICAgQiA9IFg7XG4gICAgfVxuXG4gICAgcmVkID0gTWF0aC5yb3VuZCgoUiArIG0pICogMjU1KTtcbiAgICBncmVlbiA9IE1hdGgucm91bmQoKEcgKyBtKSAqIDI1NSk7XG4gICAgYmx1ZSA9IE1hdGgucm91bmQoKEIgKyBtKSAqIDI1NSk7XG4gIH1cblxuICBpZiAoTnVtYmVyLmlzTmFOKHJlZCkgfHwgTnVtYmVyLmlzTmFOKGdyZWVuKSB8fCBOdW1iZXIuaXNOYU4oYmx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb2xvciBpbiBbaXgyL3NoYXJlZC91dGlscy9ub3JtYWxpemVDb2xvci5qc10gJyR7aW5wdXRDb2xvcn0nYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhfTtcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVDb2xvciIsImNvbG9yTmFtZXNPYmoiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImlucHV0Q29sb3IiLCJhbHBoYSIsInJhd0NvbG9yIiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwibmFtZWRDb2xvciIsImNsZWFuQ29sb3IiLCJzdGFydHNXaXRoIiwiaGV4Iiwic3Vic3RyaW5nIiwibGVuZ3RoIiwicGFyc2VJbnQiLCJyZ2JhVmFsdWVzIiwibWF0Y2giLCJzcGxpdCIsInBhcnNlRmxvYXQiLCJyZ2JWYWx1ZXMiLCJoc2xhVmFsdWVzIiwiaCIsInMiLCJsIiwiQyIsIk1hdGgiLCJhYnMiLCJYIiwibSIsIlIiLCJHIiwiQiIsInJvdW5kIiwiaHNsVmFsdWVzIiwiTnVtYmVyIiwiaXNOYU4iLCJFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLHFCQUFxQjtBQUNyQixvREFBb0Q7Ozs7OytCQXdKcENBOzs7ZUFBQUE7OztBQXZKaEIsTUFBTUMsZ0JBQWdCO0lBQ3BCQyxXQUFXO0lBQ1hDLGNBQWM7SUFDZEMsTUFBTTtJQUNOQyxZQU
18210FZO0lBQ1pDLE9BQU87SUFDUEMsT0FBTztJQUNQQyxRQUFRO0lBQ1JDLE9BQU87SUFDUEMsZ0JBQWdCO0lBQ2hCQyxNQUFNO0lBQ05DLFlBQVk7SUFDWkMsT0FBTztJQUNQQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLE9BQU87SUFDUEMsZ0JBQWdCO0lBQ2hCQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsTUFBTTtJQUNOQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsZUFBZTtJQUNmQyxVQUFVO0lBQ1ZDLFdBQVc7SUFDWEMsVUFBVTtJQUNWQyxXQUFXO0lBQ1hDLGFBQWE7SUFDYkMsZ0JBQWdCO0lBQ2hCQyxZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsU0FBUztJQUNUQyxZQUFZO0lBQ1pDLGNBQWM7SUFDZEMsZUFBZTtJQUNmQyxlQUFlO0lBQ2ZDLGVBQWU7SUFDZkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFVBQVU7SUFDVkMsYUFBYTtJQUNiQyxTQUFTO0lBQ1RDLFNBQVM7SUFDVEMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLGFBQWE7SUFDYkMsYUFBYTtJQUNiQyxTQUFTO0lBQ1RDLFdBQVc7SUFDWEMsWUFBWTtJQUNaQyxNQUFNO0lBQ05DLFdBQVc7SUFDWEMsTUFBTTtJQUNOQyxPQUFPO0lBQ1BDLGFBQWE7SUFDYkMsTUFBTTtJQUNOQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxRQUFRO0lBQ1JDLE9BQU87SUFDUEMsT0FBTztJQUNQQyxVQUFVO0lBQ1ZDLGVBQWU7SUFDZkMsV0FBVztJQUNYQyxjQUFjO0lBQ2RDLFdBQVc7SUFDWEMsWUFBWTtJQUNaQyxXQUFXO0lBQ1hDLHNCQUFzQjtJQUN0QkMsV0FBVztJQUNYQyxZQUFZO0lBQ1pDLFdBQVc7SUFDWEMsV0FBVztJQUNYQyxhQUFhO0lBQ2JDLGVBQWU7SUFDZkMsY0FBYztJQUNkQyxnQkFBZ0I7SUFDaEJDLGdCQUFnQjtJQUNoQkMsZ0JBQWdCO0lBQ2hCQyxhQUFhO0lBQ2JDLE1BQU07SUFDT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
18211
18212}),
18213"9468": (function (__unused_webpack_module, exports, __webpack_require__) {
18214"use strict";
18215
18216Object.defineProperty(exports, "__esModule", ({
18217    value: true
18218}));
18219function _export(target, all) {
18220    for(var name in all)Object.defineProperty(target, name, {
18221        enumerable: true,
18222        get: all[name]
18223    });
18224}
18225_export(exports, {
18226    // IX2Actions,
18227    IX2BrowserSupport: function() {
18228        return _IX2BrowserSupport;
18229    },
18230    IX2EasingUtils: function() {
18231        return _IX2EasingUtils;
18232    },
18233    IX2Easings: function() {
18234        return _IX2Easings;
18235    },
18236    IX2ElementsReducer: function() {
18237        return _IX2ElementsReducer;
18238    },
18239    IX2VanillaPlugins: function() {
18240        return _IX2VanillaPlugins;
18241    },
18242    IX2VanillaUtils: function() {
18243        return _IX2VanillaUtils;
18244    }
18245});
18246const _IX2BrowserSupport = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2662));
18247const _IX2Easings = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8686));
18248const _IX2EasingUtils = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(3767));
18249const _IX2ElementsReducer = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5861));
18250const _IX2VanillaPlugins = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(1799));
18251const _IX2VanillaUtils = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(4124));
18252function _getRequireWildcardCache(nodeInterop) {
18253    if (typeof WeakMap !== "function") return null;
18254    var cacheBabelInterop = new WeakMap();
18255    var cacheNodeInterop = new WeakMap();
18256    return (_getRequireWildcardCache = function(nodeInterop) {
18257        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
18258    })(nodeInterop);
18259}
18260function _interop_require_wildcard(obj, nodeInterop) {
18261    if (!nodeInterop && obj && obj.__esModule) {
18262        return obj;
18263    }
18264    if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
18265        return {
18266            default: obj
18267        };
18268    }
18269    var cache = _getRequireWildcardCache(nodeInterop);
18270    if (cache && cache.has(obj)) {
18271        return cache.get(obj);
18272    }
18273    var newObj = {
18274        __proto__: null
18275    };
18276    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
18277    for(var key in obj){
18278        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
18279            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
18280            if (desc && (desc.get || desc.set)) {
18281                Object.defineProperty(newObj, key, desc);
18282            } else {
18283                newObj[key] = obj[key];
18284            }
18285        }
18286    }
18287    newObj.default = obj;
18288    if (cache) {
18289        cache.set(obj, newObj);
18290    }
18291    return newObj;
18292}
18293
18294//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIElYMkJyb3dzZXJTdXBwb3J0IGZyb20gJy4vbG9naWMvSVgyQnJvd3NlclN1cHBvcnQnO1xuaW1wb3J0ICogYXMgSVgyRWFzaW5ncyBmcm9tICcuL2xvZ2ljL0lYMkVhc2luZ3MnO1xuaW1wb3J0ICogYXMgSVgyRWFzaW5nVXRpbHMgZnJvbSAnLi9sb2dpYy9JWDJFYXNpbmdVdGlscyc7XG5pbXBvcnQgKiBhcyBJWDJFbGVtZW50c1JlZHVjZXIgZnJvbSAnLi9yZWR1Y2Vycy9JWDJFbGVtZW50c1JlZHVjZXInO1xuaW1wb3J0ICogYXMgSVgyVmFuaWxsYVBsdWdpbnMgZnJvbSAnLi9sb2dpYy9JWDJWYW5pbGxhUGx1Z2lucyc7XG5pbXBvcnQgKiBhcyBJWDJWYW5pbGxhVXRpbHMgZnJvbSAnLi9sb2dpYy9JWDJWYW5pbGxhVXRpbHMnO1xuZXhwb3J0IHtcbiAgLy8gSVgyQWN0aW9ucyxcbiAgSVgyQnJvd3NlclN1cHBvcnQsXG4gIElYMkVhc2luZ3MsXG4gIElYMkVhc2luZ1V0aWxzLFxuICBJWDJFbGVtZW50c1JlZHVjZXIsXG4gIElYMlZhbmlsbGFQbHVnaW5zLFxuICBJWDJWYW5pbGxhVXRpbHMsXG59O1xuIl0sIm5hbWVzIjpbIklYMkJyb3dzZXJTdXBwb3J0IiwiSVgyRWFzaW5nVXRpbHMiLCJJWDJFYXNpbmdzIiwiSVgyRWxlbWVudHNSZWR1Y2VyIiwiSVgyVmFuaWxsYVBsdWdpbnMiLCJJWDJWYW5pbGxhVXRpbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBT0UsY0FBYztJQUNkQSxpQkFBaUI7ZUFBakJBOztJQUVBQyxjQUFjO2VBQWRBOztJQURBQyxVQUFVO2VBQVZBOztJQUVBQyxrQkFBa0I7ZUFBbEJBOztJQUNBQyxpQkFBaUI7ZUFBakJBOztJQUNBQyxlQUFlO2VBQWZBOzs7MkVBYmlDO29FQUNQO3dFQUNJOzRFQUNJOzJFQUNEO3lFQUNGIn0=
18295
18296}),
18297"2662": (function (__unused_webpack_module, exports, __webpack_require__) {
18298"use strict";
18299/* eslint-env browser */ 
18300Object.defineProperty(exports, "__esModule", ({
18301    value: true
18302}));
18303function _export(target, all) {
18304    for(var name in all)Object.defineProperty(target, name, {
18305        enumerable: true,
18306        get: all[name]
18307    });
18308}
18309_export(exports, {
18310    ELEMENT_MATCHES: function() {
18311        return ELEMENT_MATCHES;
18312    },
18313    FLEX_PREFIXED: function() {
18314        return FLEX_PREFIXED;
18315    },
18316    IS_BROWSER_ENV: function() {
18317        return IS_BROWSER_ENV;
18318    },
18319    TRANSFORM_PREFIXED: function() {
18320        return TRANSFORM_PREFIXED;
18321    },
18322    TRANSFORM_STYLE_PREFIXED: function() {
18323        return TRANSFORM_STYLE_PREFIXED;
18324    },
18325    withBrowser: function() {
18326        return withBrowser;
18327    }
18328});
18329const _find = /*#__PURE__*/ _interop_require_default(__webpack_require__(9777));
18330function _interop_require_default(obj) {
18331    return obj && obj.__esModule ? obj : {
18332        default: obj
18333    };
18334}
18335const IS_BROWSER_ENV = typeof window !== 'undefined';
18336const withBrowser = (fn, fallback)=>{
18337    if (IS_BROWSER_ENV) {
18338        return fn();
18339    }
18340    return fallback;
18341};
18342const ELEMENT_MATCHES = withBrowser(()=>{
18343    return (0, _find.default)([
18344        'matches',
18345        'matchesSelector',
18346        'mozMatchesSelector',
18347        'msMatchesSelector',
18348        'oMatchesSelector',
18349        'webkitMatchesSelector'
18350    ], (key)=>key in Element.prototype);
18351});
18352const FLEX_PREFIXED = withBrowser(()=>{
18353    const el = document.createElement('i');
18354    const values = [
18355        'flex',
18356        '-webkit-flex',
18357        '-ms-flexbox',
18358        '-moz-box',
18359        '-webkit-box'
18360    ];
18361    const none = '';
18362    try {
18363        const { length } = values;
18364        for(let i = 0; i < length; i++){
18365            const value = values[i];
18366            // @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'.
18367            el.style.display = value;
18368            if (el.style.display === value) {
18369                return value;
18370            }
18371        }
18372        return none;
18373    } catch (err) {
18374        return none;
18375    }
18376}, 'flex');
18377const TRANSFORM_PREFIXED = withBrowser(()=>{
18378    const el = document.createElement('i');
18379    if (el.style.transform == null) {
18380        const prefixes = [
18381            'Webkit',
18382            'Moz',
18383            'ms'
18384        ];
18385        const suffix = 'Transform';
18386        const { length } = prefixes;
18387        for(let i = 0; i < length; i++){
18388            const prop = prefixes[i] + suffix;
18389            // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'.
18390            if (el.style[prop] !== undefined) {
18391                return prop;
18392            }
18393        }
18394    }
18395    return 'transform';
18396}, 'transform');
18397const TRANSFORM_PREFIX = TRANSFORM_PREFIXED.split('transform')[0];
18398const TRANSFORM_STYLE_PREFIXED = TRANSFORM_PREFIX ? TRANSFORM_PREFIX + 'TransformStyle' : 'transformStyle';
18399
18400//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkJyb3dzZXJTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuaW1wb3J0IGZpbmQgZnJvbSAnbG9kYXNoL2ZpbmQnO1xuXG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUl9FTlYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGNvbnN0IHdpdGhCcm93c2VyID0gKGZuOiBhbnksIGZhbGxiYWNrOiBhbnkpID0+IHtcbiAgaWYgKElTX0JST1dTRVJfRU5WKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cbiAgcmV0dXJuIGZhbGxiYWNrO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG5leHBvcnQgY29uc3QgRUxFTUVOVF9NQVRDSEVTID0gd2l0aEJyb3dzZXIoKCkgPT4ge1xuICByZXR1cm4gZmluZChcbiAgICBbXG4gICAgICAnbWF0Y2hlcycsXG4gICAgICAnbWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICdtb3pNYXRjaGVzU2VsZWN0b3InLFxuICAgICAgJ21zTWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICdvTWF0Y2hlc1NlbGVjdG9yJyxcbiAgICAgICd3ZWJraXRNYXRjaGVzU2VsZWN0b3InLFxuICAgIF0sXG4gICAgKGtleSkgPT4ga2V5IGluIEVsZW1lbnQucHJvdG90eXBlXG4gICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IEZMRVhfUFJFRklYRUQgPSB3aXRoQnJvd3NlcigoKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgJ2ZsZXgnLFxuICAgICctd2Via2l0LWZsZXgnLFxuICAgICctbXMtZmxleGJveCcsXG4gICAgJy1tb3otYm94Jy
18400xcbiAgICAnLXdlYmtpdC1ib3gnLFxuICBdO1xuICBjb25zdCBub25lID0gJyc7XG4gIHRyeSB7XG4gICAgY29uc3Qge2xlbmd0aH0gPSB2YWx1ZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzIyIC0gVHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdzdHJpbmcnLlxuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlO1xuICAgICAgaWYgKGVsLnN0eWxlLmRpc3BsYXkgPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vbmU7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgcmV0dXJuIG5vbmU7XG4gIH1cbn0sICdmbGV4Jyk7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fUFJFRklYRUQgPSB3aXRoQnJvd3NlcigoKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICBpZiAoZWwuc3R5bGUudHJhbnNmb3JtID09IG51bGwpIHtcbiAgICBjb25zdCBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xuICAgIGNvbnN0IHN1ZmZpeCA9ICdUcmFuc2Zvcm0nO1xuICAgIGNvbnN0IHtsZW5ndGh9ID0gcHJlZml4ZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcCA9IHByZWZpeGVzW2ldICsgc3VmZml4O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNSAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGluZGV4IGV4cHJlc3Npb24gaXMgbm90IG9mIHR5cGUgJ251bWJlcicuXG4gICAgICBpZiAoZWwuc3R5bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICd0cmFuc2Zvcm0nO1xufSwgJ3RyYW5zZm9ybScpO1xuXG5jb25zdCBUUkFOU0ZPUk1fUFJFRklYID0gVFJBTlNGT1JNX1BSRUZJWEVELnNwbGl0KCd0cmFuc2Zvcm0nKVswXTtcblxuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCA9IFRSQU5TRk9STV9QUkVGSVhcbiAgPyBUUkFOU0ZPUk1fUFJFRklYICsgJ1RyYW5zZm9ybVN0eWxlJ1xuICA6ICd0cmFuc2Zvcm1TdHlsZSc7XG4iXSwibmFtZXMiOlsiRUxFTUVOVF9NQVRDSEVTIiwiRkxFWF9QUkVGSVhFRCIsIklTX0JST1dTRVJfRU5WIiwiVFJBTlNGT1JNX1BSRUZJWEVEIiwiVFJBTlNGT1JNX1NUWUxFX1BSRUZJWEVEIiwid2l0aEJyb3dzZXIiLCJ3aW5kb3ciLCJmbiIsImZhbGxiYWNrIiwiZmluZCIsImtleSIsIkVsZW1lbnQiLCJwcm90b3R5cGUiLCJlbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlcyIsIm5vbmUiLCJsZW5ndGgiLCJpIiwidmFsdWUiLCJzdHlsZSIsImRpc3BsYXkiLCJlcnIiLCJ0cmFuc2Zvcm0iLCJwcmVmaXhlcyIsInN1ZmZpeCIsInByb3AiLCJ1bmRlZmluZWQiLCJUUkFOU0ZPUk1fUFJFRklYIiwic3BsaXQiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUFhVEEsZUFBZTtlQUFmQTs7SUFjQUMsYUFBYTtlQUFiQTs7SUF4QkFDLGNBQWM7ZUFBZEE7O0lBa0RBQyxrQkFBa0I7ZUFBbEJBOztJQW1CQUMsd0JBQXdCO2VBQXhCQTs7SUFuRUFDLFdBQVc7ZUFBWEE7Ozs2REFKSTs7Ozs7O0FBRVYsTUFBTUgsaUJBQWlCLE9BQU9JLFdBQVc7QUFFekMsTUFBTUQsY0FBYyxDQUFDRSxJQUFTQztJQUNuQyxJQUFJTixnQkFBZ0I7UUFDbEIsT0FBT0s7SUFDVDtJQUNBLE9BQU9DO0FBQ1Q7QUFHTyxNQUFNUixrQkFBa0JLLFlBQVk7SUFDekMsT0FBT0ksSUFBQUEsYUFBSSxFQUNUO1FBQ0U7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0QsRUFDRCxDQUFDQyxNQUFRQSxPQUFPQyxRQUFRQyxTQUFTO0FBRXJDO0FBRU8sTUFBTVgsZ0JBQWdCSSxZQUFZO0lBQ3ZDLE1BQU1RLEtBQUtDLFNBQVNDLGFBQWEsQ0FBQztJQUNsQyxNQUFNQyxTQUFTO1FBQ2I7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBQ0QsTUFBTUMsT0FBTztJQUNiLElBQUk7UUFDRixNQUFNLEVBQUNDLE1BQU0sRUFBQyxHQUFHRjtRQUNqQixJQUFLLElBQUlHLElBQUksR0FBR0EsSUFBSUQsUUFBUUMsSUFBSztZQUMvQixNQUFNQyxRQUFRSixNQUFNLENBQUNHLEVBQUU7WUFDdkIsNEZBQTRGO1lBQzVGTixHQUFHUSxLQUFLLENBQUNDLE9BQU8sR0FBR0Y7WUFDbkIsSUFBSVAsR0FBR1EsS0FBSyxDQUFDQyxPQUFPLEtBQUtGLE9BQU87Z0JBQzlCLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBLE9BQU9IO0lBQ1QsRUFBRSxPQUFPTSxLQUFVO1FBQ2pCLE9BQU9OO0lBQ1Q7QUFDRixHQUFHO0FBRUksTUFBTWQscUJBQXFCRSxZQUFZO0lBQzVDLE1BQU1RLEtBQUtDLFNBQVNDLGFBQWEsQ0FBQztJQUNsQyxJQUFJRixHQUFHUSxLQUFLLENBQUNHLFNBQVMsSUFBSSxNQUFNO1FBQzlCLE1BQU1DLFdBQVc7WUFBQztZQUFVO1lBQU87U0FBSztRQUN4QyxNQUFNQyxTQUFTO1FBQ2YsTUFBTSxFQUFDUixNQUFNLEVBQUMsR0FBR087UUFDakIsSUFBSyxJQUFJTixJQUFJLEdBQUdBLElBQUlELFFBQVFDLElBQUs7WUFDL0IsTUFBTVEsT0FBT0YsUUFBUSxDQUFDTixFQUFFLEdBQUdPO1lBQzNCLHFIQUFxSDtZQUNySCxJQUFJYixHQUFHUSxLQUFLLENBQUNNLEtBQUssS0FBS0MsV0FBVztnQkFDaEMsT0FBT0Q7WUFDVDtRQUNGO0lBQ0Y7SUFDQSxPQUFPO0FBQ1QsR0FBRztBQUVILE1BQU1FLG1CQUFtQjFCLG1CQUFtQjJCLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUUxRCxNQUFNMUIsMkJBQTJCeUIsbUJBQ3BDQSxtQkFBbUIsbUJBQ25CIn0=
18401
18402}),
18403"3767": (function (__unused_webpack_module, exports, __webpack_require__) {
18404"use strict";
18405
18406Object.defineProperty(exports, "__esModule", ({
18407    value: true
18408}));
18409function _export(target, all) {
18410    for(var name in all)Object.defineProperty(target, name, {
18411        enumerable: true,
18412        get: all[name]
18413    });
18414}
18415_export(exports, {
18416    applyEasing: function() {
18417        return applyEasing;
18418    },
18419    createBezierEasing: function() {
18420        return createBezierEasing;
18421    },
18422    optimizeFloat: function() {
18423        return optimizeFloat;
18424    }
18425});
18426const _IX2Easings = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8686));
18427const _beziereasing = /*#__PURE__*/ _interop_require_default(__webpack_require__(1361));
18428function _interop_require_default(obj) {
18429    return obj && obj.__esModule ? obj : {
18430        default: obj
18431    };
18432}
18433function _getRequireWildcardCache(nodeInterop) {
18434    if (typeof WeakMap !== "function") return null;
18435    var cacheBabelInterop = new WeakMap();
18436    var cacheNodeInterop = new WeakMap();
18437    return (_getRequireWildcardCache = function(nodeInterop) {
18438        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
18439    })(nodeInterop);
18440}
18441function _interop_require_wildcard(obj, nodeInterop) {
18442    if (!nodeInterop && obj && obj.__esModule) {
18443        return obj;
18444    }
18445    if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
18446        return {
18447            default: obj
18448        };
18449    }
18450    var cache = _getRequireWildcardCache(nodeInterop);
18451    if (cache && cache.has(obj)) {
18452        return cache.get(obj);
18453    }
18454    var newObj = {
18455        __proto__: null
18456    };
18457    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
18458    for(var key in obj){
18459        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
18460            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
18461            if (desc && (desc.get || desc.set)) {
18462                Object.defineProperty(newObj, key, desc);
18463            } else {
18464                newObj[key] = obj[key];
18465            }
18466        }
18467    }
18468    newObj.default = obj;
18469    if (cache) {
18470        cache.set(obj, newObj);
18471    }
18472    return newObj;
18473}
18474function optimizeFloat(value, digits = 5, base = 10) {
18475    const pow = Math.pow(base, digits);
18476    const float = Number(Math.round(value * pow) / pow);
18477    return Math.abs(float) > 0.0001 ? float : 0;
18478}
18479function createBezierEasing(easing) {
18480    return (0, _beziereasing.default)(...easing);
18481}
18482function applyEasing(easing, position, customEasingFn) {
18483    if (position === 0) {
18484        return 0;
18485    }
18486    if (position === 1) {
18487        return 1;
18488    }
18489    if (customEasingFn) {
18490        return optimizeFloat(position > 0 ? customEasingFn(position) : position);
18491    }
18492    return optimizeFloat(position > 0 && easing && _IX2Easings[easing] ? _IX2Easings[easing](position) : position);
18493}
18494
18495//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVhc2luZ1V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSVgyRWFzaW5nRW51bVR5cGUsXG4gIElYMkVhc2luZ0N1c3RvbVR5cGUsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcbmltcG9ydCAqIGFzIGVhc2luZ3MgZnJvbSAnLi9JWDJFYXNpbmdzJztcbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMTYgLSBDb3VsZCBub3QgZmluZCBhIGRlY2xhcmF0aW9uIGZpbGUgZm9yIG1vZHVsZSAnYmV6aWVyLWVhc2luZycuICcvaG9tZS9ydW5uZXIvd29yay9mbG93LXRvLXR5cGVzY3JpcHQtY29kZW1vZC9mbG93LXRvLXR5cGVzY3JpcHQtY29kZW1vZC93ZWJmbG93L25vZGVfbW9kdWxlcy9iZXppZXItZWFzaW5nL3NyYy9pbmRleC5qcycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmltcG9ydCBCZXppZXJFYXNpbmcgZnJvbSAnYmV6aWVyLWVhc2luZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6ZUZsb2F0KFxuICB2YWx1ZTogbnVtYmVyLFxuICBkaWdpdHM6IG51bWJlciA9IDUsXG4gIGJhc2U6IG51bWJlciA9IDEwXG4pOiBudW1iZXIge1xuICBjb25zdCBwb3cgPSBNYXRoLnBvdyhiYXNlLCBkaWdpdHMpO1xuICBjb25zdCBmbG9hdCA9IE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICogcG93KSAvIHBvdyk7XG4gIHJldHVybi
18495BNYXRoLmFicyhmbG9hdCkgPiAwLjAwMDEgPyBmbG9hdCA6IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCZXppZXJFYXNpbmcoXG4gIGVhc2luZzogSVgyRWFzaW5nQ3VzdG9tVHlwZVxuKTogKGFyZzE6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIEJlemllckVhc2luZyguLi5lYXNpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlFYXNpbmcoXG4gIGVhc2luZzogSVgyRWFzaW5nRW51bVR5cGUsXG4gIHBvc2l0aW9uOiBudW1iZXIsXG4gIGN1c3RvbUVhc2luZ0ZuPzogKGFyZzE6IG51bWJlcikgPT4gbnVtYmVyXG4pIHtcbiAgaWYgKHBvc2l0aW9uID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoY3VzdG9tRWFzaW5nRm4pIHtcbiAgICByZXR1cm4gb3B0aW1pemVGbG9hdChwb3NpdGlvbiA+IDAgPyBjdXN0b21FYXNpbmdGbihwb3NpdGlvbikgOiBwb3NpdGlvbik7XG4gIH1cblxuICByZXR1cm4gb3B0aW1pemVGbG9hdChcbiAgICBwb3NpdGlvbiA+IDAgJiYgZWFzaW5nICYmIGVhc2luZ3NbZWFzaW5nXVxuICAgICAgPyBlYXNpbmdzW2Vhc2luZ10ocG9zaXRpb24pXG4gICAgICA6IHBvc2l0aW9uXG4gICk7XG59XG4iXSwibmFtZXMiOlsiYXBwbHlFYXNpbmciLCJjcmVhdGVCZXppZXJFYXNpbmciLCJvcHRpbWl6ZUZsb2F0IiwidmFsdWUiLCJkaWdpdHMiLCJiYXNlIiwicG93IiwiTWF0aCIsImZsb2F0IiwiTnVtYmVyIiwicm91bmQiLCJhYnMiLCJlYXNpbmciLCJCZXppZXJFYXNpbmciLCJwb3NpdGlvbiIsImN1c3RvbUVhc2luZ0ZuIiwiZWFzaW5ncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUF3QmdCQSxXQUFXO2VBQVhBOztJQU5BQyxrQkFBa0I7ZUFBbEJBOztJQVZBQyxhQUFhO2VBQWJBOzs7b0VBSlM7cUVBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxCLFNBQVNBLGNBQ2RDLEtBQWEsRUFDYkMsU0FBaUIsQ0FBQyxFQUNsQkMsT0FBZSxFQUFFO0lBRWpCLE1BQU1DLE1BQU1DLEtBQUtELEdBQUcsQ0FBQ0QsTUFBTUQ7SUFDM0IsTUFBTUksUUFBUUMsT0FBT0YsS0FBS0csS0FBSyxDQUFDUCxRQUFRRyxPQUFPQTtJQUMvQyxPQUFPQyxLQUFLSSxHQUFHLENBQUNILFNBQVMsU0FBU0EsUUFBUTtBQUM1QztBQUVPLFNBQVNQLG1CQUNkVyxNQUEyQjtJQUUzQixPQUFPQyxJQUFBQSxxQkFBWSxLQUFJRDtBQUN6QjtBQUVPLFNBQVNaLFlBQ2RZLE1BQXlCLEVBQ3pCRSxRQUFnQixFQUNoQkMsY0FBeUM7SUFFekMsSUFBSUQsYUFBYSxHQUFHO1FBQ2xCLE9BQU87SUFDVDtJQUNBLElBQUlBLGFBQWEsR0FBRztRQUNsQixPQUFPO0lBQ1Q7SUFFQSxJQUFJQyxnQkFBZ0I7UUFDbEIsT0FBT2IsY0FBY1ksV0FBVyxJQUFJQyxlQUFlRCxZQUFZQTtJQUNqRTtJQUVBLE9BQU9aLGNBQ0xZLFdBQVcsS0FBS0YsVUFBVUksV0FBTyxDQUFDSixPQUFPLEdBQ3JDSSxXQUFPLENBQUNKLE9BQU8sQ0FBQ0UsWUFDaEJBO0FBRVIifQ==
18496
18497}),
18498"8686": (function (__unused_webpack_module, exports, __webpack_require__) {
18499"use strict";
18500// @ts-expect-error - TS7016 - Could not find a declaration file for module 'bezier-easing'. '/home/runner/work/flow-to-typescript-codemod/flow-to-typescript-codemod/webflow/node_modules/bezier-easing/src/index.js' implicitly has an 'any' type.
18501
18502Object.defineProperty(exports, "__esModule", ({
18503    value: true
18504}));
18505function _export(target, all) {
18506    for(var name in all)Object.defineProperty(target, name, {
18507        enumerable: true,
18508        get: all[name]
18509    });
18510}
18511_export(exports, {
18512    bounce: function() {
18513        return bounce;
18514    },
18515    bouncePast: function() {
18516        return bouncePast;
18517    },
18518    ease: function() {
18519        return ease;
18520    },
18521    easeIn: function() {
18522        return easeIn;
18523    },
18524    easeInOut: function() {
18525        return easeInOut;
18526    },
18527    easeOut: function() {
18528        return easeOut;
18529    },
18530    inBack: function() {
18531        return inBack;
18532    },
18533    inCirc: function() {
18534        return inCirc;
18535    },
18536    inCubic: function() {
18537        return inCubic;
18538    },
18539    inElastic: function() {
18540        return inElastic;
18541    },
18542    inExpo: function() {
18543        return inExpo;
18544    },
18545    inOutBack: function() {
18546        return inOutBack;
18547    },
18548    inOutCirc: function() {
18549        return inOutCirc;
18550    },
18551    inOutCubic: function() {
18552        return inOutCubic;
18553    },
18554    inOutElastic: function() {
18555        return inOutElastic;
18556    },
18557    inOutExpo: function() {
18558        return inOutExpo;
18559    },
18560    inOutQuad: function() {
18561        return inOutQuad;
18562    },
18563    inOutQuart: function() {
18564        return inOutQuart;
18565    },
18566    inOutQuint: function() {
18567        return inOutQuint;
18568    },
18569    inOutSine: function() {
18570        return inOutSine;
18571    },
18572    inQuad: function() {
18573        return inQuad;
18574    },
18575    inQuart: function() {
18576        return inQuart;
18577    },
18578    inQuint: function() {
18579        return inQuint;
18580    },
18581    inSine: function() {
18582        return inSine;
18583    },
18584    outBack: function() {
18585        return outBack;
18586    },
18587    outBounce: function() {
18588        return outBounce;
18589    },
18590    outCirc: function() {
18591        return outCirc;
18592    },
18593    outCubic: function() {
18594        return outCubic;
18595    },
18596    outElastic: function() {
18597        return outElastic;
18598    },
18599    outExpo: function() {
18600        return outExpo;
18601    },
18602    outQuad: function() {
18603        return outQuad;
18604    },
18605    outQuart: function() {
18606        return outQuart;
18607    },
18608    outQuint: function() {
18609        return outQuint;
18610    },
18611    outSine: function() {
18612        return outSine;
18613    },
18614    swingFrom: function() {
18615        return swingFrom;
18616    },
18617    swingFromTo: function() {
18618        return swingFromTo;
18619    },
18620    swingTo: function() {
18621        return swingTo;
18622    }
18623});
18624const _beziereasing = /*#__PURE__*/ _interop_require_default(__webpack_require__(1361));
18625function _interop_require_default(obj) {
18626    return obj && obj.__esModule ? obj : {
18627        default: obj
18628    };
18629}
18630// Easing functions adapted from Thomas Fuchs & Jeremy Kahn
18631// Easing Equations (c) 2003 Robert Penner, BSD license
18632// https://raw.github.com/danro/easing-js/master/LICENSE
18633const magicSwing = 1.70158;
18634const ease = (0, _beziereasing.default)(0.25, 0.1, 0.25, 1.0);
18635const easeIn = (0, _beziereasing.default)(0.42, 0.0, 1.0, 1.0);
18636const easeOut = (0, _beziereasing.default)(0.0, 0.0, 0.58, 1.0);
18637const easeInOut = (0, _beziereasing.default)(0.42, 0.0, 0.58, 1.0);
18638function inQuad(pos) {
18639    return Math.pow(pos, 2);
18640}
18641function outQuad(pos) {
18642    return -(Math.pow(pos - 1, 2) - 1);
18643}
18644function inOutQuad(pos) {
18645    if ((pos /= 0.5) < 1) {
18646        return 0.5 * Math.pow(pos, 2);
18647    }
18648    return -0.5 * ((pos -= 2) * pos - 2);
18649}
18650function inCubic(pos) {
18651    return Math.pow(pos, 3);
18652}
18653function outCubic(pos) {
18654    return Math.pow(pos - 1, 3) + 1;
18655}
18656function inOutCubic(pos) {
18657    if ((pos /= 0.5) < 1) {
18658        return 0.5 * Math.pow(pos, 3);
18659    }
18660    return 0.5 * (Math.pow(pos - 2, 3) + 2);
18661}
18662function inQuart(pos) {
18663    return Math.pow(pos, 4);
18664}
18665function outQuart(pos) {
18666    return -(Math.pow(pos - 1, 4) - 1);
18667}
18668function inOutQuart(pos) {
18669    if ((pos /= 0.5) < 1) {
18670        return 0.5 * Math.pow(pos, 4);
18671    }
18672    return -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2);
18673}
18674function inQuint(pos) {
18675    return Math.pow(pos, 5);
18676}
18677function outQuint(pos) {
18678    return Math.pow(pos - 1, 5) + 1;
18679}
18680function inOutQuint(pos) {
18681    if ((pos /= 0.5) < 1) {
18682        return 0.5 * Math.pow(pos, 5);
18683    }
18684    return 0.5 * (Math.pow(pos - 2, 5) + 2);
18685}
18686function inSine(pos) {
18687    return -Math.cos(pos * (Math.PI / 2)) + 1;
18688}
18689function outSine(pos) {
18690    return Math.sin(pos * (Math.PI / 2));
18691}
18692function inOutSine(pos) {
18693    return -0.5 * (Math.cos(Math.PI * pos) - 1);
18694}
18695function inExpo(pos) {
18696    return pos === 0 ? 0 : Math.pow(2, 10 * (pos - 1));
18697}
18698function outExpo(pos) {
18699    return pos === 1 ? 1 : -Math.pow(2, -10 * pos) + 1;
18700}
18701function inOutExpo(pos) {
18702    if (pos === 0) {
18703        return 0;
18704    }
18705    if (pos === 1) {
18706        return 1;
18707    }
18708    if ((pos /= 0.5) < 1) {
18709        return 0.5 * Math.pow(2, 10 * (pos - 1));
18710    }
18711    return 0.5 * (-Math.pow(2, -10 * --pos) + 2);
18712}
18713function inCirc(pos) {
18714    return -(Math.sqrt(1 - pos * pos) - 1);
18715}
18716function outCirc(pos) {
18717    return Math.sqrt(1 - Math.pow(pos - 1, 2));
18718}
18719function inOutCirc(pos) {
18720    if ((pos /= 0.5) < 1) {
18721        return -0.5 * (Math.sqrt(1 - pos * pos) - 1);
18722    }
18723    return 0.5 * (Math.sqrt(1 - (pos -= 2) * pos) + 1);
18724}
18725function outBounce(pos) {
18726    if (pos < 1 / 2.75) {
18727        return 7.5625 * pos * pos;
18728    } else if (pos < 2 / 2.75) {
18729        return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;
18730    } else if (pos < 2.5 / 2.75) {
18731        return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;
18732    } else {
18733        return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;
18734    }
18735}
18736function inBack(pos) {
18737    const s = magicSwing;
18738    return pos * pos * ((s + 1) * pos - s);
18739}
18740function outBack(pos) {
18741    const s = magicSwing;
18742    return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;
18743}
18744function inOutBack(pos) {
18745    let s = magicSwing;
18746    if ((pos /= 0.5) < 1) {
18747        return 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s));
18748    }
18749    return 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2);
18750}
18751function inElastic(pos) {
18752    let s = magicSwing;
18753    let p = 0;
18754    let a = 1;
18755    if (pos === 0) {
18756        return 0;
18757    }
18758    if (pos === 1) {
18759        return 1;
18760    }
18761    if (!p) {
18762        p = 0.3;
18763    }
18764    if (a < 1) {
18765        a = 1;
18766        s = p / 4;
18767    } else {
18768        s = p / (2 * Math.PI) * Math.asin(1 / a);
18769    }
18770    return -(a * Math.pow(2, 10 * (pos -= 1)) * Math.sin((pos - s
18770) * (2 * Math.PI) / p));
18771}
18772function outElastic(pos) {
18773    let s = magicSwing;
18774    let p = 0;
18775    let a = 1;
18776    if (pos === 0) {
18777        return 0;
18778    }
18779    if (pos === 1) {
18780        return 1;
18781    }
18782    if (!p) {
18783        p = 0.3;
18784    }
18785    if (a < 1) {
18786        a = 1;
18787        s = p / 4;
18788    } else {
18789        s = p / (2 * Math.PI) * Math.asin(1 / a);
18790    }
18791    return a * Math.pow(2, -10 * pos) * Math.sin((pos - s) * (2 * Math.PI) / p) + 1;
18792}
18793function inOutElastic(pos) {
18794    let s = magicSwing;
18795    let p = 0;
18796    let a = 1;
18797    if (pos === 0) {
18798        return 0;
18799    }
18800    if ((pos /= 1 / 2) === 2) {
18801        return 1;
18802    }
18803    if (!p) {
18804        p = 0.3 * 1.5;
18805    }
18806    if (a < 1) {
18807        a = 1;
18808        s = p / 4;
18809    } else {
18810        s = p / (2 * Math.PI) * Math.asin(1 / a);
18811    }
18812    if (pos < 1) {
18813        return -0.5 * (a * Math.pow(2, 10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p));
18814    }
18815    return a * Math.pow(2, -10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p) * 0.5 + 1;
18816}
18817function swingFromTo(pos) {
18818    let s = magicSwing;
18819    return (pos /= 0.5) < 1 ? 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)) : 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2);
18820}
18821function swingFrom(pos) {
18822    const s = magicSwing;
18823    return pos * pos * ((s + 1) * pos - s);
18824}
18825function swingTo(pos) {
18826    const s = magicSwing;
18827    return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;
18828}
18829function bounce(pos) {
18830    if (pos < 1 / 2.75) {
18831        return 7.5625 * pos * pos;
18832    } else if (pos < 2 / 2.75) {
18833        return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;
18834    } else if (pos < 2.5 / 2.75) {
18835        return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;
18836    } else {
18837        return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;
18838    }
18839}
18840function bouncePast(pos) {
18841    if (pos < 1 / 2.75) {
18842        return 7.5625 * pos * pos;
18843    } else if (pos < 2 / 2.75) {
18844        return 2 - (7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75);
18845    } else if (pos < 2.5 / 2.75) {
18846        return 2 - (7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375);
18847    } else {
18848        return 2 - (7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375);
18849    }
18850}
18851
18852//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVhc2luZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAxNiAtIENvdWxkIG5vdCBmaW5kIGEgZGVjbGFyYXRpb24gZmlsZSBmb3IgbW9kdWxlICdiZXppZXItZWFzaW5nJy4gJy9ob21lL3J1bm5lci93b3JrL2Zsb3ctdG8tdHlwZXNjcmlwdC1jb2RlbW9kL2Zsb3ctdG8tdHlwZXNjcmlwdC1jb2RlbW9kL3dlYmZsb3cvbm9kZV9tb2R1bGVzL2Jlemllci1lYXNpbmcvc3JjL2luZGV4LmpzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuaW1wb3J0IEJlemllckVhc2luZyBmcm9tICdiZXppZXItZWFzaW5nJztcblxuLy8gRWFzaW5nIGZ1bmN0aW9ucyBhZGFwdGVkIGZyb20gVGhvbWFzIEZ1Y2hzICYgSmVyZW15IEthaG5cbi8vIEVhc2luZyBFcXVhdGlvbnMgKGMpIDIwMDMgUm9iZXJ0IFBlbm5lciwgQlNEIGxpY2Vuc2Vcbi8vIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZGFucm8vZWFzaW5nLWpzL21hc3Rlci9MSUNFTlNFXG5cbmNvbnN0IG1hZ2ljU3dpbmcgPSAxLjcwMTU4O1xuXG50eXBlIEVhc2luZ0Z1bmN0aW9uID0gKGFyZzE6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgZWFzZTogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC4yNSwgMC4xLCAwLjI1LCAxLjApO1xuZXhwb3J0IGNvbnN0IGVhc2VJbjogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC40MiwgMC4wLCAxLjAsIDEuMCk7XG5leHBvcnQgY29uc3QgZWFzZU91dDogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC4wLCAwLjAsIDAuNTgsIDEuMCk7XG5leHBvcnQgY29uc3QgZWFzZUluT3V0OiBFYXNpbmdGdW5jdGlvbiA9IEJlemllckVhc2luZygwLjQyLCAwLjAsIDAuNTgsIDEuMCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpblF1YWQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5wb3cocG9zLCAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dFF1YWQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gLShNYXRoLnBvdyhwb3MgLSAxLCAyKSAtIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRRdWFkKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3cocG9zLCAyKTtcbiAgfVxuICByZXR1cm4gLTAuNSAqICgocG9zIC09IDIpICogcG9zIC0gMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkN1YmljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KHBvcywgMyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRDdWJpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnBvdyhwb3MgLSAxLCAzKSArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbk91dEN1YmljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3cocG9zLCAzKTtcbiAgfVxuICByZXR1cm4gMC41ICogKE1hdGgucG93KHBvcyAtIDIsIDMpICsgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpblF1YXJ0KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KHBvcywgNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRRdWFydChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAtKE1hdGgucG93KHBvcyAtIDEsIDQpIC0gMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbk91dFF1YXJ0KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3cocG9zLCA0KTtcbiAgfVxuICByZXR1cm4gLTAuNSAqICgocG9zIC09IDIpICogTWF0aC5wb3cocG9zLCAzKSAtIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5RdWludChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybi
18852BNYXRoLnBvdyhwb3MsIDUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0UXVpbnQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5wb3cocG9zIC0gMSwgNSkgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRRdWludChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICgocG9zIC89IDAuNSkgPCAxKSB7XG4gICAgcmV0dXJuIDAuNSAqIE1hdGgucG93KHBvcywgNSk7XG4gIH1cbiAgcmV0dXJuIDAuNSAqIChNYXRoLnBvdyhwb3MgLSAyLCA1KSArIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5TaW5lKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIC1NYXRoLmNvcyhwb3MgKiAoTWF0aC5QSSAvIDIpKSArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRTaW5lKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguc2luKHBvcyAqIChNYXRoLlBJIC8gMikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRTaW5lKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIC0wLjUgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHBvcykgLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluRXhwbyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBwb3MgPT09IDAgPyAwIDogTWF0aC5wb3coMiwgMTAgKiAocG9zIC0gMSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0RXhwbyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBwb3MgPT09IDEgPyAxIDogLU1hdGgucG93KDIsIC0xMCAqIHBvcykgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRFeHBvKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHBvcyA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChwb3MgPT09IDEpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAwLjUgKiBNYXRoLnBvdygyLCAxMCAqIChwb3MgLSAxKSk7XG4gIH1cbiAgcmV0dXJuIDAuNSAqICgtTWF0aC5wb3coMiwgLTEwICogLS1wb3MpICsgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkNpcmMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gLShNYXRoLnNxcnQoMSAtIHBvcyAqIHBvcykgLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dENpcmMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5zcXJ0KDEgLSBNYXRoLnBvdyhwb3MgLSAxLCAyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbk91dENpcmMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAtMC41ICogKE1hdGguc3FydCgxIC0gcG9zICogcG9zKSAtIDEpO1xuICB9XG4gIHJldHVybiAwLjUgKiAoTWF0aC5zcXJ0KDEgLSAocG9zIC09IDIpICogcG9zKSArIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0Qm91bmNlKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHBvcyA8IDEgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIHBvcyAqIHBvcztcbiAgfSBlbHNlIGlmIChwb3MgPCAyIC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDEuNSAvIDIuNzUpICogcG9zICsgMC43NTtcbiAgfSBlbHNlIGlmIChwb3MgPCAyLjUgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIChwb3MgLT0gMi4yNSAvIDIuNzUpICogcG9zICsgMC45Mzc1O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDIuNjI1IC8gMi43NSkgKiBwb3MgKyAwLjk4NDM3NTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5CYWNrKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcyA9IG1hZ2ljU3dpbmc7XG4gIHJldHVybiBwb3MgKiBwb3MgKiAoKHMgKyAxKSAqIHBvcyAtIHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0QmFjayhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBtYWdpY1N3aW5nO1xuICByZXR1cm4gKHBvcyAtPSAxKSAqIHBvcyAqICgocyArIDEpICogcG9zICsgcykgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRCYWNrKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAwLjUgKiAocG9zICogcG9zICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHBvcyAtIHMpKTtcbiAgfVxuICByZXR1cm4gMC41ICogKChwb3MgLT0gMikgKiBwb3MgKiAoKChzICo9IDEuNTI1KSArIDEpICogcG9zICsgcykgKyAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluRWxhc3RpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzID0gbWFnaWNTd2luZztcbiAgbGV0IHAgPSAwO1xuICBsZXQgYSA9IDE7XG4gIGlmIChwb3MgPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAocG9zID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKCFwKSB7XG4gICAgcCA9IDAuMztcbiAgfVxuICBpZiAoYSA8IDEpIHtcbiAgICBhID0gMTtcbiAgICBzID0gcCAvIDQ7XG4gIH0gZWxzZSB7XG4gICAgcyA9IChwIC8gKDIgKiBNYXRoLlBJKSkgKiBNYXRoLmFzaW4oMSAvIGEpO1xuICB9XG4gIHJldHVybiAtKFxuICAgIGEgKlxuICAgIE1hdGgucG93KDIsIDEwICogKHBvcyAtPSAxKSkgKlxuICAgIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRFbGFzdGljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICBsZXQgcCA9IDA7XG4gIGxldCBhID0gMTtcbiAgaWYgKHBvcyA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChwb3MgPT09IDEpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoIXApIHtcbiAgICBwID0gMC4zO1xuICB9XG4gIGlmIChhIDwgMSkge1xuICAgIGEgPSAxO1xuICAgIHMgPSBwIC8gNDtcbiAgfSBlbHNlIHtcbiAgICBzID0gKHAgLyAoMiAqIE1hdGguUEkpKSAqIE1hdGguYXNpbigxIC8gYSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBhICogTWF0aC5wb3coMiwgLTEwICogcG9zKSAqIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICsgMVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRFbGFzdGljKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICBsZXQgcCA9IDA7XG4gIGxldCBhID0gMTtcbiAgaWYgKHBvcyA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICgocG9zIC89IDEgLyAyKSA9PT0gMikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmICghcCkge1xuICAgIHAgPSAwLjMgKiAxLjU7XG4gIH1cbiAgaWYgKGEgPCAxKSB7XG4gICAgYSA9IDE7XG4gICAgcyA9IHAgLyA0O1xuICB9IGVsc2Uge1xuICAgIHMgPSAocCAvICgyICogTWF0aC5QSSkpICogTWF0aC5hc2luKDEgLyBhKTtcbiAgfVxuICBpZiAocG9zIDwgMSkge1xuICAgIHJldHVybiAoXG4gICAgICAtMC41ICpcbiAgICAgIChhICpcbiAgICAgICAgTWF0aC5wb3coMiwgMTAgKiAocG9zIC09IDEpKSAqXG4gICAgICAgIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBhICpcbiAgICAgIE1hdGgucG93KDIsIC0xMCAqIChwb3MgLT0gMSkpICpcbiAgICAgIE1hdGguc2luKCgocG9zIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICpcbiAgICAgIDAuNSArXG4gICAgMVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3dpbmdGcm9tVG8ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgcyA9IG1hZ2ljU3dpbmc7XG4gIHJldHVybiAocG9zIC89IDAuNSkgPCAxXG4gICAgPyAwLjUgKiAocG9zICog
18852cG9zICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHBvcyAtIHMpKVxuICAgIDogMC41ICogKChwb3MgLT0gMikgKiBwb3MgKiAoKChzICo9IDEuNTI1KSArIDEpICogcG9zICsgcykgKyAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3aW5nRnJvbShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBtYWdpY1N3aW5nO1xuICByZXR1cm4gcG9zICogcG9zICogKChzICsgMSkgKiBwb3MgLSBzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3aW5nVG8ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzID0gbWFnaWNTd2luZztcbiAgcmV0dXJuIChwb3MgLT0gMSkgKiBwb3MgKiAoKHMgKyAxKSAqIHBvcyArIHMpICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChwb3MgPCAxIC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiBwb3MgKiBwb3M7XG4gIH0gZWxzZSBpZiAocG9zIDwgMiAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAxLjUgLyAyLjc1KSAqIHBvcyArIDAuNzU7XG4gIH0gZWxzZSBpZiAocG9zIDwgMi41IC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDIuMjUgLyAyLjc1KSAqIHBvcyArIDAuOTM3NTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAyLjYyNSAvIDIuNzUpICogcG9zICsgMC45ODQzNzU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZVBhc3QocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAocG9zIDwgMSAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogcG9zICogcG9zO1xuICB9IGVsc2UgaWYgKHBvcyA8IDIgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDIgLSAoNy41NjI1ICogKHBvcyAtPSAxLjUgLyAyLjc1KSAqIHBvcyArIDAuNzUpO1xuICB9IGVsc2UgaWYgKHBvcyA8IDIuNSAvIDIuNzUpIHtcbiAgICByZXR1cm4gMiAtICg3LjU2MjUgKiAocG9zIC09IDIuMjUgLyAyLjc1KSAqIHBvcyArIDAuOTM3NSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDIgLSAoNy41NjI1ICogKHBvcyAtPSAyLjYyNSAvIDIuNzUpICogcG9zICsgMC45ODQzNzUpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiYm91bmNlIiwiYm91bmNlUGFzdCIsImVhc2UiLCJlYXNlSW4iLCJlYXNlSW5PdXQiLCJlYXNlT3V0IiwiaW5CYWNrIiwiaW5DaXJjIiwiaW5DdWJpYyIsImluRWxhc3RpYyIsImluRXhwbyIsImluT3V0QmFjayIsImluT3V0Q2lyYyIsImluT3V0Q3ViaWMiLCJpbk91dEVsYXN0aWMiLCJpbk91dEV4cG8iLCJpbk91dFF1YWQiLCJpbk91dFF1YXJ0IiwiaW5PdXRRdWludCIsImluT3V0U2luZSIsImluUXVhZCIsImluUXVhcnQiLCJpblF1aW50IiwiaW5TaW5lIiwib3V0QmFjayIsIm91dEJvdW5jZSIsIm91dENpcmMiLCJvdXRDdWJpYyIsIm91dEVsYXN0aWMiLCJvdXRFeHBvIiwib3V0UXVhZCIsIm91dFF1YXJ0Iiwib3V0UXVpbnQiLCJvdXRTaW5lIiwic3dpbmdGcm9tIiwic3dpbmdGcm9tVG8iLCJzd2luZ1RvIiwibWFnaWNTd2luZyIsIkJlemllckVhc2luZyIsInBvcyIsIk1hdGgiLCJwb3ciLCJjb3MiLCJQSSIsInNpbiIsInNxcnQiLCJzIiwicCIsImEiLCJhc2luIl0sIm1hcHBpbmdzIjoiQUFBQSxvUEFBb1A7Ozs7Ozs7Ozs7OztJQWlRcE9BLE1BQU07ZUFBTkE7O0lBWUFDLFVBQVU7ZUFBVkE7O0lBbFFIQyxJQUFJO2VBQUpBOztJQUNBQyxNQUFNO2VBQU5BOztJQUVBQyxTQUFTO2VBQVRBOztJQURBQyxPQUFPO2VBQVBBOztJQTJIR0MsTUFBTTtlQUFOQTs7SUE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
18853
18854}),
18855"1799": (function (__unused_webpack_module, exports, __webpack_require__) {
18856"use strict";
18857
18858Object.defineProperty(exports, "__esModule", ({
18859    value: true
18860}));
18861function _export(target, all) {
18862    for(var name in all)Object.defineProperty(target, name, {
18863        enumerable: true,
18864        get: all[name]
18865    });
18866}
18867_export(exports, {
18868    clearPlugin: function() {
18869        return clearPlugin;
18870    },
18871    createPluginInstance: function() {
18872        return createPluginInstance;
18873    },
18874    getPluginConfig: function() {
18875        return getPluginConfig;
18876    },
18877    getPluginDestination: function() {
18878        return getPluginDestination;
18879    },
18880    getPluginDuration: function() {
18881        return getPluginDuration;
18882    },
18883    getPluginOrigin: function() {
18884        return getPluginOrigin;
18885    },
18886    isPluginType: function() {
18887        return isPluginType;
18888    },
18889    renderPlugin: function() {
18890        return renderPlugin;
18891    }
18892});
18893const _IX2BrowserSupport = __webpack_require__(2662);
18894const _plugins = __webpack_require__(3690);
18895function isPluginType(actionTypeId) {
18896    // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | ... 12 more ... | "STYLE_BOX_SHADOW"' is not assignable to parameter of type '"PLUGIN_LOTTIE" | "PLUGIN_SPLINE" | "PLUGIN_VARIABLE"'.
18897    return _plugins.pluginMethodMap.has(actionTypeId);
18898}
18899const pluginMethod = (methodName)=>(actionTypeId)=>{
18900        if (!_IX2BrowserSupport.IS_BROWSER_ENV) {
18901            // IX2 plugins require browser libs for now
18902            return ()=>null;
18903        }
18904        const plugin = _plugins.pluginMethodMap.get(actionTypeId);
18905        if (!plugin) {
18906            throw new Error(`IX2 no plugin configured for: ${actionTypeId}`);
18907        }
18908        const method = plugin[methodName];
18909        if (!method) {
18910            throw new Error(`IX2 invalid plugin method: ${methodName}`);
18911        }
18912        return method;
18913    };
18914const getPluginConfig = pluginMethod('getPluginConfig');
18915const getPluginOrigin = pluginMethod('getPluginOrigin');
18916const getPluginDuration = pluginMethod('getPluginDuration');
18917const getPluginDestination = pluginMethod('getPluginDestination');
18918const createPluginInstance = pluginMethod('createPluginInstance');
18919const renderPlugin = pluginMethod('renderPlugin');
18920const clearPlugin = pluginMethod('clearPlugin');
18921
18922//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFQbHVnaW5zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVNfQlJPV1NFUl9FTlZ9IGZyb20gJy4vSVgyQnJvd3NlclN1cHBvcnQnO1xuaW1wb3J0IHtwbHVnaW5NZXRob2RNYXB9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9wbHVnaW5zJztcblxuaW1wb3J0IHR5cGUge0FjdGlvblR5cGVJZFR5cGV9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcbmltcG9ydCB0eXBlIHtQbHVnaW5UeXBlfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvcGx1Z2lucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkOiBBY3Rpb25UeXBlSWRUeXBlKTogYm9vbGVhbiB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09Q
18922QUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgLi4uIDEyIG1vcmUgLi4uIHwgXCJTVFlMRV9CT1hfU0hBRE9XXCInIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdcIlBMVUdJTl9MT1RUSUVcIiB8IFwiUExVR0lOX1NQTElORVwiIHwgXCJQTFVHSU5fVkFSSUFCTEVcIicuXG4gIHJldHVybiBwbHVnaW5NZXRob2RNYXAuaGFzKGFjdGlvblR5cGVJZCk7XG59XG5cbnR5cGUgUGx1Z2luTWV0aG9kTmFtZSA9XG4gIHwgJ2dldFBsdWdpbkNvbmZpZydcbiAgfCAnZ2V0UGx1Z2luT3JpZ2luJ1xuICB8ICdnZXRQbHVnaW5EdXJhdGlvbidcbiAgfCAnZ2V0UGx1Z2luRGVzdGluYXRpb24nXG4gIHwgJ2NyZWF0ZVBsdWdpbkluc3RhbmNlJ1xuICB8ICdyZW5kZXJQbHVnaW4nXG4gIHwgJ2NsZWFyUGx1Z2luJztcblxuY29uc3QgcGx1Z2luTWV0aG9kID1cbiAgKG1ldGhvZE5hbWU6IFBsdWdpbk1ldGhvZE5hbWUpID0+IChhY3Rpb25UeXBlSWQ6IFBsdWdpblR5cGUpID0+IHtcbiAgICBpZiAoIUlTX0JST1dTRVJfRU5WKSB7XG4gICAgICAvLyBJWDIgcGx1Z2lucyByZXF1aXJlIGJyb3dzZXIgbGlicyBmb3Igbm93XG4gICAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luID0gcGx1Z2luTWV0aG9kTWFwLmdldChhY3Rpb25UeXBlSWQpO1xuICAgIGlmICghcGx1Z2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElYMiBubyBwbHVnaW4gY29uZmlndXJlZCBmb3I6ICR7YWN0aW9uVHlwZUlkfWApO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2QgPSBwbHVnaW5bbWV0aG9kTmFtZV07XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSVgyIGludmFsaWQgcGx1Z2luIG1ldGhvZDogJHttZXRob2ROYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luQ29uZmlnID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5Db25maWcnKTtcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5PcmlnaW4gPSBwbHVnaW5NZXRob2QoJ2dldFBsdWdpbk9yaWdpbicpO1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5EdXJhdGlvbicpO1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkRlc3RpbmF0aW9uID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5EZXN0aW5hdGlvbicpO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gcGx1Z2luTWV0aG9kKCdjcmVhdGVQbHVnaW5JbnN0YW5jZScpO1xuZXhwb3J0IGNvbnN0IHJlbmRlclBsdWdpbiA9IHBsdWdpbk1ldGhvZCgncmVuZGVyUGx1Z2luJyk7XG5leHBvcnQgY29uc3QgY2xlYXJQbHVnaW4gPSBwbHVnaW5NZXRob2QoJ2NsZWFyUGx1Z2luJyk7XG4iXSwibmFtZXMiOlsiY2xlYXJQbHVnaW4iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZSIsImdldFBsdWdpbkNvbmZpZyIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJnZXRQbHVnaW5PcmlnaW4iLCJpc1BsdWdpblR5cGUiLCJyZW5kZXJQbHVnaW4iLCJhY3Rpb25UeXBlSWQiLCJwbHVnaW5NZXRob2RNYXAiLCJoYXMiLCJwbHVnaW5NZXRob2QiLCJtZXRob2ROYW1lIiwiSVNfQlJPV1NFUl9FTlYiLCJwbHVnaW4iLCJnZXQiLCJFcnJvciIsIm1ldGhvZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUEyQ2FBLFdBQVc7ZUFBWEE7O0lBRkFDLG9CQUFvQjtlQUFwQkE7O0lBSkFDLGVBQWU7ZUFBZkE7O0lBR0FDLG9CQUFvQjtlQUFwQkE7O0lBREFDLGlCQUFpQjtlQUFqQkE7O0lBREFDLGVBQWU7ZUFBZkE7O0lBaENHQyxZQUFZO2VBQVpBOztJQW9DSEMsWUFBWTtlQUFaQTs7O21DQTFDZ0I7eUJBQ0M7QUFLdkIsU0FBU0QsYUFBYUUsWUFBOEI7SUFDekQsMldBQTJXO0lBQzNXLE9BQU9DLHdCQUFlLENBQUNDLEdBQUcsQ0FBQ0Y7QUFDN0I7QUFXQSxNQUFNRyxlQUNKLENBQUNDLGFBQWlDLENBQUNKO1FBQ2pDLElBQUksQ0FBQ0ssaUNBQWMsRUFBRTtZQUNuQiwyQ0FBMkM7WUFDM0MsT0FBTyxJQUFNO1FBQ2Y7UUFDQSxNQUFNQyxTQUFTTCx3QkFBZSxDQUFDTSxHQUFHLENBQUNQO1FBQ25DLElBQUksQ0FBQ00sUUFBUTtZQUNYLE1BQU0sSUFBSUUsTUFBTSxDQUFDLDhCQUE4QixFQUFFUixhQUFhLENBQUM7UUFDakU7UUFDQSxNQUFNUyxTQUFTSCxNQUFNLENBQUNGLFdBQVc7UUFDakMsSUFBSSxDQUFDSyxRQUFRO1lBQ1gsTUFBTSxJQUFJRCxNQUFNLENBQUMsMkJBQTJCLEVBQUVKLFdBQVcsQ0FBQztRQUM1RDtRQUNBLE9BQU9LO0lBQ1Q7QUFFSyxNQUFNZixrQkFBa0JTLGFBQWE7QUFDckMsTUFBTU4sa0JBQWtCTSxhQUFhO0FBQ3JDLE1BQU1QLG9CQUFvQk8sYUFBYTtBQUN2QyxNQUFNUix1QkFBdUJRLGFBQWE7QUFDMUMsTUFBTVYsdUJBQXVCVSxhQUFhO0FBQzFDLE1BQU1KLGVBQWVJLGFBQWE7QUFDbEMsTUFBTVgsY0FBY1csYUFBYSJ9
18923
18924}),
18925"4124": (function (__unused_webpack_module, exports, __webpack_require__) {
18926"use strict";
18927/* eslint-env browser */ 
18928Object.defineProperty(exports, "__esModule", ({
18929    value: true
18930}));
18931function _export(target, all) {
18932    for(var name in all)Object.defineProperty(target, name, {
18933        enumerable: true,
18934        get: all[name]
18935    });
18936}
18937_export(exports, {
18938    cleanupHTMLElement: function() {
18939        return cleanupHTMLElement;
18940    },
18941    clearAllStyles: function() {
18942        return clearAllStyles;
18943    },
18944    clearObjectCache: function() {
18945        return clearObjectCache;
18946    },
18947    getActionListProgress: function() {
18948        return getActionListProgress;
18949    },
18950    getAffectedElements: function() {
18951        return getAffectedElements;
18952    },
18953    getComputedStyle: function() {
18954        return getComputedStyle;
18955    },
18956    getDestinationValues: function() {
18957        return getDestinationValues;
18958    },
18959    getElementId: function() {
18960        return getElementId;
18961    },
18962    getInstanceId: function() {
18963        return getInstanceId;
18964    },
18965    getInstanceOrigin: function() {
18966        return getInstanceOrigin;
18967    },
18968    getItemConfigByKey: function() {
18969        return getItemConfigByKey;
18970    },
18971    getMaxDurationItemIndex: function() {
18972        return getMaxDurationItemIndex;
18973    },
18974    getNamespacedParameterId: function() {
18975        return getNamespacedParameterId;
18976    },
18977    getRenderType: function() {
18978        return getRenderType;
18979    },
18980    getStyleProp: function() {
18981        return getStyleProp;
18982    },
18983    mediaQueriesEqual: function() {
18984        return mediaQueriesEqual;
18985    },
18986    observeStore: function() {
18987        return observeStore;
18988    },
18989    reduceListToGroup: function() {
18990        return reduceListToGroup;
18991    },
18992    reifyState: function() {
18993        return reifyState;
18994    },
18995    renderHTMLElement: function() {
18996        return renderHTMLElement;
18997    },
18998    shallowEqual: function() {
18999        return _shallowEqual.default;
19000    },
19001    shouldAllowMediaQuery: function() {
19002        return shouldAllowMediaQuery;
19003    },
19004    shouldNamespaceEventParameter: function() {
19005        return shouldNamespaceEventParameter;
19006    },
19007    stringifyTarget: function() {
19008        return stringifyTarget;
19009    }
19010});
19011const _defaultTo = /*#__PURE__*/ _interop_require_default(__webpack_require__(4075));
19012const _reduce = /*#__PURE__*/ _interop_require_default(__webpack_require__(1455));
19013const _findLast = /*#__PURE__*/ _interop_require_default(__webpack_require__(5720));
19014const _timm = __webpack_require__(1185);
19015const _sharedconstants = __webpack_require__(7087);
19016const _shallowEqual = /*#__PURE__*/ _interop_require_default(__webpack_require__(7164));
19017const _IX2EasingUtils = __webpack_require__(3767);
19018const _normalizeColor = __webpack_require__(380);
19019const _IX2VanillaPlugins = __webpack_require__(1799);
19020const _IX2BrowserSupport = __webpack_require__(2662);
19021function _interop_require_default(obj) {
19022    return obj && obj.__esModule ? obj : {
19023        default: obj
19024    };
19025}
19026const { BACKGROUND, TRANSFORM, TRANSLATE_3D, SCALE_3D, ROTATE_X, ROTATE_Y, ROTATE_Z, SKEW, PRESERVE_3D, FLEX, OPACITY, FILTER, FONT_VARIATION_SETTINGS, WIDTH, HEIGHT, BACKGROUND_COLOR, BORDER_COLOR, COLOR, CHILDREN, IMMEDIATE_CHILDREN, SIBLINGS, PARENT, DISPLAY, WILL_CHANGE, AUTO, COMMA_DELIMITER, COLON_DELIMITER, BAR_DELIMITER, RENDER_TRANSFORM, RENDER_GENERAL, RENDER_STYLE, RENDER_PLUGIN } = _sharedconstants.IX2EngineConstants;
19027const { TRANSFORM_MOVE, TRANSFORM_SCALE, TRANSFORM_ROTATE, TRANSFORM_SKEW, STYLE_OPACITY, STYLE_FILTER, STYLE_FONT_VARIATION, STYLE_SIZE, STYLE_BACKGROUND_COLOR, STYLE_BORDER, STYLE_TEXT_COLOR, GENERAL_DISPLAY, OBJECT_VALUE } = _sharedconstants.ActionTypeConsts;
19028// @ts-expect-error - TS7006 - Parameter 'v' implicitly has an 'any' type.
19029const trim = (v)=>v.trim();
19030const colorStyleProps = Object.freeze({
19031    [STYLE_BACKGROUND_COLOR]: BACKGROUND_COLOR,
19032    [STYLE_BORDER]: BORDER_COLOR,
19033    [STYLE_TEXT_COLOR]: COLOR
19034});
19035const willChangeProps = Object.freeze({
19036    [_IX2BrowserSupport.TRANSFORM_PREFIXED]: TRANSFORM,
19037    [BACKGROUND_COLOR]: BACKGROUND,
19038    [OPACITY]: OPACITY,
19039    [FILTER]: FILTER,
19040    [WIDTH]: WIDTH,
19041    [HEIGHT]: HEIGHT,
19042    [FONT_VARIATION_SETTINGS]: FONT_VARIATION_SETTINGS
19043});
19044const objectCache = new Map();
19045function clearObjectCache() {
19046    objectCache.clear();
19047}
19048let instanceCount = 1;
19049function getInstanceId() {
19050    return 'i' + instanceCount++;
19051}
19052let elementCount = 1;
19053function getElementId(ixElements, ref) {
19054    // TODO: optimize element lookup
19055    for(const key in ixElements){
19056        const ixEl = ixElements[key];
19057        if (ixEl && ixEl.ref === ref) {
19058            return ixEl.id;
19059        }
19060    }
19061    return 'e' + elementCount++;
19062}
19063function reifyState({ events, actionLists, site } = {}) {
19064    const eventTypeMap = (0, _reduce.default)(events, (result, event)=>{
19065        const { eventTypeId } = event;
19066        if (!result[eventTypeId]) {
19067            result[eventTypeId] = {};
19068        }
19069        result[eventTypeId][event.id] = event;
19070        return result;
19071    }, {});
19072    let mediaQueries = site && site.mediaQueries;
19073    let mediaQueryKeys = [];
19074    if (mediaQueries) {
19075        mediaQueryKeys = mediaQueries.map((mq)=>mq.key);
19076    } else {
19077        mediaQueries = [];
19078        console.warn(`IX2 missing mediaQueries in site data`);
19079    }
19080    return {
19081        ixData: {
19082            events,
19083            actionLists,
19084            eventTypeMap,
19085            mediaQueries,
19086            mediaQueryKeys
19087        }
19088    };
19089}
19090const strictEqual = (a, b)=>a === b;
19091function observeStore({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type.
19092store, // @ts-expect-error - TS7031 - Binding element 'select' implicitly has an 'any' type.
19093select, // @ts-expect-error - TS7031 - Binding element 'onChange' implicitly has an 'any' type.
19094onChange, comparator = strictEqual }) {
19095    const { getState, subscribe } = store;
19096    const unsubscribe = subscribe(handleChange);
19097    let currentState = select(getState());
19098    function handleChange() {
19099        const nextState = select(getState());
19100        if (nextState == null) {
19101            unsubscribe();
19102            return;
19103        }
19104        if (!comparator(nextState, currentState)) {
19105            currentState = nextState;
19106            onChange(currentState, store);
19107        }
19108    }
19109    return unsubscribe;
19110}
19111// @ts-expect-error - TS7006 - Parameter 'target' implicitly has an 'any' type.
19112function normalizeTarget(target) {
19113    const type = typeof target;
19114    if (type === 'string') {
19115        return {
19116            id: target
19117        };
19118    } else if (target != null && type === 'object') {
19119        const { id, objectId, selector, selectorGuids, appliesTo, useEventTarget } = target;
19120        return {
19121            id,
19122            objectId,
19123            selector,
19124            selectorGuids,
19125            appliesTo,
19126            useEventTarget
19127        };
19128    }
19129    return {};
19130}
19131function getAffectedElements({ config, event, eventTarget, elementRoot, elementApi }) {
19132    if (!elementApi) {
19133        throw new Error('IX2 missing elementApi');
19134    }
19135    const { targets } = config;
19136    if (Array.isArray(targets) && targets.length > 0) {
19137        return targets.reduce((accumulator, target)=>accumulator.concat(getAffectedElements({
19138                config: {
19139                    target
19140                },
19141                event,
19142                eventTarget,
19143                elementRoot,
19144                elementApi
19145            })), []);
19146    }
19147    const { getValidDocument, getQuerySelector, queryDocument, getChildElements, getSiblingElements, matchSelector, elementContains, isSiblingNode } = elementApi;
19148    const { target } = config;
19149    if (!target) {
19150        return [];
19151    }
19152    const { id, objectId, selector, selectorGuids, appliesTo, useEventTarget } = normalizeTarget(target);
19153    if (objectId) {
19154        const ref = objectCache.has(objectId) ? objectCache.get(objectId) : objectCache.set(objectId, {}).get(objectId);
19155        return [
19156            ref
19157        ];
19158    }
19159    if (appliesTo === _sharedconstants.EventAppliesTo.PAGE) {
19160        const doc = getValidDocument(id);
19161        return doc ? [
19162            doc
19163        ] : [];
19164    }
19165    const overrides = event?.action?.config?.affectedElements ?? {};
19166    const override = overrides[id || selector] || {};
19167    const validOverride = Boolean(override.id || override.selector);
19168    let limitAffectedElements;
19169    let baseSelector;
19170    let finalSelector;
19171    const eventTargetSelector = event && getQuerySelector(normalizeTarget(event.target));
19172    if (validOverride) {
19173        limitAffectedElements = override.limitAffectedElements;
19174        baseSelector = eventTargetSelector;
19175        finalSelector = getQuerySelector(override);
19176    } else {
19177        // pass in selectorGuids as well for server-side rendering.
19178        baseSelector = finalSelector = getQuerySelector({
19179            id,
19180            selector,
19181            selectorGuids
19182        });
19183    }
19184    if (event && useEventTarget) {
19185        // eventTarget is not defined when this function is called 
19185in a clear request, so find
19186        // all target elements associated with the event data, and return affected elements.
19187        const eventTargets = eventTarget && (finalSelector || useEventTarget === true) ? [
19188            eventTarget
19189        ] : queryDocument(eventTargetSelector);
19190        if (finalSelector) {
19191            if (useEventTarget === PARENT) {
19192                return queryDocument(finalSelector).filter((parentElement)=>eventTargets.some((targetElement)=>elementContains(parentElement, targetElement)));
19193            }
19194            if (useEventTarget === CHILDREN) {
19195                return queryDocument(finalSelector).filter((childElement)=>eventTargets.some((targetElement)=>elementContains(targetElement, childElement)));
19196            }
19197            if (useEventTarget === SIBLINGS) {
19198                return queryDocument(finalSelector).filter((siblingElement)=>eventTargets.some((targetElement)=>isSiblingNode(targetElement, siblingElement)));
19199            }
19200        }
19201        return eventTargets;
19202    }
19203    if (baseSelector == null || finalSelector == null) {
19204        return [];
19205    }
19206    if (_IX2BrowserSupport.IS_BROWSER_ENV && elementRoot) {
19207        return queryDocument(finalSelector).filter((element)=>elementRoot.contains(element));
19208    }
19209    if (limitAffectedElements === CHILDREN) {
19210        return queryDocument(baseSelector, finalSelector);
19211    } else if (limitAffectedElements === IMMEDIATE_CHILDREN) {
19212        return getChildElements(queryDocument(baseSelector)).filter(matchSelector(finalSelector));
19213    } else if (limitAffectedElements === SIBLINGS) {
19214        return getSiblingElements(queryDocument(baseSelector)).filter(matchSelector(finalSelector));
19215    } else {
19216        return queryDocument(finalSelector);
19217    }
19218}
19219function getComputedStyle({ element, actionItem }) {
19220    if (!_IX2BrowserSupport.IS_BROWSER_ENV) {
19221        return {};
19222    }
19223    const { actionTypeId } = actionItem;
19224    switch(actionTypeId){
19225        case STYLE_SIZE:
19226        case STYLE_BACKGROUND_COLOR:
19227        case STYLE_BORDER:
19228        case STYLE_TEXT_COLOR:
19229        case GENERAL_DISPLAY:
19230            return window.getComputedStyle(element);
19231        default:
19232            return {};
19233    }
19234}
19235const pxValueRegex = /px/;
19236// @ts-expect-error - TS7006 - Parameter 'filters' implicitly has an 'any' type.
19237const getFilterDefaults = (actionState, filters)=>// @ts-expect-error - TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'filter' implicitly has an 'any' type.
19238    filters.reduce((result, filter)=>{
19239        if (result[filter.type] == null) {
19240            result[filter.type] = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Readonly<{ blur: 0; 'hue-rotate': 0; invert: 0; grayscale: 0; saturate: 100; sepia: 0; contrast: 100; brightness: 100; }>'.
19241            filterDefaults[filter.type];
19242        }
19243        return result;
19244    }, actionState || {});
19245const getFontVariationDefaults = (actionState, fontVariations)=>fontVariations.reduce((result, fontVariation)=>{
19246        if (result[fontVariation.type] == null) {
19247            result[fontVariation.type] = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Readonly<{ wght: 0; opsz: 0; wdth: 0; slnt: 0; }>'.
19248            fontVariationDefaults[fontVariation.type] || // @ts-expect-error - TS2339 - Property 'defaultValue' does not exist on type 'FontVariationItemConfigType'.
19249            fontVariation.defaultValue || 0;
19250        }
19251        return result;
19252    }, actionState || {});
19253function getInstanceOrigin(element, refState = {}, computedStyle = {}, actionItem, elementApi) {
19254    const { getStyle } = elementApi;
19255    // Flow Hack: Passing actionTypeId to isPluginType and then trying
19256    // to do type refinement using the same variable via a switch statement
19257    // breaks down. This is is a workaround to ensure we can use type refinement.
19258    const { actionTypeId } = actionItem;
19259    if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) {
19260        // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "
19260STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' is not assignable to parameter of type 'PluginType'. | TS7053 - Element implicitly has an 'any' type because expression of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' can't be used to index type '{}'.
19261        return (0, _IX2VanillaPlugins.getPluginOrigin)(actionTypeId)(refState[actionTypeId], actionItem);
19262    }
19263    switch(actionItem.actionTypeId){
19264        case TRANSFORM_MOVE:
19265        case TRANSFORM_SCALE:
19266        case TRANSFORM_ROTATE:
19267        case TRANSFORM_SKEW:
19268            {
19269                return(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW"' can't be used to index type '{}'.
19270                refState[actionItem.actionTypeId] || transformDefaults[actionItem.actionTypeId]);
19271            }
19272        case STYLE_FILTER:
19273            return getFilterDefaults(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"STYLE_FILTER"' can't be used to index type '{}'.
19274            refState[actionItem.actionTypeId], actionItem.config.filters);
19275        case STYLE_FONT_VARIATION:
19276            return getFontVariationDefaults(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"STYLE_FONT_VARIATION"' can't be used to index type '{}'.
19277            refState[actionItem.actionTypeId], actionItem.config.fontVariations);
19278        case STYLE_OPACITY:
19279            return {
19280                value: (0, _defaultTo.default)(parseFloat(getStyle(element, OPACITY)), 1.0)
19281            };
19282        case STYLE_SIZE:
19283            {
19284                const inlineWidth = getStyle(element, WIDTH);
19285                const inlineHeight = getStyle(element, HEIGHT);
19286                let widthValue;
19287                let heightValue;
19288                // When destination unit is 'AUTO', ensure origin values are in px
19289                if (actionItem.config.widthUnit === AUTO) {
19290                    widthValue = pxValueRegex.test(inlineWidth) ? parseFloat(inlineWidth) : parseFloat(computedStyle.width);
19291                } else {
19292                    widthValue = (0, _defaultTo.default)(parseFloat(inlineWidth), // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'.
19293                    parseFloat(computedStyle.width));
19294                }
19295                if (actionItem.config.heightUnit === AUTO) {
19296                    heightValue = pxValueRegex.test(inlineHeight) ? parseFloat(inlineHeight) : parseFloat(computedStyle.height);
19297                } else {
19298                    heightValue = (0, _defaultTo.default)(parseFloat(inlineHeight), // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'.
19299                    parseFloat(computedStyle.height));
19300                }
19301                return {
19302                    widthValue,
19303                    heightValue
19304                };
19305            }
19306        case STYLE_BACKGROUND_COLOR:
19307        case STYLE_BORDER:
19308        case STYLE_TEXT_COLOR:
19309            return parseColor({
19310                element,
19311                actionTypeId: actionItem.actionTypeId,
19312                computedStyle,
19313                getStyle
19314            });
19315        case GENERAL_DISPLAY:
19316            return {
19317                // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'.
19318                value: (0, _defaultTo.default)(getStyle(element, DISPLAY), computedStyle.display)
19319            };
19320        // @ts-expect-error - `OBJECT_VALUE` is not an expected `actionTypeId`
19321        case OBJECT_VALUE:
19322            // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{}'. | TS2339 - Property 'actionTypeId' does not exist on type 'never'.
19323            return refState[actionItem.actionTypeId] || {
19324                value: 0
19325            };
19326        default:
19327            {
19328                // As far as the type system can tell, we're missing a handler for
19329                // PLUGIN_LOTTIE.
19330                //
19331                // This is actually handled by `isPluginType` above.
19332                //
19333                /*:: (actionItem: empty); */ return;
19334            }
19335    }
19336}
19337// @ts-expect-error - TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'filter' implicitly has an 'any' type.
19338const reduceFilters = (result, filter)=>{
19339    if (filter) {
19340        result[filter.type] = filter.value || 0;
19341    }
19342    return result;
19343};
19344const reduceFontVariations = (result, fontVariation)=>{
19345    if (fontVariation) {
19346        result[fontVariation.type] = fontVariation.value || 0;
19347    }
19348    return result;
19349};
19350const getItemConfigByKey = (actionTypeId, key, config)=>{
19351    if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) {
19352        return (0, _IX2VanillaPlugins.getPluginConfig)(actionTypeId)(config, key);
19353    }
19354    switch(actionTypeId){
19355        case STYLE_FILTER:
19356            {
19357                const filter = (0, _findLast.default)(config.filters, ({ type })=>type === key);
19358                return filter ? filter.value : 0;
19359            }
19360        case STYLE_FONT_VARIATION:
19361            {
19362                const fontVariation = (0, _findLast.default)(config.fontVariations, ({ type })=>type === key);
19363                return fontVariation ? fontVariation.value : 0;
19364            }
19365        default:
19366            return config[key];
19367    }
19368};
19369function getDestinationValues({ element, actionItem, elementApi }) {
19370    if ((0, _IX2VanillaPlugins.isPluginType)(actionItem.actionTypeId)) {
19371        // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "
19371STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' is not assignable to parameter of type 'PluginType'.
19372        return (0, _IX2VanillaPlugins.getPluginDestination)(actionItem.actionTypeId)(actionItem.config);
19373    }
19374    switch(actionItem.actionTypeId){
19375        case TRANSFORM_MOVE:
19376        case TRANSFORM_SCALE:
19377        case TRANSFORM_ROTATE:
19378        case TRANSFORM_SKEW:
19379            {
19380                const { xValue, yValue, zValue } = actionItem.config;
19381                return {
19382                    xValue,
19383                    yValue,
19384                    zValue
19385                };
19386            }
19387        case STYLE_SIZE:
19388            {
19389                const { getStyle, setStyle, getProperty } = elementApi;
19390                const { widthUnit, heightUnit } = actionItem.config;
19391                let { widthValue, heightValue } = actionItem.config;
19392                if (!_IX2BrowserSupport.IS_BROWSER_ENV) {
19393                    return {
19394                        widthValue,
19395                        heightValue
19396                    };
19397                }
19398                if (widthUnit === AUTO) {
19399                    const temp = getStyle(element, WIDTH);
19400                    setStyle(element, WIDTH, '');
19401                    // @ts-expect-error - TS2322 - Type 'string | null' is not assignable to type 'number | undefined'.
19402                    widthValue = getProperty(element, 'offsetWidth');
19403                    setStyle(element, WIDTH, temp);
19404                }
19405                if (heightUnit === AUTO) {
19406                    const temp = getStyle(element, HEIGHT);
19407                    setStyle(element, HEIGHT, '');
19408                    // @ts-expect-error - TS2322 - Type 'string | null' is not assignable to type 'number | undefined'.
19409                    heightValue = getProperty(element, 'offsetHeight');
19410                    setStyle(element, HEIGHT, temp);
19411                }
19412                return {
19413                    widthValue,
19414                    heightValue
19415                };
19416            }
19417        case STYLE_BACKGROUND_COLOR:
19418        case STYLE_BORDER:
19419        case STYLE_TEXT_COLOR:
19420            {
19421                const { rValue, gValue, bValue, aValue, globalSwatchId } = actionItem.config;
19422                if (globalSwatchId && globalSwatchId.startsWith('--')) {
19423                    const { getStyle } = elementApi;
19424                    const value = getStyle(element, globalSwatchId);
19425                    const normalizedValue = (0, _normalizeColor.normalizeColor)(value);
19426                    return {
19427                        rValue: normalizedValue.red,
19428                        gValue: normalizedValue.green,
19429                        bValue: normalizedValue.blue,
19430                        aValue: normalizedValue.alpha
19431                    };
19432                }
19433                return {
19434                    rValue,
19435                    gValue,
19436                    bValue,
19437                    aValue
19438                };
19439            }
19440        case STYLE_FILTER:
19441            {
19442                return actionItem.config.filters.reduce(reduceFilters, {});
19443            }
19444        case STYLE_FONT_VARIATION:
19445            {
19446                return actionItem.config.fontVariations.reduce(reduceFontVariations, {});
19447            }
19448        default:
19449            {
19450                const { value } = actionItem.config;
19451                return {
19452                    value
19453                };
19454            }
19455    }
19456}
19457function getRenderType(actionTypeId) {
19458    if (/^TRANSFORM_/.test(actionTypeId)) {
19459        return RENDER_TRANSFORM;
19460    }
19461    if (/^STYLE_/.test(actionTypeId)) {
19462        return RENDER_STYLE;
19463    }
19464    if (/^GENERAL_/.test(actionTypeId)) {
19465        return RENDER_GENERAL;
19466    }
19467    if (/^PLUGIN_/.test(actionTypeId)) {
19468        return RENDER_PLUGIN;
19469    }
19470}
19471function getStyleProp(renderType, actionTypeId) {
19472    return renderType === RENDER_STYLE ? actionTypeId.replace('STYLE_', '').toLowerCase() : null;
19473}
19474function renderHTMLElement(element, refState, actionState, eventId, actionItem, styleProp, elementApi, renderType, pluginInstance) {
19475    switch(renderType){
19476        case RENDER_TRANSFORM:
19477            {
19478                return renderTransform(element, refState, actionState, actionItem, elementApi);
19479            }
19480        case RENDER_STYLE:
19481            {
19482                return renderStyle(element, refState, actionState, actionItem, styleProp, elementApi);
19483            }
19484        case RENDER_GENERAL:
19485            {
19486                return renderGeneral(element, actionItem, elementApi);
19487            }
19488        case RENDER_PLUGIN:
19489            {
19490                const { actionTypeId } = actionItem;
19491                if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) {
19492                    return (0, _IX2VanillaPlugins.renderPlugin)(actionTypeId)(pluginInstance, refState, actionItem);
19493                }
19494            }
19495    }
19496}
19497const transformDefaults = {
19498    [TRANSFORM_MOVE]: Object.freeze({
19499        xValue: 0,
19500        yValue: 0,
19501        zValue: 0
19502    }),
19503    [TRANSFORM_SCALE]: Object.freeze({
19504        xValue: 1,
19505        yValue: 1,
19506        zValue: 1
19507    }),
19508    [TRANSFORM_ROTATE]: Object.freeze({
19509        xValue: 0,
19510        yValue: 0,
19511        zValue: 0
19512    }),
19513    [TRANSFORM_SKEW]: Object.freeze({
19514        xValue: 0,
19515        yValue: 0
19516    })
19517};
19518const filterDefaults = Object.freeze({
19519    blur: 0,
19520    'hue-rotate': 0,
19521    invert: 0,
19522    grayscale: 0,
19523    saturate: 100,
19524    sepia: 0,
19525    contrast: 100,
19526    brightness: 100
19527});
19528const fontVariationDefaults = Object.freeze({
19529    wght: 0,
19530    opsz: 0,
19531    wdth: 0,
19532    slnt: 0
19533});
19534// @ts-expect-error - TS7006 - Parameter 'filterType' implicitly has an 'any' type. | TS7006 - Parameter 'actionItemConfig' impl
19534icitly has an 'any' type.
19535const getFilterUnit = (filterType, actionItemConfig)=>{
19536    const filter = (0, _findLast.default)(actionItemConfig.filters, ({ type })=>type === filterType);
19537    if (filter && filter.unit) {
19538        return filter.unit;
19539    }
19540    switch(filterType){
19541        case 'blur':
19542            return 'px';
19543        case 'hue-rotate':
19544            return 'deg';
19545        default:
19546            return '%';
19547    }
19548};
19549const transformKeys = Object.keys(transformDefaults);
19550function renderTransform(element, refState, actionState, actionItem, elementApi) {
19551    const newTransform = transformKeys.map((actionTypeId)=>{
19552        // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ readonly TRANSFORM_MOVE: Readonly<{ xValue: 0; yValue: 0; zValue: 0; }>; readonly TRANSFORM_SCALE: Readonly<{ xValue: 1; yValue: 1; zValue: 1; }>; readonly TRANSFORM_ROTATE: Readonly<{ xValue: 0; yValue: 0; zValue: 0; }>; readonly TRANSFORM_SKEW: Readonly<...>; }'.
19553        const defaults = transformDefaults[actionTypeId];
19554        const { xValue = defaults.xValue, yValue = defaults.yValue, zValue = defaults.zValue, xUnit = '', yUnit = '', zUnit = '' } = refState[actionTypeId] || {};
19555        switch(actionTypeId){
19556            case TRANSFORM_MOVE:
19557                return `${TRANSLATE_3D}(${xValue}${xUnit}, ${yValue}${yUnit}, ${zValue}${zUnit})`;
19558            case TRANSFORM_SCALE:
19559                return `${SCALE_3D}(${xValue}${xUnit}, ${yValue}${yUnit}, ${zValue}${zUnit})`;
19560            case TRANSFORM_ROTATE:
19561                return `${ROTATE_X}(${xValue}${xUnit}) ${ROTATE_Y}(${yValue}${yUnit}) ${ROTATE_Z}(${zValue}${zUnit})`;
19562            case TRANSFORM_SKEW:
19563                return `${SKEW}(${xValue}${xUnit}, ${yValue}${yUnit})`;
19564            default:
19565                return '';
19566        }
19567    }).join(' ');
19568    const { setStyle } = elementApi;
19569    addWillChange(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, elementApi);
19570    setStyle(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, newTransform);
19571    // Set transform-style: preserve-3d
19572    if (hasDefined3dTransform(actionItem, actionState)) {
19573        setStyle(element, _IX2BrowserSupport.TRANSFORM_STYLE_PREFIXED, PRESERVE_3D);
19574    }
19575}
19576function renderFilter(element, actionState, // @ts-expect-error - TS7006 - Parameter 'actionItemConfig' implicitly has an 'any' type.
19577actionItemConfig, elementApi) {
19578    const filterValue = (0, _reduce.default)(actionState, (result, value, type)=>`${result} ${type}(${value}${getFilterUnit(type, actionItemConfig)})`, '');
19579    const { setStyle } = elementApi;
19580    addWillChange(element, FILTER, elementApi);
19581    setStyle(element, FILTER, filterValue);
19582}
19583function renderFontVariation(element, actionState, actionItemConfig, elementApi) {
19584    const fontVariationValue = (0, _reduce.default)(actionState, (result, value, type)=>{
19585        // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'.
19586        result.push(`"${type}" ${value}`);
19587        return result;
19588    }, []).join(', ');
19589    const { setStyle } = elementApi;
19590    addWillChange(element, FONT_VARIATION_SETTINGS, elementApi);
19591    setStyle(element, FONT_VARIATION_SETTINGS, fontVariationValue);
19592}
19593// @ts-expect-error - TS7031 - Binding element 'actionTypeId' implicitly has an 'any' type. | TS7031 - Binding element 'xValue' implicitly has an 'any' type. | TS7031 - Binding element 'yValue' implicitly has an 'any' type. | TS7031 - Binding element 'zValue' implicitly has an 'any' type.
19594function hasDefined3dTransform({ actionTypeId }, { xValue, yValue, zValue }) {
19595    // TRANSLATE_Z
19596    return actionTypeId === TRANSFORM_MOVE && zValue !== undefined || // SCALE_Z
19597    actionTypeId === TRANSFORM_SCALE && zValue !== undefined || // ROTATE_X or ROTATE_Y
19598    actionTypeId === TRANSFORM_ROTATE && (xValue !== undefined || yValue !== undefined);
19599}
19600const paramCapture = '\\(([^)]+)\\)';
19601const rgbValidRegex = /^rgb/;
19602const rgbMatchRegex = RegExp(`rgba?${paramCapture}`);
19603function getFirstMatch(regex, value) {
19604    const match = regex.exec(value);
19605    return match ? match[1] : '';
19606}
19607// @ts-expect-error - TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'actionTypeId' implicitly has an 'any' type. | TS7031 - Binding element 'computedStyle' implicitly has an 'any' type. | TS7031 - Binding element 'getStyle' implicitly has an 'any' type.
19608function parseColor({ element, actionTypeId, computedStyle, getStyle }) {
19609    // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Readonly<{ STYLE_BACKGROUND_COLOR: "backgroundColor"; STYLE_BORDER: "borderColor"; STYLE_TEXT_COLOR: "color"; }>'.
19610    const prop = colorStyleProps[actionTypeId];
19611    const inlineValue = getStyle(element, prop);
19612    const value = rgbValidRegex.test(inlineValue) ? inlineValue : computedStyle[prop];
19613    // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
19614    const matches = getFirstMatch(rgbMatchRegex, value).split(COMMA_DELIMITER);
19615    return {
19616        // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
19617        rValue: (0, _defaultTo.default)(parseInt(matches[0], 10), 255),
19618        // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
19619        gValue: (0, _defaultTo.default)(parseInt(matches[1], 10), 255),
19620        // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
19621        bValue: (0, _defaultTo.default)(parseInt(matches[2], 10), 255),
19622        // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
19623        aValue: (0, _defaultTo.default)(parseFloat(matches[3]), 1)
19624    };
19625}
19626function renderStyle(element, refState, actionState, actionItem, styleProp, elementApi) {
19627    const { setStyle } = elementApi;
19628    switch(actionItem.actionTypeId){
19629        case STYLE_SIZE:
19630            {
19631                let { widthUnit = '', heightUnit = '' } = actionItem.config;
19632                const { widthValue, heightValue } = actionState;
19633                if (widthValue !== undefined) {
19634                    if (widthUnit === AUTO) {
19635                        widthUnit = 'px';
19636                    }
19637                    addWillChange(element, WIDTH, elementApi);
19638                    setStyle(element, WIDTH, widthValue + widthUnit);
19639                }
19640                if (heightValue !== undefined) {
19641                    if (heightUnit === AUTO) {
19642                        heightUnit = 'px';
19643                    }
19644                    addWillChange(element, HEIGHT, elementApi);
19645                    setStyle(element, HEIGHT, heightValue + heightUnit);
19646                }
19647                break;
19648            }
19649        case STYLE_FILTER:
19650            {
19651                renderFilter(element, actionState, actionItem.config, elementApi);
19652                break;
19653            }
19654        case STYLE_FONT_VARIATION:
19655            {
19656                renderFontVariation(element, actionState, actionItem.config, elementApi);
19657                break;
19658            }
19659        case STYLE_BACKGROUND_COLOR:
19660        case STYLE_BORDER:
19661        case STYLE_TEXT_COLOR:
19662            {
19663                const prop = colorStyleProps[actionItem.actionTypeId];
19664                const rValue = Math.round(actionState.rValue);
19665                const gValue = Math.round(actionState.gValue);
19666                const bValue = Math.round(actionState.bValue);
19667                const aValue = actionState.aValue;
19668                addWillChange(element, prop, elementApi);
19669                setStyle(element, prop, aValue >= 1 ? `rgb(${rValue},${gValue},${bValue})` : `rgba(${rValue},${gValue},${bValue},${aValue})`);
19670                break;
19671            }
19672        default:
19673            {
19674                // @ts-expect-error - TS2339 - Property 'unit' does not exist on type '{ delay: number; easing: IX2EasingType; duration: number; target: ActionItemTargetType; xValue: number | undefined; yValue: number | undefined; zValue: number | undefined; xUnit: "%" | ... 4 more ... | "VW"; yUnit: "%" | ... 4 more ... | "VW"; zUnit: "%" | ... 4 more ... | "VW"; } | ... 5 more ... | { ...; }'.
19675                const { unit = '' } = actionItem.config;
19676                addWillChange(element, styleProp, elementApi);
19677                setStyle(element, styleProp, actionState.value + unit);
19678                break;
19679            }
19680    }
19681}
19682function renderGeneral(element, actionItem, elementApi) {
19683    const { setStyle } = elementApi;
19684    switch(actionItem.actionTypeId){
19685        case GENERAL_DISPLAY:
19686            {
19687                const { value } = actionItem.config;
19688                if (value === FLEX && _IX2BrowserSupport.IS_BROWSER_ENV) {
19689                    setStyle(element, DISPLAY, _IX2BrowserSupport.FLEX_PREFIXED);
19690                } else {
19691                    setStyle(element, DISPLAY, value);
19692                }
19693                return;
19694            }
19695    }
19696}
19697// @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. | TS7006 - Parameter 'prop' implicitly has an 'any' type.
19698function addWillChange(element, prop, elementApi) {
19699    if (!_IX2BrowserSupport.IS_BROWSER_ENV) {
19700        return;
19701    }
19702    const validProp = willChangeProps[prop];
19703    if (!validProp) {
19704        return;
19705    }
19706    const { getStyle, setStyle } = elementApi;
19707    const value = getStyle(element, WILL_CHANGE);
19708    if (!value) {
19709        setStyle(element, WILL_CHANGE, validProp);
19710        return;
19711    }
19712    const values = value.split(COMMA_DELIMITER).map(trim);
19713    if (values.indexOf(validProp) === -1) {
19714        setStyle(element, WILL_CHANGE, values.concat(validProp).join(COMMA_DELIMITER));
19715    }
19716}
19717// @ts-expect-error - TS7006 - Parameter 'prop' implicitly has an 'any' type.
19718function removeWillChange(element, prop, elementApi) {
19719    if (!_IX2BrowserSupport.IS_BROWSER_ENV) {
19720        return;
19721    }
19722    const validProp = willChangeProps[prop];
19723    if (!validProp) {
19724        return;
19725    }
19726    const { getStyle, setStyle } = elementApi;
19727    const value = getStyle(element, WILL_CHANGE);
19728    if (!value || value.indexOf(validProp) === -1) {
19729        return;
19730    }
19731    setStyle(element, WILL_CHANGE, value.split(COMMA_DELIMITER).map(trim)// @ts-expect-error - TS7006 - Parameter 'v' impl
19731icitly has an 'any' type.
19732    .filter((v)=>v !== validProp).join(COMMA_DELIMITER));
19733}
19734function clearAllStyles({ store, elementApi }) {
19735    const { ixData } = store.getState();
19736    const { events = {}, actionLists = {} } = ixData;
19737    Object.keys(events).forEach((eventId)=>{
19738        const event = events[eventId];
19739        const { config } = event.action;
19740        const { actionListId } = config;
19741        const actionList = actionLists[actionListId];
19742        if (actionList) {
19743            clearActionListStyles({
19744                actionList,
19745                event,
19746                elementApi
19747            });
19748        }
19749    });
19750    Object.keys(actionLists).forEach((actionListId)=>{
19751        // @ts-expect-error - TS2345 - Argument of type '{ actionList: any; elementApi: any; }' is not assignable to parameter of type '{ actionList?: {} | undefined; event: any; elementApi: any; }'.
19752        clearActionListStyles({
19753            actionList: actionLists[actionListId],
19754            elementApi
19755        });
19756    });
19757}
19758// @ts-expect-error - TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'elementApi' implicitly has an 'any' type.
19759function clearActionListStyles({ actionList = {}, event, elementApi }) {
19760    // @ts-expect-error - TS2339 - Property 'actionItemGroups' does not exist on type '{}'. | TS2339 - Property 'continuousParameterGroups' does not exist on type '{}'.
19761    const { actionItemGroups, continuousParameterGroups } = actionList;
19762    actionItemGroups && // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type.
19763    actionItemGroups.forEach((actionGroup)=>{
19764        clearActionGroupStyles({
19765            actionGroup,
19766            event,
19767            elementApi
19768        });
19769    });
19770    continuousParameterGroups && // @ts-expect-error - TS7006 - Parameter 'paramGroup' implicitly has an 'any' type.
19771    continuousParameterGroups.forEach((paramGroup)=>{
19772        const { continuousActionGroups } = paramGroup;
19773        // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type.
19774        continuousActionGroups.forEach((actionGroup)=>{
19775            clearActionGroupStyles({
19776                actionGroup,
19777                event,
19778                elementApi
19779            });
19780        });
19781    });
19782}
19783// @ts-expect-error - TS7031 - Binding element 'actionGroup' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'elementApi' implicitly has an 'any' type.
19784function clearActionGroupStyles({ actionGroup, event, elementApi }) {
19785    const { actionItems } = actionGroup;
19786    // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type.
19787    actionItems.forEach((actionItem)=>{
19788        const { actionTypeId, config } = actionItem;
19789        let clearElement;
19790        if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) {
19791            // @ts-expect-error - TS7006 - Parameter 'ref' implicitly has an 'any' type.
19792            clearElement = (ref)=>(0, _IX2VanillaPlugins.clearPlugin)(actionTypeId)(ref, actionItem);
19793        } else {
19794            clearElement = processElementByType({
19795                effect: clearStyleProp,
19796                actionTypeId,
19797                elementApi
19798            });
19799        }
19800        getAffectedElements({
19801            config,
19802            event,
19803            elementApi
19804        }
19804).forEach(clearElement);
19805    });
19806}
19807function cleanupHTMLElement(element, actionItem, elementApi) {
19808    const { setStyle, getStyle } = elementApi;
19809    const { actionTypeId } = actionItem;
19810    if (actionTypeId === STYLE_SIZE) {
19811        const { config } = actionItem;
19812        if (config.widthUnit === AUTO) {
19813            setStyle(element, WIDTH, '');
19814        }
19815        if (config.heightUnit === AUTO) {
19816            setStyle(element, HEIGHT, '');
19817        }
19818    }
19819    if (getStyle(element, WILL_CHANGE)) {
19820        processElementByType({
19821            effect: removeWillChange,
19822            actionTypeId,
19823            elementApi
19824        })(element);
19825    }
19826}
19827const processElementByType = ({ effect, actionTypeId, elementApi })=>// @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type.
19828    (element)=>{
19829        switch(actionTypeId){
19830            case TRANSFORM_MOVE:
19831            case TRANSFORM_SCALE:
19832            case TRANSFORM_ROTATE:
19833            case TRANSFORM_SKEW:
19834                effect(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, elementApi);
19835                break;
19836            case STYLE_FILTER:
19837                effect(element, FILTER, elementApi);
19838                break;
19839            case STYLE_FONT_VARIATION:
19840                effect(element, FONT_VARIATION_SETTINGS, elementApi);
19841                break;
19842            case STYLE_OPACITY:
19843                effect(element, OPACITY, elementApi);
19844                break;
19845            case STYLE_SIZE:
19846                effect(element, WIDTH, elementApi);
19847                effect(element, HEIGHT, elementApi);
19848                break;
19849            case STYLE_BACKGROUND_COLOR:
19850            case STYLE_BORDER:
19851            case STYLE_TEXT_COLOR:
19852                effect(element, colorStyleProps[actionTypeId], elementApi);
19853                break;
19854            case GENERAL_DISPLAY:
19855                effect(element, DISPLAY, elementApi);
19856                break;
19857        }
19858    };
19859// @ts-expect-error - TS7006 - Parameter 'prop' implicitly has an 'any' type.
19860function clearStyleProp(element, prop, elementApi) {
19861    const { setStyle } = elementApi;
19862    removeWillChange(element, prop, elementApi);
19863    setStyle(element, prop, '');
19864    // Clear transform-style: preserve-3d
19865    if (prop === _IX2BrowserSupport.TRANSFORM_PREFIXED) {
19866        setStyle(element, _IX2BrowserSupport.TRANSFORM_STYLE_PREFIXED, '');
19867    }
19868}
19869function getMaxDurationItemIndex(actionItems) {
19870    let maxDuration = 0;
19871    let resultIndex = 0;
19872    // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type.
19873    actionItems.forEach((actionItem, index)=>{
19874        const { config } = actionItem;
19875        const total = config.delay + config.duration;
19876        if (total >= maxDuration) {
19877            maxDuration = total;
19878            resultIndex = index;
19879        }
19880    });
19881    return resultIndex;
19882}
19883function getActionListProgress(actionList, instance) {
19884    const { actionItemGroups, useFirstGroupAsInitialState } = actionList;
19885    const { actionItem: instanceItem, verboseTimeElapsed = 0 } = instance;
19886    let totalDuration = 0;
19887    let elapsedDuration = 0;
19888    // @ts-expect-error - TS7006 - Parameter 'group' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type.
19889    actionItemGroups.forEach((group, index)=>{
19890        if (useFirstGroupAsInitialState && index === 0) {
19891            return;
19892        }
19893        const { actionItems } = group;
19894        const carrierItem = actionItems[getMaxDurationItemIndex(actionItems)];
19895        const { config, actionTypeId } = carrierItem;
19896        if (instanceItem.id === carrierItem.id) {
19897            elapsedDuration = totalDuration + verboseTimeElapsed;
19898        }
19899        const duration = getRenderType(actionTypeId) === RENDER_GENERAL ? 0 : config.duration;
19900        totalDuration += config.delay + duration;
19901    });
19902    return totalDuration > 0 ? (0, _IX2EasingUtils.optimizeFloat)(elapsedDuration / totalDuration) : 0;
19903}
19904function reduceListToGroup({ actionList, actionItemId, rawData }) {
19905    // @ts-expect-error - FIXME - TS2339 - Property 'actionItemGroups' does not exist on type 'ActionListType'.
19906    const { actionItemGroups, continuousParameterGroups } = actionList;
19907    const newActionItems = [];
19908    const takeItemUntilMatch = (actionItem)=>{
19909        newActionItems.push((0, _timm.mergeIn)(actionItem, [
19910            'config'
19911        ], {
19912            delay: 0,
19913            duration: 0
19914        }));
19915        return actionItem.id === actionItemId;
19916    };
19917    actionItemGroups && actionItemGroups.some(({ actionItems })=>{
19918        return actionItems.some(takeItemUntilMatch);
19919    });
19920    continuousParameterGroups && continuousParameterGroups.some((paramGroup)=>{
19921        const { continuousActionGroups } = paramGroup;
19922        return continuousActionGroups.some(({ actionItems })=>{
19923            return actionItems.some(takeItemUntilMatch);
19924        });
19925    });
19926    return (0, _timm.setIn)(rawData, [
19927        'actionLists'
19928    ], {
19929        [actionList.id]: {
19930            id: actionList.id,
19931            actionItemGroups: [
19932                {
19933                    actionItems: newActionItems
19934                }
19935            ]
19936        }
19937    });
19938}
19939function shouldNamespaceEventParameter(eventTypeId, { basedOn }) {
19940    return eventTypeId === _sharedconstants.EventTypeConsts.SCROLLING_IN_VIEW && (basedOn === _sharedconstants.EventBasedOn.ELEMENT || basedOn == null) || eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_MOVE && basedOn === _sharedconstants.EventBasedOn.ELEMENT;
19941}
19942function getNamespacedParameterId(eventStateKey, continuousParameterGroupId) {
19943    const namespacedParameterId = eventStateKey + COLON_DELIMITER + continuousParameterGroupId;
19944    return namespacedParameterId;
19945}
19946function shouldAllowMediaQuery(mediaQueries, mediaQueryKey) {
19947    // During design mode, current media query key does not exist
19948    if (mediaQueryKey == null) {
19949        return true;
19950    }
19951    return mediaQueries.indexOf(mediaQueryKey) !== -1;
19952}
19953function mediaQueriesEqual(listA, listB) {
19954    return (0, _shallowEqual.default)(listA && listA.sort(), listB && listB.sort());
19955}
19956function stringifyTarget(target) {
19957    if (typeof target === 'string') {
19958        return target;
19959    }
19960    if (target.pluginElement && target.objectId) {
19961        return target.pluginElement + BAR_DELIMITER + target.objectId;
19962    }
19963    if (target.objectId) {
19964        return target.objectId;
19965    }
19966    const { id = '', selector = '', useEventTarget = '' } = target;
19967    return id + BAR_DELIMITER + selector + BAR_DELIMITER + useEventTarget;
19968}
19969
19970//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMlZhbmlsbGFVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgQWN0aW9uSXRlbVR5cGUsXG4gIEFjdGlvbklkLFxuICBGb250VmFyaWF0aW9uSXRlbUNvbmZpZ1R5cGUsXG4gIEZvbn
19970RWYXJpYXRpb25BY3Rpb25Db25maWdUeXBlLFxuICBFdmVudFR5cGUsXG4gIEFjdGlvbkxpc3RUeXBlLFxuICBBY3Rpb25JdGVtc1R5cGUsXG4gIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cFR5cGUsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcblxuaW1wb3J0IGRlZmF1bHRUbyBmcm9tICdsb2Rhc2gvZGVmYXVsdFRvJztcbmltcG9ydCByZWR1Y2UgZnJvbSAnbG9kYXNoL3JlZHVjZSc7XG5pbXBvcnQgZmluZExhc3QgZnJvbSAnbG9kYXNoL2ZpbmRMYXN0JztcbmltcG9ydCB7c2V0SW4sIG1lcmdlSW59IGZyb20gJ3RpbW0nO1xuaW1wb3J0IHtcbiAgRXZlbnRUeXBlQ29uc3RzLFxuICBFdmVudEFwcGxpZXNUbyxcbiAgRXZlbnRCYXNlZE9uLFxuICBBY3Rpb25UeXBlQ29uc3RzLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi9zaGFsbG93RXF1YWwnO1xuXG5pbXBvcnQge29wdGltaXplRmxvYXR9IGZyb20gJy4vSVgyRWFzaW5nVXRpbHMnO1xuXG4vLyBJbXBvcnRpbmcgZGlyZWN0bHkgdG8gYXZvaWQgaW1wb3J0aW5nIHRoZSBlbnRpcmUgc2hhcmVkLXV0aWxzIHBhY2thZ2UuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2ViZmxvdy9wYWNrYWdlLWJvdW5kYXJpZXNcbmltcG9ydCB7bm9ybWFsaXplQ29sb3J9IGZyb20gJy4uLy4uL3NoYXJlZC11dGlscy9ub3JtYWxpemVDb2xvcic7XG5pbXBvcnQge1xuICBpc1BsdWdpblR5cGUsXG4gIGdldFBsdWdpbkNvbmZpZyxcbiAgZ2V0UGx1Z2luT3JpZ2luLFxuICBnZXRQbHVnaW5EZXN0aW5hdGlvbixcbiAgcmVuZGVyUGx1Z2luLFxuICBjbGVhclBsdWdpbixcbn0gZnJvbSAnLi9JWDJWYW5pbGxhUGx1Z2lucyc7XG5cbmltcG9ydCB7XG4gIElTX0JST1dTRVJfRU5WLFxuICBGTEVYX1BSRUZJWEVELFxuICBUUkFOU0ZPUk1fUFJFRklYRUQsXG4gIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCxcbn0gZnJvbSAnLi9JWDJCcm93c2VyU3VwcG9ydCc7XG5pbXBvcnQge1xuICB0eXBlIElYMlJhd0RhdGEsXG4gIHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZSc7XG5pbXBvcnQge0JyZWFrcG9pbnRJRH0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvc3R5bGUvdHlwZXMnO1xuXG50eXBlIFNlbGVjdG9yID0gYW55O1xuXG4vLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBhIHNoYXJlZCB0eXBlLlxudHlwZSBFbGVtZW50QXBpID0ge1xuICBnZXRTdHlsZTogKGFyZzE6IEhUTUxFbGVtZW50LCBhcmcyOiBzdHJpbmcpID0+IHN0cmluZztcbiAgc2V0U3R5bGU6IChhcmcxOiBIVE1MRWxlbWVudCwgYXJnMjogc3RyaW5nLCBhcmczOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGdldFByb3BlcnR5OiAoYXJnMTogSFRNTEVsZW1lbnQsIGFyZzI6IHN0cmluZykgPT4gbnVsbCB8IHN0cmluZztcbiAgZ2V0VmFsaWREb2N1bWVudDogKGFyZzE6IElYMlRhcmdldCkgPT4gYW55O1xuICBnZXRRdWVyeVNlbGVjdG9yOiAoYXJnMTogSVgyVGFyZ2V0KSA9PiBudWxsIHwgU2VsZWN0b3I7XG4gIC8vIFNob3VsZCB0aGVzZSBgQXJyYXlgcyBiZSBgTm9kZUxpc3Rgcz9cbiAgcXVlcnlEb2N1bWVudDogKFxuICAgIGFyZzE6IFNlbGVjdG9yLFxuICAgIGFyZzI/OiBTZWxlY3RvciB8IG51bGwgfCB1bmRlZmluZWRcbiAgKSA9PiBBcnJheTxIVE1MRWxlbWVudD47XG4gIGdldENoaWxkRWxlbWVudHM6IChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzE1IC0gVHlwZSAnTm9kZUxpc3QnIGlzIG5vdCBnZW5lcmljLlxuICAgIGFyZzE6IE5vZGVMaXN0PEhUTUxFbGVtZW50PiB8IEFycmF5PEhUTUxFbGVtZW50PlxuICApID0+IEFycmF5PEhUTUxFbGVtZW50PjtcbiAgZ2V0U2libGluZ0VsZW1lbnRzOiAoXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMxNSAtIFR5cGUgJ05vZGVMaXN0JyBpcyBub3QgZ2VuZXJpYy5cbiAgICBhcmcxOiBOb2RlTGlzdDxIVE1MRWxlbWVudD4gfCBBcnJheTxIVE1MRWxlbWVudD5cbiAgKSA9PiBBcnJheTxIVE1MRWxlbWVudD47XG5cbiAgbWF0Y2hTZWxlY3RvcjogKGFyZzE6IFNlbGVjdG9yKSA9PiAoYXJnMTogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW47XG4gIGVsZW1lbnRDb250YWluczogKGFyZzE6IEhUTUxFbGVtZW50LCBhcmcyOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgaXNTaWJsaW5nTm9kZTogKGFyZzE6IEhUTUxFbGVtZW50LCBhcmcyOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgLy8gLi4uIHdlJ3JlIG1pc3NpbmcgYSBsb3QgbW9yZSBoZXJlIC4uLjtcbn07XG5cbmNvbnN0IHtcbiAgQkFDS0dST1VORCxcbiAgVFJBTlNGT1JNLFxuICBUUkFOU0xBVEVfM0QsXG4gIFNDQUxFXzNELFxuICBST1RBVEVfWCxcbiAgUk9UQVRFX1ksXG4gIFJPVEFURV9aLFxuICBTS0VXLFxuICBQUkVTRVJWRV8zRCxcbiAgRkxFWCxcbiAgT1BBQ0lUWSxcbiAgRklMVEVSLFxuICBGT05UX1ZBUklBVElPTl9TRVRUSU5HUyxcbiAgV0lEVEgsXG4gIEhFSUdIVCxcbiAgQkFDS0dST1VORF9DT0xPUixcbiAgQk9SREVSX0NPTE9SLFxuICBDT0xPUixcbiAgQ0hJTERSRU4sXG4gIElNTUVESUFURV9DSElMRFJFTixcbiAgU0lCTElOR1MsXG4gIFBBUkVOVCxcbiAgRElTUExBWSxcbiAgV0lMTF9DSEFOR0UsXG4gIEFVVE8sXG4gIENPTU1BX0RFTElNSVRFUixcbiAgQ09MT05fREVMSU1JVEVSLFxuICBCQVJfREVMSU1JVEVSLFxuICBSRU5ERVJfVFJBTlNGT1JNLFxuICBSRU5ERVJfR0VORVJBTCxcbiAgUkVOREVSX1NUWUxFLFxuICBSRU5ERVJfUExVR0lOLFxufSA9IElYMkVuZ2luZUNvbnN0YW50cztcblxuY29uc3Qge1xuICBUUkFOU0ZPUk1fTU9WRSxcbiAgVFJBTlNGT1JNX1NDQUxFLFxuICBUUkFOU0ZPUk1fUk9UQVRFLFxuICBUUkFOU0ZPUk1fU0tFVyxcbiAgU1RZTEVfT1BBQ0lUWSxcbiAgU1RZTEVfRklMVEVSLFxuICBTVFlMRV9GT05UX1ZBUklBVElPTixcbiAgU1RZTEVfU0laRSxcbiAgU1RZTEVfQkFDS0dST1VORF9DT0xPUixcbiAgU1RZTEVfQk9SREVSLFxuICBTVFlMRV9URVhUX0NPTE9SLFxuICBHRU5FUkFMX0RJU1BMQVksXG4gIE9CSkVDVF9WQUxVRSxcbn0gPSBBY3Rpb25UeXBlQ29uc3RzO1xuXG5leHBvcnQge3NoYWxsb3dFcXVhbH07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3YnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCB0cmltID0gKHYpID0+IHYudHJpbSgpO1xuXG5jb25zdCBjb2xvclN0eWxlUHJvcHMgP
19970SBPYmplY3QuZnJlZXplKHtcbiAgW1NUWUxFX0JBQ0tHUk9VTkRfQ09MT1JdOiBCQUNLR1JPVU5EX0NPTE9SLFxuICBbU1RZTEVfQk9SREVSXTogQk9SREVSX0NPTE9SLFxuICBbU1RZTEVfVEVYVF9DT0xPUl06IENPTE9SLFxufSk7XG5cbmNvbnN0IHdpbGxDaGFuZ2VQcm9wcyA9IE9iamVjdC5mcmVlemUoe1xuICBbVFJBTlNGT1JNX1BSRUZJWEVEXTogVFJBTlNGT1JNLFxuICBbQkFDS0dST1VORF9DT0xPUl06IEJBQ0tHUk9VTkQsXG4gIFtPUEFDSVRZXTogT1BBQ0lUWSxcbiAgW0ZJTFRFUl06IEZJTFRFUixcbiAgW1dJRFRIXTogV0lEVEgsXG4gIFtIRUlHSFRdOiBIRUlHSFQsXG4gIFtGT05UX1ZBUklBVElPTl9TRVRUSU5HU106IEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTLFxufSk7XG5cbmNvbnN0IG9iamVjdENhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJPYmplY3RDYWNoZSgpIHtcbiAgb2JqZWN0Q2FjaGUuY2xlYXIoKTtcbn1cblxubGV0IGluc3RhbmNlQ291bnQgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc3RhbmNlSWQoKSB7XG4gIHJldHVybiAnaScgKyBpbnN0YW5jZUNvdW50Kys7XG59XG5cbmxldCBlbGVtZW50Q291bnQgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRJZChpeEVsZW1lbnRzOiBhbnksIHJlZjogYW55KSB7XG4gIC8vIFRPRE86IG9wdGltaXplIGVsZW1lbnQgbG9va3VwXG4gIGZvciAoY29uc3Qga2V5IGluIGl4RWxlbWVudHMpIHtcbiAgICBjb25zdCBpeEVsID0gaXhFbGVtZW50c1trZXldO1xuICAgIGlmIChpeEVsICYmIGl4RWwucmVmID09PSByZWYpIHtcbiAgICAgIHJldHVybiBpeEVsLmlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJ2UnICsgZWxlbWVudENvdW50Kys7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWlmeVN0YXRlKHtcbiAgZXZlbnRzLFxuICBhY3Rpb25MaXN0cyxcbiAgc2l0ZSxcbn06IFBhcnRpYWw8SVgyUmF3RGF0YT4gPSB7fSk6IHJhd0RhdGFJbXBvcnRlZFBheWxvYWQge1xuICBjb25zdCBldmVudFR5cGVNYXAgPSByZWR1Y2UoXG4gICAgZXZlbnRzLFxuICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7ZXZlbnRUeXBlSWR9ID0gZXZlbnQ7XG5cbiAgICAgIGlmICghcmVzdWx0W2V2ZW50VHlwZUlkXSkge1xuICAgICAgICByZXN1bHRbZXZlbnRUeXBlSWRdID0ge30gYXMge1trZXk6IHN0cmluZ106IEV2ZW50VHlwZX07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtldmVudFR5cGVJZF1bZXZlbnQuaWRdID0gZXZlbnQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge30gYXMgcmF3RGF0YUltcG9ydGVkUGF5bG9hZFsnaXhEYXRhJ11bJ2V2ZW50VHlwZU1hcCddXG4gICk7XG5cbiAgbGV0IG1lZGlhUXVlcmllcyA9IHNpdGUgJiYgc2l0ZS5tZWRpYVF1ZXJpZXM7XG4gIGxldCBtZWRpYVF1ZXJ5S2V5cyA9IFtdIGFzIEJyZWFrcG9pbnRJRFtdO1xuICBpZiAobWVkaWFRdWVyaWVzKSB7XG4gICAgbWVkaWFRdWVyeUtleXMgPSBtZWRpYVF1ZXJpZXMubWFwKChtcSkgPT4gbXEua2V5KTtcbiAgfSBlbHNlIHtcbiAgICBtZWRpYVF1ZXJpZXMgPSBbXTtcbiAgICBjb25zb2xlLndhcm4oYElYMiBtaXNzaW5nIG1lZGlhUXVlcmllcyBpbiBzaXRlIGRhdGFgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXhEYXRhOiB7XG4gICAgICBldmVudHMsXG4gICAgICBhY3Rpb25MaXN0cyxcbiAgICAgIGV2ZW50VHlwZU1hcCxcbiAgICAgIG1lZGlhUXVlcmllcyxcbiAgICAgIG1lZGlhUXVlcnlLZXlzLFxuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IHN0cmljdEVxdWFsID0gKGE6IGFueSwgYjogYW55KSA9PiBhID09PSBiO1xuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVN0b3JlKHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHN0b3JlLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzZWxlY3QnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHNlbGVjdCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnb25DaGFuZ2UnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIG9uQ2hhbmdlLFxuICBjb21wYXJhdG9yID0gc3RyaWN0RXF1YWwsXG59KSB7XG4gIGNvbnN0IHtnZXRTdGF0ZSwgc3Vic2NyaWJlfSA9IHN0b3JlO1xuICBjb25zdCB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShoYW5kbGVDaGFuZ2UpO1xuICBsZXQgY3VycmVudFN0YXRlID0gc2VsZWN0KGdldFN0YXRlKCkpO1xuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gc2VsZWN0KGdldFN0YXRlKCkpO1xuICAgIGlmIChuZXh0U3RhdGUgPT0gbnVsbCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb21wYXJhdG9yKG5leHRTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgY3VycmVudFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgb25DaGFuZ2UoY3VycmVudFN0YXRlLCBzdG9yZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bnN1YnNjcmliZTtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndGFyZ2V0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gbm9ybWFsaXplVGFyZ2V0KHRhcmdldCkge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHRhcmdldDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHtpZDogdGFyZ2V0fTtcbiAgfSBlbHNlIGlmICh0YXJnZXQgIT0gbnVsbCAmJiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHtpZCwgb2JqZWN0SWQsIHNlbGVjdG9yLCBzZWxlY3Rvckd1aWRzLCBhcHBsaWVzVG8sIHVzZUV2ZW50VGFyZ2V0fSA9XG4gICAgICB0YXJnZXQ7XG4gICAgcmV0dXJuIHtpZCwgb2JqZWN0SWQsIHNlbGVjdG9yLCBzZWxlY3Rvckd1aWRzLCBhcHBsaWVzVG8sIHVzZUV2ZW50VGFyZ2V0fTtcbiAgfVxuICByZXR1cm4ge307XG59XG5cbnR5cGUgSVgyVGFyZ2V0ID0gYW55OyAvLyBzZXJpYWxpemVkIElYMkV2ZW50VGFyZ2V0RGF0YVxuXG50eXBlIEFmZmVjdGVkRWxlbWVudHNQcm9wcyA9IHtcbiAgY29uZmlnOiB7XG4gICAgdGFyZ2V0OiBJWDJUYXJnZXQ7XG4gICAgdGFyZ2V0cz86IEFycmF5PElYMlRhcmdldD47XG4gIH07XG4gIGV2ZW50PzogYW55OyAvLyBzZXJpYWxpemVkIElYMkV2ZW50VHlwZTtcbiAgZXZlbnRUYXJnZXQ/OiBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGVsZW1lbnRSb290PzogSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFmZmVjdGVkRWxlbWVudHMoe1xuICBjb25maWcsXG4gIGV2ZW50LFxuICBldmVudFRhcmdldCxcbiAgZWxlbWVudFJvb3QsXG4gIGVsZW1lbnRBcGksXG59OiBBZmZlY3RlZEVsZW1lbnRzUHJvcHMpOiBBcnJheTxIVE1MRWxlbWVudCB8IGFueT4ge1xuICBpZiAoIWVsZW1lbnRBcGkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lYMiBtaXNzaW5nIGVsZW1lbnRBcGknKTtcbiAgfVxuXG4gIGNvbnN0IHt0YXJnZXRzfSA9IGNvbmZpZztcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0cykgJiYgdGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRhcmdldHMucmVkdWNlPEFycmF5PGFueT4+KFxuICAgICAgKGFjY3VtdWxhdG9yLCB0YXJnZXQpOi
19970BBcnJheTxIVE1MRWxlbWVudD4gPT5cbiAgICAgICAgYWNjdW11bGF0b3IuY29uY2F0KFxuICAgICAgICAgIGdldEFmZmVjdGVkRWxlbWVudHMoe1xuICAgICAgICAgICAgY29uZmlnOiB7dGFyZ2V0fSxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50Um9vdCxcbiAgICAgICAgICAgIGVsZW1lbnRBcGksXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBnZXRWYWxpZERvY3VtZW50LFxuICAgIGdldFF1ZXJ5U2VsZWN0b3IsXG4gICAgcXVlcnlEb2N1bWVudCxcbiAgICBnZXRDaGlsZEVsZW1lbnRzLFxuICAgIGdldFNpYmxpbmdFbGVtZW50cyxcbiAgICBtYXRjaFNlbGVjdG9yLFxuICAgIGVsZW1lbnRDb250YWlucyxcbiAgICBpc1NpYmxpbmdOb2RlLFxuICB9ID0gZWxlbWVudEFwaTtcblxuICBjb25zdCB7dGFyZ2V0fSA9IGNvbmZpZztcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7XG4gICAgaWQsXG5cbiAgICBvYmplY3RJZCxcblxuICAgIHNlbGVjdG9yLFxuXG4gICAgc2VsZWN0b3JHdWlkcyxcblxuICAgIGFwcGxpZXNUbyxcblxuICAgIHVzZUV2ZW50VGFyZ2V0LFxuICB9ID0gbm9ybWFsaXplVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKG9iamVjdElkKSB7XG4gICAgY29uc3QgcmVmID0gb2JqZWN0Q2FjaGUuaGFzKG9iamVjdElkKVxuICAgICAgPyBvYmplY3RDYWNoZS5nZXQob2JqZWN0SWQpXG4gICAgICA6IG9iamVjdENhY2hlLnNldChvYmplY3RJZCwge30pLmdldChvYmplY3RJZCk7XG4gICAgcmV0dXJuIFtyZWZdO1xuICB9XG5cbiAgaWYgKGFwcGxpZXNUbyA9PT0gRXZlbnRBcHBsaWVzVG8uUEFHRSkge1xuICAgIGNvbnN0IGRvYyA9IGdldFZhbGlkRG9jdW1lbnQoaWQpO1xuICAgIHJldHVybiBkb2MgPyBbZG9jXSA6IFtdO1xuICB9XG5cbiAgY29uc3Qgb3ZlcnJpZGVzID0gZXZlbnQ/LmFjdGlvbj8uY29uZmlnPy5hZmZlY3RlZEVsZW1lbnRzID8/IHt9O1xuICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlc1tpZCB8fCBzZWxlY3Rvcl0gfHwge307XG4gIGNvbnN0IHZhbGlkT3ZlcnJpZGUgPSBCb29sZWFuKG92ZXJyaWRlLmlkIHx8IG92ZXJyaWRlLnNlbGVjdG9yKTtcblxuICBsZXQgbGltaXRBZmZlY3RlZEVsZW1lbnRzO1xuICBsZXQgYmFzZVNlbGVjdG9yO1xuICBsZXQgZmluYWxTZWxlY3RvcjtcblxuICBjb25zdCBldmVudFRhcmdldFNlbGVjdG9yID1cbiAgICBldmVudCAmJiBnZXRRdWVyeVNlbGVjdG9yKG5vcm1hbGl6ZVRhcmdldChldmVudC50YXJnZXQpKTtcblxuICBpZiAodmFsaWRPdmVycmlkZSkge1xuICAgIGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9IG92ZXJyaWRlLmxpbWl0QWZmZWN0ZWRFbGVtZW50cztcbiAgICBiYXNlU2VsZWN0b3IgPSBldmVudFRhcmdldFNlbGVjdG9yO1xuICAgIGZpbmFsU2VsZWN0b3IgPSBnZXRRdWVyeVNlbGVjdG9yKG92ZXJyaWRlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXNzIGluIHNlbGVjdG9yR3VpZHMgYXMgd2VsbCBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGJhc2VTZWxlY3RvciA9IGZpbmFsU2VsZWN0b3IgPSBnZXRRdWVyeVNlbGVjdG9yKHtcbiAgICAgIGlkLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBzZWxlY3Rvckd1aWRzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGV2ZW50ICYmIHVzZUV2ZW50VGFyZ2V0KSB7XG4gICAgLy8gZXZlbnRUYXJnZXQgaXMgbm90IGRlZmluZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBhIGNsZWFyIHJlcXVlc3QsIHNvIGZpbmRcbiAgICAvLyBhbGwgdGFyZ2V0IGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgZGF0YSwgYW5kIHJldHVybiBhZmZlY3RlZCBlbGVtZW50cy5cbiAgICBjb25zdCBldmVudFRhcmdldHMgPVxuICAgICAgZXZlbnRUYXJnZXQgJiYgKGZpbmFsU2VsZWN0b3IgfHwgdXNlRXZlbnRUYXJnZXQgPT09IHRydWUpXG4gICAgICAgID8gW2V2ZW50VGFyZ2V0XVxuICAgICAgICA6IHF1ZXJ5RG9jdW1lbnQoZXZlbnRUYXJnZXRTZWxlY3Rvcik7XG5cbiAgICBpZiAoZmluYWxTZWxlY3Rvcikge1xuICAgICAgaWYgKHVzZUV2ZW50VGFyZ2V0ID09PSBQQVJFTlQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3RvcikuZmlsdGVyKChwYXJlbnRFbGVtZW50KSA9PlxuICAgICAgICAgIGV2ZW50VGFyZ2V0cy5zb21lKCh0YXJnZXRFbGVtZW50KSA9PlxuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5zKHBhcmVudEVsZW1lbnQsIHRhcmdldEVsZW1lbnQpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHVzZUV2ZW50VGFyZ2V0ID09PSBDSElMRFJFTikge1xuICAgICAgICByZXR1cm4gcXVlcnlEb2N1bWVudChmaW5hbFNlbGVjdG9yKS5maWx0ZXIoKGNoaWxkRWxlbWVudCkgPT5cbiAgICAgICAgICBldmVudFRhcmdldHMuc29tZSgodGFyZ2V0RWxlbWVudCkgPT5cbiAgICAgICAgICAgIGVsZW1lbnRDb250YWlucyh0YXJnZXRFbGVtZW50LCBjaGlsZEVsZW1lbnQpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHVzZUV2ZW50VGFyZ2V0ID09PSBTSUJMSU5HUykge1xuICAgICAgICByZXR1cm4gcXVlcnlEb2N1bWVudChmaW5hbFNlbGVjdG9yKS5maWx0ZXIoKHNpYmxpbmdFbGVtZW50KSA9PlxuICAgICAgICAgIGV2ZW50VGFyZ2V0cy5zb21lKCh0YXJnZXRFbGVtZW50KSA9PlxuICAgICAgICAgICAgaXNTaWJsaW5nTm9kZSh0YXJnZXRFbGVtZW50LCBzaWJsaW5nRWxlbWVudClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBldmVudFRhcmdldHM7XG4gIH1cblxuICBpZiAoYmFzZVNlbGVjdG9yID09IG51bGwgfHwgZmluYWxTZWxlY3RvciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKElTX0JST1dTRVJfRU5WICYmIGVsZW1lbnRSb290KSB7XG4gICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3RvcikuZmlsdGVyKChlbGVtZW50KSA9PlxuICAgICAgZWxlbWVudFJvb3QuY29udGFpbnMoZWxlbWVudClcbiAgICApO
199701xuICB9XG5cbiAgaWYgKGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9PT0gQ0hJTERSRU4pIHtcbiAgICByZXR1cm4gcXVlcnlEb2N1bWVudChiYXNlU2VsZWN0b3IsIGZpbmFsU2VsZWN0b3IpO1xuICB9IGVsc2UgaWYgKGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9PT0gSU1NRURJQVRFX0NISUxEUkVOKSB7XG4gICAgcmV0dXJuIGdldENoaWxkRWxlbWVudHMocXVlcnlEb2N1bWVudChiYXNlU2VsZWN0b3IpKS5maWx0ZXIoXG4gICAgICBtYXRjaFNlbGVjdG9yKGZpbmFsU2VsZWN0b3IpXG4gICAgKTtcbiAgfSBlbHNlIGlmIChsaW1pdEFmZmVjdGVkRWxlbWVudHMgPT09IFNJQkxJTkdTKSB7XG4gICAgcmV0dXJuIGdldFNpYmxpbmdFbGVtZW50cyhxdWVyeURvY3VtZW50KGJhc2VTZWxlY3RvcikpLmZpbHRlcihcbiAgICAgIG1hdGNoU2VsZWN0b3IoZmluYWxTZWxlY3RvcilcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBxdWVyeURvY3VtZW50KGZpbmFsU2VsZWN0b3IpO1xuICB9XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoe2VsZW1lbnQsIGFjdGlvbkl0ZW19KSB7XG4gIGlmICghSVNfQlJPV1NFUl9FTlYpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICBzd2l0Y2ggKGFjdGlvblR5cGVJZCkge1xuICAgIGNhc2UgU1RZTEVfU0laRTpcbiAgICBjYXNlIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6XG4gICAgY2FzZSBTVFlMRV9CT1JERVI6XG4gICAgY2FzZSBTVFlMRV9URVhUX0NPTE9SOlxuICAgIGNhc2UgR0VORVJBTF9ESVNQTEFZOlxuICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuY29uc3QgcHhWYWx1ZVJlZ2V4ID0gL3B4LztcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVycycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IGdldEZpbHRlckRlZmF1bHRzID0gKGFjdGlvblN0YXRlOiBhbnksIGZpbHRlcnMpID0+XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Jlc3VsdCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2ZpbHRlcicgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZmlsdGVycy5yZWR1Y2UoKHJlc3VsdCwgZmlsdGVyKSA9PiB7XG4gICAgaWYgKHJlc3VsdFtmaWx0ZXIudHlwZV0gPT0gbnVsbCkge1xuICAgICAgcmVzdWx0W2ZpbHRlci50eXBlXSA9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdSZWFkb25seTx7IGJsdXI6IDA7ICdodWUtcm90YXRlJzogMDsgaW52ZXJ0OiAwOyBncmF5c2NhbGU6IDA7IHNhdHVyYXRlOiAxMDA7IHNlcGlhOiAwOyBjb250cmFzdDogMTAwOyBicmlnaHRuZXNzOiAxMDA7IH0+Jy5cbiAgICAgICAgZmlsdGVyRGVmYXVsdHNbZmlsdGVyLnR5cGVdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIGFjdGlvblN0YXRlIHx8IHt9KTtcblxuY29uc3QgZ2V0Rm9udFZhcmlhdGlvbkRlZmF1bHRzID0gKFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBmb250VmFyaWF0aW9uczogQXJyYXk8Rm9udFZhcmlhdGlvbkl0ZW1Db25maWdUeXBlPlxuKSA9PlxuICBmb250VmFyaWF0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgZm9udFZhcmlhdGlvbikgPT4ge1xuICAgIGlmIChyZXN1bHRbZm9udFZhcmlhdGlvbi50eXBlXSA9PSBudWxsKSB7XG4gICAgICByZXN1bHRbZm9udFZhcmlhdGlvbi50eXBlXSA9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ3N0cmluZycgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdSZWFkb25seTx7IHdnaHQ6IDA7IG9wc3o6IDA7IHdkdGg6IDA7IHNsbnQ6IDA7IH0+Jy5cbiAgICAgICAgZm9udFZhcmlhdGlvbkRlZmF1bHRzW2ZvbnRWYXJpYXRpb24udHlwZV0gfHxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdkZWZhdWx0VmFsdWUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0ZvbnRWYXJpYXRpb25JdGVtQ29uZmlnVHlwZScuXG4gICAgICAgIGZvbnRWYXJpYXRpb24uZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgYWN0aW9uU3RhdGUgfHwge30pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zdGFuY2VPcmlnaW4oXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuXG4gIHJlZlN0YXRlID0ge30sXG4gIGNvbXB1dGVkU3R5bGU6XG4gICAgfCB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICAgIH1cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZCA9IHt9LFxuICBhY3Rpb25JdGVtOiBBY3Rpb25JdGVtVHlwZSxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaVxuKSB7XG4gIGNvbnN0IHtnZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICAvLyBGbG93IEhhY2s6IFBhc3NpbmcgYWN0aW9uVHlwZUlkIHRvIGlzUGx1Z2luVHlwZSBhbmQgdGhlbiB0cnlpbmdcbiAgLy8gdG8gZG8gdHlwZSByZWZpbmVtZW50IHVzaW5nIHRoZSBzYW1lIHZhcmlhYmxlIHZpYSBhIHN3aXRjaCBzdGF0ZW1lbnRcbiAgLy8gYnJlYWtzIGRvd24uIFRoaXMgaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB3ZSBjYW4gdXNlIHR5cGUgcmVmaW5lbWVudC5cbiAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuXG4gIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09Q
19970QUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgXCJTVFlMRV9CT1JERVJcIiB8IFwiU1RZTEVfVEVYVF9DT0xPUlwiIHwgXCJQTFVHSU5fTE9UVElFXCIgfCBcIkdFTkVSQUxfRElTUExBWVwiJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnUGx1Z2luVHlwZScuIHwgVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09QQUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgXCJTVFlMRV9CT1JERVJcIiB8IFwiU1RZTEVfVEVYVF9DT0xPUlwiIHwgXCJQTFVHSU5fTE9UVElFXCIgfCBcIkdFTkVSQUxfRElTUExBWVwiJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3t9Jy5cbiAgICByZXR1cm4gZ2V0UGx1Z2luT3JpZ2luKGFjdGlvblR5cGVJZCkocmVmU3RhdGVbYWN0aW9uVHlwZUlkXSwgYWN0aW9uSXRlbSk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICBjYXNlIFRSQU5TRk9STV9ST1RBVEU6XG4gICAgY2FzZSBUUkFOU0ZPUk1fU0tFVzoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnXCJUUkFOU0ZPUk1fTU9WRVwiIHwgXCJUUkFOU0ZPUk1fU0NBTEVcIiB8IFwiVFJBTlNGT1JNX1JPVEFURVwiIHwgXCJUUkFOU0ZPUk1fU0tFV1wiJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3t9Jy5cbiAgICAgICAgcmVmU3RhdGVbYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWRdIHx8XG4gICAgICAgIHRyYW5zZm9ybURlZmF1bHRzW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9GSUxURVI6XG4gICAgICByZXR1cm4gZ2V0RmlsdGVyRGVmYXVsdHMoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ1wiU1RZTEVfRklMVEVSXCInIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAne30nLlxuICAgICAgICByZWZTdGF0ZVthY3Rpb25JdGVtLmFjdGlvblR5cGVJZF0sXG4gICAgICAgIGFjdGlvbkl0ZW0uY29uZmlnLmZpbHRlcnNcbiAgICAgICk7XG4gICAgY2FzZSBTVFlMRV9GT05UX1ZBUklBVElPTjpcbiAgICAgIHJldHVybiBnZXRGb250VmFyaWF0aW9uRGVmYXVsdHMoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ1wiU1RZTEVfRk9OVF9WQVJJQVRJT05cIicgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7fScuXG4gICAgICAgIHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXSxcbiAgICAgICAgYWN0aW9uSXRlbS5jb25maWcuZm9udFZhcmlhdGlvbnNcbiAgICAgICk7XG4gICAgY2FzZSBTVFlMRV9PUEFDSVRZOlxuICAgICAgcmV0dXJuIHt2YWx1ZTogZGVmYXVsdFRvKHBhcnNlRmxvYXQoZ2V0U3R5bGUoZWxlbWVudCwgT1BBQ0lUWSkpLCAxLjApfTtcbiAgICBjYXNlIFNUWUxFX1NJWkU6IHtcbiAgICAgIGNvbnN0IGlubGluZVdpZHRoID0gZ2V0U3R5bGUoZWxlbWVudCwgV0lEVEgpO1xuICAgICAgY29uc3QgaW5saW5lSGVpZ2h0ID0gZ2V0U3R5bGUoZWxlbWVudCwgSEVJR0hUKTtcbiAgICAgIGxldCB3aWR0aFZhbHVlO1xuICAgICAgbGV0IGhlaWdodFZhbHVlO1xuICAgICAgLy8gV2hlbiBkZXN0aW5hdGlvbiB1bml0IGlzICdBVVRPJywgZW5zdXJlIG9yaWdpbiB2YWx1ZXMgYXJlIGluIHB4XG4gICAgICBpZiAoYWN0aW9uSXRlbS5jb25maWcud2lkdGhVbml0ID09PSBBVVRPKSB7XG4gICAgICAgIHdpZHRoVmFsdWUgPSBweFZhbHVlUmVnZXgudGVzdChpbmxpbmVXaWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQoaW5saW5lV2lkdGgpXG4gICAgICAgICAgOiAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0NyAtICdjb21wdXRlZFN0eWxlJyBpcyBwb3NzaWJseSAnbnVsbCcuXG4gICAgICAgICAgICBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUud2lkdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhWYWx1ZSA9IGRlZmF1bHRUbyhcbiAgICAgICAgICBwYXJzZUZsb2F0KGlubGluZVdpZHRoKSxcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0NyAtICdjb21wdXRlZFN0eWxlJyBpcyBwb3NzaWJseSAnbnVsbCcuXG4gICAgICAgICAgcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLndpZHRoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbkl0ZW0uY29uZmlnLmhlaWdodFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgaGVpZ2h0VmFsdWUgPSBweFZhbHVlUmVnZXgudGVzdChpbmxpbmVIZWlnaHQpXG4gICAgICAgICAgPyBwYXJzZUZsb2F0KGlubGluZUhlaWdodClcbiAgICAgICAgICA6IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ3IC0gJ2NvbXB1dGVkU3R5bGUnIGlzIHBvc3NpYmx5ICdudWxsJy5cbiAgICAgICAgICAgIHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5oZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVpZ2h0VmFsdWUgPSBkZWZhdWx0VG8oXG4gICAgICAgICAgcGFyc2VGbG9hdChpbmxpbmVIZWlnaHQpLFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ3IC0gJ2NvbXB1dGVkU3R5bGUnIGlzIHBvc3NpYmx5ICdudWxsJy5cbiAgICAgICAgICBwYXJzZU
19970Zsb2F0KGNvbXB1dGVkU3R5bGUuaGVpZ2h0KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGhWYWx1ZSxcbiAgICAgICAgaGVpZ2h0VmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6XG4gICAgY2FzZSBTVFlMRV9CT1JERVI6XG4gICAgY2FzZSBTVFlMRV9URVhUX0NPTE9SOlxuICAgICAgcmV0dXJuIHBhcnNlQ29sb3Ioe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBhY3Rpb25UeXBlSWQ6IGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkLFxuICAgICAgICBjb21wdXRlZFN0eWxlLFxuICAgICAgICBnZXRTdHlsZSxcbiAgICAgIH0pO1xuICAgIGNhc2UgR0VORVJBTF9ESVNQTEFZOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDcgLSAnY29tcHV0ZWRTdHlsZScgaXMgcG9zc2libHkgJ251bGwnLlxuICAgICAgICB2YWx1ZTogZGVmYXVsdFRvKGdldFN0eWxlKGVsZW1lbnQsIERJU1BMQVkpLCBjb21wdXRlZFN0eWxlLmRpc3BsYXkpLFxuICAgICAgfTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYE9CSkVDVF9WQUxVRWAgaXMgbm90IGFuIGV4cGVjdGVkIGBhY3Rpb25UeXBlSWRgXG4gICAgY2FzZSBPQkpFQ1RfVkFMVUU6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdhbnknIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAne30nLiB8IFRTMjMzOSAtIFByb3BlcnR5ICdhY3Rpb25UeXBlSWQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICAgIHJldHVybiByZWZTdGF0ZVthY3Rpb25JdGVtLmFjdGlvblR5cGVJZF0gfHwge3ZhbHVlOiAwfTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBBcyBmYXIgYXMgdGhlIHR5cGUgc3lzdGVtIGNhbiB0ZWxsLCB3ZSdyZSBtaXNzaW5nIGEgaGFuZGxlciBmb3JcbiAgICAgIC8vIFBMVUdJTl9MT1RUSUUuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IGBpc1BsdWdpblR5cGVgIGFib3ZlLlxuICAgICAgLy9cbiAgICAgIC8qOjogKGFjdGlvbkl0ZW06IGVtcHR5KTsgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAncmVzdWx0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgcmVkdWNlRmlsdGVycyA9IChyZXN1bHQsIGZpbHRlcikgPT4ge1xuICBpZiAoZmlsdGVyKSB7XG4gICAgcmVzdWx0W2ZpbHRlci50eXBlXSA9IGZpbHRlci52YWx1ZSB8fCAwO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCByZWR1Y2VGb250VmFyaWF0aW9ucyA9IChcbiAgcmVzdWx0OiBSZWNvcmQ8YW55LCBhbnk+LFxuICBmb250VmFyaWF0aW9uOlxuICAgIHwgRm9udFZhcmlhdGlvbkl0ZW1Db25maWdUeXBlXG4gICAgfCB7XG4gICAgICAgIGlkOiBudWxsIHwgc3RyaW5nO1xuICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBudW1iZXI7XG4gICAgICB9XG4pID0+IHtcbiAgaWYgKGZvbnRWYXJpYXRpb24pIHtcbiAgICByZXN1bHRbZm9udFZhcmlhdGlvbi50eXBlXSA9IGZvbnRWYXJpYXRpb24udmFsdWUgfHwgMDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEl0ZW1Db25maWdCeUtleSA9IChcbiAgYWN0aW9uVHlwZUlkOiBhbnksXG4gIGtleTogYW55LFxuICBjb25maWc6IGFueVxuKSA9PiB7XG4gIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKSkge1xuICAgIHJldHVybiBnZXRQbHVnaW5Db25maWcoYWN0aW9uVHlwZUlkKShjb25maWcsIGtleSk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvblR5cGVJZCkge1xuICAgIGNhc2UgU1RZTEVfRklMVEVSOiB7XG4gICAgICBjb25zdCBmaWx0ZXIgPSBmaW5kTGFzdChjb25maWcuZmlsdGVycywgKHt0eXBlfSkgPT4gdHlwZSA9PT0ga2V5KTtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyBmaWx0ZXIudmFsdWUgOiAwO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB7XG4gICAgICBjb25zdCBmb250VmFyaWF0aW9uID0gZmluZExhc3QoXG4gICAgICAgIGNvbmZpZy5mb250VmFyaWF0aW9ucyxcbiAgICAgICAgKHt0eXBlfSkgPT4gdHlwZSA9PT0ga2V5XG4gICAgICApO1xuICAgICAgcmV0dXJuIGZvbnRWYXJpYXRpb24gPyBmb250VmFyaWF0aW9uLnZhbHVlIDogMDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlc3RpbmF0aW9uVmFsdWVzKHtcbiAgZWxlbWVudCxcbiAgYWN0aW9uSXRlbSxcbiAgZWxlbWVudEFwaSxcbn06IHtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGFjdGlvbkl0ZW06IEFjdGlvbkl0ZW1UeXBlO1xuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpO1xufSkge1xuICBpZiAoaXNQbHVnaW5UeXBlKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCIgfCBcIlNUWUxFX09Q
19970QUNJVFlcIiB8IFwiU1RZTEVfU0laRVwiIHwgXCJTVFlMRV9GSUxURVJcIiB8IFwiU1RZTEVfRk9OVF9WQVJJQVRJT05cIiB8IFwiU1RZTEVfQkFDS0dST1VORF9DT0xPUlwiIHwgXCJTVFlMRV9CT1JERVJcIiB8IFwiU1RZTEVfVEVYVF9DT0xPUlwiIHwgXCJQTFVHSU5fTE9UVElFXCIgfCBcIkdFTkVSQUxfRElTUExBWVwiJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnUGx1Z2luVHlwZScuXG4gICAgcmV0dXJuIGdldFBsdWdpbkRlc3RpbmF0aW9uKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKShhY3Rpb25JdGVtLmNvbmZpZyk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICBjYXNlIFRSQU5TRk9STV9ST1RBVEU6XG4gICAgY2FzZSBUUkFOU0ZPUk1fU0tFVzoge1xuICAgICAgY29uc3Qge3hWYWx1ZSwgeVZhbHVlLCB6VmFsdWV9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICByZXR1cm4ge3hWYWx1ZSwgeVZhbHVlLCB6VmFsdWV9O1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX1NJWkU6IHtcbiAgICAgIGNvbnN0IHtnZXRTdHlsZSwgc2V0U3R5bGUsIGdldFByb3BlcnR5fSA9IGVsZW1lbnRBcGk7XG4gICAgICBjb25zdCB7d2lkdGhVbml0LCBoZWlnaHRVbml0fSA9IGFjdGlvbkl0ZW0uY29uZmlnO1xuICAgICAgbGV0IHt3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIGlmICghSVNfQlJPV1NFUl9FTlYpIHtcbiAgICAgICAgcmV0dXJuIHt3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZX07XG4gICAgICB9XG4gICAgICBpZiAod2lkdGhVbml0ID09PSBBVVRPKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBnZXRTdHlsZShlbGVtZW50LCBXSURUSCk7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIFdJRFRILCAnJyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMjIgLSBUeXBlICdzdHJpbmcgfCBudWxsJyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdudW1iZXIgfCB1bmRlZmluZWQnLlxuICAgICAgICB3aWR0aFZhbHVlID0gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ29mZnNldFdpZHRoJyk7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIFdJRFRILCB0ZW1wKTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWlnaHRVbml0ID09PSBBVVRPKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBnZXRTdHlsZShlbGVtZW50LCBIRUlHSFQpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBIRUlHSFQsICcnKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMyMiAtIFR5cGUgJ3N0cmluZyB8IG51bGwnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHR5cGUgJ251bWJlciB8IHVuZGVmaW5lZCcuXG4gICAgICAgIGhlaWdodFZhbHVlID0gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ29mZnNldEhlaWdodCcpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBIRUlHSFQsIHRlbXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZX07XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfQkFDS0dST1VORF9DT0xPUjpcbiAgICBjYXNlIFNUWUxFX0JPUkRFUjpcbiAgICBjYXNlIFNUWUxFX1RFWFRfQ09MT1I6IHtcbiAgICAgIGNvbnN0IHtyVmFsdWUsIGdWYWx1ZSwgYlZhbHVlLCBhVmFsdWUsIGdsb2JhbFN3YXRjaElkfSA9XG4gICAgICAgIGFjdGlvbkl0ZW0uY29uZmlnO1xuXG4gICAgICBpZiAoZ2xvYmFsU3dhdGNoSWQgJiYgZ2xvYmFsU3dhdGNoSWQuc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICBjb25zdCB7Z2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBnbG9iYWxTd2F0Y2hJZCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZUNvbG9yKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZS5yZWQsXG4gICAgICAgICAgZ1ZhbHVlOiBub3JtYWxpemVkVmFsdWUuZ3JlZW4sXG4gICAgICAgICAgYlZhbHVlOiBub3JtYWxpemVkVmFsdWUuYmx1ZSxcbiAgICAgICAgICBhVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZS5hbHBoYSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtyVmFsdWUsIGdWYWx1ZSwgYlZhbHVlLCBhVmFsdWV9O1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZJTFRFUjoge1xuICAgICAgcmV0dXJuIGFjdGlvbkl0ZW0uY29uZmlnLmZpbHRlcnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgICAgICByZWR1Y2VGaWx0ZXJzLFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9GT05UX1ZBUklBVElPTjoge1xuICAgICAgcmV0dXJuIGFjdGlvbkl0ZW0uY29uZmlnLmZvbnRWYXJpYXRpb25zLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgICAgICAgcmVkdWNlRm9udFZhcmlhdGlvbnMsXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCB7dmFsdWV9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICByZXR1cm4ge3ZhbHVlfTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlclR5cGUoYWN0aW9uVHlwZUlkOiBhbnkpIHtcbiAgaWYgKC9eVFJBTlNGT1JNXy8udGVzdChhY3Rpb25UeXBlSWQpKSB7XG4gICAgcmV0dXJuIFJFTkRFUl9UUkFOU0ZPUk07XG4gIH1cbiAgaWYgKC9eU1RZTEVfLy50ZXN0KGFjdGlvblR5cGVJZCkpIHtcbiAgICByZXR1cm4gUkVOREVSX1NUWUxFO1xuICB9XG4gIGlmICgvXkdFTkVSQUxfLy50ZXN0KGFjdGlvblR5cGVJZCkpIHtcbiAgICByZXR1cm4gUkVOREVSX0dFTkVSQUw7XG4gIH1cbiAgaWYgKC9eUExVR0lOXy8udGVzdChhY3Rpb25UeXBlSWQpKSB7XG4gICAgcmV0dXJuIFJFTkRFUl9QTFVHSU47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlUHJvcChyZW5kZXJUeXBlOiBhbnksIGFjdGlvblR5cGVJZDogYW55KSB7XG4gIHJldHVybi
19970ByZW5kZXJUeXBlID09PSBSRU5ERVJfU1RZTEVcbiAgICA/IGFjdGlvblR5cGVJZC5yZXBsYWNlKCdTVFlMRV8nLCAnJykudG9Mb3dlckNhc2UoKVxuICAgIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckhUTUxFbGVtZW50KFxuICBlbGVtZW50OiBhbnksXG5cbiAgcmVmU3RhdGU6IGFueSxcblxuICBhY3Rpb25TdGF0ZTogYW55LFxuXG4gIGV2ZW50SWQ6IGFueSxcblxuICBhY3Rpb25JdGVtOiBhbnksXG5cbiAgc3R5bGVQcm9wOiBhbnksXG5cbiAgZWxlbWVudEFwaTogYW55LFxuXG4gIHJlbmRlclR5cGU6IGFueSxcblxuICBwbHVnaW5JbnN0YW5jZTogYW55XG4pIHtcbiAgc3dpdGNoIChyZW5kZXJUeXBlKSB7XG4gICAgY2FzZSBSRU5ERVJfVFJBTlNGT1JNOiB7XG4gICAgICByZXR1cm4gcmVuZGVyVHJhbnNmb3JtKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICByZWZTdGF0ZSxcbiAgICAgICAgYWN0aW9uU3RhdGUsXG4gICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgIGVsZW1lbnRBcGlcbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgUkVOREVSX1NUWUxFOiB7XG4gICAgICByZXR1cm4gcmVuZGVyU3R5bGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHJlZlN0YXRlLFxuICAgICAgICBhY3Rpb25TdGF0ZSxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgc3R5bGVQcm9wLFxuICAgICAgICBlbGVtZW50QXBpXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIFJFTkRFUl9HRU5FUkFMOiB7XG4gICAgICByZXR1cm4gcmVuZGVyR2VuZXJhbChlbGVtZW50LCBhY3Rpb25JdGVtLCBlbGVtZW50QXBpKTtcbiAgICB9XG4gICAgY2FzZSBSRU5ERVJfUExVR0lOOiB7XG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBpZiAoaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZCkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclBsdWdpbihhY3Rpb25UeXBlSWQpKHBsdWdpbkluc3RhbmNlLCByZWZTdGF0ZSwgYWN0aW9uSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHRyYW5zZm9ybURlZmF1bHRzID0ge1xuICBbVFJBTlNGT1JNX01PVkVdOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDAsXG4gICAgeVZhbHVlOiAwLFxuICAgIHpWYWx1ZTogMCxcbiAgfSksXG4gIFtUUkFOU0ZPUk1fU0NBTEVdOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDEsXG4gICAgeVZhbHVlOiAxLFxuICAgIHpWYWx1ZTogMSxcbiAgfSksXG4gIFtUUkFOU0ZPUk1fUk9UQVRFXTogT2JqZWN0LmZyZWV6ZSh7XG4gICAgeFZhbHVlOiAwLFxuICAgIHlWYWx1ZTogMCxcbiAgICB6VmFsdWU6IDAsXG4gIH0pLFxuICBbVFJBTlNGT1JNX1NLRVddOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDAsXG4gICAgeVZhbHVlOiAwLFxuICB9KSxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IGZpbHRlckRlZmF1bHRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGJsdXI6IDAsXG4gICdodWUtcm90YXRlJzogMCxcbiAgaW52ZXJ0OiAwLFxuICBncmF5c2NhbGU6IDAsXG4gIHNhdHVyYXRlOiAxMDAsXG4gIHNlcGlhOiAwLFxuICBjb250cmFzdDogMTAwLFxuICBicmlnaHRuZXNzOiAxMDAsXG59KTtcblxuY29uc3QgZm9udFZhcmlhdGlvbkRlZmF1bHRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHdnaHQ6IDAsXG4gIG9wc3o6IDAsXG4gIHdkdGg6IDAsXG4gIHNsbnQ6IDAsXG59KTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyVHlwZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW1Db25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCBnZXRGaWx0ZXJVbml0ID0gKGZpbHRlclR5cGUsIGFjdGlvbkl0ZW1Db25maWcpID0+IHtcbiAgY29uc3QgZmlsdGVyID0gZmluZExhc3QoXG4gICAgYWN0aW9uSXRlbUNvbmZpZy5maWx0ZXJzLFxuICAgICh7dHlwZX0pID0+IHR5cGUgPT09IGZpbHRlclR5cGVcbiAgKTtcblxuICBpZiAoZmlsdGVyICYmIGZpbHRlci51bml0KSB7XG4gICAgcmV0dXJuIGZpbHRlci51bml0O1xuICB9XG5cbiAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7XG4gICAgY2FzZSAnYmx1cic6XG4gICAgICByZXR1cm4gJ3B4JztcbiAgICBjYXNlICdodWUtcm90YXRlJzpcbiAgICAgIHJldHVybiAnZGVnJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICclJztcbiAgfVxufTtcblxuY29uc3QgdHJhbnNmb3JtS2V5cyA9IE9iamVjdC5rZXlzKHRyYW5zZm9ybURlZmF1bHRzKTtcblxuZnVuY3Rpb24gcmVuZGVyVHJhbnNmb3JtKFxuICBlbGVtZW50OiBhbnksXG4gIHJlZlN0YXRlOiBhbnksXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIGFjdGlvbkl0ZW06IGFueSxcbiAgZWxlbWVudEFwaTogYW55XG4pIHtcbiAgY29uc3QgbmV3VHJhbnNmb3JtID0gdHJhbnNmb3JtS2V5c1xuICAgIC5tYXAoKGFjdGlvblR5cGVJZCkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnc3RyaW5nJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3sgcmVhZG9ubHkgVFJBTlNGT1JNX01PVkU6IFJlYWRvbmx5PHsgeFZhbHVlOiAwOyB5VmFsdWU6IDA7IHpWYWx1ZTogMDsgfT47IHJlYWRvbmx5IFRSQU5TRk9STV9TQ0FMRTogUmVhZG9ubHk8eyB4VmFsdWU6IDE7IHlWYWx1ZTogMTsgelZhbHVlOiAxOyB9PjsgcmVhZG9ubHkgVFJBTlNGT1JNX1JPVEFURTogUmVhZG9ubHk8eyB4VmFsdWU6IDA7IHlWYWx1ZTogMDsgelZhbHVlOiAwOyB9PjsgcmVhZG9ubHkgVFJBTlNGT1JNX1NLRVc6IFJlYWRvbmx5PC4uLj47IH0nLlxuICAgICAgY29uc3QgZGVmYXVsdHMgPSB0cmFuc2Zvcm1EZWZhdWx0c1thY3Rpb25UeXBlSWRdO1xuICAgICAgY29uc3Qge1xuICAgICAgICB4VmFsdWUgPSBkZWZhdWx0cy54VmFsdWUsXG4gICAgICAgIHlWYWx1ZSA9IGRlZmF1bHRzLnlWYWx1ZSxcblxuICAgICAgICB6VmFsdWUgPSBkZWZh
19970dWx0cy56VmFsdWUsXG4gICAgICAgIHhVbml0ID0gJycsXG4gICAgICAgIHlVbml0ID0gJycsXG4gICAgICAgIHpVbml0ID0gJycsXG4gICAgICB9ID0gcmVmU3RhdGVbYWN0aW9uVHlwZUlkXSB8fCB7fTtcbiAgICAgIHN3aXRjaCAoYWN0aW9uVHlwZUlkKSB7XG4gICAgICAgIGNhc2UgVFJBTlNGT1JNX01PVkU6XG4gICAgICAgICAgcmV0dXJuIGAke1RSQU5TTEFURV8zRH0oJHt4VmFsdWV9JHt4VW5pdH0sICR7eVZhbHVlfSR7eVVuaXR9LCAke3pWYWx1ZX0ke3pVbml0fSlgO1xuICAgICAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICAgICAgICByZXR1cm4gYCR7U0NBTEVfM0R9KCR7eFZhbHVlfSR7eFVuaXR9LCAke3lWYWx1ZX0ke3lVbml0fSwgJHt6VmFsdWV9JHt6VW5pdH0pYDtcbiAgICAgICAgY2FzZSBUUkFOU0ZPUk1fUk9UQVRFOlxuICAgICAgICAgIHJldHVybiBgJHtST1RBVEVfWH0oJHt4VmFsdWV9JHt4VW5pdH0pICR7Uk9UQVRFX1l9KCR7eVZhbHVlfSR7eVVuaXR9KSAke1JPVEFURV9afSgke3pWYWx1ZX0ke3pVbml0fSlgO1xuICAgICAgICBjYXNlIFRSQU5TRk9STV9TS0VXOlxuICAgICAgICAgIHJldHVybiBgJHtTS0VXfSgke3hWYWx1ZX0ke3hVbml0fSwgJHt5VmFsdWV9JHt5VW5pdH0pYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSlcbiAgICAuam9pbignICcpO1xuXG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIFRSQU5TRk9STV9QUkVGSVhFRCwgZWxlbWVudEFwaSk7XG4gIHNldFN0eWxlKGVsZW1lbnQsIFRSQU5TRk9STV9QUkVGSVhFRCwgbmV3VHJhbnNmb3JtKTtcblxuICAvLyBTZXQgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZFxuICBpZiAoaGFzRGVmaW5lZDNkVHJhbnNmb3JtKGFjdGlvbkl0ZW0sIGFjdGlvblN0YXRlKSkge1xuICAgIHNldFN0eWxlKGVsZW1lbnQsIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCwgUFJFU0VSVkVfM0QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZpbHRlcihcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW1Db25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1Db25maWcsXG4gIGVsZW1lbnRBcGk6IGFueVxuKSB7XG4gIGNvbnN0IGZpbHRlclZhbHVlID0gcmVkdWNlKFxuICAgIGFjdGlvblN0YXRlLFxuICAgIChyZXN1bHQsIHZhbHVlLCB0eXBlKSA9PlxuICAgICAgYCR7cmVzdWx0fSAke3R5cGV9KCR7dmFsdWV9JHtnZXRGaWx0ZXJVbml0KHR5cGUsIGFjdGlvbkl0ZW1Db25maWcpfSlgLFxuICAgICcnXG4gICk7XG5cbiAgY29uc3Qge3NldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgRklMVEVSLCBlbGVtZW50QXBpKTtcbiAgc2V0U3R5bGUoZWxlbWVudCwgRklMVEVSLCBmaWx0ZXJWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvbnRWYXJpYXRpb24oXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBhY3Rpb25JdGVtQ29uZmlnOiBGb250VmFyaWF0aW9uQWN0aW9uQ29uZmlnVHlwZSxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaVxuKSB7XG4gIGNvbnN0IGZvbnRWYXJpYXRpb25WYWx1ZSA9IHJlZHVjZShcbiAgICBhY3Rpb25TdGF0ZSxcbiAgICAocmVzdWx0LCB2YWx1ZSwgdHlwZSkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZycgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJy5cbiAgICAgIHJlc3VsdC5wdXNoKGBcIiR7dHlwZX1cIiAke3ZhbHVlfWApO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIFtdXG4gICkuam9pbignLCAnKTtcblxuICBjb25zdCB7c2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgYWRkV2lsbENoYW5nZShlbGVtZW50LCBGT05UX1ZBUklBVElPTl9TRVRUSU5HUywgZWxlbWVudEFwaSk7XG4gIHNldFN0eWxlKGVsZW1lbnQsIEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTLCBmb250VmFyaWF0aW9uVmFsdWUpO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25UeXBlSWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd4VmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd5VmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICd6VmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBoYXNEZWZpbmVkM2RUcmFuc2Zvcm0oe2FjdGlvblR5cGVJZH0sIHt4VmFsdWUsIHlWYWx1ZSwgelZhbHVlfSkge1xuICAvLyBUUkFOU0xBVEVfWlxuICByZXR1cm4gKFxuICAgIChhY3Rpb25UeXBlSWQgPT09IFRSQU5TRk9STV9NT1ZFICYmIHpWYWx1ZSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgIC8vIFNDQUxFX1pcbiAgICAoYWN0aW9uVHlwZUlkID09PSBUUkFOU0ZPUk1fU0NBTEUgJiYgelZhbHVlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgLy8gUk9UQVRFX1ggb3IgUk9UQVRFX1lcbiAgICAoYWN0aW9uVHlwZUlkID09PSBUUkFOU0ZPUk1fUk9UQVRFICYmXG4gICAgICAoeFZhbHVlICE9PSB1bmRlZmluZWQgfHwgeVZhbHVlICE9PSB1bmRlZmluZWQpKVxuICApO1xufVxuXG5jb25zdCBwYXJhbUNhcHR1cmUgPSAnXFxcXCgoW14pXSspXFxcXCknO1xuY29uc3QgcmdiVmFsaWRSZWdleCA9IC9ecmdiLztcbmNvbnN0IHJnYk1hdGNoUmVnZXggPSBSZWdFeHAoYHJnYmE/JHtwYXJhbUNhcHR1cmV9YCk7XG5cbmZ1bmN0aW9uIGdldEZpcnN0TWF0Y2gocmVnZXg6IFJlZ0V4cCwgdmFsdWU6IHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnYWN0aW9uVHlwZUlkJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnY29tcHV0ZWRTdHlsZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2dldFN0eWxlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gcGFyc2VDb2xvcih7ZWxlbWVudCwgYWN0aW9uVHlwZUlkLCBjb21wdXRlZFN0eWxlLCBnZXRTdHlsZX0pOiB7XG4gIHJWYWx1ZTogbnVtYmVyO1xuICBnVmFsdWU6IG51bWJlcjtcbiAgYlZhbHVlOiBudW1iZXI7XG4gIGFWYWx1ZTogbnVtYmVyO1xufSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdSZWFkb25seTx7IFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6IFwiYmFja2dyb3VuZENvbG9yXCI7IFNUWUxFX0JPUkRFUjogXCJib3JkZXJDb2xvclwiOyBTVFlMRV9URVhUX0NPTE9SOiBcImNvbG9yXCI7IH0+Jy5cbiAgY29uc3QgcHJvcCA9IGNvbG9yU3R5bGVQcm9wc1thY3Rpb25UeXBlSWRdO1xuICBjb25zdCBpbmxpbmVWYWx1ZSA9IGdldFN0eWxlKGVsZW1lbnQsIHByb3ApO1xuICBjb25zdCB2YWx1ZSA9IHJnYlZhbGlkUmVnZXgudGVzdChpbmxpbmVWYWx1ZSlcbiAgICA/IGlubGluZVZhbHVlXG4gICAgOiBjb21wdXRlZFN0eWxlW3Byb3BdO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTMyIC0gT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICBjb25zdCBtYXRjaGVzID0gZ2V0Rmlyc3RNYXRjaChyZ2JNYXRjaFJlZ2V4LCB2YWx1ZSkuc3BsaXQoQ09NTUFfREVMSU1JVEVSKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnc3RyaW5nJy5cbiAgICByVmFsdWU6IGRlZmF1bHRUbyhwYXJzZUludChtYXRjaGVzWzBdLCAxMCksIDI1NSksXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZyB8IHVuZGVmaW5lZCcgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3N0cmluZycuXG4gICAgZ1ZhbHVlOiBkZWZh
19970dWx0VG8ocGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApLCAyNTUpLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdzdHJpbmcnLlxuICAgIGJWYWx1ZTogZGVmYXVsdFRvKHBhcnNlSW50KG1hdGNoZXNbMl0sIDEwKSwgMjU1KSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnc3RyaW5nJy5cbiAgICBhVmFsdWU6IGRlZmF1bHRUbyhwYXJzZUZsb2F0KG1hdGNoZXNbM10pLCAxKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICByZWZTdGF0ZTogYW55LFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBhY3Rpb25JdGVtOiBBY3Rpb25JdGVtVHlwZSxcbiAgc3R5bGVQcm9wOiBhbnksXG4gIGVsZW1lbnRBcGk6IGFueVxuKSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBTVFlMRV9TSVpFOiB7XG4gICAgICBsZXQge3dpZHRoVW5pdCA9ICcnLCBoZWlnaHRVbml0ID0gJyd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBjb25zdCB7d2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWV9ID0gYWN0aW9uU3RhdGU7XG4gICAgICBpZiAod2lkdGhWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh3aWR0aFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgICB3aWR0aFVuaXQgPSAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgV0lEVEgsIGVsZW1lbnRBcGkpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBXSURUSCwgd2lkdGhWYWx1ZSArIHdpZHRoVW5pdCk7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaGVpZ2h0VW5pdCA9PT0gQVVUTykge1xuICAgICAgICAgIGhlaWdodFVuaXQgPSAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgSEVJR0hULCBlbGVtZW50QXBpKTtcbiAgICAgICAgc2V0U3R5bGUoZWxlbWVudCwgSEVJR0hULCBoZWlnaHRWYWx1ZSArIGhlaWdodFVuaXQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfRklMVEVSOiB7XG4gICAgICByZW5kZXJGaWx0ZXIoZWxlbWVudCwgYWN0aW9uU3RhdGUsIGFjdGlvbkl0ZW0uY29uZmlnLCBlbGVtZW50QXBpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB7XG4gICAgICByZW5kZXJGb250VmFyaWF0aW9uKGVsZW1lbnQsIGFjdGlvblN0YXRlLCBhY3Rpb25JdGVtLmNvbmZpZywgZWxlbWVudEFwaSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOlxuICAgIGNhc2UgU1RZTEVfQk9SREVSOlxuICAgIGNhc2UgU1RZTEVfVEVYVF9DT0xPUjoge1xuICAgICAgY29uc3QgcHJvcCA9IGNvbG9yU3R5bGVQcm9wc1thY3Rpb25JdGVtLmFjdGlvblR5cGVJZF07XG5cbiAgICAgIGNvbnN0IHJWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuclZhbHVlKTtcbiAgICAgIGNvbnN0IGdWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuZ1ZhbHVlKTtcbiAgICAgIGNvbnN0IGJWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuYlZhbHVlKTtcbiAgICAgIGNvbnN0IGFWYWx1ZSA9IGFjdGlvblN0YXRlLmFWYWx1ZTtcblxuICAgICAgYWRkV2lsbENoYW5nZShlbGVtZW50LCBwcm9wLCBlbGVtZW50QXBpKTtcblxuICAgICAgc2V0U3R5bGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGFWYWx1ZSA+PSAxXG4gICAgICAgICAgPyBgcmdiKCR7clZhbHVlfSwke2dWYWx1ZX0sJHtiVmFsdWV9KWBcbiAgICAgICAgICA6IGByZ2JhKCR7clZhbHVlfSwke2dWYWx1ZX0sJHtiVmFsdWV9LCR7YVZhbHVlfSlgXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAndW5pdCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAneyBkZWxheTogbnVtYmVyOyBlYXNpbmc6IElYMkVhc2luZ1R5cGU7IGR1cmF0aW9uOiBudW1iZXI7IHRhcmdldDogQWN0aW9uSXRlbVRhcmdldFR5cGU7IHhWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkOyB5VmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZDsgelZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQ7IHhVbml0OiBcIiVcIiB8IC4uLiA0IG1vcmUgLi4uIHwgXCJWV1wiOyB5VW5pdDogXCIlXCIgfCAuLi4gNCBtb3JlIC4uLiB8IFwiVldcIjsgelVuaXQ6IFwiJVwiIHwgLi4uIDQgbW9yZSAuLi4gfCBcIlZXXCI7IH0gfCAuLi4gNSBtb3JlIC4uLiB8IHsgLi4uOyB9Jy5cbiAgICAgIGNvbnN0IHt1bml0ID0gJyd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIHN0eWxlUHJvcCwgZWxlbWVudEFwaSk7XG4gICAgICBzZXRTdHlsZShlbGVtZW50LCBzdHlsZVByb3AsIGFjdGlvblN0YXRlLnZhbHVlICsgdW5pdCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyR2VuZXJhbChlbGVtZW50OiBhbnksIGFjdGlvbkl0ZW06IGFueSwgZWxlbWVudEFwaTogYW55KSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBHRU5FUkFMX0RJU1BMQVk6IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIGlmICh2YWx1ZSA9PT0gRkxFWCAmJiBJU19CUk9XU0VSX0VOVikge1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBESVNQTEFZLCBGTEVYX1BSRUZJWEVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgI
19970HNldFN0eWxlKGVsZW1lbnQsIERJU1BMQVksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Byb3AnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGk6IEVsZW1lbnRBcGkpIHtcbiAgaWYgKCFJU19CUk9XU0VSX0VOVikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2YWxpZFByb3AgPSB3aWxsQ2hhbmdlUHJvcHNbcHJvcF07XG4gIGlmICghdmFsaWRQcm9wKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtnZXRTdHlsZSwgc2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSk7XG4gIGlmICghdmFsdWUpIHtcbiAgICBzZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSwgdmFsaWRQcm9wKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gdmFsdWUuc3BsaXQoQ09NTUFfREVMSU1JVEVSKS5tYXAodHJpbSk7XG4gIGlmICh2YWx1ZXMuaW5kZXhPZih2YWxpZFByb3ApID09PSAtMSkge1xuICAgIHNldFN0eWxlKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFdJTExfQ0hBTkdFLFxuICAgICAgdmFsdWVzLmNvbmNhdCh2YWxpZFByb3ApLmpvaW4oQ09NTUFfREVMSU1JVEVSKVxuICAgICk7XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAncHJvcCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIHJlbW92ZVdpbGxDaGFuZ2UoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGk6IGFueSkge1xuICBpZiAoIUlTX0JST1dTRVJfRU5WKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHZhbGlkUHJvcCA9IHdpbGxDaGFuZ2VQcm9wc1twcm9wXTtcbiAgaWYgKCF2YWxpZFByb3ApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge2dldFN0eWxlLCBzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBjb25zdCB2YWx1ZSA9IGdldFN0eWxlKGVsZW1lbnQsIFdJTExfQ0hBTkdFKTtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5pbmRleE9mKHZhbGlkUHJvcCkgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNldFN0eWxlKFxuICAgIGVsZW1lbnQsXG4gICAgV0lMTF9DSEFOR0UsXG4gICAgdmFsdWVcbiAgICAgIC5zcGxpdChDT01NQV9ERUxJTUlURVIpXG4gICAgICAubWFwKHRyaW0pXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICd2JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgLmZpbHRlcigodikgPT4gdiAhPT0gdmFsaWRQcm9wKVxuICAgICAgLmpvaW4oQ09NTUFfREVMSU1JVEVSKVxuICApO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnRBcGknIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBbGxTdHlsZXMoe3N0b3JlLCBlbGVtZW50QXBpfSkge1xuICBjb25zdCB7aXhEYXRhfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudHMgPSB7fSwgYWN0aW9uTGlzdHMgPSB7fX0gPSBpeERhdGE7XG4gIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnRJZCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2V2ZW50SWRdO1xuICAgIGNvbnN0IHtjb25maWd9ID0gZXZlbnQuYWN0aW9uO1xuICAgIGNvbnN0IHthY3Rpb25MaXN0SWR9ID0gY29uZmlnO1xuICAgIGNvbnN0IGFjdGlvbkxpc3QgPSBhY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdO1xuICAgIGlmIChhY3Rpb25MaXN0KSB7XG4gICAgICBjbGVhckFjdGlvbkxpc3RTdHlsZXMoe2FjdGlvbkxpc3QsIGV2ZW50LCBlbGVtZW50QXBpfSk7XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmtleXMoYWN0aW9uTGlzdHMpLmZvckVhY2goKGFjdGlvbkxpc3RJZCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IGFjdGlvbkxpc3Q6IGFueTsgZWxlbWVudEFwaTogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBhY3Rpb25MaXN0Pzoge30gfCB1bmRlZmluZWQ7IGV2ZW50OiBhbnk7IGVsZW1lbnRBcGk6IGFueTsgfScuXG4gICAgY2xlYXJBY3Rpb25MaXN0U3R5bGVzKHthY3Rpb25MaXN0OiBhY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdLCBlbGVtZW50QXBpfSk7XG4gIH0pO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnRBcGknIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBjbGVhckFjdGlvbkxpc3RTdHlsZXMoe2FjdGlvbkxpc3QgPSB7fSwgZXZlbnQsIGVsZW1lbnRBcGl9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYWN0aW9uSXRlbUdyb3VwcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLiB8IFRTMjMzOSAtIFByb3BlcnR5ICdjb250aW51b3VzUGFyYW1ldGVyR3JvdXBzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fScuXG4gIGNvbnN0IHthY3Rpb25JdGVtR3JvdXBzLCBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBzfSA9IGFjdGlvbkxpc3Q7XG4gIGFjdGlvbkl0ZW1Hcm91cHMgJiZcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25Hcm91cCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICBhY3Rpb25JdGVtR3JvdXBzLmZvckVhY2goKGFjdGlvbkdyb3VwKSA9PiB7XG4gICAgICBjbGVhckFjdGlvbkdyb3VwU3R5bGVzKHthY3Rpb25Hcm91cCwgZXZlbnQsIGVsZW1lbnRBcGl9KTtcbiAgICB9KTtcbiAgY29udGludW91c1BhcmFtZXRlckdyb3VwcyAmJlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3BhcmFtR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgY29udGludW91c1BhcmFtZXRlckdyb3Vwcy5mb3JFYWNoKChwYXJhbUdyb3VwKSA9PiB7XG4gICAgICBjb25zdCB7Y29udGludW91c0FjdGlvbkdyb3Vwc30gPSBwYXJhbUdyb3VwO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciA
19970nYWN0aW9uR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICBjb250aW51b3VzQWN0aW9uR3JvdXBzLmZvckVhY2goKGFjdGlvbkdyb3VwKSA9PiB7XG4gICAgICAgIGNsZWFyQWN0aW9uR3JvdXBTdHlsZXMoe2FjdGlvbkdyb3VwLCBldmVudCwgZWxlbWVudEFwaX0pO1xuICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkdyb3VwJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50QXBpJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY2xlYXJBY3Rpb25Hcm91cFN0eWxlcyh7YWN0aW9uR3JvdXAsIGV2ZW50LCBlbGVtZW50QXBpfSkge1xuICBjb25zdCB7YWN0aW9uSXRlbXN9ID0gYWN0aW9uR3JvdXA7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW0nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1zLmZvckVhY2goKGFjdGlvbkl0ZW0pID0+IHtcbiAgICBjb25zdCB7YWN0aW9uVHlwZUlkLCBjb25maWd9ID0gYWN0aW9uSXRlbTtcbiAgICBsZXQgY2xlYXJFbGVtZW50O1xuXG4gICAgaWYgKGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdyZWYnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICBjbGVhckVsZW1lbnQgPSAocmVmKSA9PiBjbGVhclBsdWdpbihhY3Rpb25UeXBlSWQpKHJlZiwgYWN0aW9uSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyRWxlbWVudCA9IHByb2Nlc3NFbGVtZW50QnlUeXBlKHtcbiAgICAgICAgZWZmZWN0OiBjbGVhclN0eWxlUHJvcCxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBlbGVtZW50QXBpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QWZmZWN0ZWRFbGVtZW50cyh7Y29uZmlnLCBldmVudCwgZWxlbWVudEFwaX0pLmZvckVhY2goY2xlYXJFbGVtZW50KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwSFRNTEVsZW1lbnQoXG4gIGVsZW1lbnQ6IGFueSxcbiAgYWN0aW9uSXRlbTogYW55LFxuICBlbGVtZW50QXBpOiBhbnlcbikge1xuICBjb25zdCB7c2V0U3R5bGUsIGdldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIGNvbnN0IHthY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcblxuICBpZiAoYWN0aW9uVHlwZUlkID09PSBTVFlMRV9TSVpFKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb25JdGVtO1xuICAgIGlmIChjb25maWcud2lkdGhVbml0ID09PSBBVVRPKSB7XG4gICAgICBzZXRTdHlsZShlbGVtZW50LCBXSURUSCwgJycpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmhlaWdodFVuaXQgPT09IEFVVE8pIHtcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIEhFSUdIVCwgJycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChnZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSkpIHtcbiAgICBwcm9jZXNzRWxlbWVudEJ5VHlwZSh7ZWZmZWN0OiByZW1vdmVXaWxsQ2hhbmdlLCBhY3Rpb25UeXBlSWQsIGVsZW1lbnRBcGl9KShcbiAgICAgIGVsZW1lbnRcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NFbGVtZW50QnlUeXBlID1cbiAgKHtcbiAgICBlZmZlY3QsXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIGVsZW1lbnRBcGksXG4gIH06IHtcbiAgICBlZmZlY3Q6IChcbiAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgcHJvcDogYW55IHwgdW5kZWZpbmVkIHwgc3RyaW5nLFxuXG4gICAgICBlbGVtZW50QXBpPzogYW55XG4gICAgKSA9PiB2b2lkO1xuICAgIGFjdGlvblR5cGVJZDogQWN0aW9uSWQ7XG4gICAgZWxlbWVudEFwaTogRWxlbWVudEFwaTtcbiAgfSkgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgKGVsZW1lbnQpID0+IHtcbiAgICBzd2l0Y2ggKGFjdGlvblR5cGVJZCkge1xuICAgICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICAgIGNhc2UgVFJBTlNGT1JNX1NDQUxFOlxuICAgICAgY2FzZSBUUkFOU0ZPUk1fUk9UQVRFOlxuICAgICAgY2FzZSBUUkFOU0ZPUk1fU0tFVzpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIFRSQU5TRk9STV9QUkVGSVhFRCwgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9GSUxURVI6XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBGSUxURVIsIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RZTEVfRk9OVF9WQVJJQVRJT046XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBGT05UX1ZBUklBVElPTl9TRVRUSU5HUywgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9PUEFDSVRZOlxuICAgICAgICBlZmZlY3QoZWxlbWVudCwgT1BBQ0lUWSwgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9TSVpFOlxuICAgICAgICBlZmZlY3QoZWxlbWVudCwgV0lEVEgsIGVsZW1lbnRBcGkpO1xuICAgICAgICBlZmZlY3QoZWxlbWVudCwgSEVJR0hULCBlbGVtZW50QXBpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6XG4gICAgICBjYXNlIFNUWUxFX0JPUkRFUjpcbiAgICAgIGNhc2UgU1RZTEVfVEVYVF9DT0xPUjpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIGNvbG9yU3R5bGVQcm9wc1thY3Rpb25UeXBlSWRdLCBlbGVtZW50QXBpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEdFTkVSQUxfRElTUExBWTpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIERJU1BMQVksIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Byb3AnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBjbGVhclN0eWxlUHJvcChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcCwgZWxlbWVudEFwaTogYW55KSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICByZW1vdmVXaWxsQ2hhbmdlKGVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGkpO1xuICBzZXRTdHlsZShlbGVtZW50LCBwcm9wLCAnJyk7XG4gIC8vIENsZWFyIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2RcbiAgaWYgKHByb3AgPT09IFRSQU5TRk9STV9QUkVGSVhFRCkge1xuICAgIHNldFN0eWxlKGVsZW1lbnQsIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCwgJycpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleChhY3Rpb25JdGVtczogYW55KSB7XG4gIGxldCBtYXhEdXJhdGlvbiA9IDA7XG4gIGxldCByZXN1bHRJbmRleCA9IDA7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW0nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdpbmRleCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uSXRlbXMuZm9yRWFjaCgoYWN0aW9uSXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbkl0ZW07XG4gICAgY29uc3QgdG90YWwgPSBjb25maWcuZGVsYXkgKyBjb25maWcuZHVyYXRpb247XG4gICAgaWYgKHRvdGFsID49IG1heER1cmF0aW9uKSB7XG4gICAgICBtYXhEdXJhdGlvbiA9IHRvdGFsO1xuICAgICAgcmVzdWx0SW5kZXggPSBpbmRleDtcbiAgICB9XG4gI
19970H0pO1xuICByZXR1cm4gcmVzdWx0SW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25MaXN0UHJvZ3Jlc3MoYWN0aW9uTGlzdDogYW55LCBpbnN0YW5jZTogYW55KSB7XG4gIGNvbnN0IHthY3Rpb25JdGVtR3JvdXBzLCB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGV9ID0gYWN0aW9uTGlzdDtcbiAgY29uc3Qge2FjdGlvbkl0ZW06IGluc3RhbmNlSXRlbSwgdmVyYm9zZVRpbWVFbGFwc2VkID0gMH0gPSBpbnN0YW5jZTtcbiAgbGV0IHRvdGFsRHVyYXRpb24gPSAwO1xuICBsZXQgZWxhcHNlZER1cmF0aW9uID0gMDtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZ3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdpbmRleCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uSXRlbUdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICBpZiAodXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlICYmIGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHthY3Rpb25JdGVtc30gPSBncm91cDtcbiAgICBjb25zdCBjYXJyaWVySXRlbSA9IGFjdGlvbkl0ZW1zW2dldE1heER1cmF0aW9uSXRlbUluZGV4KGFjdGlvbkl0ZW1zKV07XG4gICAgY29uc3Qge2NvbmZpZywgYWN0aW9uVHlwZUlkfSA9IGNhcnJpZXJJdGVtO1xuICAgIGlmIChpbnN0YW5jZUl0ZW0uaWQgPT09IGNhcnJpZXJJdGVtLmlkKSB7XG4gICAgICBlbGFwc2VkRHVyYXRpb24gPSB0b3RhbER1cmF0aW9uICsgdmVyYm9zZVRpbWVFbGFwc2VkO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9XG4gICAgICBnZXRSZW5kZXJUeXBlKGFjdGlvblR5cGVJZCkgPT09IFJFTkRFUl9HRU5FUkFMID8gMCA6IGNvbmZpZy5kdXJhdGlvbjtcbiAgICB0b3RhbER1cmF0aW9uICs9IGNvbmZpZy5kZWxheSArIGR1cmF0aW9uO1xuICB9KTtcbiAgcmV0dXJuIHRvdGFsRHVyYXRpb24gPiAwID8gb3B0aW1pemVGbG9hdChlbGFwc2VkRHVyYXRpb24gLyB0b3RhbER1cmF0aW9uKSA6IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VMaXN0VG9Hcm91cCh7XG4gIGFjdGlvbkxpc3QsXG4gIGFjdGlvbkl0ZW1JZCxcbiAgcmF3RGF0YSxcbn06IHtcbiAgYWN0aW9uTGlzdDogQWN0aW9uTGlzdFR5cGU7XG4gIGFjdGlvbkl0ZW1JZDogc3RyaW5nO1xuICByYXdEYXRhOiBJWDJSYXdEYXRhO1xufSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRklYTUUgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnYWN0aW9uSXRlbUdyb3VwcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnQWN0aW9uTGlzdFR5cGUnLlxuICBjb25zdCB7YWN0aW9uSXRlbUdyb3VwcywgY29udGludW91c1BhcmFtZXRlckdyb3Vwc30gPSBhY3Rpb25MaXN0O1xuICBjb25zdCBuZXdBY3Rpb25JdGVtczogQXJyYXk8QWN0aW9uSXRlbVR5cGU+ID0gW107XG5cbiAgY29uc3QgdGFrZUl0ZW1VbnRpbE1hdGNoID0gKGFjdGlvbkl0ZW06IEFjdGlvbkl0ZW1UeXBlKSA9PiB7XG4gICAgbmV3QWN0aW9uSXRlbXMucHVzaChcbiAgICAgIG1lcmdlSW4oYWN0aW9uSXRlbSwgWydjb25maWcnXSwge1xuICAgICAgICBkZWxheTogMCxcbiAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGFjdGlvbkl0ZW0uaWQgPT09IGFjdGlvbkl0ZW1JZDtcbiAgfTtcblxuICBhY3Rpb25JdGVtR3JvdXBzICYmXG4gICAgYWN0aW9uSXRlbUdyb3Vwcy5zb21lKCh7YWN0aW9uSXRlbXN9OiB7YWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1zVHlwZX0pID0+IHtcbiAgICAgIHJldHVybiBhY3Rpb25JdGVtcy5zb21lKHRha2VJdGVtVW50aWxNYXRjaCk7XG4gICAgfSk7XG5cbiAgY29udGludW91c1BhcmFtZXRlckdyb3VwcyAmJlxuICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMuc29tZShcbiAgICAgIChcbiAgICAgICAgcGFyYW1Hcm91cDpcbiAgICAgICAgICB8IENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cFR5cGU8J01PVVNFX1gnPlxuICAgICAgICAgIHwgQ29udGludW91c1BhcmFtZXRlckdyb3VwVHlwZTwnTU9VU0VfWSc+XG4gICAgICAgICAgfCBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBUeXBlPCdTQ1JPTExfUFJPR1JFU1MnPlxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb250aW51b3VzQWN0aW9uR3JvdXBzfSA9IHBhcmFtR3JvdXA7XG4gICAgICAgIHJldHVybiBjb250aW51b3VzQWN0aW9uR3JvdXBzLnNvbWUoXG4gICAgICAgICAgKHthY3Rpb25JdGVtc306IHthY3Rpb25JdGVtczogQWN0aW9uSXRlbXNUeXBlfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkl0ZW1zLnNvbWUodGFrZUl0ZW1VbnRpbE1hdGNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcblxuICByZXR1cm4gc2V0SW4ocmF3RGF0YSwgWydhY3Rpb25MaXN0cyddLCB7XG4gICAgW2FjdGlvbkxpc3QuaWRdOiB7XG4gICAgICBpZDogYWN0aW9uTGlzdC5pZCxcbiAgICAgIGFjdGlvbkl0ZW1Hcm91cHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbkl0ZW1zOiBuZXdBY3Rpb25JdGVtcyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2Jhc2VkT24nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkTmFtZXNwYWNlRXZlbnRQYXJhbWV0ZXIoZXZlbnRUeXBlSWQ6IGFueSwge2Jhc2VkT259KSB7XG4gIHJldHVybiAoXG4gICAgKGV2ZW50VHlwZUlkID09PSBFdmVudFR5cGVDb25zdHMuU0NST0xMSU5HX0lOX1ZJRVcgJiZcbiAgICAgIChiYXNlZE9uID09PSBFdmVudEJhc2VkT24uRUxFTUVOVCB8fCBiYXNlZE9uID09IG51bGwpKSB8fFxuICAgIChldmVudFR5cGVJZCA9PT0gRXZlbnRUeXBlQ29uc3RzLk1PVVNFX01PVkUgJiZcbiAgICAgIGJhc2VkT24gPT09IEV2ZW50QmFzZWRPbi5FTEVNRU5UKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkKFxuICBldmVudFN0YXRlS2V5OiBhbnksXG4gIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkOiBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZFxuKSB7XG4gIGNvbnN0IG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCA9XG4gICAgZXZlbnRTdGF0ZUtleSArIENPTE9OX0RFTElNSVRFUiArIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkO1xuXG4gIHJldHVybi
19970BuYW1lc3BhY2VkUGFyYW1ldGVySWQgYXMgQ29udGludW91c1BhcmFtZXRlckdyb3VwSWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRBbGxvd01lZGlhUXVlcnkobWVkaWFRdWVyaWVzOiBhbnksIG1lZGlhUXVlcnlLZXk6IGFueSkge1xuICAvLyBEdXJpbmcgZGVzaWduIG1vZGUsIGN1cnJlbnQgbWVkaWEgcXVlcnkga2V5IGRvZXMgbm90IGV4aXN0XG4gIGlmIChtZWRpYVF1ZXJ5S2V5ID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gbWVkaWFRdWVyaWVzLmluZGV4T2YobWVkaWFRdWVyeUtleSkgIT09IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVkaWFRdWVyaWVzRXF1YWwobGlzdEE6IGFueSwgbGlzdEI6IGFueSkge1xuICByZXR1cm4gc2hhbGxvd0VxdWFsKGxpc3RBICYmIGxpc3RBLnNvcnQoKSwgbGlzdEIgJiYgbGlzdEIuc29ydCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVRhcmdldCh0YXJnZXQ6IGFueSkge1xuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG4gIGlmICh0YXJnZXQucGx1Z2luRWxlbWVudCAmJiB0YXJnZXQub2JqZWN0SWQpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnBsdWdpbkVsZW1lbnQgKyBCQVJfREVMSU1JVEVSICsgdGFyZ2V0Lm9iamVjdElkO1xuICB9XG4gIGlmICh0YXJnZXQub2JqZWN0SWQpIHtcbiAgICByZXR1cm4gdGFyZ2V0Lm9iamVjdElkO1xuICB9XG4gIGNvbnN0IHtpZCA9ICcnLCBzZWxlY3RvciA9ICcnLCB1c2VFdmVudFRhcmdldCA9ICcnfSA9IHRhcmdldDtcbiAgcmV0dXJuIGlkICsgQkFSX0RFTElNSVRFUiArIHNlbGVjdG9yICsgQkFSX0RFTElNSVRFUiArIHVzZUV2ZW50VGFyZ2V0O1xufVxuIl0sIm5hbWVzIjpbImNsZWFudXBIVE1MRWxlbWVudCIsImNsZWFyQWxsU3R5bGVzIiwiY2xlYXJPYmplY3RDYWNoZSIsImdldEFjdGlvbkxpc3RQcm9ncmVzcyIsImdldEFmZmVjdGVkRWxlbWVudHMiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0RGVzdGluYXRpb25WYWx1ZXMiLCJnZXRFbGVtZW50SWQiLCJnZXRJbnN0YW5jZUlkIiwiZ2V0SW5zdGFuY2VPcmlnaW4iLCJnZXRJdGVtQ29uZmlnQnlLZXkiLCJnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleCIsImdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsImdldFJlbmRlclR5cGUiLCJnZXRTdHlsZVByb3AiLCJtZWRpYVF1ZXJpZXNFcXVhbCIsIm9ic2VydmVTdG9yZSIsInJlZHVjZUxpc3RUb0dyb3VwIiwicmVpZnlTdGF0ZSIsInJlbmRlckhUTUxFbGVtZW50Iiwic2hhbGxvd0VxdWFsIiwic2hvdWxkQWxsb3dNZWRpYVF1ZXJ5Iiwic2hvdWxkTmFtZXNwYWNlRXZlbnRQYXJhbWV0ZXIiLCJzdHJpbmdpZnlUYXJnZXQiLCJCQUNLR1JPVU5EIiwiVFJBTlNGT1JNIiwiVFJBTlNMQVRFXzNEIiwiU0NBTEVfM0QiLCJST1RBVEVfWCIsIlJPVEFURV9ZIiwiUk9UQVRFX1oiLCJTS0VXIiwiUFJFU0VSVkVfM0QiLCJGTEVYIiwiT1BBQ0lUWSIsIkZJTFRFUiIsIkZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTIiwiV0lEVEgiLCJIRUlHSFQiLCJCQUNLR1JPVU5EX0NPTE9SIiwiQk9SREVSX0NPTE9SIiwiQ09MT1IiLCJDSElMRFJFTiIsIklNTUVESUFURV9DSElMRFJFTiIsIlNJQkxJTkdTIiwiUEFSRU5UIiwiRElTUExBWSIsIldJTExfQ0hBTkdFIiwiQVVUTyIsIkNPTU1BX0RFTElNSVRFUiIsIkNPTE9OX0RFTElNSVRFUiIsIkJBUl9ERUxJTUlURVIiLCJSRU5ERVJfVFJBTlNGT1JNIiwiUkVOREVSX0dFTkVSQUwiLCJSRU5ERVJfU1RZTEUiLCJSRU5ERVJfUExVR0lOIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiVFJBTlNGT1JNX01PVkUiLCJUUkFOU0ZPUk1fU0NBTEUiLCJUUkFOU0ZPUk1fUk9UQVRFIiwiVFJBTlNGT1JNX1NLRVciLCJTVFlMRV9PUEFDSVRZIiwiU1RZTEVfRklMVEVSIiwiU1RZTEVfRk9OVF9WQVJJQVRJT04iLCJTVFlMRV9TSVpFIiwiU1RZTEVfQkFDS0dST1VORF9DT0xPUiIsIlNUWUxFX0JPUkRFUiIsIlNUWUxFX1RFWFRfQ09MT1IiLCJHRU5FUkFMX0RJU1BMQVkiLCJPQkpFQ1RfVkFMVUUiLCJBY3Rpb25UeXBlQ29uc3RzIiwidHJpbSIsInYiLCJjb2xvclN0eWxlUHJvcHMiLCJPYmplY3QiLCJmcmVlemUiLCJ3aWxsQ2hhbmdlUHJvcHMiLCJUUkFOU0ZPUk1fUFJFRklYRUQiLCJvYmplY3RDYWNoZSIsIk1hcCIsImNsZWFyIiwiaW5zdGFuY2VDb3VudCIsImVsZW1lbnRDb3VudCIsIml4RWxlbWVudHMiLCJyZWYiLCJrZXkiLCJpeEVsIiwiaWQiLCJldmVudHMiLCJhY3Rpb25MaXN0cyIsInNpdGUiLCJldmVudFR5cGVNYXAiLCJyZWR1Y2UiLCJyZXN1bHQiLCJldmVudCIsImV2ZW50VHlwZUlkIiwibWVkaWFRdWVyaWVzIiwibWVkaWFRdWVyeUtleXMiLCJtYXAiLCJtcSIsImNvbnNvbGUiLCJ3YXJuIiwiaXhEYXRhIiwic3RyaWN0RXF1YWwiLCJhIiwiYiIsInN0b3JlIiwic2VsZWN0Iiwib25DaGFuZ2UiLCJjb21wYXJhdG9yIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsImhhbmRsZUNoYW5nZSIsImN1cnJlbnRTdGF0ZSIsIm5leHRTdGF0ZSIsIm5vcm1hbGl6ZVRhcmdldCIsInRhcmdldCIsInR5cGUiLCJvYmplY3RJZCIsInNlbGVjdG9yIiwic2VsZWN0b3JHdWlkcyIsImFwcGxpZXNUbyIsInVzZUV2ZW50VGFyZ2V0IiwiY29uZmlnIiwiZXZlbnRUYXJnZXQiLCJlbGVtZW50Um9vdCIsImVsZW1lbnRBcGkiLCJFcnJvciIsInRhcmdldHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhY2N1bXVsYXRvciIsImNvbmNhdCIsImdldFZhbGlkRG9jdW1lbnQiLCJnZXRRdWVyeVNlbGVjdG9yIiwicXVlcnlEb2N1bWVudCIsImdldENoaWxkRWxlbWVudHMiLCJnZXRTaWJsaW5nRWxlbWVudHMiLCJtYXRjaFNlbGVjdG9yIiwiZWxlbWVudENvbnRhaW5zIiwiaXNTaWJsaW5nTm9kZSIsImhhcyIsImdldCIsInNldCIsIkV2ZW50QXBwbGllc1RvIiwiUEFHRSIsImRvYyIsIm92ZXJyaWRlcyIsImFjdGlvbiIsImFmZmVjdGVkRWxlbWVudHMiLCJvdmVycmlkZSIsInZhbGlkT3ZlcnJpZGUiLCJCb29sZWFuIiwibGltaXRBZmZlY3RlZEVsZW1lbnRzIiwiYmFzZVNlbGVjdG9yIiwiZmluYWxTZWxlY3RvciIsImV2ZW50VGFyZ2V0U2VsZWN0b3IiLCJldmVudFRhcmdldHMiLCJmaWx0ZXIiLCJwYXJlbnRFbGVtZW50Iiwic29tZSIsInRhcmdldEVsZW1lbnQiLCJjaGlsZEVsZW1lbnQiLCJzaWJsaW5nRWxlbWVudCIsIklTX0JST1dTRVJfRU5WIiwiZWxlbWVudCIsImNvbn
19970RhaW5zIiwiYWN0aW9uSXRlbSIsImFjdGlvblR5cGVJZCIsIndpbmRvdyIsInB4VmFsdWVSZWdleCIsImdldEZpbHRlckRlZmF1bHRzIiwiYWN0aW9uU3RhdGUiLCJmaWx0ZXJzIiwiZmlsdGVyRGVmYXVsdHMiLCJnZXRGb250VmFyaWF0aW9uRGVmYXVsdHMiLCJmb250VmFyaWF0aW9ucyIsImZvbnRWYXJpYXRpb24iLCJmb250VmFyaWF0aW9uRGVmYXVsdHMiLCJkZWZhdWx0VmFsdWUiLCJyZWZTdGF0ZSIsImNvbXB1dGVkU3R5bGUiLCJnZXRTdHlsZSIsImlzUGx1Z2luVHlwZSIsImdldFBsdWdpbk9yaWdpbiIsInRyYW5zZm9ybURlZmF1bHRzIiwidmFsdWUiLCJkZWZhdWx0VG8iLCJwYXJzZUZsb2F0IiwiaW5saW5lV2lkdGgiLCJpbmxpbmVIZWlnaHQiLCJ3aWR0aFZhbHVlIiwiaGVpZ2h0VmFsdWUiLCJ3aWR0aFVuaXQiLCJ0ZXN0Iiwid2lkdGgiLCJoZWlnaHRVbml0IiwiaGVpZ2h0IiwicGFyc2VDb2xvciIsImRpc3BsYXkiLCJyZWR1Y2VGaWx0ZXJzIiwicmVkdWNlRm9udFZhcmlhdGlvbnMiLCJnZXRQbHVnaW5Db25maWciLCJmaW5kTGFzdCIsImdldFBsdWdpbkRlc3RpbmF0aW9uIiwieFZhbHVlIiwieVZhbHVlIiwielZhbHVlIiwic2V0U3R5bGUiLCJnZXRQcm9wZXJ0eSIsInRlbXAiLCJyVmFsdWUiLCJnVmFsdWUiLCJiVmFsdWUiLCJhVmFsdWUiLCJnbG9iYWxTd2F0Y2hJZCIsInN0YXJ0c1dpdGgiLCJub3JtYWxpemVkVmFsdWUiLCJub3JtYWxpemVDb2xvciIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImFscGhhIiwicmVuZGVyVHlwZSIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImV2ZW50SWQiLCJzdHlsZVByb3AiLCJwbHVnaW5JbnN0YW5jZSIsInJlbmRlclRyYW5zZm9ybSIsInJlbmRlclN0eWxlIiwicmVuZGVyR2VuZXJhbCIsInJlbmRlclBsdWdpbiIsImJsdXIiLCJpbnZlcnQiLCJncmF5c2NhbGUiLCJzYXR1cmF0ZSIsInNlcGlhIiwiY29udHJhc3QiLCJicmlnaHRuZXNzIiwid2dodCIsIm9wc3oiLCJ3ZHRoIiwic2xudCIsImdldEZpbHRlclVuaXQiLCJmaWx0ZXJUeXBlIiwiYWN0aW9uSXRlbUNvbmZpZyIsInVuaXQiLCJ0cmFuc2Zvcm1LZXlzIiwia2V5cyIsIm5ld1RyYW5zZm9ybSIsImRlZmF1bHRzIiwieFVuaXQiLCJ5VW5pdCIsInpVbml0Iiwiam9pbiIsImFkZFdpbGxDaGFuZ2UiLCJoYXNEZWZpbmVkM2RUcmFuc2Zvcm0iLCJUUkFOU0ZPUk1fU1RZTEVfUFJFRklYRUQiLCJyZW5kZXJGaWx0ZXIiLCJmaWx0ZXJWYWx1ZSIsInJlbmRlckZvbnRWYXJpYXRpb24iLCJmb250VmFyaWF0aW9uVmFsdWUiLCJwdXNoIiwidW5kZWZpbmVkIiwicGFyYW1DYXB0dXJlIiwicmdiVmFsaWRSZWdleCIsInJnYk1hdGNoUmVnZXgiLCJSZWdFeHAiLCJnZXRGaXJzdE1hdGNoIiwicmVnZXgiLCJtYXRjaCIsImV4ZWMiLCJwcm9wIiwiaW5saW5lVmFsdWUiLCJtYXRjaGVzIiwic3BsaXQiLCJwYXJzZUludCIsIk1hdGgiLCJyb3VuZCIsIkZMRVhfUFJFRklYRUQiLCJ2YWxpZFByb3AiLCJ2YWx1ZXMiLCJpbmRleE9mIiwicmVtb3ZlV2lsbENoYW5nZSIsImZvckVhY2giLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25MaXN0IiwiY2xlYXJBY3Rpb25MaXN0U3R5bGVzIiwiYWN0aW9uSXRlbUdyb3VwcyIsImNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMiLCJhY3Rpb25Hcm91cCIsImNsZWFyQWN0aW9uR3JvdXBTdHlsZXMiLCJwYXJhbUdyb3VwIiwiY29udGludW91c0FjdGlvbkdyb3VwcyIsImFjdGlvbkl0ZW1zIiwiY2xlYXJFbGVtZW50IiwiY2xlYXJQbHVnaW4iLCJwcm9jZXNzRWxlbWVudEJ5VHlwZSIsImVmZmVjdCIsImNsZWFyU3R5bGVQcm9wIiwibWF4RHVyYXRpb24iLCJyZXN1bHRJbmRleCIsImluZGV4IiwidG90YWwiLCJkZWxheSIsImR1cmF0aW9uIiwiaW5zdGFuY2UiLCJ1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUiLCJpbnN0YW5jZUl0ZW0iLCJ2ZXJib3NlVGltZUVsYXBzZWQiLCJ0b3RhbER1cmF0aW9uIiwiZWxhcHNlZER1cmF0aW9uIiwiZ3JvdXAiLCJjYXJyaWVySXRlbSIsIm9wdGltaXplRmxvYXQiLCJhY3Rpb25JdGVtSWQiLCJyYXdEYXRhIiwibmV3QWN0aW9uSXRlbXMiLCJ0YWtlSXRlbVVudGlsTWF0Y2giLCJtZXJnZUluIiwic2V0SW4iLCJiYXNlZE9uIiwiRXZlbnRUeXBlQ29uc3RzIiwiU0NST0xMSU5HX0lOX1ZJRVciLCJFdmVudEJhc2VkT24iLCJFTEVNRU5UIiwiTU9VU0VfTU9WRSIsImV2ZW50U3RhdGVLZXkiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCIsIm5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsIm1lZGlhUXVlcnlLZXkiLCJsaXN0QSIsImxpc3RCIiwic29ydCIsInBsdWdpbkVsZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUFtcUNOQSxrQkFBa0I7ZUFBbEJBOztJQTdEQUMsY0FBYztlQUFkQTs7SUExOEJBQyxnQkFBZ0I7ZUFBaEJBOztJQTBtQ0FDLHFCQUFxQjtlQUFyQkE7O0lBdi9CQUMsbUJBQW1CO2VBQW5CQTs7SUEwSkFDLGdCQUFnQjtlQUFoQkE7O0lBcU5BQyxvQkFBb0I7ZUFBcEJBOztJQXhkQUMsWUFBWTtlQUFaQTs7SUFMQUMsYUFBYTtlQUFiQTs7SUF5VEFDLGlCQUFpQjtlQUFqQkE7O0lBMElIQyxrQkFBa0I7ZUFBbEJBOztJQW1wQkdDLHVCQUF1QjtlQUF2QkE7O0lBeUdBQyx3QkFBd0I7ZUFBeEJBOztJQTlvQkFDLGFBQWE7ZUFBYkE7O0lBZUFDLFlBQVk7ZUFBWkE7O0lBaXBCQUMsaUJBQWlCO2VBQWpCQTs7SUF2cENBQyxZQUFZO2VBQVpBOztJQWtrQ0FDLGlCQ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
19971
19972}),
19973"7164": (function (__unused_webpack_module, exports) {
19974"use strict";
19975// from https://github.com/acdlite/recompose/blob/master/src/packages/recompose/shallowEqual.js
19976/**
19977 * Copyright (c) 2013-present, Facebook, Inc.
19978 *
19979 * This source code is licensed under the MIT license found in the
19980 * LICENSE file in the root directory of this source tree.
19981 *
19982 * @providesModule shallowEqual
19983 * @typechecks
19984 */ /* eslint-disable no-self-compare */ /**
19985 * inlined Object.is polyfill to avoid requiring consumers ship their own
19986 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
19987 */ 
19988Object.defineProperty(exports, "__esModule", ({
19989    value: true
19990}));
19991Object.defineProperty(exports, "default", ({
19992    enumerable: true,
19993    get: function() {
19994        return _default;
19995    }
19996}));
19997function is(x, y) {
19998    // SameValue algorithm
19999    if (x === y) {
20000        // Steps 1-5, 7-10
20001        // Steps 6.b-6.e: +0 != -0
20002        // Added the nonzero y check to make Flow happy, but it is redundant
20003        return x !== 0 || y !== 0 || 1 / x === 1 / y;
20004    }
20005    // Step 6.a: NaN == NaN
20006    return x !== x && y !== y;
20007}
20008/**
20009 * Performs equality by iterating through keys on an object and returning false
20010 * when any key has values which are not strictly equal between the arguments.
20011 * Returns true when the values of all keys are strictly equal.
20012 */ function shallowEqual(objA, objB) {
20013    if (is(objA, objB)) {
20014        return true;
20015    }
20016    if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
20017        return false;
20018    }
20019    const keysA = Object.keys(objA);
20020    const keysB = Object.keys(objB);
20021    if (keysA.length !== keysB.length) {
20022        return false;
20023    }
20024    // Test for A's keys different from B.
20025    for(let i = 0; i < keysA.length; i++){
20026        if (!Object.hasOwn(objB, // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'PropertyKey'.
20027        keysA[i]) || // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type.
20028        !is(objA[keysA[i]], objB[keysA[i]])) {
20029            return false;
20030        }
20031    }
20032    return true;
20033}
20034const _default = shallowEqual;
20035
20036//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNoYWxsb3dFcXVhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hY2RsaXRlL3JlY29tcG9zZS9ibG9iL21hc3Rlci9zcmMvcGFja2FnZXMvcmVjb21wb3NlL3NoYWxsb3dFcXVhbC5qc1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzaGFsbG93RXF1YWxcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHg6IG51bWJlciB8IFJlY29yZDxhbnksIGFueT4sIHk6IG51bWJlciB8IFJlY29yZDxhbnksIGFueT4pIHtcbiAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICBpZiAoeCA9PT0geSkge1xuICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgLy8gQWRkZWQgdGhlIG5vbnplcm8geSBjaGVjayB0byBtYWtlIEZsb3cgaGFwcHksIGJ1dCBpdCBpcyByZWR1bmRhbnRcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgfVxuICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBOiBSZWNvcmQ8YW55LCBhbnk+LCBvYmpCOiBSZWNvcmQ8YW55LCBhbnk+KTogYm9vbGVhbiB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fFxuICAgIG9iakEgPT09IG51bGwgfHxcbiAgICB0eX
20036Blb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHxcbiAgICBvYmpCID09PSBudWxsXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChcbiAgICAgICFPYmplY3QuaGFzT3duKFxuICAgICAgICBvYmpCLFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnUHJvcGVydHlLZXknLlxuICAgICAgICBrZXlzQVtpXVxuICAgICAgKSB8fFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjUzOCAtIFR5cGUgJ3VuZGVmaW5lZCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS4gfCBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgICAhaXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaGFsbG93RXF1YWw7XG4iXSwibmFtZXMiOlsiaXMiLCJ4IiwieSIsInNoYWxsb3dFcXVhbCIsIm9iakEiLCJvYmpCIiwia2V5c0EiLCJPYmplY3QiLCJrZXlzIiwia2V5c0IiLCJsZW5ndGgiLCJpIiwiaGFzT3duIl0sIm1hcHBpbmdzIjoiQUFBQSwrRkFBK0Y7QUFFL0Y7Ozs7Ozs7O0NBUUMsR0FFRCxrQ0FBa0MsR0FFbEM7OztDQUdDOzs7OytCQXlERDs7O2VBQUE7OztBQXhEQSxTQUFTQSxHQUFHQyxDQUE0QixFQUFFQyxDQUE0QjtJQUNwRSxzQkFBc0I7SUFDdEIsSUFBSUQsTUFBTUMsR0FBRztRQUNYLGtCQUFrQjtRQUNsQiwwQkFBMEI7UUFDMUIsb0VBQW9FO1FBQ3BFLE9BQU9ELE1BQU0sS0FBS0MsTUFBTSxLQUFLLElBQUlELE1BQU0sSUFBSUM7SUFDN0M7SUFDQSx1QkFBdUI7SUFDdkIsT0FBT0QsTUFBTUEsS0FBS0MsTUFBTUE7QUFDMUI7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0MsYUFBYUMsSUFBc0IsRUFBRUMsSUFBc0I7SUFDbEUsSUFBSUwsR0FBR0ksTUFBTUMsT0FBTztRQUNsQixPQUFPO0lBQ1Q7SUFFQSxJQUNFLE9BQU9ELFNBQVMsWUFDaEJBLFNBQVMsUUFDVCxPQUFPQyxTQUFTLFlBQ2hCQSxTQUFTLE1BQ1Q7UUFDQSxPQUFPO0lBQ1Q7SUFFQSxNQUFNQyxRQUFRQyxPQUFPQyxJQUFJLENBQUNKO0lBQzFCLE1BQU1LLFFBQVFGLE9BQU9DLElBQUksQ0FBQ0g7SUFFMUIsSUFBSUMsTUFBTUksTUFBTSxLQUFLRCxNQUFNQyxNQUFNLEVBQUU7UUFDakMsT0FBTztJQUNUO0lBRUEsc0NBQXNDO0lBQ3RDLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJTCxNQUFNSSxNQUFNLEVBQUVDLElBQUs7UUFDckMsSUFDRSxDQUFDSixPQUFPSyxNQUFNLENBQ1pQLE1BQ0EsMEhBQTBIO1FBQzFIQyxLQUFLLENBQUNLLEVBQUUsS0FFViw2SUFBNkk7UUFDN0ksQ0FBQ1gsR0FBR0ksSUFBSSxDQUFDRSxLQUFLLENBQUNLLEVBQUUsQ0FBQyxFQUFFTixJQUFJLENBQUNDLEtBQUssQ0FBQ0ssRUFBRSxDQUFDLEdBQ2xDO1lBQ0EsT0FBTztRQUNUO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7TUFFQSxXQUFlUiJ9
20037
20038}),
20039"5861": (function (__unused_webpack_module, exports, __webpack_require__) {
20040"use strict";
20041
20042Object.defineProperty(exports, "__esModule", ({
20043    value: true
20044}));
20045function _export(target, all) {
20046    for(var name in all)Object.defineProperty(target, name, {
20047        enumerable: true,
20048        get: all[name]
20049    });
20050}
20051_export(exports, {
20052    createElementState: function() {
20053        return createElementState;
20054    },
20055    ixElements: function() {
20056        return ixElements;
20057    },
20058    mergeActionState: function() {
20059        return mergeActionState;
20060    }
20061});
20062const _timm = __webpack_require__(1185);
20063const _sharedconstants = __webpack_require__(7087);
20064const { HTML_ELEMENT, PLAIN_OBJECT, ABSTRACT_NODE, CONFIG_X_VALUE, CONFIG_Y_VALUE, CONFIG_Z_VALUE, CONFIG_VALUE, CONFIG_X_UNIT, CONFIG_Y_UNIT, CONFIG_Z_UNIT, CONFIG_UNIT } = _sharedconstants.IX2EngineConstants;
20065const { IX2_SESSION_STOPPED, IX2_INSTANCE_ADDED, IX2_ELEMENT_STATE_CHANGED } = _sharedconstants.IX2EngineActionTypes;
20066const initialState = {};
20067const refState = 'refState';
20068const ixElements = (state = initialState, action = {})=>{
20069    switch(action.type){
20070        case IX2_SESSION_STOPPED:
20071            {
20072                return initialState;
20073            }
20074        case IX2_INSTANCE_ADDED:
20075            {
20076                const { elementId, element: ref, origin, actionItem, refType } = action.payload;
20077                const { actionTypeId } = actionItem;
20078                let newState = state;
20079                // Create new ref entry if it doesn't exist
20080                if ((0, _timm.getIn)(newState, [
20081                    elementId,
20082                    ref
20083                ]) !== ref) {
20084                    newState = createElementState(newState, ref, refType, elementId, actionItem);
20085                }
20086                // Merge origin values into ref state
20087                return mergeActionState(newState, elementId, actionTypeId, origin, actionItem);
20088            }
20089        case IX2_ELEMENT_STATE_CHANGED:
20090            {
20091                const { elementId, actionTypeId, current, actionItem } = action.payload;
20092                return mergeActionState(state, elementId, actionTypeId, current, actionItem);
20093            }
20094        default:
20095            {
20096                return state;
20097            }
20098    }
20099};
20100function createElementState(state, ref, refType, elementId, actionItem) {
20101    const refId = refType === PLAIN_OBJECT ? (0, _timm.getIn)(actionItem, [
20102        'config',
20103        'target',
20104        'objectId'
20105    ]) : null;
20106    return (0, _timm.mergeIn)(state, [
20107        elementId
20108    ], {
20109        id: elementId,
20110        ref,
20111        refId,
20112        refType
20113    });
20114}
20115function mergeActionState(state, elementId, actionTypeId, actionState, actionItem) {
20116    const units = pickUnits(actionItem);
20117    const mergePath = [
20118        elementId,
20119        refState,
20120        actionTypeId
20121    ];
20122    return (0, _timm.mergeIn)(state, mergePath, actionState, units);
20123}
20124const valueUnitPairs = [
20125    [
20126        CONFIG_X_VALUE,
20127        CONFIG_X_UNIT
20128    ],
20129    [
20130        CONFIG_Y_VALUE,
20131        CONFIG_Y_UNIT
20132    ],
20133    [
20134        CONFIG_Z_VALUE,
20135        CONFIG_Z_UNIT
20136    ],
20137    [
20138        CONFIG_VALUE,
20139        CONFIG_UNIT
20140    ]
20141];
20142function pickUnits(actionItem) {
20143    const { config } = actionItem;
20144    return valueUnitPairs.reduce((result, pair)=>{
20145        const valueKey = pair[0];
20146        const unitKey = pair[1];
20147        // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type.
20148        const configValue = config[valueKey];
20149        // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type.
20150        const configUnit = config[unitKey];
20151        if (configValue != null && configUnit != null) {
20152            // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type.
20153            result[unitKey] = configUnit;
20154        }
20155        return result;
20156    }, {});
20157}
20158
20159//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklYMkVsZW1lbnRzUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldEluLCBtZXJnZUlufSBmcm9tICd0aW1tJztcbmltcG9ydCB7XG4gIElYMkVuZ2luZUFjdGlvblR5cGVzLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuY29uc3Qge1xuICBIVE1MX0VMRU1FTlQsXG4gIFBMQUlOX09CSkVDVCxcbiAgQUJTVFJBQ1RfTk9ERSxcbiAgQ09ORklHX1hfVkFMVUUsXG4gIENPTkZJR19ZX1ZBTFVFLFxuICBDT05GSUdfWl9WQUxVRSxcbiAgQ09ORklHX1ZBTFVFLFxuICBDT05GSUdfWF9VTklULFxuICBDT05GSUdfWV9VTklULFxuICBDT05GSUdfWl9VTklULFxuICBDT05GSUdfVU5JVCxcbn0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5cbmNvbnN0IHtJWDJfU0VTU0lPTl9TVE9QUEVELCBJWDJfSU5TVEFOQ0VfQURERUQsIElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUR9ID1cbiAgSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5cbnR5cGUgUmVmVHlwZXMgPVxuICB8IHR5cGVvZiBIVE1MX0VMRU1FTlRcbiAgfCB0eXBlb2YgUExBSU5fT0JKRUNUXG4gIHwgdHlwZW9mIEFCU1RSQUNUX05PREU7XG5cbnR5cGUgQWN0aW9uU3RhdGUgPSB7XG4gIHhWYWx1ZT86IG51bWJlcjtcbiAgeVZhbHVlPzogbnVtYmVyO1xuICB6VmFsdWU/OiBudW1iZXI7XG4gIHZhbHVlPzogbnVtYmVyO1xuICB4VW5pdD86IHN0cmluZztcbiAgeVVuaXQ/OiBzdHJpbmc7XG4gIHpVbml0Pzogc3RyaW5nO1xuICB1bml0Pzogc3RyaW5nO1xufTtcblxudHlwZSBFbGVtZW50c1N0YXRlID0ge1xuICBbZWxlbWVudElkOiBzdHJpbmddOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICByZWY6IHVua25vd247IC8vIEhUTUxFbGVtZW50IHwgT2JqZWN0O1xuICAgIHJlZklkOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZlR5cGU6IFJlZlR5cGVzO1xuICAgIHJlZlN0YXRlOiB7XG4gICAgICBbYWN0aW9uVHlwZUlkOiBzdHJpbmddOiBBY3Rpb25TdGF0ZTtcbiAgICB9O1xuICB9O1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBFbGVtZW50c1N0YXRlID0ge307XG5jb25zdCByZWZTdGF0ZSA9ICdyZWZTdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBpeEVsZW1lbnRzID0gKFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZSA9IGluaXRpYWxTdGF0ZSxcbiAgYWN0aW9uOiBSZWNvcmQ8YW55LCBhbnk+ID0ge31cbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVE9QUEVEOiB7XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9JTlNUQU5DRV9BRERFRDoge1xuICAgICAgY29uc3Qge1xuICAgICAgICBlbGVtZW50SWQsXG4gICAgICAgIGVsZW1lbnQ6IHJlZixcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBhY3Rpb25JdGVtLFxuICAgICAgICByZWZUeXBlLFxuICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBsZXQgbm
20159V3U3RhdGUgPSBzdGF0ZTtcblxuICAgICAgLy8gQ3JlYXRlIG5ldyByZWYgZW50cnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgaWYgKGdldEluKG5ld1N0YXRlLCBbZWxlbWVudElkLCByZWZdKSAhPT0gcmVmKSB7XG4gICAgICAgIG5ld1N0YXRlID0gY3JlYXRlRWxlbWVudFN0YXRlKFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIHJlZixcbiAgICAgICAgICByZWZUeXBlLFxuICAgICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgICBhY3Rpb25JdGVtXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1lcmdlIG9yaWdpbiB2YWx1ZXMgaW50byByZWYgc3RhdGVcbiAgICAgIHJldHVybiBtZXJnZUFjdGlvblN0YXRlKFxuICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICBhY3Rpb25UeXBlSWQsXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgYWN0aW9uSXRlbVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBJWDJfRUxFTUVOVF9TVEFURV9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7ZWxlbWVudElkLCBhY3Rpb25UeXBlSWQsIGN1cnJlbnQsIGFjdGlvbkl0ZW19ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gbWVyZ2VBY3Rpb25TdGF0ZShcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICBhY3Rpb25JdGVtXG4gICAgICApO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFN0YXRlKFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZSxcbiAgcmVmOiB1bmtub3duLFxuICByZWZUeXBlOiBSZWZUeXBlcyxcbiAgZWxlbWVudElkOiBzdHJpbmcsXG4gIGFjdGlvbkl0ZW06IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbikge1xuICBjb25zdCByZWZJZCA9XG4gICAgcmVmVHlwZSA9PT0gUExBSU5fT0JKRUNUXG4gICAgICA/IGdldEluKGFjdGlvbkl0ZW0sIFsnY29uZmlnJywgJ3RhcmdldCcsICdvYmplY3RJZCddKVxuICAgICAgOiBudWxsO1xuICByZXR1cm4gbWVyZ2VJbihzdGF0ZSwgW2VsZW1lbnRJZF0sIHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIHJlZixcbiAgICByZWZJZCxcbiAgICByZWZUeXBlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQWN0aW9uU3RhdGUoXG4gIHN0YXRlOiBFbGVtZW50c1N0YXRlLFxuICBlbGVtZW50SWQ6IHN0cmluZyxcbiAgYWN0aW9uVHlwZUlkOiBzdHJpbmcsXG4gIGFjdGlvblN0YXRlOiBBY3Rpb25TdGF0ZSxcbiAgYWN0aW9uSXRlbTogUmVjb3JkPGFueSwgYW55PlxuKSB7XG4gIGNvbnN0IHVuaXRzID0gcGlja1VuaXRzKGFjdGlvbkl0ZW0pO1xuICBjb25zdCBtZXJnZVBhdGggPSBbZWxlbWVudElkLCByZWZTdGF0ZSwgYWN0aW9uVHlwZUlkXTtcbiAgcmV0dXJuIG1lcmdlSW4oc3RhdGUsIG1lcmdlUGF0aCwgYWN0aW9uU3RhdGUsIHVuaXRzKTtcbn1cblxuY29uc3QgdmFsdWVVbml0UGFpcnMgPSBbXG4gIFtDT05GSUdfWF9WQUxVRSwgQ09ORklHX1hfVU5JVF0sXG4gIFtDT05GSUdfWV9WQUxVRSwgQ09ORklHX1lfVU5JVF0sXG4gIFtDT05GSUdfWl9WQUxVRSwgQ09ORklHX1pfVU5JVF0sXG4gIFtDT05GSUdfVkFMVUUsIENPTkZJR19VTklUXSxcbl07XG5cbmZ1bmN0aW9uIHBpY2tVbml0cyhhY3Rpb25JdGVtOiBSZWNvcmQ8YW55LCBhbnk+KSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uSXRlbTtcbiAgcmV0dXJuIHZhbHVlVW5pdFBhaXJzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PigocmVzdWx0LCBwYWlyKSA9PiB7XG4gICAgY29uc3QgdmFsdWVLZXkgPSBwYWlyWzBdO1xuICAgIGNvbnN0IHVuaXRLZXkgPSBwYWlyWzFdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBjb25maWdbdmFsdWVLZXldO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgY29uc3QgY29uZmlnVW5pdCA9IGNvbmZpZ1t1bml0S2V5XTtcbiAgICBpZiAoY29uZmlnVmFsdWUgIT0gbnVsbCAmJiBjb25maWdVbml0ICE9IG51bGwpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgICByZXN1bHRbdW5pdEtleV0gPSBjb25maWdVbml0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlRWxlbWVudFN0YXRlIiwiaXhFbGVtZW50cyIsIm1lcmdlQWN0aW9uU3RhdGUiLCJIVE1MX0VMRU1FTlQiLCJQTEFJTl9PQkpFQ1QiLCJBQlNUUkFDVF9OT0RFIiwiQ09ORklHX1hfVkFMVUUiLCJDT05GSUdfWV9WQUxVRSIsIkNPTkZJR19aX1ZBTFVFIiwiQ09ORklHX1ZBTFVFIiwiQ09ORklHX1hfVU5JVCIsIkNPTkZJR19ZX1VOSVQiLCJDT05GSUdfWl9VTklUIiwiQ09ORklHX1VOSVQiLCJJWDJFbmdpbmVDb25zdGFudHMiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwiaW5pdGlhbFN0YXRlIiwicmVmU3RhdGUiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJlbGVtZW50SWQiLCJlbGVtZW50IiwicmVmIiwib3JpZ2luIiwiYWN0aW9uSXRlbSIsInJlZlR5cGUiLCJwYXlsb2FkIiwiYWN0aW9uVHlwZUlkIiwibmV3U3RhdGUiLCJnZXRJbiIsImN1cnJlbnQiLCJyZWZJZCIsIm1lcmdlSW4iLCJpZCIsImFjdGlvblN0YXRlIiwidW5pdHMiLCJwaWNrVW5pdHMiLCJtZXJnZVBhdGgiLCJ2YWx1ZVVuaXRQYWlycyIsImNvbmZpZyIsInJlZHVjZSIsInJlc3VsdCIsInBhaXIiLCJ2YWx1ZUtleSIsInVuaXRLZXkiLCJjb25maWdWYWx1ZSIsImNvbmZpZ1VuaXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBOEdnQkEsa0JBQWtCO2VBQWxCQTs7SUF4REhDLFVBQVU7ZUFBVkE7O0lBNkVHQyxnQkFBZ0I7ZUFBaEJBOzs7c0JBbklhO2lDQUl0QjtBQUVQLE1BQU0sRUFDSkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsYUFBYSxFQUNiQyxXQUFXLEVBQ1osR0FBR0MsbUNBQWtCO0FBRXRCLE1BQU0sRUFBQ0MsbUJBQW1CLEVBQUVDLGtCQUFrQixFQUFFQyx5QkFBeUIsRUFBQyxHQUN4RUMscUNBQW9CO0FBOEJ0QixNQUFNQyxlQUE4QixDQUFDO0FBQ3JDLE1BQU1DLFdBQVc7QUFFVixNQUFNbkIsYUFBYSxDQUN4Qm9CLFFBQXVCRixZQUFZLEVBQ25DRyxTQUEyQixDQUFDLENBQUM7SUFFN0IsT0FBUUEsT0FBT0MsSUFBSTtRQUNqQixLQUFLUjtZQUFxQjtnQkFDeEIsT0FBT0k7WUFDVDtRQUNBLEtB
20159QUtIO1lBQW9CO2dCQUN2QixNQUFNLEVBQ0pRLFNBQVMsRUFDVEMsU0FBU0MsR0FBRyxFQUNaQyxNQUFNLEVBQ05DLFVBQVUsRUFDVkMsT0FBTyxFQUNSLEdBQUdQLE9BQU9RLE9BQU87Z0JBRWxCLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdIO2dCQUN2QixJQUFJSSxXQUFXWDtnQkFFZiwyQ0FBMkM7Z0JBQzNDLElBQUlZLElBQUFBLFdBQUssRUFBQ0QsVUFBVTtvQkFBQ1I7b0JBQVdFO2lCQUFJLE1BQU1BLEtBQUs7b0JBQzdDTSxXQUFXaEMsbUJBQ1RnQyxVQUNBTixLQUNBRyxTQUNBTCxXQUNBSTtnQkFFSjtnQkFFQSxxQ0FBcUM7Z0JBQ3JDLE9BQU8xQixpQkFDTDhCLFVBQ0FSLFdBQ0FPLGNBQ0FKLFFBQ0FDO1lBRUo7UUFDQSxLQUFLWDtZQUEyQjtnQkFDOUIsTUFBTSxFQUFDTyxTQUFTLEVBQUVPLFlBQVksRUFBRUcsT0FBTyxFQUFFTixVQUFVLEVBQUMsR0FBR04sT0FBT1EsT0FBTztnQkFDckUsT0FBTzVCLGlCQUNMbUIsT0FDQUcsV0FDQU8sY0FDQUcsU0FDQU47WUFFSjtRQUNBO1lBQVM7Z0JBQ1AsT0FBT1A7WUFDVDtJQUNGO0FBQ0Y7QUFFTyxTQUFTckIsbUJBQ2RxQixLQUFvQixFQUNwQkssR0FBWSxFQUNaRyxPQUFpQixFQUNqQkwsU0FBaUIsRUFDakJJLFVBRUM7SUFFRCxNQUFNTyxRQUNKTixZQUFZekIsZUFDUjZCLElBQUFBLFdBQUssRUFBQ0wsWUFBWTtRQUFDO1FBQVU7UUFBVTtLQUFXLElBQ2xEO0lBQ04sT0FBT1EsSUFBQUEsYUFBTyxFQUFDZixPQUFPO1FBQUNHO0tBQVUsRUFBRTtRQUNqQ2EsSUFBSWI7UUFDSkU7UUFDQVM7UUFDQU47SUFDRjtBQUNGO0FBRU8sU0FBUzNCLGlCQUNkbUIsS0FBb0IsRUFDcEJHLFNBQWlCLEVBQ2pCTyxZQUFvQixFQUNwQk8sV0FBd0IsRUFDeEJWLFVBQTRCO0lBRTVCLE1BQU1XLFFBQVFDLFVBQVVaO0lBQ3hCLE1BQU1hLFlBQVk7UUFBQ2pCO1FBQVdKO1FBQVVXO0tBQWE7SUFDckQsT0FBT0ssSUFBQUEsYUFBTyxFQUFDZixPQUFPb0IsV0FBV0gsYUFBYUM7QUFDaEQ7QUFFQSxNQUFNRyxpQkFBaUI7SUFDckI7UUFBQ3BDO1FBQWdCSTtLQUFjO0lBQy9CO1FBQUNIO1FBQWdCSTtLQUFjO0lBQy9CO1FBQUNIO1FBQWdCSTtLQUFjO0lBQy9CO1FBQUNIO1FBQWNJO0tBQVk7Q0FDNUI7QUFFRCxTQUFTMkIsVUFBVVosVUFBNEI7SUFDN0MsTUFBTSxFQUFDZSxNQUFNLEVBQUMsR0FBR2Y7SUFDakIsT0FBT2MsZUFBZUUsTUFBTSxDQUFzQixDQUFDQyxRQUFRQztRQUN6RCxNQUFNQyxXQUFXRCxJQUFJLENBQUMsRUFBRTtRQUN4QixNQUFNRSxVQUFVRixJQUFJLENBQUMsRUFBRTtRQUN2QixnRkFBZ0Y7UUFDaEYsTUFBTUcsY0FBY04sTUFBTSxDQUFDSSxTQUFTO1FBQ3BDLGdGQUFnRjtRQUNoRixNQUFNRyxhQUFhUCxNQUFNLENBQUNLLFFBQVE7UUFDbEMsSUFBSUMsZUFBZSxRQUFRQyxjQUFjLE1BQU07WUFDN0MsZ0ZBQWdGO1lBQ2hGTCxNQUFNLENBQUNHLFFBQVEsR0FBR0U7UUFDcEI7UUFDQSxPQUFPTDtJQUNULEdBQUcsQ0FBQztBQUNOIn0=
20160
20161}),
20162"4061": (function () {
20163/**
20164 * ----------------------------------------------------------------------
20165 * Webflow: Interactions: Init
20166 */
20167Webflow.require('ix').init([
20168  {"slug":"fade-in-on-load","name":"fade in on load","value":{"style":{"opacity":0},"triggers":[{"type":"load","stepsA":[{"opacity":1,"transition":"opacity 500ms ease 0ms"}],"stepsB":[]}]}},
20169  {"slug":"fade-in-on-scroll","name":"fade in on scroll","value":{"style":{"opacity":0},"triggers":[{"type":"scroll","offsetBot":"30%","stepsA":[{"opacity":1,"transition":"opacity 500ms ease 0ms"}],"stepsB":[]}]}},
20170  {"slug":"lightbox-close-button","name":"lightbox close button","value":{"style":{},"triggers":[{"type":"click","selector":".lightbox-window","stepsA":[{"opacity":0,"transition":"opacity 500ms ease 0ms"},{"display":"none"}],"stepsB":[]}]}},
20171  {"slug":"lightbox-window","name":"lightbox window","value":{"style":{},"triggers":[{"type":"click","selector":".lightbox-window","stepsA":[{"display":"block"},{"opacity":1,"transition":"opacity 500ms ease 0ms"}],"stepsB":[]}]}},
20172  {"slug":"c2a-lightbox-window","name":"c2a lightbox window","value":{"style":{},"triggers":[{"type":"click","selector":".c2a-lightbox-window","stepsA":[{"display":"block"},{"opacity":1,"transition":"opacity 500ms ease 0ms"}],"stepsB":[]}]}},
20173  {"slug":"alert-bar-close","name":"alert bar close","value":{"style":{},"triggers":[{"type":"click","selector":".alert-bar","stepsA":[{"display":"none"}],"stepsB":[]},{"type":"click","selector":".alert-bar-spacer","stepsA":[{"display":"none"}],"stepsB":[]}]}},
20174  {"slug":"preloader-fade-out","name":"preloader fade out","value":{"style":{"display":"flex"},"triggers":[{"type":"load","stepsA":[{"wait":"1600ms"},{"opacity":0,"transition":"opacity 1600ms ease 0"},{"display":"none"}],"stepsB":[]}]}},
20175  {"slug":"preloader-fade-in","name":"preloader  fade in","value":{"style":{"opacity":0,"x":"0px","y":"0px","z":"0px","scaleX":0.9,"scaleY":0.9,"scaleZ":1},"triggers":[{"type":"load","stepsA":[{"opacity":1,"transition":"opacity 700ms ease 0, transform 1100ms ease 0","scaleX":1,"scaleY":1,"scaleZ":1},{"wait":"250ms"},{"transition":"transform 600ms ease 0","scaleX":1.2,"scaleY":1.2,"scaleZ":1}],"stepsB":[]}]}},
20176  {"slug":"dropdown-content-open","name":"dropdown content open","value":{"style":{"height":"0px"},"triggers":[{"type":"dropdown","stepsA":[{"height":"auto","transition":"height 400ms ease 0"}],"stepsB":[{"height":"0px","transition":"height 400ms ease 0"}]}]}}
20177]);
20178/**
20179 * ----------------------------------------------------------------------
20180 * Webflow: Interactions 2.0: Init
20181 */
20182Webflow.require('ix2').init(
20183{"events":{"e":{"id":"e","name":"","animationType":"custom","eventTypeId":"SCROLLING_IN_VIEW","action":{"id":"","actionTypeId":"GENERAL_CONTINUOUS_ACTION","config":{"actionListId":"a","affectedElements":{},"duration":0}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".image-section","originalId":"67fce3bafa7d453399ed4cfd|e41f706b-8096-e9de-06cb-ef33bef592b6","appliesTo":"CLASS"},"targets":[{"selector":".image-section","originalId":"67fce3bafa7d453399ed4cfd|e41f706b-8096-e9de-06cb-ef33bef592b6","appliesTo":"CLASS"}],"config":[{"continuousParameterGroupId":"a-p","smoothing":50,"startsEntering":true,"addStartOffset":false,"addOffsetValue":50,"startsExiting":false,"addEndOffset":false,"endOffsetValue":50}
20183],"createdOn":1629480461907},"e-2":{"id":"e-2","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-3"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|d503e79f-15ee-cfa0-0f5b-afd5008f3de3","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|d503e79f-15ee-cfa0-0f5b-afd5008f3de3","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":25,"scrollOffsetUnit":"%","delay":400,"direction":"LEFT","effectIn":true},"createdOn":1742923043130},"e-4":{"id":"e-4","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-5"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|eb756181-67e8-c2cc-afd2-bd02134bb14c","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|eb756181-67e8-c2cc-afd2-bd02134bb14c","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":25,"scrollOffsetUnit":"%","delay":400,"direction":"RIGHT","effectIn":true},"createdOn":1742923070187},"e-6":{"id":"e-6","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-7"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|6f61bd9b-2241-1f1d-d93b-8e64878a9036","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|6f61bd9b-2241-1f1d-d93b-8e64878a9036","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":600,"direction":"TOP","effectIn":true},"createdOn":1742923113907},"e-14":{"id":"e-14","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"FADE_EFFECT","instant":false,"config":{"actionListId":"fadeIn","autoStopEventId":"e-15"}},"mediaQueries":["main"],"target":{"id":"90a29df2-2789-c0a6-4fde-2c60dc4d5e5d","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"90a29df2-2789-c0a6-4fde-2c60dc4d5e5d","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":null,"effectIn":true},"createdOn":1742923287165},"e-18":{"id":"e-18","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-19"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|1b7f66cb-802c-3c96-98d9-a776a5b3a0fe","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|1b7f66cb-802c-3c96-98d9-a776a5b3a0fe","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"TOP","effectIn":true},"createdOn":1744726390310},"e-22":{"id":"e-22","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-23"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|089693b4-696c-f1f3-735a-dd9b346ac243","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|089693b4-696c-f1f3-735a-dd9b346ac243","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"TOP","effectIn":true},"createdOn":1744729607031},"e-24":{"id":"e-24","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-25"}}
20183,"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|043e11ef-ba3d-0579-6539-2bfba16e4dcd","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|043e11ef-ba3d-0579-6539-2bfba16e4dcd","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"TOP","effectIn":true},"createdOn":1744731764260},"e-30":{"id":"e-30","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-31"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|f1e1e711-0167-d030-2048-3dfe0c778269","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|f1e1e711-0167-d030-2048-3dfe0c778269","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"TOP","effectIn":true},"createdOn":1744804937998},"e-32":{"id":"e-32","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-33"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|28911ddf-1f9e-8af6-b64e-87ef79a52d94","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|28911ddf-1f9e-8af6-b64e-87ef79a52d94","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"LEFT","effectIn":true},"createdOn":1746427758447},"e-34":{"id":"e-34","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-35"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|28911ddf-1f9e-8af6-b64e-87ef79a52da6","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|28911ddf-1f9e-8af6-b64e-87ef79a52da6","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":700,"direction":"RIGHT","effectIn":true},"createdOn":1746427776071},"e-36":{"id":"e-36","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-37"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|f688da69-f8f7-4be8-3845-1662ece9edca","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|f688da69-f8f7-4be8-3845-1662ece9edca","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"LEFT","effectIn":true},"createdOn":1746428009860},"e-38":{"id":"e-38","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-39"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|c0a493a3-0caa-19ce-7d98-ad64c153745e","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|c0a493a3-0caa-19ce-7d98-ad64c153745e","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":600,"direction":"RIGHT","effectIn":true},"createdOn":1746428031654},"e-40":{"id":"e-40","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-41"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|ba7c5c09-e3a0-d5c8-d1bc-bee3cc5d0257","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|ba7c5c09-e3a0-d5c8-d1bc-bee3cc5d0257","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":600,"direction":"TOP","effectIn":true},"createdOn":1746428112428},"e-42":{"id":"e-42","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","config":{"actionListId":"slideInLeft","autoStopEventId":"e-43"},"instant":false}
20183,"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|6629518a-0125-3e77-fea1-cb45d82626e1","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|6629518a-0125-3e77-fea1-cb45d82626e1","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":800,"direction":"LEFT","effectIn":true},"createdOn":1746428143540},"e-44":{"id":"e-44","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-45"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|fff1f8bd-ecfd-1302-9892-227480faf48a","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|fff1f8bd-ecfd-1302-9892-227480faf48a","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":600,"direction":"TOP","effectIn":true},"createdOn":1746428184463},"e-46":{"id":"e-46","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInLeft","autoStopEventId":"e-47"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|dd6eae70-c930-6a05-25f6-b2a6101272af","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|dd6eae70-c930-6a05-25f6-b2a6101272af","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"LEFT","effectIn":true},"createdOn":1746428215244},"e-48":{"id":"e-48","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInRight","autoStopEventId":"e-49"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|1b7f66cb-802c-3c96-98d9-a776a5b3a101","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|1b7f66cb-802c-3c96-98d9-a776a5b3a101","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":600,"direction":"RIGHT","effectIn":true},"createdOn":1746428242009},"e-50":{"id":"e-50","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-51"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|3fe08f4e-c066-455c-f5b4-456b89242f77","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|3fe08f4e-c066-455c-f5b4-456b89242f77","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":600,"direction":"TOP","effectIn":true},"createdOn":1746428293844},"e-52":{"id":"e-52","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-53"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|dd7e1f7a-7cbe-cc1b-81e6-752ad4bc494b","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|dd7e1f7a-7cbe-cc1b-81e6-752ad4bc494b","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":800,"direction":"TOP","effectIn":true},"createdOn":1746428311385},"e-54":{"id":"e-54","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInTop","autoStopEventId":"e-55"}},"mediaQueries":["main"],"target":{"id":"67fce3bafa7d453399ed4cfd|6aaaad11-8652-1b85-7fa3-95aad7e0936e","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"67fce3bafa7d453399ed4cfd|6aaaad11-8652-1b85-7fa3-95aad7e0936e","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":400,"direction":"TOP","effectIn":true},"createdOn":1746428463506}},"actionLists":{"a":{"id":"a","title":"image section scroll effect","continuousParameterGroups":[{"id":"a-p","type":"SCROLL_PROGRESS","parameterLabel":"Scroll","continuousActionGroups":[{"keyframe":0,"actionItems":[{"id":"a-n","actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"","duration":500,"target":{"useEventTarget":"CHILDREN","selector":".image-section-background","selectorGuids":["88c7b011-11ae-0fa4-7200-2e0737eda27e"]},"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"keyframe":100,"actionItems":[{"id":"a-n-2","actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"","duration":500,"target":{"useEventTarget":"CHILDREN","selector":".image-section-background","selectorGuids":["88c7b011-11ae-0fa4-7200-2e0737eda27e"]},"yValue":-100,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]}],"createdOn":1584044704138},"slideInLeft":{"id":"slideInLeft","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":-100,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]}
20183,"slideInRight":{"id":"slideInRight","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":100,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]},"slideInTop":{"id":"slideInTop","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":-100,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]},"fadeIn":{"id":"fadeIn","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}}]}]}},"site":{"mediaQueries":[{"key":"main","min":992,"max":10000},{"key":"medium","min":768,"max":991},{"key":"small","min":480,"max":767},{"key":"tiny","min":0,"max":479}]}}
20184);
20185
20186
20187}),
20188
20189});
20190/************************************************************************/
20191// The module cache
20192var __webpack_module_cache__ = {};
20193
20194// The require function
20195function __webpack_require__(moduleId) {
20196
20197// Check if module is in cache
20198var cachedModule = __webpack_module_cache__[moduleId];
20199if (cachedModule !== undefined) {
20200return cachedModule.exports;
20201}
20202// Create a new module (and put it into the cache)
20203var module = (__webpack_module_cache__[moduleId] = {
20204id: moduleId,
20205loaded: false,
20206exports: {}
20207});
20208// Execute the module function
20209__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
20210
20211// Flag the module as loaded
20212module.loaded = true;
20213// Return the exports of the module
20214return module.exports;
20215
20216}
20217
20218/************************************************************************/
20219// webpack/runtime/define_property_getters
20220(() => {
20221__webpack_require__.d = function(exports, definition) {
20222	for(var key in definition) {
20223        if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
20224            Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
20225        }
20226    }
20227};
20228})();
20229// webpack/runtime/esm_module_decorator
20230(() => {
20231__webpack_require__.hmd = function (module) {
20232    module = Object.create(module);
20233    if (!module.children) module.children = [];
20234    Object.defineProperty(module, 'exports', {
20235        enumerable: true,
20236        set: function () {
20237            throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
20238        }
20239    });
20240    return module;
20241};
20242})();
20243// webpack/runtime/global
20244(() => {
20245__webpack_require__.g = (function () {
20246	if (typeof globalThis === 'object') return globalThis;
20247	try {
20248		return this || new Function('return this')();
20249	} catch (e) {
20250		if (typeof window === 'object') return window;
20251	}
20252})();
20253
20254})();
20255// webpack/runtime/has_own_property
20256(() => {
20257__webpack_require__.o = function (obj, prop) {
20258	return Object.prototype.hasOwnProperty.call(obj, prop);
20259};
20260
20261})();
20262// webpack/runtime/make_namespace_object
20263(() => {
20264// define __esModule on exports
20265__webpack_require__.r = function(exports) {
20266	if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
20267		Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
20268	}
20269	Object.defineProperty(exports, '__esModule', { value: true });
20270};
20271
20272})();
20273// webpack/runtime/node_module_decorator
20274(() => {
20275__webpack_require__.nmd = function (module) {
20276    module.paths = [];
20277    if (!module.children) module.children = [];
20278    return module;
20279};
20280})();
20281// webpack/runtime/rspack_version
20282(() => {
20283__webpack_require__.rv = function () {
20284	return "1.1.8";
20285};
20286
20287})();
20288// webpack/runtime/rspack_unique_id
20289(() => {
20290__webpack_require__.ruid = "[email protected]";
20291
20292})();
20293/************************************************************************/
20294var __webpack_exports__ = {};
20295__webpack_require__(9461);__webpack_require__(7624);__webpack_require__(286);__webpack_require__(8334);__webpack_require__(2338);__webpack_require__(3695);__webpack_require__(2570);__webpack_require__(7199);__webpack_require__(941);__webpack_require__(5134);__webpack_require__(1655);__webpack_require__(9858);__webpack_require__(7527);__webpack_require__(4345);__webpack_require__(9078);__webpack_require__(2458);__webpack_require__(4539);__webpack_require__(4061);
20296})()
20297;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.