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
9430N1bWVudC5xdWVyeVNlbGVjdG9yKCc6Zm9jdXMtdmlzaWJsZScpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gOmZvY3VzLXZpc2libGUgcHNldWRvLXNlbGVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgbmF0aXZlbHlcbiAgICAgICAgICBhcHBseUZvY3VzVmlzaWJsZVBvbHlmaWxsKGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4ge3JlYWR5fTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBwbHlGb2N1c1Zpc2libGVQb2x5ZmlsbCIsInNjb3BlIiwiaGFkS2V5Ym9hcmRFdmVudCIsImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwiaW5wdXRUeXBlc0FsbG93bGlzdCIsInRleHQiLCJzZWFyY2giLCJ1cmwiLCJ0ZWwiLCJlbWFpbCIsInBhc3N3b3JkIiwibnVtYmVyIiwiZGF0ZSIsIm1vbnRoIiwid2VlayIsInRpbWUiLCJkYXRldGltZSIsImlzVmFsaWRGb2N1c1RhcmdldCIsImVsIiwiZG9jdW1lbnQiLCJub2RlTmFtZSIsImNsYXNzTGlzdCIsImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwidHlwZSIsInRhZ05hbWUiLCJyZWFkT25seSIsImlzQ29udGVudEVkaXRhYmxlIiwiYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlRm9jdXNWaXNpYmxlQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwib25LZXlEb3duIiwiZSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJjdHJsS2V5IiwiYWN0aXZlRWxlbWVudCIsIm9uUG9pbnRlckRvd24iLCJvbkZvY3VzIiwidGFyZ2V0Iiwib25CbHVyIiwiaGFzQXR0cmlidXRlIiwid2luZG93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsInZpc2liaWxpdHlTdGF0ZSIsImFkZEluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbkluaXRpYWxQb2ludGVyTW92ZSIsInJlbW92ZUluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b0xvd2VyQ2FzZSIsInJlYWR5IiwicXVlcnlTZWxlY3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCLEdBRTVCOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0Qjs7Q0FFQyxHQUNERCxRQUFRRSxNQUFNLENBQ1osaUJBQ0NDLE9BQU9DLE9BQU8sR0FBRztJQUNoQjs7Ozs7O0tBTUMsR0FDRCxTQUFTQywwQkFBMEJDLEtBQUs7UUFDdEMsSUFBSUMsbUJBQW1CO1FBQ3ZCLElBQUlDLDBCQUEwQjtRQUM5QixJQUFJQyxpQ0FBaUM7UUFFckMsSUFBSUMsc0JBQXNCO1lBQ3hCQyxNQUFNO1lBQ05DLFFBQVE7WUFDUkMsS0FBSztZQUNMQyxLQUFLO1lBQ0xDLE9BQU87WUFDUEMsVUFBVTtZQUNWQyxRQUFRO1lBQ1JDLE1BQU07WUFDTkMsT0FBTztZQUNQQyxNQUFNO1lBQ05DLE1BQU07WUFDTkMsVUFBVTtZQUNWLGtCQUFrQjtRQUNwQjtRQUVBOzs7O09BSUMsR0FDRCxTQUFTQyxtQkFBbUJDLEVBQUU7WUFDNUIsSUFDRUEsTUFDQUEsT0FBT0MsWUFDUEQsR0FBR0UsUUFBUSxLQUFLLFVBQ2hCRixHQUFHRSxRQUFRLEtBQUssVUFDaEIsZUFBZUYsTUFDZixjQUFjQSxHQUFHRyxTQUFTLEVBQzFCO2dCQUNBLE9BQU87WUFDVDtZQUNBLE9BQU87UUFDVDtRQUVBOzs7Ozs7T0FNQyxHQUNELFNBQVNDLDhCQUE4QkosRUFBRTtZQUN2QyxJQUFJSyxPQUFPTCxHQUFHSyxJQUFJO1lBQ2xCLElBQUlDLFVBQVVOLEdBQUdNLE9BQU87WUFFeEIsSUFBSUEsWUFBWSxXQUFXcEIsbUJBQW1CLENBQUNtQixLQUFLLElBQUksQ0FBQ0wsR0FBR08sUUFBUSxFQUFFO2dCQUNwRSxPQUFPO1lBQ1Q7WUFFQSxJQUFJRCxZQUFZLGNBQWMsQ0FBQ04sR0FBR08sUUFBUSxFQUFFO2dCQUMxQyxPQUFPO1lBQ1Q7WUFFQSxJQUFJUCxHQUFHUSxpQkFBaUIsRUFBRTtnQkFDeEIsT0FBTztZQUNUO1lBRUEsT0FBTztRQUNUO1FBRUEsU0FBU0MseUJBQXlCVCxFQUFFO1lBQ2xDLElBQUlBLEdBQUdVLFlBQVksQ0FBQywwQkFBMEI7Z0JBQzVDO1lBQ0Y7WUFDQVYsR0FBR1csWUFBWSxDQUFDLHlCQUF5QjtRQUMzQztRQUVBLFNBQVNDLDRCQUE0QlosRUFBRTtZQUNyQyxJQUFJLENBQUNBLEdBQUdVLFlBQVksQ0FBQywwQkFBMEI7Z0JBQzdDO1lBQ0Y7WUFDQVYsR0FBR2EsZUFBZSxDQUFDO1FBQ3JCO1FBRUE7Ozs7Ozs7T0FPQyxHQUNELFNBQVNDLFVBQVVDLENBQUM7WUFDbEIsSUFBSUEsRUFBRUMsT0FBTyxJQUFJRCxFQUFFRSxNQUFNLElBQUlGLEVBQUVHLE9BQU8sRUFBRTtnQkFDdEM7WUFDRjtZQUVBLElBQUluQixtQkFBbUJqQixNQUFNcUMsYUFBYSxHQUFHO2dCQUMzQ1YseUJBQXlCM0IsTUFBTXFDLGFBQWE7WUFDOUM7WUFFQXBDLG1CQUFtQjtRQUNyQjtRQUVBOzs7Ozs7O09BT0MsR0FDRCxTQUFTcUM7WUFDUHJDLG1CQUFtQjtRQUNyQjtRQUVBOzs7Ozs7T0FNQyxHQUNELFNBQVNzQyxRQUFRTixDQUFDO1lBQ2hCLHlEQUF5RDtZQUN6RCxJQUFJLENBQUNoQixtQkFBbUJnQixFQUFFTyxNQUFNLEdBQUc7Z0JBQ2pDO1lBQ0Y7WUFFQSxJQUFJdkMsb0JBQW9CcUIsOEJBQThCVyxFQUFFTyxNQUFNLEdBQUc7Z0JBQy9EYix5QkFBeUJNLEVBQUVPLE1BQU07WUFDbkM7UUFDRjtRQUVBOzs7T0FHQyxHQUNELFNBQVNDLE9BQU9SLENBQUM7WUFDZixJQUFJLENBQUNoQixtQkFBbUJnQixFQUFFTyxNQUFNLEdBQUc7Z0JBQ2pDO1lBQ0Y7WUFFQSxJQUFJUCxFQUFFTyxNQUFNLENBQUNFLFlBQVksQ0FBQywwQkFBMEI7Z0JBQ2xELG1FQUFtRTtnQkFDbkUsa0NBQWtDO2dCQUNsQyxvRUFBb0U7Z0JBQ3BFLHdCQUF3QjtnQkFDeEJ4QywwQkFBMEI7Z0JBQzFCeUMsT0FBT0MsWUFBWSxDQUFDekM7Z0JBQ3BCQSxpQ0FBaUN3QyxPQUFPRSxVQUFVLENBQUM7b0JBQ2pEM0MsMEJBQTBCO2dCQUM1QixHQUFHO2dCQUNINEIsNEJBQTRCRyxFQUFFTyxNQUFNO1lBQ3RDO1FBQ0Y7UUFFQTs7OztPQUlDLEdBQ0QsU0FBU007WUFDUCxJQUFJM0IsU0FBUzRCLGVBQWUsS0FBSyxVQUFVO2dCQUN6Qyx5RUFBeUU7Z0JBQ3pFLG1EQUFtRDtnQkFDbkQscUVBQXFFO2dCQUNyRSw2REFBNkQ7Z0JBQzdELElBQUk3Qyx5QkFBeUI7b0JBQzNCRCxtQkFBbUI7Z0JBQ3JCO2dCQUNBK0M7WUFDRjtRQUNGO1FBRUE7Ozs7O09BS0MsR0FDRCxTQUFTQTtZQUNQN0IsU0FBUzhCLGdCQUFnQixDQUFDLGFBQWFDO1lBQ3ZDL0IsU0FBUzhCLGdCQUFnQixDQUFDLGFBQWFDO1lBQ3ZDL0IsU0FBUzhCLGdCQUFnQixDQUFDLFdBQVdDO1lBQ3JDL0IsU0FBUzhCLGdCQUFnQixDQUFDLGVBQWVDO1lBQ3pDL0IsU0FBUzhCLGdCQUFnQixDQUFDLGVBQWVDO1lBQ3pDL0IsU0FBUzhCLGdCQUFnQixDQUFDLGFBQWFDO1lBQ3ZDL0IsU0FBUzhCLGdCQUFnQixDQUFDLGFBQWFDO1lBQ3ZDL0IsU0FBUzhCLGdCQUFnQixDQUFDLGNBQWNDO1lBQ3hDL0IsU0FBUzhCLGdCQUFnQixDQUFDLFlBQVlDO1FBQ3hDO1FBRUEsU0FBU0M7WUFDUGhDLFNBQVNpQyxtQk
9430FBbUIsQ0FBQyxhQUFhRjtZQUMxQy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxhQUFhRjtZQUMxQy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxXQUFXRjtZQUN4Qy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxlQUFlRjtZQUM1Qy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxlQUFlRjtZQUM1Qy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxhQUFhRjtZQUMxQy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxhQUFhRjtZQUMxQy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxjQUFjRjtZQUMzQy9CLFNBQVNpQyxtQkFBbUIsQ0FBQyxZQUFZRjtRQUMzQztRQUVBOzs7Ozs7T0FNQyxHQUNELFNBQVNBLHFCQUFxQmpCLENBQUM7WUFDN0IsMkVBQTJFO1lBQzNFLGtFQUFrRTtZQUNsRSxJQUFJQSxFQUFFTyxNQUFNLENBQUNwQixRQUFRLElBQUlhLEVBQUVPLE1BQU0sQ0FBQ3BCLFFBQVEsQ0FBQ2lDLFdBQVcsT0FBTyxRQUFRO2dCQUNuRTtZQUNGO1lBRUFwRCxtQkFBbUI7WUFDbkJrRDtRQUNGO1FBRUEsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSw0REFBNEQ7UUFDNURoQyxTQUFTOEIsZ0JBQWdCLENBQUMsV0FBV2pCLFdBQVc7UUFDaERiLFNBQVM4QixnQkFBZ0IsQ0FBQyxhQUFhWCxlQUFlO1FBQ3REbkIsU0FBUzhCLGdCQUFnQixDQUFDLGVBQWVYLGVBQWU7UUFDeERuQixTQUFTOEIsZ0JBQWdCLENBQUMsY0FBY1gsZUFBZTtRQUN2RG5CLFNBQVM4QixnQkFBZ0IsQ0FBQyxvQkFBb0JILG9CQUFvQjtRQUVsRUU7UUFFQSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSx1Q0FBdUM7UUFDdkNoRCxNQUFNaUQsZ0JBQWdCLENBQUMsU0FBU1YsU0FBUztRQUN6Q3ZDLE1BQU1pRCxnQkFBZ0IsQ0FBQyxRQUFRUixRQUFRO0lBQ3pDO0lBRUEsU0FBU2E7UUFDUCxJQUFJLE9BQU9uQyxhQUFhLGFBQWE7WUFDbkMsSUFBSTtnQkFDRixvRkFBb0Y7Z0JBQ3BGQSxTQUFTb0MsYUFBYSxDQUFDO1lBQ3pCLEVBQUUsT0FBT3RCLEdBQUc7Z0JBQ1YsMkRBQTJEO2dCQUMzRGxDLDBCQUEwQm9CO1lBQzVCO1FBQ0Y7SUFDRjtJQUVBLGdCQUFnQjtJQUNoQixPQUFPO1FBQUNtQztJQUFLO0FBQ2YifQ== 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
10696BQVEwQixHQUFHLENBQUMsWUFBWSxtQkFBbUI7SUFDekQsSUFBSUMsaUJBQ0YsYUFDQUYsVUFDQSxpQkFDQUEsVUFDQTtJQUVGLElBQUlHLG9CQUFvQjtJQUV4Qjs7Ozs7S0FLQyxHQUNELElBQUlDLG9CQUNGLHVDQUF1Q0Qsb0JBQW9CO0lBRTdELElBQUlFLHlCQUNGO0lBRUYsSUFBSUMsZ0JBQWdCZixTQUFTZ0IsYUFBYSxDQUFDO0lBQzNDRCxjQUFjRSxXQUFXLENBQUNqQixTQUFTa0IsY0FBYyxDQUFDSjtJQUVsRCxTQUFTakI7UUFDUCxJQUFJO1lBQ0YsT0FBT3NCLFFBQVF6QixPQUFPMEIsWUFBWTtRQUNwQyxFQUFFLE9BQU9DLEdBQUc7WUFDVixPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQUlDLFlBQVk7SUFFaEI7OztLQUdDLEdBQ0QsU0FBU0MsbUJBQW1CQyxJQUFJO1FBQzlCLE9BQ0VGLFVBQVVHLElBQUksQ0FBQ0QsS0FBS0UsSUFBSSxLQUN4QkYsS0FBS0csSUFBSSxHQUFHSCxLQUFLSSxRQUFRLEtBQUtuQyxJQUFJa0MsSUFBSSxHQUFHbEMsSUFBSW1DLFFBQVE7SUFFekQ7SUFFQTs7OztLQUlDLEdBQ0QsTUFBTUMsMEJBQ0osT0FBT25DLE9BQU9vQyxVQUFVLEtBQUssY0FDN0JwQyxPQUFPb0MsVUFBVSxDQUFDO0lBQ3BCLFNBQVNDO1FBQ1AsT0FDRS9CLFNBQVNFLElBQUksQ0FBQzhCLFlBQVksQ0FBQyw2QkFBNkIsVUFDeERILHdCQUF3QkksT0FBTztJQUVuQztJQUVBLFNBQVNDLGFBQWFDLEdBQUcsRUFBRUMsTUFBTTtRQUMvQixJQUFJQztRQUVKLE9BQVFEO1lBQ04sS0FBSztnQkFDSEMsa0JBQWtCRixJQUFJRyxJQUFJLENBQUM7Z0JBRTNCLElBQUlELGlCQUFpQjtvQkFDbkJGLElBQUlHLElBQUksQ0FBQyx5QkFBeUJEO2dCQUNwQyxPQUFPO29CQUNMRixJQUFJRyxJQUFJLENBQUMsWUFBWTtnQkFDdkI7Z0JBQ0E7WUFFRixLQUFLO2dCQUNIRCxrQkFBa0JGLElBQUlHLE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 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
12480FNjcm9sbExlZnRNYXgiLCJzY3JvbGxXaWR0aCIsIm5ld1Njcm9sbExlZnQiLCJNYXRoIiwibWF4IiwibWluIiwiJHNwaW5uZXIiLCJjbGFzc05hbWUiLCJkZWxheSIsInByb3RvdHlwZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHJpbmciLCJpc1NlbGVjdG9yIiwicmVwbGFjZSIsInNob3VsZEFkZCIsImlzSGlkZGVuIiwidGFnIiwiY3JlYXRlRWxlbWVudCIsInN2ZyIsImVuY29kZVVSSSIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiaU9TUmVnZXgiLCJpT1NNYXRjaGVzIiwibWF0Y2giLCJhbmRyb2lkIiwiaW5kZXhPZiIsInN0eWxlTm9kZSIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZWZyZXNoIiwidmgiLCJpbm5lckhlaWdodCIsInZ3IiwiaW5uZXJXaWR0aCIsInRleHRDb250ZW50IiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaSIsImluQXBwIiwiZW52IiwiJGRvYyIsIiRsaWdodGJveGVzIiwiZGVzaWduZXIiLCJncm91cHMiLCJyZWFkeSIsImRlc2lnbiIsInByZXZpZXciLCJpbml0IiwiZmluZCIsIndlYmZsb3dMaWdodEJveCIsImpRdWVyeSIsImZuIiwiZXh0ZW5kIiwiZWwiLCJtb2RlIiwiaW1hZ2VzIiwiZW1iZWQiLCJvZmYiLCJjb25maWd1cmUiLCJiaW5kIiwiY2xpY2tIYW5kbGVyIiwiZSIsImpzb24iLCJncm91cE5hbWUiLCJncm91cEl0ZW1zIiwiSlNPTiIsInBhcnNlIiwiY29uc29sZSIsImVycm9yIiwic3VwcG9ydE9sZExpZ2h0Ym94SnNvbiIsImdyb3VwIiwiYXBwbHkiLCJ0eXBlIiwiZ3JvdXBJZCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DLEdBRXBDOztDQUVDO0FBRUQsSUFBSUEsVUFBVUMsUUFBUTtBQUV0QixJQUFJQyw0QkFBNEI7QUFDaEMsSUFBSUMsbUJBQW1CLE1BQU1EO0FBRTdCLFNBQVNFLDJCQUEyQkMsS0FBSztJQUN2QyxPQUFPQSxNQUFNQyxNQUFNLENBQUMsU0FBVUMsSUFBSTtRQUNoQyxPQUFPLENBQUNDLHNCQUFzQkQ7SUFDaEM7QUFDRjtBQUVBLFNBQVNDLHNCQUFzQkQsSUFBSTtJQUNqQyxPQUFPRSxRQUFRRixLQUFLRyxHQUFHLElBQUlILEtBQUtHLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDUixrQkFBa0JTLE1BQU07QUFDdEU7QUFFQSxTQUFTQyx3QkFBd0JDLEtBQUssRUFBRVQsS0FBSztJQUMzQyxJQUFLLElBQUlVLElBQUlELE9BQU9DLEtBQUssR0FBR0EsSUFBSztRQUMvQixJQUFJLENBQUNQLHNCQUFzQkgsS0FBSyxDQUFDVSxFQUFFLEdBQUc7WUFDcEMsT0FBT0E7UUFDVDtJQUNGO0lBQ0EsT0FBTyxDQUFDO0FBQ1Y7QUFFQSxTQUFTQyxvQkFBb0JGLEtBQUssRUFBRVQsS0FBSztJQUN2QyxJQUFLLElBQUlVLElBQUlELE9BQU9DLEtBQUtWLE1BQU1PLE1BQU0sR0FBRyxHQUFHRyxJQUFLO1FBQzlDLElBQUksQ0FBQ1Asc0JBQXNCSCxLQUFLLENBQUNVLEVBQUUsR0FBRztZQUNwQyxPQUFPQTtRQUNUO0lBQ0Y7SUFDQSxPQUFPLENBQUM7QUFDVjtBQUVBLFNBQVNFLDJCQUEyQkMsWUFBWSxFQUFFYixLQUFLO0lBQ3JELE9BQU9RLHdCQUF3QkssZUFBZSxHQUFHYixXQUFXLENBQUM7QUFDL0Q7QUFFQSxTQUFTYyw0QkFBNEJELFlBQVksRUFBRWIsS0FBSztJQUN0RCxPQUFPVyxvQkFBb0JFLGVBQWUsR0FBR2IsV0FBVyxDQUFDO0FBQzNEO0FBRUEsU0FBU2Usb0JBQW9CQyxRQUFRLEVBQUVDLFNBQVM7SUFDOUMsSUFBSSxDQUFDRCxTQUFTRSxJQUFJLENBQUMsZUFBZTtRQUNoQ0YsU0FBU0UsSUFBSSxDQUFDLGNBQWNEO0lBQzlCO0FBQ0Y7QUFFQSxTQUFTRSxlQUFlQyxPQUFNLEVBQUVDLFNBQVEsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTO0lBQ3BELElBQUlDLE9BQU9GLEVBQUVFLElBQUk7SUFDakIsSUFBSUMsVUFBVUMsTUFBTUQsT0FBTztJQUMzQixJQUFJRSxZQUFZO0lBQ2hCLElBQUlDLFNBQVNELFlBQVk7SUFDekIsSUFBSUUsY0FBYztJQUVsQixxREFBcUQ7SUFDckQsSUFBSTdCLFFBQVEsRUFBRTtJQUVkLHlDQUF5QztJQUN6QyxJQUFJYTtJQUVKLHFEQUFxRDtJQUNyRCxJQUFJaUI7SUFFSixzQkFBc0I7SUFDdEIsSUFBSUM7SUFFSixnRUFBZ0U7SUFDaEUsSUFBSUMsdUJBQXVCLEVBQUU7SUFFN0IsU0FBU0MsU0FBU0MsS0FBSyxFQUFFQyxLQUFLO1FBQzVCbkMsUUFBUXlCLFFBQVFTLFNBQVNBLFFBQVE7WUFBQ0E7U0FBTTtRQUV4QyxJQUFJLENBQUNKLE9BQU87WUFDVkcsU0FBU0csS0FBSztRQUNoQjtRQUVBLElBQUlyQywyQkFBMkJDLE9BQU9PLE1BQU0sR0FBRyxHQUFHO1lBQ2hEdUIsTUFBTTlCLEtBQUssR0FBRzhCLE1BQU1PLEtBQUs7WUFFekJyQyxNQUFNc0MsT0FBTyxDQUFDLFNBQVVwQyxJQUFJLEVBQUVxQyxHQUFHO2dCQUMvQixJQUFJQyxhQUFhQyxJQUFJO2dCQUNyQixJQUFJQyxRQUFRRCxJQUFJLFFBQ2JFLElBQUksQ0FBQyxZQUFZLEdBQ2pCekIsSUFBSSxDQUFDLGlCQUFpQixtQkFDdEJBLElBQUksQ0FBQyxRQUFRLE9BQ2IwQixNQUFNLENBQUNKO2dCQUVWekIsb0JBQW9CMkIsT0FBTyxDQUFDLFVBQVUsRUFBRUgsTUFBTSxFQUFFLElBQUksRUFBRXZDLE1BQU1PLE1BQU0sQ0FBQyxDQUFDO2dCQUVwRSxJQUFJSixzQkFBc0JELE9BQU87b0JBQy9Cd0MsTUFBTUcsUUFBUSxDQUFDaEQ7Z0JBQ2pCO2dCQUVBaUMsTUFBTTlCLEtBQUssR0FBRzhCLE1BQU05QixLQUFLLENBQUM4QyxHQUFHLENBQUNKO2dCQUU5QkssVUFBVTdDLEtBQUs4QyxZQUFZLElBQUk5QyxLQUFLK0MsR0FBRyxFQUFFLFNBQVVDLE1BQU07b0JBQ3ZELElBQUlBLE9BQU9QLElBQUksQ0FBQyxXQUFXTyxPQUFPUCxJQUFJLENBQUMsV0FBVzt3QkFDaERFLFNBQVNLLFFBQVE7b0JBQ25CLE9BQU87d0JBQ0xMLFNBQVNLLFFBQVE7b0JBQ25CO29CQUNBVixXQUFXSSxNQUFNLENBQUNDLFNBQVNLLFFBQVE7Z0JBQ3JDO1lBQ0Y7WUFFQXBCLE1BQU1xQixLQUFLLENBQUNkLEtBQUssR0FBR08sTUFBTSxDQUFDZCxNQUFNOUIsS0FBSztZQUN0QzZDLFNBQVNmLE1BQU1zQixPQUFPLEVBQUU7UUFDMUI7UUFFQTVCLEtBQ0UsaURBQWlEO1FBQ2pENkIsWUFBWXZCLE1BQU1HLFFBQVEsRUFBRSxRQUFRcUIsT0FBTyxDQUFDLFVBRTNDUixHQUFHLENBQUMsZUFDSnJDLEtBQUssQ0FBQztZQUFDOEMsU0FBUztRQUFDO1FBRXBCLDREQUE0RDtRQUM1RFYsU0FBU2YsTUFBTTBCLElBQUksRUFBRTtRQUVyQixPQUFPdkIsU0FBU3dCLElBQUksQ0FBQ3RCLFNBQVM7SUFDaEM7SUFFQTs7R0FFQyxHQUNERixTQUFTRyxLQUFLLEdBQUc7UUFDZiw0Q0FBNEM7UUFDNUNILFNBQVN5QixPQUFPO1FB
12480RWhCNUIsUUFBUTtZQUNOMEIsTUFBTWxDLEVBQUVELFVBQVNzQyxlQUFlO1lBQ2hDLGtFQUFrRTtZQUNsRXRCLE9BQU9mO1FBQ1Q7UUFFQVEsTUFBTThCLFNBQVMsR0FBR25CLElBQUkseUJBQ25CdkIsSUFBSSxDQUFDLFFBQVEsVUFDYkEsSUFBSSxDQUFDLGVBQWUsTUFDcEJBLElBQUksQ0FBQyxpQkFBaUI7UUFDekJZLE1BQU0rQixVQUFVLEdBQUdwQixJQUFJLDBCQUNwQnZCLElBQUksQ0FBQyxRQUFRLFVBQ2JBLElBQUksQ0FBQyxlQUFlLE1BQ3BCQSxJQUFJLENBQUMsaUJBQWlCO1FBQ3pCWSxNQUFNZ0MsS0FBSyxHQUFHckIsSUFBSSxpQkFBaUJ2QixJQUFJLENBQUMsUUFBUTtRQUVoRCxzREFBc0Q7UUFDdERILG9CQUFvQmUsTUFBTThCLFNBQVMsRUFBRTtRQUNyQzdDLG9CQUFvQmUsTUFBTStCLFVBQVUsRUFBRTtRQUN0QzlDLG9CQUFvQmUsTUFBTWdDLEtBQUssRUFBRTtRQUVqQ2hDLE1BQU1DLE9BQU8sR0FBR1UsSUFBSSxXQUNqQnZCLElBQUksQ0FBQyxRQUFRLGVBQ2JBLElBQUksQ0FBQyxhQUFhLFVBQ2xCQSxJQUFJLENBQUMsZUFBZSxPQUNwQkEsSUFBSSxDQUFDLGFBQWEsTUFDbEJBLElBQUksQ0FBQyxpQkFBaUIsR0FDdEJBLElBQUksQ0FBQyxpQkFBaUIsS0FDdEJBLElBQUksQ0FBQyxpQkFBaUIsR0FDdEJBLElBQUksQ0FBQyxrQkFBa0I7UUFFMUJZLE1BQU1xQixLQUFLLEdBQUdWLElBQUksU0FBU3ZCLElBQUksQ0FBQyxRQUFRO1FBRXhDYSxVQUFVLElBQUlnQyxRQUFRakMsTUFBTUMsT0FBTyxFQUFFaUMsU0FBUztRQUU5Q2xDLE1BQU1zQixPQUFPLEdBQUdYLElBQUksV0FBV0csTUFBTSxDQUNuQ2QsTUFBTUMsT0FBTyxFQUNiRCxNQUFNOEIsU0FBUyxFQUNmOUIsTUFBTStCLFVBQVUsRUFDaEIvQixNQUFNZ0MsS0FBSztRQUdiaEMsTUFBTVAsU0FBUyxHQUFHa0IsSUFBSSxhQUFhRyxNQUFNLENBQUNkLE1BQU1zQixPQUFPLEVBQUV0QixNQUFNcUIsS0FBSztRQUVwRXJCLE1BQU1HLFFBQVEsR0FBR1EsSUFBSSxpQkFBaUJHLE1BQU0sQ0FBQ2QsTUFBTVAsU0FBUztRQUU1RCw0REFBNEQ7UUFDNUQsdURBQXVEO1FBQ3ZETyxNQUFNcUIsS0FBSyxDQUFDYyxFQUFFLENBQUMsU0FBU0MsU0FBUyxTQUFTQztRQUMxQ3JDLE1BQU1zQixPQUFPLENBQ1ZhLEVBQUUsQ0FBQyxTQUFTRyxjQUNaSCxFQUFFLENBQUMsU0FBU0MsU0FBUyxTQUFTRyxhQUM5QkosRUFBRSxDQUFDLFNBQVNDLFNBQVMsVUFBVUksYUFDL0JMLEVBQUUsQ0FBQyxTQUFTQyxTQUFTLFVBQVVLLGFBQy9CTixFQUFFLENBQUMsU0FBU0MsU0FBUyxtQkFBbUJJO1FBQzNDeEMsTUFBTVAsU0FBUyxDQUNaMEMsRUFBRSxDQUFDLFNBQVNDLFNBQVMsU0FBU0ssWUFDL0IsNENBQTRDO1NBQzNDTixFQUFFLENBQUMsYUFBYUMsU0FBUyxRQUFRTTtRQUNwQzFDLE1BQU1HLFFBQVEsQ0FDWGdDLEVBQUUsQ0FBQyxXQUFXUSxXQUNmLHlEQUF5RDtTQUN4RFIsRUFBRSxDQUFDLFdBQVdTO1FBRWpCcEQsRUFBRUMsV0FBV3FCLE1BQU0sQ0FBQ2QsTUFBTUcsUUFBUTtRQUVsQyxPQUFPQTtJQUNUO0lBRUE7O0dBRUMsR0FDREEsU0FBU3lCLE9BQU8sR0FBRztRQUNqQixJQUFJLENBQUM1QixPQUFPO1lBQ1Y7UUFDRjtRQUVBLG1DQUFtQztRQUNuQ3VCLFlBQVl2QixNQUFNMEIsSUFBSSxFQUFFO1FBQ3hCMUIsTUFBTUcsUUFBUSxDQUFDMEMsTUFBTTtRQUNyQjdDLFFBQVE4QztJQUNWO0lBRUE7O0dBRUMsR0FDRDNDLFNBQVN3QixJQUFJLEdBQUcsU0FBVXRCLEtBQUs7UUFDN0IsNENBQTRDO1FBQzVDLElBQUlBLFVBQVV0QixjQUFjO1lBQzFCO1FBQ0Y7UUFDQSxJQUFJWCxPQUFPRixLQUFLLENBQUNtQyxNQUFNO1FBQ3ZCLElBQUksQ0FBQ2pDLE1BQU07WUFDVCxPQUFPK0IsU0FBUzRDLElBQUk7UUFDdEI7UUFFQSxJQUFJMUUsc0JBQXNCRCxPQUFPO1lBQy9CLElBQUlpQyxRQUFRdEIsY0FBYztnQkFDeEIsSUFBSWlFLHVCQUF1QnRFLHdCQUF3QjJCLFFBQVEsR0FBR25DO2dCQUM5RG1DLFFBQVEyQyx1QkFBdUIsQ0FBQyxJQUFJQSx1QkFBdUIzQztZQUM3RCxPQUFPO2dCQUNMLElBQUk0QyxtQkFBbUJwRSxvQkFBb0J3QixRQUFRLEdBQUduQztnQkFDdERtQyxRQUFRNEMsbUJBQW1CLENBQUMsSUFBSUEsbUJBQW1CNUM7WUFDckQ7WUFDQWpDLE9BQU9GLEtBQUssQ0FBQ21DLE1BQU07UUFDckI7UUFFQSxJQUFJNkMsZ0JBQWdCbkU7UUFDcEJBLGVBQWVzQjtRQUNmTCxNQUFNQyxPQUFPLENBQ1ZiLElBQUksQ0FBQyxlQUFlLE9BQ3BCQSxJQUFJLENBQUMsYUFBYSxNQUNsQkEsSUFBSSxDQUFDLGlCQUFpQixHQUN0QkEsSUFBSSxDQUFDLGtCQUFrQjtRQUMxQmEsUUFBUTBCLElBQUk7UUFFWixzRUFBc0U7UUFDdEUsbURBQW1EO1FBQ25ELElBQUlSLE1BQU0sQUFBQy9DLEtBQUtzRCxJQUFJLElBQUl5QixXQUFXL0UsS0FBS2dGLEtBQUssRUFBRWhGLEtBQUtpRixNQUFNLEtBQU1qRixLQUFLK0MsR0FBRztRQUN4RUYsVUFBVUUsS0FBSyxTQUFVQyxNQUFNO1lBQzdCLDhEQUE4RDtZQUM5RCxnRUFBZ0U7WUFDaEUsZ0JBQWdCO1lBQ2hCLElBQUlmLFVBQVV0QixjQUFjO2dCQUMxQjtZQUNGO1lBQ0EsSUFBSXVFLFVBQVUzQyxJQUFJLFVBQVUsVUFBVUcsTUFBTSxDQUFDQyxTQUFTSyxRQUFRO1lBQzlELElBQUltQyxTQUFTNUMsSUFBSSxTQUFTRyxNQUFNLENBQUN3QztZQUNqQyxJQUFJRSxXQUFXN0MsSUFBSSxRQUNoQkUsSUFBSSxDQUFDLFlBQVksR0FDakJ6QixJQUFJLENBQUMsTUFBTSxtQkFDWDBCLE1BQU0sQ0FBQ3lDO1lBQ1YsSUFBSUU7WUFDSixJQUFJQztZQUNKLElBQUl0RixLQUFLc0QsSUFBSSxFQUFFO2dCQUNiK0IsUUFBUWpFLEVBQUVwQixLQUFLc0QsSUFBSTtnQkFDbkJnQyxXQUFXRCxNQUFNRSxFQUFFLENBQUM7Z0JBRXBCLElBQUlELFVBQVU7b0JBQ1pELE1BQU10QixFQUFFLENBQUMsUUFBUXlCO2dCQUNuQjtnQkFFQU4sUUFBUXhDLE1BQU0sQ0FBQ0MsU0FBUzBDLE9BQU87WUFDakM7WUFFQSxJQUFJckYsS0FBS3lGLE9BQU8sRUFBRTtnQkFDaEJQLFFBQVF4QyxNQUFNLENBQUNILElBQUksV0FBVyxjQUFjbUQsSUFBSSxDQUFDMUYsS0FBS3lGLE9BQU87WUFDL0Q7WUFFQTdELE1BQU1DLE9BQU8sQ0FBQzhELE1BQU0sQ0FBQ1A7WUFFckIsSUFBSSxDQUFDRSxVQUFVO2dCQUNiRTtZQUNGO1lBRUEsU0FBU0E7Z0JBQ1A1RCxNQUFNQyxPQUFPLENBQ1ZiLElBQUksQ0FBQyxlQUFlLE1BQ3BCQSxJQUFJLENBQUMsYUFBYSxPQUNsQkEsSUFBSSxDQUFDLGlCQUFpQixLQUN0QkEsSUFBSSxDQUFDLGtCQUFrQjtnQkFDMUJhLFFBQVE4QyxJQUFJO2dCQUVaLElBQUkxQyxVQUFVdEIsY0FBYztvQkFDMUJ5RSxTQUFTWCxNQUFNO29CQUNmO2dCQUNGO2dCQUVBLE1BQU1tQixzQkFBc0JsRiwyQkFBMkJ1QixPQUFPbkM7Z0JBQzlEK0YsWUFBWWpFLE1BQU04QixTQUFTLEVBQUUsWUFBWWtDO2dCQUN6Q0UsYUFBYWxFLE1BQU04QixTQUFTLEVBQUVrQztnQkFDOUIsSUFBSUEsdUJBQXVCaEUsTUFBTThCLFNBQVMsQ0FBQzZCLEVBQUUsQ0FBQyxXQUFXO29CQUN2RCxpREFBaUQ7b0JBQ2pEM0QsTUF
12480BTStCLFVBQVUsQ0FBQ29DLEtBQUs7Z0JBQ3hCO2dCQUVBLE1BQU1DLHVCQUF1QnBGLDRCQUE0QnFCLE9BQU9uQztnQkFDaEUrRixZQUFZakUsTUFBTStCLFVBQVUsRUFBRSxZQUFZcUM7Z0JBQzFDRixhQUFhbEUsTUFBTStCLFVBQVUsRUFBRXFDO2dCQUMvQixJQUFJQSx3QkFBd0JwRSxNQUFNK0IsVUFBVSxDQUFDNEIsRUFBRSxDQUFDLFdBQVc7b0JBQ3pELGlEQUFpRDtvQkFDakQzRCxNQUFNOEIsU0FBUyxDQUFDcUMsS0FBSztnQkFDdkI7Z0JBRUEsSUFBSW5FLE1BQU1xRSxJQUFJLEVBQUU7b0JBQ2QzRSxLQUFLTSxNQUFNcUUsSUFBSSxFQUNackQsR0FBRyxDQUFDLGVBQ0pyQyxLQUFLLENBQUM7d0JBQUM4QyxTQUFTO29CQUFDLEdBQ2pCNkMsSUFBSSxDQUFDQyxRQUFRdkUsTUFBTXFFLElBQUk7b0JBRTFCM0UsS0FBSzhELFVBQ0Z4QyxHQUFHLENBQUMsZUFDSkEsR0FBRyxDQUFDLGlCQUNKd0QsR0FBRyxDQUFDO3dCQUFDQyxHQUFHcEUsUUFBUTZDLGdCQUFnQixTQUFTO29CQUFPLEdBQ2hEdkUsS0FBSyxDQUFDO3dCQUFDOEMsU0FBUzt3QkFBR2dELEdBQUc7b0JBQUM7Z0JBQzVCLE9BQU87b0JBQ0xqQixTQUFTa0IsR0FBRyxDQUFDLFdBQVc7Z0JBQzFCO2dCQUVBMUUsTUFBTXFFLElBQUksR0FBR2I7Z0JBQ2J4RCxNQUFNcUUsSUFBSSxDQUFDeEQsSUFBSSxDQUFDLFlBQVk7Z0JBRTVCLElBQUliLE1BQU05QixLQUFLLEVBQUU7b0JBQ2ZxRCxZQUFZdkIsTUFBTTlCLEtBQUssRUFBRTtvQkFDekI4QixNQUFNOUIsS0FBSyxDQUFDeUcsVUFBVSxDQUFDO29CQUV2QixrQ0FBa0M7b0JBQ2xDLElBQUlDLGVBQWU1RSxNQUFNOUIsS0FBSyxDQUFDMkcsRUFBRSxDQUFDeEU7b0JBQ2xDVSxTQUFTNkQsY0FBYztvQkFDdkJBLGFBQWF4RixJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxtQkFBbUI7b0JBQ25CMEYsWUFBWUY7Z0JBQ2Q7WUFDRjtRQUNGO1FBRUE1RSxNQUFNZ0MsS0FBSyxDQUFDbkIsSUFBSSxDQUFDLFlBQVk7UUFFN0IsNERBQTREO1FBQzVELGlDQUFpQztRQUNqQ3JCLEVBQUUsVUFBVXVCLFFBQVEsQ0FBQztRQUVyQixtRUFBbUU7UUFDbkUsbUVBQW1FO1FBQ25FLHVCQUF1QjtRQUN2QiwrREFBK0Q7UUFDL0QscURBQXFEO1FBQ3JELElBQUliLHFCQUFxQnpCLE1BQU0sS0FBSyxHQUFHO1lBQ3JDLHlFQUF5RTtZQUN6RSwrREFBK0Q7WUFDL0RlLEVBQUUsUUFDQ3VGLFFBQVEsR0FDUkMsSUFBSSxDQUFDO2dCQUNKLHVEQUF1RDtnQkFDdkQsSUFBSXhGLEVBQUUsSUFBSSxFQUFFeUYsUUFBUSxDQUFDLDBCQUEwQnpGLEVBQUUsSUFBSSxFQUFFbUUsRUFBRSxDQUFDLFdBQVc7b0JBQ25FO2dCQUNGO2dCQUVBLDhDQUE4QztnQkFDOUN6RCxxQkFBcUJnRixJQUFJLENBQUM7b0JBQ3hCQyxNQUFNM0YsRUFBRSxJQUFJO29CQUNaNEYsUUFBUTVGLEVBQUUsSUFBSSxFQUFFSixJQUFJLENBQUM7b0JBQ3JCaUcsVUFBVTdGLEVBQUUsSUFBSSxFQUFFSixJQUFJLENBQUM7Z0JBQ3pCO2dCQUVBLDBDQUEwQztnQkFDMUNJLEVBQUUsSUFBSSxFQUFFSixJQUFJLENBQUMsZUFBZSxNQUFNQSxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3REO1lBRUYsZ0NBQWdDO1lBQ2hDWSxNQUFNZ0MsS0FBSyxDQUFDbUMsS0FBSztRQUNuQjtRQUVBLE9BQU9oRTtJQUNUO0lBRUE7O0dBRUMsR0FDREEsU0FBUzRDLElBQUksR0FBRztRQUNkckQsS0FBS00sTUFBTUcsUUFBUSxFQUNoQmEsR0FBRyxDQUFDLGVBQ0pyQyxLQUFLLENBQUM7WUFBQzhDLFNBQVM7UUFBQyxHQUNqQjZDLElBQUksQ0FBQ2dCO1FBRVIsT0FBT25GO0lBQ1Q7SUFFQUEsU0FBU29GLElBQUksR0FBRztRQUNkLElBQUl2Qyx1QkFBdUJ0RSx3QkFBd0JLLGVBQWUsR0FBR2I7UUFDckUsSUFBSThFLHVCQUF1QixDQUFDLEdBQUc7WUFDN0I3QyxTQUFTd0IsSUFBSSxDQUFDcUI7UUFDaEI7SUFDRjtJQUVBN0MsU0FBU3FGLElBQUksR0FBRztRQUNkLElBQUl2QyxtQkFBbUJwRSxvQkFBb0JFLGVBQWUsR0FBR2I7UUFDN0QsSUFBSStFLG1CQUFtQixDQUFDLEdBQUc7WUFDekI5QyxTQUFTd0IsSUFBSSxDQUFDc0I7UUFDaEI7SUFDRjtJQUVBLFNBQVN3QyxjQUFjQyxNQUFNO1FBQzNCLE9BQU8sU0FBVUMsS0FBSztZQUNwQix1RUFBdUU7WUFDdkUsSUFBSSxJQUFJLEtBQUtBLE1BQU1DLE1BQU0sRUFBRTtnQkFDekI7WUFDRjtZQUVBRCxNQUFNRSxlQUFlO1lBQ3JCRixNQUFNakQsY0FBYztZQUVwQmdEO1FBQ0Y7SUFDRjtJQUVBLElBQUluRCxjQUFja0QsY0FBY3RGLFNBQVNvRixJQUFJO0lBQzdDLElBQUkvQyxjQUFjaUQsY0FBY3RGLFNBQVNxRixJQUFJO0lBQzdDLElBQUkvQyxjQUFjZ0QsY0FBY3RGLFNBQVM0QyxJQUFJO0lBRTdDLElBQUlWLGlCQUFpQixTQUFVc0QsS0FBSztRQUNsQyxJQUFJdEYsUUFBUWIsRUFBRSxJQUFJLEVBQUVhLEtBQUs7UUFFekJzRixNQUFNakQsY0FBYztRQUNwQnZDLFNBQVN3QixJQUFJLENBQUN0QjtJQUNoQjtJQUVBLElBQUlpQyxlQUFlLFNBQVVxRCxLQUFLLEVBQUVHLElBQUk7UUFDdEMscUJBQXFCO1FBQ3JCSCxNQUFNakQsY0FBYztRQUVwQixJQUFJb0QsS0FBS0MsU0FBUyxLQUFLLFFBQVE7WUFDN0I1RixTQUFTcUYsSUFBSTtRQUNmLE9BQU8sSUFBSU0sS0FBS0MsU0FBUyxLQUFLLFNBQVM7WUFDckM1RixTQUFTb0YsSUFBSTtRQUNmO0lBQ0Y7SUFFQSxJQUFJM0MsWUFBWTtRQUNkLElBQUksQ0FBQ3VCLEtBQUs7SUFDWjtJQUVBLFNBQVN6QixlQUFlaUQsS0FBSztRQUMzQkEsTUFBTWpELGNBQWM7SUFDdEI7SUFFQSxTQUFTQyxXQUFXZ0QsS0FBSztRQUN2QixJQUFJSyxVQUFVTCxNQUFNSyxPQUFPO1FBRTNCLDhEQUE4RDtRQUM5RCxJQUFJQSxZQUFZLE1BQU1DLHFCQUFxQkQsU0FBUyxVQUFVO1lBQzVEN0YsU0FBUzRDLElBQUk7UUFFYiwyREFBMkQ7UUFDN0QsT0FBTyxJQUFJaUQsWUFBWSxNQUFNQyxxQkFBcUJ
12480ELFNBQVMsU0FBUztZQUNsRTdGLFNBQVNvRixJQUFJO1FBRWIsNERBQTREO1FBQzlELE9BQU8sSUFBSVMsWUFBWSxNQUFNQyxxQkFBcUJELFNBQVMsVUFBVTtZQUNuRTdGLFNBQVNxRixJQUFJO1FBQ2Isa0RBQWtEO1FBQ3BELE9BQU8sSUFBSVMscUJBQXFCRCxTQUFTLFNBQVM7WUFDaER4RyxFQUFFLFVBQVUwRyxLQUFLO1FBQ25CO0lBQ0Y7SUFFQTs7Ozs7O0dBTUMsR0FDRCxTQUFTRCxxQkFBcUJELE9BQU8sRUFBRUcsVUFBVTtRQUMvQyxJQUFJSCxZQUFZLE1BQU1BLFlBQVksSUFBSTtZQUNwQyxPQUFPO1FBQ1Q7UUFFQSxJQUFJSSx3QkFBd0I1RyxFQUFFLFVBQVVKLElBQUksQ0FBQztRQUM3QyxJQUFJaUgsY0FBY25FLFNBQVNpRSxZQUFZRyxJQUFJO1FBRTNDLE9BQU9GLHNCQUFzQkcsUUFBUSxDQUFDRjtJQUN4QztJQUVBLFNBQVNmO1FBQ1AsZ0RBQWdEO1FBQ2hELElBQUl0RixPQUFPO1lBQ1QsOEVBQThFO1lBQzlFQSxNQUFNcUIsS0FBSyxDQUFDbUYsVUFBVSxDQUFDLEdBQUdqRyxLQUFLO1lBQy9CZ0IsWUFBWXZCLE1BQU0wQixJQUFJLEVBQUU7WUFDeEJYLFNBQVNmLE1BQU1HLFFBQVEsRUFBRTtZQUN6QkgsTUFBTXFFLElBQUksSUFBSXJFLE1BQU1xRSxJQUFJLENBQUN4QixNQUFNO1lBRS9CLG1CQUFtQjtZQUNuQnRCLFlBQVl2QixNQUFNc0IsT0FBTyxFQUFFO1lBQzNCUCxTQUFTZixNQUFNOEIsU0FBUyxFQUFFO1lBQzFCZixTQUFTZixNQUFNK0IsVUFBVSxFQUFFO1lBRTNCaEQsZUFBZWlCLE1BQU1xRSxJQUFJLEdBQUd2QjtZQUU1QiwwREFBMEQ7WUFDMUQ1QyxxQkFBcUJNLE9BQU8sQ0FBQyxTQUFVaUcsZUFBZTtnQkFDcEQsSUFBSXRCLE9BQU9zQixnQkFBZ0J0QixJQUFJO2dCQUUvQixJQUFJLENBQUNBLE1BQU07b0JBQ1Q7Z0JBQ0Y7Z0JBRUEsSUFBSXNCLGdCQUFnQnJCLE1BQU0sRUFBRTtvQkFDMUJELEtBQUsvRixJQUFJLENBQUMsZUFBZXFILGdCQUFnQnJCLE1BQU07Z0JBQ2pELE9BQU87b0JBQ0xELEtBQUtSLFVBQVUsQ0FBQztnQkFDbEI7Z0JBRUEsSUFBSThCLGdCQUFnQnBCLFFBQVEsRUFBRTtvQkFDNUJGLEtBQUsvRixJQUFJLENBQUMsWUFBWXFILGdCQUFnQnBCLFFBQVE7Z0JBQ2hELE9BQU87b0JBQ0xGLEtBQUtSLFVBQVUsQ0FBQztnQkFDbEI7WUFDRjtZQUVBLHVDQUF1QztZQUN2Q3pFLHVCQUF1QixFQUFFO1lBRXpCLHNEQUFzRDtZQUN0RFYsRUFBRSxvQkFBb0IrQixXQUFXLENBQUMsbUJBQW1CNEMsS0FBSztRQUM1RDtJQUNGO0lBRUEsU0FBU2xELFVBQVVFLEdBQUcsRUFBRXVGLFFBQVE7UUFDOUIsSUFBSXRGLFNBQVNULElBQUksT0FBTztRQUV4QlMsT0FBT3VGLEdBQUcsQ0FBQyxRQUFRO1lBQ2pCRCxTQUFTdEY7UUFDWDtRQUVBLHVCQUF1QjtRQUN2QkEsT0FBT2hDLElBQUksQ0FBQyxPQUFPK0I7UUFFbkIsT0FBT0M7SUFDVDtJQUVBLFNBQVNtRCxRQUFRckYsUUFBUTtRQUN2QixPQUFPO1lBQ0xBLFNBQVMyRCxNQUFNO1FBQ2pCO0lBQ0Y7SUFFQSxTQUFTaUMsWUFBWWxFLEtBQUs7UUFDeEIsSUFBSWdHLGNBQWNoRyxNQUFNaUcsR0FBRyxDQUFDO1FBQzVCLElBQUlDLGVBQWU5RyxNQUFNcUIsS0FBSyxDQUFDd0YsR0FBRyxDQUFDO1FBQ25DLElBQUlFLFdBQVdILFlBQVlJLFVBQVU7UUFDckMsSUFBSUMsWUFBWUwsWUFBWU0sV0FBVztRQUN2QyxJQUFJQyxrQkFBa0JMLGFBQWFOLFVBQVU7UUFDN0MsSUFBSVksYUFBYU4sYUFBYUksV0FBVztRQUN6QyxJQUFJRyxxQkFBcUJQLGFBQWFRLFdBQVcsR0FBR0Y7UUFFcEQsSUFBSUc7UUFDSixJQUFJUixXQUFXSSxpQkFBaUI7WUFDOUJJLGdCQUFnQkMsS0FBS0MsR0FBRyxDQUFDLEdBQUdWLFdBQVdFLFlBQVlHO1FBQ3JELE9BQU8sSUFBSUwsV0FBV0UsWUFBWUcsYUFBYUQsaUJBQWlCO1lBQzlESSxnQkFBZ0JDLEtBQUtFLEdBQUcsQ0FBQ1gsVUFBVU07UUFDckM7UUFFQSxJQUFJRSxpQkFBaUIsTUFBTTtZQUN6QjdILEtBQUtNLE1BQU1xQixLQUFLLEVBQ2JMLEdBQUcsQ0FBQyxxQkFDSnJDLEtBQUssQ0FBQztnQkFBQyxlQUFlNEk7WUFBYTtRQUN4QztJQUNGO0lBRUE7O0dBRUMsR0FDRCxTQUFTdEYsUUFBUTBGLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxLQUFLO1FBQ3pDLElBQUksQ0FBQzNJLFFBQVEsR0FBR3lJO1FBQ2hCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0EsU0FBUztRQUN0QixJQUFJLENBQUM5RSxJQUFJO0lBQ1g7SUFFQWQsUUFBUTZGLFNBQVMsQ0FBQ25HLElBQUksR0FBRztRQUN2QixJQUFJMUIsVUFBVSxJQUFJO1FBRWxCLDhDQUE4QztRQUM5QyxJQUFJQSxRQUFROEgsU0FBUyxFQUFFO1lBQ3JCO1FBQ0Y7UUFFQTlILFFBQVE4SCxTQUFTLEdBQUdDLFdBQVc7WUFDN0IvSCxRQUFRZixRQUFRLENBQUNxQyxXQUFXLENBQUN0QixRQUFRMkgsU0FBUztZQUM5Qyw2Q0FBNkM7WUFDN0MsT0FBTzNILFFBQVE4SCxTQUFTO1FBQzFCLEdBQUc5SCxRQUFRNEgsS0FBSztJQUNsQjtJQUVBNUYsUUFBUTZGLFNBQVMsQ0FBQy9FLElBQUksR0FBRztRQUN2QixJQUFJOUMsVUFBVSxJQUFJO1FBQ2xCLElBQUlBLFFBQVE4SCxTQUFTLEVBQUU7WUFDckJFLGFBQWFoSSxRQUFROEgsU0FBUztZQUM5Qiw2Q0FBNkM7WUFDN0MsT0FBTzlILFFBQVE4SCxTQUFTO1lBQ3hCO1FBQ0Y7UUFFQTlILFFBQVFmLFFBQVEsQ0FBQzZCLFFBQVEsQ0FBQ2QsUUFBUTJILFNBQVM7SUFDN0M7SUFFQSxTQUFTMUYsU0FBU2dHLE1BQU0sRUFBRUMsVUFBVTtRQUNsQyxPQUFPRCxPQUFPRSxPQUFPLENBQUNySSxhQUFhLEFBQUNvSSxDQUFBQSxhQUFhLE9BQU8sR0FBRSxJQUFLckk7SUFDakU7SUFFQSxTQUFTc0MsU0FBUzhGLE1BQU07UUFDdEIsT0FBT2hHLFNBQVNnRyxRQUFRO0lBQzFCO0lBRUE7Ozs7O0dBS0MsR0FDRCxTQUFTbkgsU0FBUzdCLFFBQVEsRUFBRTBJLFNBQVM7UUFDbkMsT0FBTzFJLFNBQVM2QixRQUFRLENBQUNtQixTQUFTMEY7SUFDcEM7SUFFQTs7Ozs7R0FLQyxHQUNELFNBQVNyRyxZQUFZckMsUUFBUSxFQUFFMEksU0FBUztRQUN0QyxPQUFPMUksU0FBU3FDLFdBQVcsQ0FBQ1csU0FBUzBGO0lBQ3ZDO0lBRUE7Ozs7OztHQU1DLEdBQ0QsU0FBUzNELFlBQVkvRSxRQUFRLEVBQUUwSSxTQUFTLEVBQUVTLFNBQVM7UUFDakQsT0FBT25KLFNBQVMrRSxXQUFXLENBQUMvQixTQUFTMEYsWUFBWVM7SUFDbkQ7SUFFQTs7Ozs7R0FLQyxHQUNELFNBQVNuRSxhQU
12480FhaEYsUUFBUSxFQUFFb0osUUFBUTtRQUN0QyxPQUFPcEosU0FDSkUsSUFBSSxDQUFDLGVBQWVrSixVQUNwQmxKLElBQUksQ0FBQyxZQUFZa0osV0FBVyxDQUFDLElBQUk7SUFDdEM7SUFFQTs7Ozs7O0dBTUMsR0FDRCxTQUFTM0gsSUFBSWlILFNBQVMsRUFBRVcsR0FBRztRQUN6QixPQUFPeEgsU0FBU3ZCLEVBQUVELFVBQVNpSixhQUFhLENBQUNELE9BQU8sU0FBU1g7SUFDM0Q7SUFFQSxTQUFTekUsV0FBV0MsS0FBSyxFQUFFQyxNQUFNO1FBQy9CLElBQUlvRixNQUNGLG9EQUNBckYsUUFDQSxlQUNBQyxTQUNBO1FBQ0YsT0FBTyxzQ0FBc0NxRixVQUFVRDtJQUN6RDtJQUVBLGlGQUFpRjtJQUNqRixrRUFBa0U7SUFDakUsQ0FBQTtRQUNDLElBQUlFLEtBQUtySixRQUFPc0osU0FBUyxDQUFDQyxTQUFTO1FBQ25DLElBQUlDLFdBQVc7UUFDZixJQUFJQyxhQUFhSixHQUFHSyxLQUFLLENBQUNGO1FBQzFCLElBQUlHLFVBQVVOLEdBQUdPLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBS1AsR0FBR08sT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUV2RSxJQUFJLENBQUNELFdBQVksQ0FBQSxDQUFDRixjQUFjQSxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUEsR0FBSTtZQUNsRDtRQUNGO1FBQ0EsSUFBSUksWUFBWTVKLFVBQVNpSixhQUFhLENBQUM7UUFDdkNqSixVQUFTNkosSUFBSSxDQUFDQyxXQUFXLENBQUNGO1FBQzFCN0osUUFBT2dLLGdCQUFnQixDQUFDLFVBQVVDLFNBQVM7UUFFM0MsU0FBU0E7WUFDUCxJQUFJQyxLQUFLbEssUUFBT21LLFdBQVc7WUFDM0IsSUFBSUMsS0FBS3BLLFFBQU9xSyxVQUFVO1lBQzFCLElBQUlySSxVQUNGLHFFQUNBLFlBQ0FrSSxLQUNBLE9BQ0EsTUFDQSx1QkFDQSxXQUNBRSxLQUNBLE9BQ0EsTUFDQSx1R0FDQSxZQUNBLE9BQU9GLEtBQ1AsT0FDQSxNQUNBLHdCQUNBLGVBQ0FFLEtBQ0EsUUFDQSxnQkFDQUYsS0FDQSxPQUNBLE1BQ0EsMENBQ0EsZ0JBQ0EsT0FBT0EsS0FDUCxPQUNBLE1BQ0Esd0JBQ0EsZ0JBQ0EsT0FBT0EsS0FDUCxPQUNBLE1BQ0EsdUJBQ0EsV0FDQSxNQUFNQSxLQUNOLFFBQ0EsYUFDQSxPQUFPQSxLQUNQLFFBQ0EsT0FBT0EsS0FDUCxPQUNBLE1BQ0EsNEJBQ0EsWUFDQSxNQUFNQSxLQUNOLE9BQ0EsTUFDQSxnQ0FDQSxxRUFDQSxZQUNBLE9BQU9BLEtBQ1AsT0FDQSxNQUNBLDBCQUNBLGdCQUNBLE9BQU9BLEtBQ1AsT0FDQSxNQUNBLHVHQUNBLFlBQ0EsT0FBT0EsS0FDUCxPQUNBLE1BQ0Esd0JBQ0EsZUFDQSxPQUFPRSxLQUNQLFFBQ0EsZ0JBQ0EsT0FBT0YsS0FDUCxPQUNBLE1BQ0EsMENBQ0EsZUFDQSxRQUFRRSxLQUNSLFFBQ0EsZ0JBQ0EsT0FBT0YsS0FDUCxPQUNBLE1BQ0E7WUFFRkwsVUFBVVMsV0FBVyxHQUFHdEk7UUFDMUI7UUFFQWlJO0lBQ0YsQ0FBQTtJQUVBLE9BQU9wSjtBQUNUO0FBRUF0QyxRQUFRZ00sTUFBTSxDQUNaLFlBQ0NDLE9BQU9DLE9BQU8sR0FBRyxTQUFVdkssQ0FBQztJQUMzQixJQUFJd0ssTUFBTSxDQUFDO0lBQ1gsSUFBSUMsUUFBUXBNLFFBQVFxTSxHQUFHO0lBQ3ZCLElBQUkvSixXQUFXZCxlQUNiQyxRQUNBQyxVQUNBQyxHQUNBeUssUUFBUSx5QkFBeUI7SUFFbkMsSUFBSUUsT0FBTzNLLEVBQUVEO0lBQ2IsSUFBSTZLO0lBQ0osSUFBSUM7SUFDSixJQUFJeEssWUFBWTtJQUNoQixJQUFJeUs7SUFFSixzQ0FBc0M7SUFDdEMsaUJBQWlCO0lBRWpCTixJQUFJTyxLQUFLLEdBQUdQLElBQUlRLE1BQU0sR0FBR1IsSUFBSVMsT0FBTyxHQUFHQztJQUV2QyxzQ0FBc0M7SUFDdEMsa0JBQWtCO0lBRWxCLFNBQVNBO1FBQ1BMLFdBQVdKLFNBQVNwTSxRQUFRcU0sR0FBRyxDQUFDO1FBRWhDLGlCQUFpQjtRQUNqQi9KLFNBQVN5QixPQUFPO1FBRWhCLGVBQWU7UUFDZjBJLFNBQVMsQ0FBQztRQUVWLGlDQUFpQztRQUNqQ0YsY0FBY0QsS0FBS1EsSUFBSSxDQUFDOUs7UUFFeEIsNEJBQTRCO1FBQzVCdUssWUFBWVEsZUFBZTtRQUUzQixxREFBcUQ7UUFDckQsNkJBQTZCO1FBQzdCUixZQUFZcEYsSUFBSSxDQUFDO1lBQ2YvRixvQkFBb0JPLEVBQUUsSUFBSSxHQUFHO1lBRTdCQSxFQUFFLElBQUksRUFBRUosSUFBSSxDQUFDLGlCQUFpQjtRQUNoQztJQUNGO0lBRUF5TCxPQUFPQyxFQUFFLENBQUNDLE1BQU0sQ0FBQztRQUNmSCxpQkFBaUI7WUFDZixJQUFJck0sTUFBTSxJQUFJO1lBQ2RpQixFQUFFd0YsSUFBSSxDQUFDekcsS0FBSyxTQUFVSyxDQUFDLEVBQUVvTSxFQUFFO2dCQUN6QixzQkFBc0I7Z0JBQ3RCLElBQUlsRixPQUFPdEcsRUFBRXNHLElBQUksQ0FBQ2tGLElBQUluTDtnQkFDdEIsSUFBSSxDQUFDaUcsTUFBTTtvQkFDVEEsT0FBT3RHLEVBQUVzRyxJQUFJLENBQUNrRixJQUFJbkwsV0FBVzt3QkFDM0JtTCxJQUFJeEwsRUFBRXdMO3dCQUNOQyxNQUFNO3dCQUNOQyxRQUFRLEVBQUU7d0JBQ1ZDLE9BQU87b0JBQ1Q7Z0JBQ0Y7Z0JBRUEsb0JBQW9CO2dCQUNwQnJGLEtBQUtrRixFQUFFLENBQUNJLEdBQUcsQ0FBQ3ZMO2dCQUVaLGtDQUFrQztnQkFDbEN3TCxVQUFVdkY7Z0JBRVYsMkJBQTJCO2dCQUMzQixJQUFJdUUsVUFBVTtvQkFDWnZFLEtBQUtrRixFQUFFLENBQUM3SSxFQUFFLENBQUMsWUFBWXRDLFdBQVd3TCxVQUFVQyxJQUFJLENBQUMsTUFBTXhGO2dCQUN6RCxPQUFPO29CQUNMQSxLQUFLa0YsRUFBRSxDQUNKN0ksRUFBRSxDQUFDLFVBQVV0QyxXQUFXMEwsYUFBYXpGLE1BQ3RDLG9FQUFvRTtxQkFDbkUzRCxFQUFFLENBQUMsVUFBVXRDLFdBQVcsU0FBVTJMLENBQUM7d0JBQ2xDQSxFQUFFOUksY0FBYztvQkFDbEI7Z0JBQ0o7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxTQUFTMkksVUFBVXZGLElBQUk7UUFDckIsSUFBSTJGLE9BQU8zRixLQUFLa0YsRUFBRSxDQUFDakcsUUFBUSxDQUFDLFdBQVdyRCxJQUFJO1FBQzNDLElBQUlnSztRQUNKLElBQUlDO1FBRUosSUFBSSxDQUFDRixNQUFNO1lBQ1QzRixLQUFLNUgsS0FBSyxHQUFHLEVBQUU7WUFDZjtRQUNGO1FBRUEsSUFBSTtZQUNGdU4sT0FBT0csS0FBS0MsS0FBSyxDQUFDSjtRQUNwQixFQUFFLE9BQU9ELEdBQUc7WUFDVk0sUUFBUUMsS0FBSyxDQUFDLDBDQUEwQ1A7UUFDMUQ7UUFFQVEsdUJBQXVCUDtRQUV2QkEsS0FBS3ZOLEtBQUssQ0FBQ3NDLE9BQU8sQ0FBQyxTQUFVcEMsSUFBSTtZQUMvQkEsS0FBS0csR0FBRyxHQU
12480FHdUgsS0FBS2tGLEVBQUU7UUFDcEI7UUFFQVUsWUFBWUQsS0FBS1EsS0FBSztRQUV0QixJQUFJUCxXQUFXO1lBQ2JDLGFBQWFyQixNQUFNLENBQUNvQixVQUFVO1lBQzlCLElBQUksQ0FBQ0MsWUFBWTtnQkFDZkEsYUFBYXJCLE1BQU0sQ0FBQ29CLFVBQVUsR0FBRyxFQUFFO1lBQ3JDO1lBRUE1RixLQUFLNUgsS0FBSyxHQUFHeU47WUFFYixJQUFJRixLQUFLdk4sS0FBSyxDQUFDTyxNQUFNLEVBQUU7Z0JBQ3JCcUgsS0FBS3pGLEtBQUssR0FBR3NMLFdBQVdsTixNQUFNO2dCQUM5QmtOLFdBQVd6RyxJQUFJLENBQUNnSCxLQUFLLENBQUNQLFlBQVlGLEtBQUt2TixLQUFLO1lBQzlDO1FBQ0YsT0FBTztZQUNMNEgsS0FBSzVILEtBQUssR0FBR3VOLEtBQUt2TixLQUFLO1lBQ3ZCNEgsS0FBS3pGLEtBQUssR0FBRztRQUNmO0lBQ0Y7SUFFQSxTQUFTa0wsYUFBYXpGLElBQUk7UUFDeEIsT0FBTztZQUNMQSxLQUFLNUgsS0FBSyxDQUFDTyxNQUFNLElBQUkwQixTQUFTMkYsS0FBSzVILEtBQUssRUFBRTRILEtBQUt6RixLQUFLLElBQUk7UUFDMUQ7SUFDRjtJQUVBLFNBQVMyTCx1QkFBdUJsRyxJQUFJO1FBQ2xDLElBQUlBLEtBQUtvRixNQUFNLEVBQUU7WUFDZnBGLEtBQUtvRixNQUFNLENBQUMxSyxPQUFPLENBQUMsU0FBVXBDLElBQUk7Z0JBQ2hDQSxLQUFLK04sSUFBSSxHQUFHO1lBQ2Q7WUFDQXJHLEtBQUs1SCxLQUFLLEdBQUc0SCxLQUFLb0YsTUFBTTtRQUMxQjtRQUVBLElBQUlwRixLQUFLcUYsS0FBSyxFQUFFO1lBQ2RyRixLQUFLcUYsS0FBSyxDQUFDZ0IsSUFBSSxHQUFHO1lBQ2xCckcsS0FBSzVILEtBQUssR0FBRztnQkFBQzRILEtBQUtxRixLQUFLO2FBQUM7UUFDM0I7UUFFQSxJQUFJckYsS0FBS3NHLE9BQU8sRUFBRTtZQUNoQnRHLEtBQUttRyxLQUFLLEdBQUduRyxLQUFLc0csT0FBTztRQUMzQjtJQUNGO0lBRUEsZ0JBQWdCO0lBQ2hCLE9BQU9wQztBQUNUIn0= 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
15638nZXQiLCJzaG91bGRVc2VQbHVnaW4iLCJQTFVHSU5fUklWRSIsInNlbGVjdG9yR3VpZHMiLCJsZW5ndGgiLCJwbHVnaW5JbnN0YW5jZSIsImRlc3RpbmF0aW9uIiwiY3JlYXRlSW5zdGFuY2UiLCJjb250aW51b3VzIiwibmV3QWN0aW9uR3JvdXBzIiwiZ3JvdXBJbmRleCIsInNvbWUiLCJncm91cCIsImluZGV4IiwiZXZlbnRUeXBlTWFwIiwidXBkYXRlVmlld3BvcnRXaWR0aCIsImxvZ2ljIiwiSVgyVmFuaWxsYUV2ZW50cyIsImNvbnNvbGUiLCJ3YXJuIiwiYmluZEV2ZW50VHlwZSIsImJpbmRSZXNpemVFdmVudHMiLCJXSU5ET1dfUkVTSVpFX0VWRU5UUyIsImhhbmRsZVJlc2l6ZSIsInR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnRMaXN0ZW5lckFkZGVkIiwid2lkdGgiLCJpbm5lcldpZHRoIiwidmlld3BvcnRXaWR0aCIsIm1lZGlhUXVlcmllcyIsInZpZXdwb3J0V2lkdGhDaGFuZ2VkIiwibWFwRm91bmRWYWx1ZXMiLCJvYmplY3QiLCJpdGVyYXRlZSIsIm9taXRCeSIsIm1hcFZhbHVlcyIsImlzRW1wdHkiLCJmb3JFYWNoRXZlbnRUYXJnZXQiLCJldmVudFRhcmdldHMiLCJldmVudENhbGxiYWNrIiwiZWxlbWVudHMiLCJnZXRBZmZlY3RlZEZvckV2ZW50IiwidGFyZ2V0cyIsImluamVjdEJlaGF2aW9yQ1NTRml4ZXMiLCJ0eXBlcyIsImV2ZW50VHlwZXMiLCJoYW5kbGVyIiwiZXZlbnRIYW5kbGVyIiwic2l6ZSIsImFjdGlvbiIsImV2ZW50QWN0aW9uIiwibWVkaWFRdWVyeUtleXMiLCJtZWRpYVF1ZXJpZXNEZWZpbmVkIiwiR0VORVJBTF9DT05USU5VT1VTX0FDVElPTiIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCIsInBhcmFtR3JvdXBzIiwiZmluZCIsInJlc3RpbmdTdGF0ZSIsImhhbmRsZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJvbGRTdGF0ZSIsImV2ZW50U3RhdGUiLCJoYW5kbGVFdmVudFdpdGhDb25maWciLCJuZXdTdGF0ZSIsImV2ZW50U3RhdGVDaGFuZ2VkIiwiaGFuZGxlRXZlbnRUaHJvdHRsZWQiLCJ0aHJvdHRsZSIsImFkZExpc3RlbmVycyIsInNob3VsZFRocm90dGxlIiwic3BsaXQiLCJmaWx0ZXIiLCJoYW5kbGVyRnVuYyIsImluamVjdGVkU2VsZWN0b3JzIiwiY3NzVGV4dCIsInNlbGVjdG9yIiwiZ2V0UXVlcnlTZWxlY3RvciIsIkV2ZW50VHlwZUNvbnN0cyIsIk1PVVNFX0NMSUNLIiwiTU9VU0VfU0VDT05EX0NMSUNLIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJhcHBlbmRDaGlsZCIsInVzZUZpcnN0R3JvdXBBc0luaXRpYWxTdGF0ZSIsImluaXRpYWxTdGF0ZUl0ZW1zIiwiaXRlbUNvbmZpZyIsInVzZUV2ZW50VGFyZ2V0Iiwib2JqZWN0SWQiLCJpdGVtRWxlbWVudHMiLCJpeEluc3RhbmNlcyIsImluc3RhbmNlIiwicmVtb3ZlSW5zdGFuY2UiLCJ2YWxpZEV2ZW50S2V5IiwiZWxlbWVudENvbnRhaW5zIiwiYWN0aW9uSXRlbUdyb3VwcyIsImlzRmlyc3RHcm91cCIsImluc3RhbmNlRGVsYXkiLCJkZWxheSIsInVuZGVmaW5lZCIsImNhcnJpZXJJbmRleCIsImdyb3VwU3RhcnRSZXN1bHQiLCJhY3Rpb25JbmRleCIsImVsZW1lbnRJbmRleCIsInBsdWdpbkR1cmF0aW9uIiwiaXNDYXJyaWVyIiwiY29tcHV0ZWRTdHlsZSIsIm9wdGlvbnMiLCJyZXN0IiwiYXV0b1N0YXJ0IiwiaW5zdGFuY2VJZCIsIml4RWxlbWVudHMiLCJlbGVtZW50SWQiLCJyZWZTdGF0ZSIsInJlZlR5cGUiLCJnZXRSZWZUeXBlIiwic2tpcE1vdGlvbiIsIlJlZHVjZWRNb3Rpb25UeXBlcyIsInNraXBUb1ZhbHVlIiwiTU9VU0VfTU9WRSIsIk1PVVNFX01PVkVfSU5fVklFV1BPUlQiLCJvcmlnaW4iLCJpbnN0YW5jZUFkZGVkIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsInJlbmRlckltbWVkaWF0ZUluc3RhbmNlIiwiaGFuZGxlSW5zdGFuY2VDaGFuZ2UiLCJpbnN0YW5jZVN0YXJ0ZWQiLCJyZWYiLCJpbnN0YW5jZVJlbW92ZWQiLCJldmVudE5hbWUiLCJkZXRhaWwiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImNvbXBsZXRlIiwicmVuZGVyVHlwZSIsImN1cnJlbnQiLCJzdHlsZVByb3AiLCJlbGVtZW50U3RhdGVDaGFuZ2VkIiwiYWN0aW9uU3RhdGUiXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjs7Ozs7Ozs7Ozs7SUF5Rk5BLGVBQWU7ZUFBZkE7O0lBbXdCQUMsZ0JBQWdCO2VBQWhCQTs7SUFybUJBQyxXQUFXO2VBQVhBOztJQWdqQkFDLGVBQWU7ZUFBZkE7O0lBZkFDLG1CQUFtQjtlQUFuQkE7O0lBdGVBQyxVQUFVO2VBQVZBOzs7NkRBalRDOzREQUNEOzZEQUNDOytEQUNFO2dFQUNDO2tFQUNFO2dFQUNGO2lFQUNDO2lDQU9kO3dCQU8wQztrQ0FrRDFDO3VFQUVxQjt5RUFFQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEzRDdCLE1BQU1DLHFCQUFxQkMsT0FBT0MsSUFBSSxDQUFDQywrQkFBYztBQUVyRCxNQUFNQyxnQkFBZ0IsQ0FBQ0MsZUFDckJMLG1CQUFtQk0sUUFBUSxDQUFDRDtBQUk5QixNQUFNLEVBQ0pFLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsUUFBUSxFQUNULEdBQUdDLG1DQUFrQjtBQUV0QixNQUFNLEVBQ0pDLG1CQUFtQixFQUNuQkMsWUFBWSxFQUNaQyxvQkFBb0IsRUFDcEJDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLGNBQWMsRUFDZEMsdUJBQXVCLEVBQ3ZCQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyw2Qk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 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
16189hcnRPZmZzZXQiLCJhZGRPZmZzZXRWYWx1ZSIsImVuZE9mZnNldFZhbHVlIiwiZWxlbWVudFJlY3QiLCJvZmZzZXRTdGFydFBlcmMiLCJvZmZzZXRFbmRQZXJjIiwib2Zmc2V0RWxlbWVudFRvcCIsIm9mZnNldEVsZW1lbnRCb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJmaXhlZFNjcm9sbEhlaWdodCIsImZpeGVkU2Nyb2xsVG9wIiwibWF4IiwiZml4ZWRTY3JvbGxQZXJjIl0sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7Ozs7K0JBcWV0Qjs7O2VBQUE7Ozs2REFwZWlCOzREQUNEOzhEQUNFO2lDQU1YO2tDQUV5QztrQ0FDakI7d0JBQ0Q7Ozs7OztBQUU5QixNQUFNLEVBQ0pBLFdBQVcsRUFDWEMsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLFFBQVEsRUFDUkMsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZEMsYUFBYSxFQUNiQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxFQUNYQyxVQUFVLEVBQ1ZDLGdCQUFnQixFQUNoQkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLG9CQUFvQixFQUNwQkMsbUJBQW1CLEVBQ25CQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWixHQUFHQyxnQ0FBZTtBQUVuQixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMscUJBQXFCO0FBRTNCLE1BQU0sRUFBQ0MsZUFBZSxFQUFDLEdBQUdDLG1DQUFrQjtBQUU1QyxNQUFNLEVBQUNDLHdCQUF3QixFQUFDLEdBQUdDLHVCQUFlO0FBRWxELE1BQU1DLG1CQUNKLENBQUNDLFlBQ0QsQ0FBQ0M7UUFDQyxJQUFJLE9BQU9BLFlBQVksWUFBWUQsVUFBVUMsVUFBVTtZQUNyRCxPQUFPO1FBQ1Q7UUFDQSxPQUFPQTtJQUNUO0FBRUYsTUFBTUMsWUFBWUgsaUJBQWlCLENBQUMsRUFBQ0ksT0FBTyxFQUFFQyxXQUFXLEVBQUM7SUFDeEQsT0FBT0QsWUFBWUMsWUFBWUMsTUFBTTtBQUN2QztBQUVBLE1BQU1DLGtCQUFrQlAsaUJBQWlCLENBQUMsRUFBQ0ksT0FBTyxFQUFFQyxXQUFXLEVBQUM7SUFDOUQsT0FBT0QsUUFBUUksUUFBUSxDQUFDSCxZQUFZQyxNQUFNO0FBQzVDO0FBRUEsTUFBTUcsc0JBQXNCQyxJQUFBQSxhQUFJLEVBQUM7SUFBQ1A7SUFBV0k7Q0FBZ0I7QUFFN0QsTUFBTUksbUJBQW1CLENBQUNDLE9BQVlDO0lBQ3BDLElBQUlBLGlCQUFpQjtRQUNuQixNQUFNLEVBQUNDLE1BQU0sRUFBQyxHQUFHRixNQUFNRyxRQUFRO1FBQy9CLE1BQU0sRUFBQ0MsTUFBTSxFQUFDLEdBQUdGO1FBQ2pCLE1BQU1HLGNBQWNELE1BQU0sQ0FBQ0gsZ0JBQWdCO1FBQzNDLCtNQUErTTtRQUMvTSxJQUFJSSxlQUFlLENBQUNDLHlCQUF5QixDQUFDRCxZQUFZRSxXQUFXLENBQUMsRUFBRTtZQUN0RSxPQUFPRjtRQUNUO0lBQ0Y7SUFDQSxPQUFPO0FBQ1Q7QUFFQSxxSkFBcUo7QUFDckosTUFBTUcsbUJBQW1CLENBQUMsRUFBQ1IsS0FBSyxFQUFFUyxLQUFLLEVBQUM7SUFDdEMsTUFBTSxFQUFDQyxRQUFRQyxXQUFXLEVBQUMsR0FBR0Y7SUFDOUIsTUFBTSxFQUFDUixlQUFlLEVBQUMsR0FBR1UsWUFBWUMsTUFBTTtJQUM1QyxPQUFPQyxRQUFRZCxpQkFBaUJDLE9BQU9DO0FBQ3pDO0FBRUEsNFZBQTRWO0FBQzVWLE1BQU1hLHFCQUFxQixDQUFDLEVBQUNkLEtBQUssRUFBRVMsS0FBSyxFQUFFakIsT0FBTyxFQUFFdUIsYUFBYSxFQUFDLEVBQUVDO0lBQ2xFLE1BQU0sRUFBQ04sUUFBUUMsV0FBVyxFQUFFTSxJQUFJQyxPQUFPLEVBQUMsR0FBR1Q7SUFDM0MsTUFBTSxFQUFDVSxZQUFZLEVBQUVsQixlQUFlLEVBQUMsR0FBR1UsWUFBWUMsTUFBTTtJQUMxRCxNQUFNUCxjQUFjTixpQkFBaUJDLE9BQU9DO0lBQzVDLElBQUlJLGFBQWE7UUFDZmUsSUFBQUEsaUNBQWUsRUFBQztZQUNkcEI7WUFDQWtCLFNBQVNqQjtZQUNUb0IsYUFBYTdCO1lBQ2J1QixlQUNFZCxrQkFDQWpCLGtCQUNBK0IsY0FBY08sS0FBSyxDQUFDdEMsZ0JBQWdCLENBQUMsRUFBRTtZQUN6Q21DLGNBQWNJLElBQUFBLFlBQUcsRUFBQ2xCLGFBQWE7UUFDakM7SUFDRjtJQUNBZSxJQUFBQSxpQ0FBZSxFQUFDO1FBQ2RwQjtRQUNBa0I7UUFDQUcsYUFBYTdCO1FBQ2J1QjtRQUNBSTtJQUNGO0lBQ0Esd1VBQXdVO0lBQ3hVSyxJQUFBQSxrQ0FBZ0IsRUFBQztRQUNmeEI7UUFDQWtCO1FBQ0FHLGFBQWE3QjtRQUNidUI7UUFDQUk7SUFDRjtJQUNBLE9BQU9IO0FBQ1Q7QUFFQSw0SUFBNEk7QUFDNUksTUFBTVMsYUFBYSxDQUFDQyxRQUFRQyxVQUFZLENBQUNyQyxTQUFjMEIsUUFDckRVLE9BQU9wQyxTQUFTMEIsV0FBVyxPQUFPVyxRQUFRckMsU0FBUzBCLFNBQVNBO0FBRTlELE1BQU1ZLHlCQUF5QjtJQUM3QkQsU0FBU0YsV0FBVzVCLHFCQUFxQmlCO0FBQzNDO0FBRUEsTUFBTWUsaUNBQWlDO0lBQ3JDLEdBQUdELHNCQUFzQjtJQUN6QkUsT0FBTztRQUFDaEQ7UUFBa0JDO0tBQW1CLENBQUNnRCxJQUFJLENBQUM7QUFDckQ7QUFFQSxNQUFNQyxxQkFBcUI7SUFDekI7UUFBQ3RDLFFBQVF1QztRQUFRSCxPQUFPO1FBQTRCSSxVQUFVO0lBQUk7SUFDbEU7UUFDRXhDLFFBQVF5QztRQUNSTCxPQUFPO1FBQ1BJLFVBQVU7SUFDWjtDQUNEO0FBRUQsTUFBTUUsdUJBQXVCO0FBRTdCLE1BQU1DLCtCQUErQjtJQUNuQ1AsT0FBT0U7QUFDVDtBQUVBLE1BQU0xQiw0QkFBNEI7SUFDaEMzQjtJQUNBSDtBQUNGO0FBRUEsTUFBTThELG1CQUFtQixBQUFDLENBQUE7SUFDeEIsTUFBTUMsZ0JBQWdCTixPQUFPTyxXQUFXLEtBQUtDO0lBQzdDLE1BQU1DLGVBQWVQLFNBQVNRLFVBQVUsS0FBSztJQUM3QyxNQUFNQyxjQUFjRixlQUFlUCxTQUFTVSxlQUFlLEdBQUdWLFNBQVNXLElBQUk7SUFDM0UsT0FBTyxJQUFPLENBQUE7WUFDWkMsWUFBWVIsZ0JBQWdCTixPQUFPTyxXQUFXLEdBQUdJLFlBQVlHLFVBQVU7WUFFdkVDLFdBQVdULGdCQUFnQk4sT0FBT2dCLFdBQVcsR0FBR0wsWUFBWUksU0FBUztZQUVyRSxxREFBcUQ7WUFDckRFLGdCQUFnQkMsSUFBQUEsY0FBSyxFQUNuQlosZ0JBQWdCTixPQUFPZ0IsV0FBVyxHQUFHTCxZQUFZSSxTQUFTLEVBQzFELEdBRUFKLFlBQVlRLFlBQVksR0FBR25CLE9BQU9vQixXQUFXO1lBRy9DQyxhQUFhVixZQUFZVSxXQUFXO1lBRXBDRixjQUFjUixZQUFZUSxZQUFZO1lBRXRDRyxhQUFhWCxZQUFZVyxXQUFXO1lBRXBDQyxjQUFjWixZQUFZWSxZQUFZO1lBQ3RDQyxZQUFZeEIsT0FBT3dCLFVBQVU7WUFDN0JKLGFBQWFwQixPQUFPb0IsV0FBVztRQUNqQyxDQUFBO0FBQ0YsQ0FBQTtBQUVBLE1BQU1LLHVCQUF1QixDQUMzQkMsR0FDQUMsSUFPQSxDQUNFRCxDQUFBQSxFQUFFRSxJQUFJLEdBQUdELEVBQUVFLEtBQUssSUFDaEJILEVBQUVHLEtBQUssR0FBR0YsRUFBRUMsSUFBSSxJQUNoQkYsRUFBRUksR0FBRyxHQU
16189FHSCxFQUFFSSxNQUFNLElBQ2hCTCxFQUFFSyxNQUFNLEdBQUdKLEVBQUVHLEdBQUcsQUFBRDtBQUduQiw2SkFBNko7QUFDN0osTUFBTUUsbUJBQW1CLENBQUMsRUFBQ3pFLE9BQU8sRUFBRUMsV0FBVyxFQUFDO0lBQzlDLE1BQU0sRUFBQ3lFLElBQUksRUFBRXhFLE1BQU0sRUFBRXlFLGFBQWEsRUFBQyxHQUFHMUU7SUFDdEMsTUFBTTJFLGlCQUFpQjVFLFFBQVFJLFFBQVEsQ0FBQ0Y7SUFDeEMsSUFBSXdFLFNBQVMsZUFBZUUsZ0JBQWdCO1FBQzFDLE9BQU87SUFDVDtJQUNBLE1BQU1DLGtCQUFrQjdFLFFBQVFJLFFBQVEsQ0FBQ3VFO0lBQ3pDLElBQUlELFNBQVMsY0FBY0Usa0JBQWtCQyxpQkFBaUI7UUFDNUQsT0FBTztJQUNUO0lBQ0EsT0FBTztBQUNUO0FBRUEsTUFBTUMsbUJBQW1CLENBQUNoRjtJQUN4QixNQUFNLEVBQ0pFLE9BQU8sRUFDUGlCLE9BQU8sRUFBQ0csTUFBTSxFQUFDLEVBQ2hCLEdBQUd0QjtJQUVKLE1BQU0sRUFBQ2lFLFdBQVcsRUFBRUMsWUFBWSxFQUFDLEdBQUdsQjtJQUNwQyxNQUFNaUMsb0JBQW9CM0QsT0FBTzJELGlCQUFpQjtJQUNsRCxNQUFNQyxtQkFBbUI1RCxPQUFPNEQsZ0JBQWdCO0lBQ2hELE1BQU1DLE9BQU9ELHFCQUFxQjtJQUVsQyxNQUFNRSxnQkFBZ0JELE9BQ2xCRixvQkFDQSxBQUFDZixlQUFnQmUsQ0FBQUEscUJBQXFCLENBQUEsSUFBTTtJQUVoRCxPQUFPYixxQkFBcUJsRSxRQUFRbUYscUJBQXFCLElBQUk7UUFDM0RkLE1BQU07UUFDTkUsS0FBS1c7UUFDTFosT0FBT1A7UUFDUFMsUUFBUVIsZUFBZWtCO0lBQ3pCO0FBQ0Y7QUFFQSxNQUFNRSw0QkFDSixnRkFBZ0Y7QUFDaEYsQ0FBQ2pELFVBQVksQ0FBQ3JDLFNBQWN1RjtRQUMxQixNQUFNLEVBQUNYLElBQUksRUFBQyxHQUFHNUUsUUFBUUcsV0FBVztRQUNsQyxrQkFBa0I7UUFDbEIsTUFBTXFGLFdBQVc7WUFBQ2hHO1lBQWtCQztTQUFtQixDQUFDZ0csT0FBTyxDQUFDYixVQUFVLENBQUMsSUFDekVBLFNBQVNwRixtQkFDVCtGLFNBQVNDLFFBQVE7UUFFbkIsTUFBTUUsV0FBVztZQUNmLEdBQUdILFFBQVE7WUFDWEM7UUFDRjtRQUVBLElBQUksQ0FBQ0QsWUFBWUcsU0FBU0YsUUFBUSxLQUFLRCxTQUFTQyxRQUFRLEVBQUU7WUFDeEQsT0FBT25ELFF
16189BQVFyQyxTQUFTMEYsYUFBYUE7UUFDdkM7UUFFQSxPQUFPQTtJQUNUO0FBRUYsTUFBTUMseUJBQ0osQ0FDRXRELFVBT0YsQ0FBQ3JDLFNBQWN1RjtRQUNiLE1BQU1HLFdBQVc7WUFDZkUsZ0JBQWdCakIsaUJBQWlCM0U7UUFDbkM7UUFDQSxJQUNFdUYsV0FDSUcsU0FBU0UsY0FBYyxLQUFLTCxTQUFTSyxjQUFjLEdBQ25ERixTQUFTRSxjQUFjLEVBQzNCO1lBQ0EsNEZBQTRGO1lBQzVGLE9BQU92RCxRQUFRckMsU0FBUzBGLGFBQWFBO1FBQ3ZDO1FBQ0EsT0FBT0E7SUFDVDtBQUVGLE1BQU1HLDZCQUNKLENBQUN4RCxVQUNELENBQUNyQyxTQUFjdUY7UUFDYixNQUFNRyxXQUFXO1lBQ2YsR0FBR0gsUUFBUTtZQUNYTyxnQkFBZ0JkLGlCQUFpQmhGO1FBQ25DO1FBQ0EsSUFDRXVGLFdBQ0lHLFNBQVNJLGNBQWMsS0FBS1AsU0FBU08sY0FBYyxHQUNuREosU0FBU0ksY0FBYyxFQUMzQjtZQUNBLE9BQU96RCxRQUFRckMsU0FBUzBGLGFBQWFBO1FBQ3ZDO1FBQ0EsT0FBT0E7SUFDVDtBQUVGLE1BQU1LLDRCQUNKLGdGQUFnRjtBQUc5RSxDQUFDMUQsVUFDRCxDQUFDckMsU0FBY3VGLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFDSjNCLGdCQUFnQkYsU0FBUyxFQUN6QkksWUFBWSxFQUNaQyxXQUFXLEVBQ1osR0FBR2Y7UUFDSixNQUFNLEVBQ0o3QixPQUFPLEVBQUNHLE1BQU0sRUFBRUwsV0FBVyxFQUFDLEVBQzdCLEdBQUdqQjtRQUNKLE1BQU0sRUFBQ2lGLGlCQUFpQixFQUFFQyxnQkFBZ0IsRUFBQyxHQUFHNUQ7UUFDOUMsTUFBTTZELE9BQU9ELHFCQUFxQjtRQUVsQyxNQUFNYyxxQkFBcUJsQyxlQUFlQztRQUMxQyxzR0FBc0c7UUFDdEcsTUFBTWtDLGFBQWFDLE9BQU8sQUFBQ3hDLENBQUFBLFlBQVlzQyxrQkFBaUIsRUFBR0csT0FBTyxDQUFDO1FBRW5FLGtCQUFrQjtRQUNsQixpRkFBaUY7UUFDakYsSUFBSVosWUFBWUEsU0FBU1UsVUFBVSxLQUFLQSxZQUFZO1lBQ2xELE9BQU9WO1FBQ1Q7UUFFQSxNQUFNYSxtQkFDSixBQUFDakIsQ0FBQUEsT0FDR0Ysb0JBQ0EsQUFBQ2xCLGNBQWVrQixDQUFBQSxxQkFBcUIsQ0FBQSxJQUFNLEdBQUUsSUFDakRlO1FBRUYsSUFBSUs7UUFDSixJQUFJQztRQUNKLElBQUlDLFlBQVk7UUFFaEIsSUFBSWhCLFVBQVU7WUFDWixpRkFBaUY7WUFDakZjLGdCQUFnQkosYUFBYVYsU0FBU1UsVUFBVTtZQUNoRCxvRkFBb0Y7WUFDcEZLLHlCQUF5QmYsU0FBU2MsYUFBYSxLQUFLQTtZQUNwRCxnRkFBZ0Y7WUFDaEZFLFlBQVlELHlCQUF5QkwsYUFBYVYsU0FBU2dCLFNBQVM7UUFDdEU7UUFFQSxNQUFNQyxXQUNKdkYsZ0JBQWdCcEMsbUJBQ1pvSCxjQUFjTSxZQUFZSCxtQkFDMUJILGNBQWNNLFlBQVlIO1FBRWhDLE1BQU1WLFdBQVc7WUFDZixHQUFHSCxRQUFRO1lBQ1hVO1lBQ0FPO1lBQ0FEO1lBQ0FGO1FBQ0Y7UUFFQSxJQUNFZCxZQUNBaUIsWUFDQSwrRUFBK0U7UUFDOUVGLENBQUFBLDBCQUEwQlosU0FBU2MsUUFBUSxLQUFLakIsU0FBU2lCLFFBQVEsQUFBRCxHQUNqRTtZQUNBLE9BQU9uRSxRQUFRckMsU0FBUzBGLGFBQWFBO1FBQ3ZDO1FBRUEsT0FBT0E7SUFDVDtBQUVKLE1BQU1lLGtCQUFrQixDQUN0QkMsT0FJQUMsT0FFQUQsTUFBTW5DLElBQUksR0FBR29DLEtBQUtwQyxJQUFJLElBQ3RCbUMsTUFBTW5DLElBQUksR0FBR29DLEtBQUtuQyxLQUFLLElBQ3ZCa0MsTUFBTWpDLEdBQUcsR0FBR2tDLEtBQUtsQyxHQUFHLElBQ3BCaUMsTUFBTWpDLEdBQUcsR0FBR2tDLEtBQUtqQyxNQUFNO0FBRXpCLE1BQU1rQyxxQkFDSixDQUFDdkUsVUFDRCxDQUFDckMsU0FBY3VGO1FBQ2IsTUFBTUcsV0FBVztZQUNmbUIsVUFBVWhFLFNBQVNpRSxVQUFVLEtBQUs7UUFDcEM7UUFDQSxJQUFJcEIsU0FBU21CLFFBQVEsSUFBSSxDQUFFdEIsQ0FBQUEsWUFBWUEsU0FBU3dCLE9BQU8sQUFBRCxHQUFJO1lBQ3hELCtEQUErRDtZQUMvRDFFLFFBQVFyQztRQUNWO1FBQ0EsT0FBTzBGO0lBQ1Q7QUFFRixNQUFNc0Isb0JBQ0osQ0FBQzNFLFVBQ0QsQ0FBQ3JDLFNBQWN1RjtRQUNiLE1BQU1HLFdBQVc7WUFDZnVCLFNBQVM7UUFDWDtRQUNBLElBQUksQ0FBQzFCLFVBQVU7WUFDYiwrREFBK0Q7WUFDL0RsRCxRQUFRckM7UUFDVjtRQUNBLE9BQU8wRjtJQUNUO0FBRUYsTUFBTXdCLHVCQUNKLENBQ0U3RSxVQU9GLENBQUNyQyxTQUFjdUYsV0FBVztRQUFDNEIsWUFBWTtJQUFDLENBQUM7UUFDdkMsTUFBTXpCLFdBQVc7WUFDZnlCLFlBQVksQUFBQzVCLFNBQVM0QixVQUFVLEdBQUcsSUFBSztRQUMxQztRQUNBLElBQUl6QixTQUFTeUIsVUFBVSxLQUFLNUIsU0FBUzRCLFVBQVUsRUFBRTtZQUMvQyw0RkFBNEY7WUFDNUYsT0FBTzlFLFFBQVFyQyxTQUFTMEYsYUFBYUE7UUFDdkM7UUFDQSxPQUFPQTtJQUNUO0FBRUYsTUFBTTBCLDRCQUE0QixDQUFDQyw0QkFBNEIsSUFBSSxHQUFNLENBQUE7UUFDdkUsR0FBRzlFLDhCQUE4QjtRQUNqQ0YsU0FBU0YsV0FDUGtGLDRCQUE0QjlHLHNCQUFzQk4sV0FDbEQsMklBQTJJO1FBQzNJcUYsMEJBQTBCLENBQUN0RixTQUFTMEI7WUFDbEMsT0FBT0EsTUFBTThELFFBQVEsR0FDakJsRCx1QkFBdUJELE9BQU8sQ0FBQ3JDLFNBQVMwQixTQUN4Q0E7UUFDTjtJQUVKLENBQUE7QUFFQSxNQUFNNEYsOEJBQThCLENBQUNELDRCQUE0QixJQUFJLEdBQU0sQ0FBQTtRQUN6RSxHQUFHOUUsOEJBQThCO1FBQ2pDRixTQUFTRixXQUNQa0YsNEJBQTRCOUcsc0JBQXNCTixXQUNsRCwySUFBMkk7UUFDM0lxRiwwQkFBMEIsQ0FBQ3RGLFNBQVMwQjtZQUNsQyxPQUFPLENBQUNBLE1BQU04RCxRQUFRLEdBQ2xCbEQsdUJBQXVCRCxPQUFPLENBQUNyQyxTQUFTMEIsU0FDeENBO1FBQ047SUFFSixDQUFBO0FBRUEsTUFBTTZGLDZCQUE2QjtJQUNqQyxHQUFHeEUsNEJBQTRCO0lBQy9CVixTQUFTd0QsMkJBQTJCLENBQUM3RixTQUFTMEI7UUFDNUMsTUFBTSxFQUFDb0UsY0FBYyxFQUFDLEdBQUdwRTtRQUN6QixNQUFNLEVBQUNQLEtBQUssRUFBRVQsS0FBSyxFQUFDLEdBQUdWO1FBQ3ZCLE1BQU0sRUFBQ1ksTUFBTSxFQUFDLEdBQUdGLE1BQU1HLFFBQVE7UUFDL0IsTUFBTSxFQUFDQyxNQUFNLEVBQUMsR0FBR0Y7UUFFakIsd0ZBQXdGO1FBQ3hGLGtCQUFrQjtRQUNsQixJQUFJLENBQUNFLE1BQU0sQ0FBQ0ssTUFBTUMsTUF
16189BTSxDQUFDRSxNQUFNLENBQUNYLGVBQWUsQ0FBQyxJQUFJZSxNQUFNOEYsU0FBUyxFQUFFO1lBQ25FLE9BQU85RjtRQUNUO1FBRUEsSUFBSSxBQUFDUCxNQUFNRixXQUFXLEtBQUtuQyxxQkFBc0JnSCxnQkFBZ0I7WUFDL0QsK0RBQStEO1lBQy9EdEUsbUJBQW1CeEI7WUFDbkIsT0FBTztnQkFDTCxHQUFHMEIsS0FBSztnQkFDUjhGLFdBQVc7WUFDYjtRQUNGLE9BQU87WUFDTCxPQUFPOUY7UUFDVDtJQUNGO0FBQ0Y7QUFFQSxNQUFNK0YsNEJBQTRCO01BRWxDLFdBQWU7SUFDYixDQUFDbkosY0FBYyxFQUFFOEk7SUFDakIsQ0FBQzdJLGdCQUFnQixFQUFFK0k7SUFDbkIsQ0FBQ2pKLGNBQWMsRUFBRStJO0lBQ2pCLENBQUNoSixlQUFlLEVBQUVrSjtJQUVsQixvSEFBb0g7SUFDcEgscUdBQXFHO0lBQ3JHLENBQUMzSSxZQUFZLEVBQUV5SSwwQkFBMEI7SUFDekMsQ0FBQzFJLGFBQWEsRUFBRTRJLDRCQUE0QjtJQUM1QyxDQUFDOUksV0FBVyxFQUFFNEk7SUFDZCxDQUFDM0ksYUFBYSxFQUFFNkk7SUFDaEIsQ0FBQ2xJLG9CQUFvQixFQUFFO1FBQ3JCb0QsT0FBTztRQUNQSCxTQUFTRixXQUFXNUIscUJBQXFCaUI7SUFDM0M7SUFDQSxDQUFDckMscUJBQXFCLEVBQUU7UUFDdEJxRCxPQUFPO1FBQ1BILFNBQVNGLFdBQVc1QixxQkFBcUJpQjtJQUMzQztJQUNBLENBQUMxRCxZQUFZLEVBQUU7UUFDYjBFLE9BQU87UUFDUEgsU0FBU0YsV0FDUDVCLHFCQUNBMkcscUJBQXFCLENBQUNsSCxTQUFTLEVBQUNtSCxVQUFVLEVBQUM7WUFDekMsSUFBSWpHLGlCQUFpQmxCLFVBQVU7Z0JBQzdCLCtEQUErRDtnQkFDL0RtSCxlQUFlLEtBQUszRixtQkFBbUJ4QjtZQUN6QyxPQUFPO2dCQUNMLCtEQUErRDtnQkFDL0R3QixtQkFBbUJ4QjtZQUNyQjtRQUNGO0lBRUo7SUFDQSxDQUFDakMsbUJBQW1CLEVBQUU7UUFDcEJ5RSxPQUFPO1FBQ1BILFNBQVNGLFdBQ1A1QixxQkFDQTJHLHFCQUFxQixDQUFDbEgsU0FBUyxFQUFDbUgsVUFBVSxFQUFDO1lBQ3pDLElBQUlBLGVBQWUsR0FBRztnQkFDcEIsK0RBQStEO2dCQUMvRDNGLG1CQUFtQnhCO1lBQ3JCO1FBQ0Y7SUFFSjtJQUNBLENBQUNoQyxXQUFXLEVBQUU7UUFDWixHQUFHc0Usc0JBQXNCO1FBQ3pCRSxPQUFPO0lBQ1Q7SUFDQSxDQUFDdkUsU0FBUyxFQUFFO1FBQ1YsR0FBR3FFLHNCQUFzQjtRQUN6QkUsT0FBTztJQUNUO0lBQ0EsQ0FBQ3RFLFdBQVcsRUFBRTtRQUNac0UsT0FBT007UUFDUFQsU0FBU0YsV0FDUDVCLHFCQUNBb0YsdUJBQXVCLENBQUMzRixTQUFTMEI7WUFDL0IsSUFBSUEsTUFBTWtFLGNBQWMsRUFBRTtnQkFDeEIsK0RBQStEO2dCQUMvRHBFLG1CQUFtQnhCO1lBQ3JCO1FBQ0Y7SUFFSjtJQUNBLENBQUM3QixVQUFVLEVBQUU7UUFDWHFFLE9BQU9NO1FBQ1BULFNBQVNGLFdBQ1A1QixxQkFDQW9GLHVCQUF1QixDQUFDM0YsU0FBUzBCO1lBQy9CLElBQUksQ0FBQ0EsTUFBTWtFLGNBQWMsRUFBRTtnQkFDekIsK0RBQStEO2dCQUMvRHBFLG1CQUFtQnhCO1lBQ3JCO1FBQ0Y7SUFFSjtJQUNBLENBQUNwQixXQUFXLEVBQUU7UUFDWjRELE9BQU87UUFDUEgsU0FBUyxDQUNQLDZEQUE2RDtRQUM3RCxtQkFBbUI7UUFDbkIsRUFBQzNCLEtBQUssRUFBRVIsT0FBTyxFQUFFd0gsV0FBVyxFQUFFdkgsV0FBVyxFQUFFc0IsYUFBYSxFQUFDLEVBRXpEQyxRQUFRO1lBQUNpRyxTQUFTO1lBQUdDLFNBQVM7WUFBR0MsT0FBTztZQUFHQyxPQUFPO1FBQUMsQ0FBQztZQUVwRCxNQUFNLEVBQ0pDLE9BQU8sRUFDUEMsWUFBWSxFQUNaQywwQkFBMEIsRUFDMUJDLE9BQU8sRUFDUEMsZUFBZSxDQUFDLEVBQ2pCLEdBQUdUO1lBQ0osTUFBTSxFQUNKQyxVQUFVakcsTUFBTWlHLE9BQU8sRUFDdkJDLFVBQVVsRyxNQUFNa0csT0FBTyxFQUN2QkMsUUFBUW5HLE1BQU1tRyxLQUFLLEVBQ25CQyxRQUFRcEcsTUFBTW9HLEtBQUssRUFDcEIsR0FBRzNIO1lBQ0osTUFBTWlJLFVBQVVKLGlCQUFpQjtZQUNqQyxNQUFNSyxhQUFhbEksWUFBWXlFLElBQUksS0FBSztZQUV4QyxJQUFJMEQsUUFBUUgsZUFBZTtZQUMzQixJQUFJSSx3QkFBd0JOO1lBQzVCLElBQUlyQyxpQkFBaUI7WUFFckIsT0FBUW1DO2dCQUNOLEtBQUtTLDZCQUFZLENBQUNDLFFBQVE7b0JBQUU7d0JBQzFCSCxRQUFRRixVQUNKTSxLQUFLQyxHQUFHLENBQUNoQixTQUFTaEYsT0FBT3dCLFVBQVUsSUFBSXhCLE9BQU93QixVQUFVLEdBQ3hEdUUsS0FBS0MsR0FBRyxDQUFDZixTQUFTakYsT0FBT29CLFdBQVcsSUFBSXBCLE9BQU9vQixXQUFXO3dCQUM5RDtvQkFDRjtnQkFDQSx3SUFBd0k7Z0JBQ3hJLEtBQUt5RSw2QkFBWSxDQUFDSSxJQUFJO29CQUFFO3dCQUN0QixNQUFNLEVBQUNuRixVQUFVLEVBQUVDLFNBQVMsRUFBRU0sV0FBVyxFQUFFRixZQUFZLEVBQUMsR0FDdERkO3dCQUNGc0YsUUFBUUYsVUFDSk0sS0FBS0MsR0FBRyxDQUFDbEYsYUFBYW9FLE9BQU83RCxlQUFlQSxjQUM1QzBFLEtBQUtDLEdBQUcsQ0FBQ2pGLFlBQVlvRSxPQUFPaEUsZ0JBQWdCQTt3QkFDaEQ7b0JBQ0Y7Z0JBQ0EsS0FBSzBFLDZCQUFZLENBQUNLLE9BQU87Z0JBQ3pCO29CQUFTO3dCQUNQTix3QkFBd0IzSSx5QkFDdEI2QixlQUNBd0c7d0JBR0YsTUFBTWEsZUFBZTNJLFlBQVl5RSxJQUFJLENBQUNhLE9BQU8sQ0FBQyxhQUFhO3dCQUUzRCxnRkFBZ0Y7d0JBQ2hGLElBQ0VxRCxnQkFDQXZJLG9CQUFvQjs0QkFBQ0w7NEJBQVNDO3dCQUFXLE9BQU8sTUFDaEQ7NEJBQ0E7d0JBQ0Y7d0JBRUEsTUFBTXdHLE9BQU96RyxRQUFRbUYscUJBQXFCO3dCQUMxQyxNQUFNLEVBQUNkLElBQUksRUFBRUUsR0FBRyxFQUFFc0UsS0FBSyxFQUFFQyxNQUFNLEVBQUMsR0FBR3JDO3dCQUVuQyx1RkFBdUY7d0JBQ3ZGLG9DQUFvQzt3QkFDcEMsSUFDRSxDQUFDbUMsZ0JBQ0QsQ0FBQ3JDLGdCQUFnQjs0QkFBQ2xDLE1BQU1vRDs0QkFBU2xELEtBQUttRDt3QkFBTyxHQUFHakIsT0FDaEQ7NEJBQ0E7d0JBQ0Y7d0JBRUFmLGlCQUFpQjt3QkFFakIwQyxRQUFRRixVQUFVLEFBQUNULENBQUFBLFVBQVVwRCxJQUFHLElBQUt3RSxRQUFRLEFBQUNuQixDQUFBQSxVQUFVbkQsR0FBRSxJQUFLdUU7d0JBQy9EO29CQUNGO1lBQ0Y7WUFFQSxnRkFBZ0Y7WUFDaEYsSUFDRVgsY0FDQ0MsQ0FBQUEsUUFBUSxJQUFJYiw2QkFDWGEsUUFBUWIseUJBQXdCLEdBQ2xDO2dCQUNBYSxRQUFRSSxLQUFLTyxLQUFLLENBQUNYO1lBQ3JCO1lBRUEsd0ZBQXdGO1lBQ3hGLElBQ0VQL
16189FlBQVlTLDZCQUFZLENBQUNLLE9BQU8sSUFDaENqRCxrQkFDQSw2REFBNkQ7WUFDN0QsbUJBQW1CO1lBQ25CQSxtQkFBbUJsRSxNQUFNa0UsY0FBYyxFQUN2QztnQkFDQTBDLFFBQVFKLFVBQVUsSUFBSUksUUFBUUE7Z0JBQzlCNUgsTUFBTXdJLFFBQVEsQ0FBQ0MsSUFBQUEsa0NBQWdCLEVBQUNaLHVCQUF1QkQ7WUFDekQ7WUFFQSxPQUFPO2dCQUNMMUM7Z0JBQ0ErQjtnQkFDQUM7Z0JBQ0FDO2dCQUNBQztZQUNGO1FBQ0Y7SUFDRjtJQUVBLENBQUN4SSxZQUFZLEVBQUU7UUFDYmtELE9BQU9FO1FBQ1AsNkRBQTZEO1FBQzdELG1CQUFtQjtRQUNuQkwsU0FBUyxDQUFDLEVBQUMzQixLQUFLLEVBQUVnSCxXQUFXLEVBQUM7WUFDNUIsTUFBTSxFQUFDTywwQkFBMEIsRUFBRUMsT0FBTyxFQUFDLEdBQUdSO1lBQzlDLE1BQU0sRUFBQ2hFLFNBQVMsRUFBRUksWUFBWSxFQUFFSSxZQUFZLEVBQUMsR0FBR2xCO1lBQ2hELElBQUlzRixRQUFRNUUsWUFBYUksQ0FBQUEsZUFBZUksWUFBVztZQUNuRG9FLFFBQVFKLFVBQVUsSUFBSUksUUFBUUE7WUFDOUI1SCxNQUFNd0ksUUFBUSxDQUFDQyxJQUFBQSxrQ0FBZ0IsRUFBQ2xCLDRCQUE0Qks7UUFDOUQ7SUFDRjtJQUVBLENBQUNySixrQkFBa0IsRUFBRTtRQUNuQnVELE9BQU9FO1FBQ1BMLFNBQVMsQ0FDUCw2REFBNkQ7UUFDN0QsbUJBQW1CO1FBQ25CLEVBQUNuQyxPQUFPLEVBQUVRLEtBQUssRUFBRWdILFdBQVcsRUFBRWpHLGFBQWEsRUFBQyxFQUU1Q0MsUUFBUTtZQUFDMEgsZUFBZTtRQUFDLENBQUM7WUFFMUIsTUFBTSxFQUNKM0YsVUFBVSxFQUNWQyxTQUFTLEVBQ1RNLFdBQVcsRUFDWEYsWUFBWSxFQUNaSSxjQUFjbUYsYUFBYSxFQUM1QixHQUFHckc7WUFFSixNQUFNLEVBQ0orRSxPQUFPLEVBQ1BDLFlBQVksRUFDWkMsMEJBQTBCLEVBQzFCcUIsY0FBYyxFQUNkQyxhQUFhLEVBQ2JDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxpQkFBaUIsQ0FBQyxFQUNsQkMsaUJBQWlCLENBQUMsRUFDbkIsR0FBR2pDO1lBRUosTUFBTVUsVUFBVUosaUJBQWlCO1lBRWpDLElBQUlELFlBQVlTLDZCQUFZLENBQUNDLFFBQVEsRUFBRTtnQkFDckMsTUFBTUgsUUFBUUYsVUFDVjNFLGFBQWFPLGNBQ2JOLFlBQVlJO2dCQUNoQixJQUFJd0UsVUFBVTVHLE1BQU0wSCxhQUFhLEVBQUU7b0JBQ2pDMUksTUFBTXdJLFFBQVEsQ0FBQ0MsSUFBQUEsa0NBQWdCLEVBQUNsQiw0QkFBNEJLO2dCQUM5RDtnQkFDQSxPQUFPO29CQUNMYyxlQUFlZDtnQkFDakI7WUFDRixPQUFPO2dCQUNMLE1BQU1DLHdCQUF3QjNJLHlCQUM1QjZCLGVBQ0F3RztnQkFFRixNQUFNMkIsY0FBYzFKLFFBQVFtRixxQkFBcUI7Z0JBQ2pELElBQUl3RSxrQkFBa0IsQUFBQ0osQ0FBQUEsaUJBQWlCQyxpQkFBaUIsQ0FBQSxJQUFLO2dCQUM5RCxJQUFJSSxnQkFBZ0IsQUFBQ04sQ0FBQUEsZUFBZUcsaUJBQWlCLENBQUEsSUFBSztnQkFFMUQsNkRBQTZEO2dCQUM3REUsa0JBQWtCUCxpQkFDZE8sa0JBQ0EsSUFBSUE7Z0JBQ1JDLGdCQUFnQlAsZ0JBQWdCTyxnQkFBZ0IsSUFBSUE7Z0JBRXBELE1BQU1DLG1CQUNKSCxZQUFZbkYsR0FBRyxHQUNmaUUsS0FBS0MsR0FBRyxDQUFDaUIsWUFBWVosTUFBTSxHQUFHYSxpQkFBaUJSO2dCQUNqRCxNQUFNVyxzQkFDSkosWUFBWW5GLEdBQUcsR0FBR21GLFlBQVlaLE1BQU0sR0FBR2M7Z0JBQ3pDLE1BQU1HLGVBQWVELHNCQUFzQkQ7Z0JBRTNDLE1BQU1HLG9CQUFvQnhCLEtBQUtDLEdBQUcsQ0FDaENVLGdCQUFnQlksY0FDaEJuRztnQkFHRixNQUFNcUcsaUJBQWlCekIsS0FBS0MsR0FBRyxDQUM3QkQsS0FBSzBCLEdBQUcsQ0FBQyxHQUFHZixnQkFBZ0JVLG1CQUM1Qkc7Z0JBRUYsTUFBTUcsa0JBQWtCRixpQkFBaUJEO2dCQUV6QyxJQUFJRyxvQkFBb0IzSSxNQUFNMEgsYUFBYSxFQUFFO29CQUMzQzFJLE1BQU13SSxRQUFRLENBQ1pDLElBQUFBLGtDQUFnQixFQUFDWix1QkFBdUI4QjtnQkFFNUM7Z0JBQ0EsT0FBTztvQkFDTGpCLGVBQWVpQjtnQkFDakI7WUFDRjtRQUNGO0lBQ0Y7SUFDQSxDQUFDdkwsaUJBQWlCLEVBQUV5STtJQUNwQixDQUFDeEksbUJBQW1CLEVBQUV3STtJQUV0QixDQUFDMUksaUJBQWlCLEVBQUU7UUFDbEIsR0FBR2tFLDRCQUE0QjtRQUMvQiwySUFBMkk7UUFDM0lWLFNBQVMwRCwwQkFBMEIsQ0FBQy9GLFNBQVMwQjtZQUMzQyxJQUFJQSxNQUFNMkUsYUFBYSxFQUFFO2dCQUN2QiwrREFBK0Q7Z0JBQy9EN0UsbUJBQW1CeEI7WUFDckI7UUFDRjtJQUNGO0lBRUEsQ0FBQ2hCLGVBQWUsRUFBRTtRQUNoQixHQUFHK0QsNEJBQTRCO1FBQy9CLDJJQUEySTtRQUMzSVYsU0FBUzBELDBCQUEwQixDQUFDL0YsU0FBUzBCO1lBQzNDLElBQUksQ0FBQ0EsTUFBTTJFLGFBQWEsRUFBRTtnQkFDeEIsK0RBQStEO2dCQUMvRDdFLG1CQUFtQnhCO1lBQ3JCO1FBQ0Y7SUFDRjtJQUVBLENBQUNkLFlBQVksRUFBRTtRQUNic0QsT0FBTztRQUNQSCxTQUFTRixXQUFXbEMsV0FBVzJHLG1CQUFtQnBGO0lBQ3BEO0lBRUEsQ0FBQ25DLFdBQVcsRUFBRTtRQUNabUQsT0FBTztRQUNQSCxTQUFTRixXQUFXbEMsV0FBVytHLGtCQUFrQnhGO0lBQ25EO0FBQ0YifQ== 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.